Seafile

Seafile

Docker app from junkerderprovinz's Repository

Overview

Seafile is a file sync and share server with desktop and mobile clients, libraries you can encrypt on the client, and built-in wikis. This is the official Seafile image, installable from this one template. The official image expects MariaDB, Redis and the notification server as separate containers on a shared Docker network, plus a JWT key you generate by hand. Here the JWT key, the database password and, if you leave it empty, the admin password are generated on the first start and kept in secrets.env in the Data folder. MariaDB, Redis and the notification server can each run inside this container when you switch them on below. Getting started: • Set the Server hostname to the address your clients will use, such as 192.168.1.10:8000 or seafile.example.com. • Already running MariaDB? Enter its host and root password. The root password is only used once, to create the Seafile databases. • No MariaDB or Redis? Set Built-in MariaDB and Built-in Redis to true and leave their host fields empty. • The first start takes about a minute. Seafile is ready when the log says "Seahub is started". A generated admin password is printed in the log. This image runs Seafile 14, which upstream still calls testing, and Seafile cannot be downgraded. Back up the Data folder and the database before every update. Coming from another Seafile template? The Data folder has the same layout, so point Data at your old folder and copy over the database settings and the JWT key. The README explains each step. Source on GitHub: https://github.com/junkerderprovinz/seafile This is an independent packaging of Seafile and is not affiliated with Seafile Ltd.

Seafile

Build  Lint  Docker Pulls  Arch  Seafile 14  Unraid  License: AGPL-3.0


The official Seafile server, installable on Unraid from a single template. It creates its own secrets on the first start, and it can run MariaDB, Redis and the notification server inside the same container when you have none of your own.

In development, testers welcome: report a bug


In Unraid's Community Applications soon   Run it with Docker   Download the source archive


A one-knight job: I build it, keep it running, work through the issues and add what people ask for, until nothing is missing. It is free, with no accounts, no telemetry, no ads and no paid tier. No asterisk anywhere. Nothing readable ever leaves your own walls. Forged on evenings and weekends, with heart and stubbornness.

If it has earned a place on your server or computer, toss a coin to your knight: it helps cover the costs and keeps the project alive. It also makes this knight's heart beat a little faster. Three ways below, whichever suits you.

Buy me a coffee   PayPal   Donate with crypto


Table of Contents

  1. What it looks like
  2. What it does
  3. Getting started
  4. How AI is used here
  5. Support this project

1. What it looks like

The libraries and files in these pictures are made up.

Seafile's library list in a browser, five libraries in dark mode
Seafile in any browser on your network, from the container on your server.


Folders and documents inside the Documents library, with the file tree on the left
Inside a library: folders, documents and the file tree.


2. What it does

Seafile syncs and shares files, with desktop and mobile clients, libraries you can encrypt on the client and built-in wikis. Its official image seafileltd/seafile-mc expects MariaDB, Redis and a notification server as containers of their own, plus a JWT key made by hand. This image is the official one with a small layer in front:

  • Secrets on the first start. It generates the JWT key, the database password and, if you leave it empty, the admin password, and keeps them in secrets.env in your appdata folder.
  • MariaDB and Redis built in, if you want them. Both are off by default, because most Unraid servers already have a MariaDB. Switched on, they run next to Seafile and listen only on 127.0.0.1.
  • Live updates in the clients. The notification server is included, so the desktop and mobile clients hear about a change when it happens instead of asking on a timer.
  • A clear stop instead of "Page unavailable". If the database or Redis host is missing, the container stops with one line saying what to set.
  • The official layout. The official scripts still run the setup and the upgrades, and /shared looks the same, so a setup made with the official image or another Seafile template keeps working.

3. Getting started

  1. Install Seafile from Community Applications.
  2. Set Server hostname to the address your clients will use, for example 192.168.1.10:8000 or seafile.example.com. Leave out http://.
  3. Pick your services:
    • No MariaDB or Redis yet? Set Built-in MariaDB and Built-in Redis to true and leave their host fields empty.
    • MariaDB already running? Enter its host and its root password. The root password is only used once, to create the three Seafile databases and the seafile user, and you can remove it afterwards.
  4. Enter an Admin email. Leave the admin password empty to get a generated one.
  5. Start the container and open the log. The first start takes about a minute. It is ready when the log says Seahub is started. If the password was generated, the log names it, and it is also in secrets.env.
  6. Open http://[IP]:8000 and sign in.

With docker run:

docker run -d --name seafile \
  -p 8000:80 \
  -v /mnt/user/appdata/seafile:/shared \
  -e SEAFILE_SERVER_HOSTNAME=192.168.1.10:8000 \
  -e INIT_SEAFILE_ADMIN_EMAIL=you@example.com \
  -e BUILTIN_MARIADB=true \
  -e BUILTIN_REDIS=true \
  junkerderprovinz/seafile:latest

Coming from another Seafile template: point Data at the same folder, copy over the hostname, the database and Redis settings and the JWT_PRIVATE_KEY, and keep Built-in MariaDB off. Back up first: a Seafile 13 database is upgraded on the first start, and there is no way back. Every other variable of the official image works as the Seafile manual describes it.


4. How AI is used here

One knight builds this, and AI is one of the tools I work with, the same way I work with an editor or a compiler. It helps me write code and documentation and it checks my work, and that saves me a good many evenings. It does not make the decisions, though. I read and understand everything before it ships, and if something here breaks, that is on me and not on the tool.

You do not have to take my word for it. The code is open and every release note is written by hand. The issue tracker shows how problems actually get handled, including the ones I got wrong the first time. If you find something that is not right, open an issue and I will look at it.


