Files and storage, checked 2026-09-07
Seafile: Docker configuration reference
Self-hosted file sync and share server with client-side encryption and file-history versioning.
At a glance
- Image:
docker.io/seafileltd/seafile-mc - Tags:
13.0.25,13.0-latest,13.0.24,13.0.22,13.0.21 - Licence: NOASSERTION
- Source: https://github.com/haiwen/seafile-docker
- Docs: https://manual.seafile.com/latest/setup/setup_ce_by_docker/
Ports
| Port | What listens | Source |
|---|---|---|
80 | Internal HTTP listener for the seafile container. Not published to the host by default; the bundled caddy service is the intended entry point. | source for port 80 |
Environment variables
| Variable | Required | What it does | Example | Source |
|---|---|---|---|---|
SEAFILE_SERVER_HOSTNAME | Yes | Public hostname. Required with no default; used to build the caddy reverse-proxy label and internal service URLs. | seafile.example.com | source for SEAFILE_SERVER_HOSTNAME |
SEAFILE_MYSQL_DB_PASSWORD | Yes | Password for the seafile MySQL user. No default; the compose file fails to start without it. | pwgen -s 20 1 | source for SEAFILE_MYSQL_DB_PASSWORD |
JWT_PRIVATE_KEY | Yes | Signs internal JWTs between Seafile, SeaDoc and, if enabled, the AI and notification services. Must be at least 32 characters. | pwgen -s 40 1 | source for JWT_PRIVATE_KEY |
SEAFILE_SERVER_PROTOCOL | No | Scheme used to build the SeaDoc and notification server URLs and the caddy label. Defaults to http, which is wrong for anything but a local test. | https | source for SEAFILE_SERVER_PROTOCOL |
CACHE_PROVIDER | No | Cache backend, redis or memcached. Redis is the recommended default since Seafile 13 and the compose file ships a redis service for it. | redis | source for CACHE_PROVIDER |
Volumes that must persist
| Path | What is in it | Source |
|---|---|---|
/shared | All Seafile data, configuration and logs live under this single mount. This and the MySQL volume are the only two paths that need backing up. | source for /shared |
/var/lib/mysql (db) | ccnet, seafile and seahub databases. | source for /var/lib/mysql |
Behind a reverse proxy
- Since Seafile 12, the single-node deployment handles reverse proxying and TLS with a bundled Caddy container driven by Docker labels. A different proxy means removing Caddy from the compose files. source for this reverse-proxy note
- A non-Caddy setup still needs to reverse-proxy several backing services beyond the main seafile container, not just one port; check the full services table before switching. source for this reverse-proxy note
- SEAFILE_SERVER_HOSTNAME and SEAFILE_SERVER_PROTOCOL must match what the proxy actually serves, since they are baked into the SeaDoc and notification server URLs the seafile container itself calls. source for this reverse-proxy note
What it needs alongside it
| Dependency | Why | Source |
|---|---|---|
| MariaDB 10.11 and Redis | MariaDB holds the ccnet, seafile and seahub databases; Redis is the default cache provider since Seafile 13. | source for MariaDB 10.11 and Redis |
Release timeline
| Version | Date | Breaking | What changed | Source |
|---|---|---|---|---|
13.0.25 | 2026-07-13 | No | Community edition image release on the 13.0 line, per the seafileltd/seafile-mc registry. | source for release 13.0.25 |
13.0.24 | 2026-06-10 | No | Community edition image release on the 13.0 line. | source for release 13.0.24 |
13.0.22 | 2026-05-29 | No | Community edition image release on the 13.0 line. | source for release 13.0.22 |
13.0.21 | 2026-04-20 | No | Community edition image release on the 13.0 line. | source for release 13.0.21 |
If it is not coming up
- Coolify volume data lost after redeploy / a new empty volume is created every deploy
- ECONNREFUSED / ENOTFOUND / connection to server at "postgres" port 5432 failed
Read from the upstream documentation, repository and container registry by Keita Emsden on 2026-09-07. Every row links the page it came from. Upstream changes without telling anyone, so check the source link before you rely on a value.