5. Support this project

Questions? Check the support thread. Bugs, ideas or feature requests? Please open a GitHub issue.

A one-knight job: I build it, keep it running, work through the issues and add what people ask for, until nothing is missing. It is free, with no accounts, no telemetry, no ads and no paid tier. No asterisk anywhere. Nothing readable ever leaves your own walls. Forged on evenings and weekends, with heart and stubbornness.

If it has earned a place on your server or computer, toss a coin to your knight: it helps cover the costs and keeps the project alive. It also makes this knight's heart beat a little faster. Three ways below, whichever suits you.

Buy me a coffee   PayPal   Donate with crypto


Seafile is released by Seafile Ltd., the Community Edition server under AGPL-3.0. This is an independent packaging for Unraid and is not affiliated with Seafile Ltd.

Requirements

A MariaDB and a Redis server, or Built-in MariaDB and Built-in Redis set to true.

Download Statistics

414
Total Downloads

Related apps

Details

Repository
junkerderprovinz/seafile:latest
Last Updated2026-10-04
First Seen2026-10-05

Runtime arguments

Web UI
http://[IP]:[PORT:80]/
Network
bridge
Shell
bash
Privileged
false
Extra Params
--restart=unless-stopped

Template configuration

WebUI PortPorttcp

Port of the Seafile web interface and of the sync clients. The Server hostname below has to name this port.

Target
80
Default
8000
Value
8000
DataPathrw

All of Seafile: configuration, logs, your libraries, secrets.env and, with Built-in MariaDB, the database. Libraries can grow large, so pick a share with room for your files.

Target
/shared
Default
/mnt/user/appdata/seafile
Value
/mnt/user/appdata/seafile
Server hostnameVariable

The address clients use to reach Seafile, without http://. For example 192.168.1.10:8000, or seafile.example.com behind a reverse proxy. Desktop clients cannot sync when this is wrong.

Target
SEAFILE_SERVER_HOSTNAME
ProtocolVariable

https when a reverse proxy in front of Seafile serves TLS, http otherwise.

Target
SEAFILE_SERVER_PROTOCOL
Default
http|https
Value
http
Admin emailVariable

Sign-in of the admin account created on the first start.

Target
INIT_SEAFILE_ADMIN_EMAIL
Admin passwordVariable

Only read on the first start. Leave it empty to get a generated one, which the log prints and secrets.env keeps.

Target
INIT_SEAFILE_ADMIN_PASSWORD
Built-in MariaDBVariable

true runs MariaDB inside this container, with its data in the Data folder. Use it only on a new installation: an existing Seafile keeps its data in the database it already has.

Target
BUILTIN_MARIADB
Default
false|true
Value
false
Database hostVariable

IP or name of your MariaDB or MySQL server. Leave it empty with Built-in MariaDB.

Target
SEAFILE_MYSQL_DB_HOST
Database root passwordVariable

Root password of your MariaDB, used once on the first start to create the three Seafile databases and the database user. You can clear it afterwards. Not needed with Built-in MariaDB.

Target
INIT_SEAFILE_MYSQL_ROOT_PASSWORD
Built-in RedisVariable

true runs Redis inside this container. Seafile only keeps a cache there, nothing is written to disk.

Target
BUILTIN_REDIS
Default
false|true
Value
false
Redis hostVariable

IP or name of your Redis server. Leave it empty with Built-in Redis.

Target
REDIS_HOST
Notification serverVariable

true starts the notification server in this container, so the desktop and mobile clients see changes when they happen. A reverse proxy has to pass WebSocket connections for /notification.

Target
ENABLE_NOTIFICATION_SERVER
Default
false|true
Value
false
Database portVariable

Port of your MariaDB or MySQL server.

Target
SEAFILE_MYSQL_DB_PORT
Default
3306
Value
3306
Database userVariable

The user Seafile connects as. The first start creates it.

Target
SEAFILE_MYSQL_DB_USER
Default
seafile
Value
seafile
Database passwordVariable

Password of the database user. Leave it empty on a new installation to get a generated one. When switching from another Seafile template, enter the password you used there.

Target
SEAFILE_MYSQL_DB_PASSWORD
ccnet databaseVariable

Name of the database for users and groups.

Target
SEAFILE_MYSQL_DB_CCNET_DB_NAME
Default
ccnet_db
Value
ccnet_db
seafile databaseVariable

Name of the database for libraries.

Target
SEAFILE_MYSQL_DB_SEAFILE_DB_NAME
Default
seafile_db
Value
seafile_db
seahub databaseVariable

Name of the database for the web interface.

Target
SEAFILE_MYSQL_DB_SEAHUB_DB_NAME
Default
seahub_db
Value
seahub_db
Redis portVariable

Port of your Redis server.

Target
REDIS_PORT
Default
6379
Value
6379
Redis passwordVariable

Only when your Redis server asks for one.

Target
REDIS_PASSWORD
JWT keyVariable

Shared by Seafile and its add-ons. Leave it empty to get a generated one. When switching from another Seafile template, enter the key you used there.

Target
JWT_PRIVATE_KEY
Notification server URLVariable

Only needed when clients reach the notification server under another address than Protocol://Server hostname/notification.

Target
NOTIFICATION_SERVER_URL
SeaDocVariable

true turns on the SeaDoc document editor. SeaDoc runs as a separate container (seafileltd/sdoc-server) and needs the same JWT key as Seafile.

Target
ENABLE_SEADOC
Default
false|true
Value
false
SeaDoc URLVariable

Address of the SeaDoc container as the browser reaches it, for example http://192.168.1.10:7070.

Target
SEADOC_SERVER_URL