# Setup community edition - Seafile Admin Manual
Author: seafile

Skip to content

# Installation of Seafile Server Community Edition with Docker

## System requirements

Please refer here for system requirements about Seafile CE. In general, we recommend that you have at least 2G RAM and a 2-core CPU (> 2GHz).

## Getting started

The following assumptions and conventions are used in the rest of this document:

- `/opt/seafile` is the directory for store Seafile docker compose files. If you decide to put Seafile in a different directory — which you can — adjust all paths accordingly.
- Seafile uses two Docker volumes for persisting data generated in its database and Seafile Docker container. The volumes' host paths are `/opt/seafile-mysql` and `/opt/seafile-data`, respectively. It is not recommended to change these paths. If you do, account for it when following these instructions.
- All configuration and log files for Seafile and the webserver Nginx are stored in the volume of the Seafile container.

### Install docker

Use the official installation guide for your OS to install Docker.

### Download and modify `.env`

From Seafile Docker 12.0, we use `.env`, `seafile-server.yml` and `caddy.yml` files for configuration

    mkdir /opt/seafile
    cd /opt/seafile

    # Seafile CE 12.0
    wget -O .env https://manual.seafile.com/12.0/repo/docker/ce/env
    wget https://manual.seafile.com/12.0/repo/docker/seadoc.yml
    wget https://manual.seafile.com/12.0/repo/docker/ce/seafile-server.yml
    wget https://manual.seafile.com/12.0/repo/docker/caddy.yml

    nano .env

The following fields merit particular attention:

Variable | Description | Default Value
--- | --- | ---
`SEAFILE_VOLUME` | The volume directory of Seafile data | `/opt/seafile-data`
`SEAFILE_MYSQL_VOLUME` | The volume directory of MySQL data | `/opt/seafile-mysql/db`
`SEAFILE_CADDY_VOLUME` | The volume directory of Caddy data used to store certificates obtained from Let's Encrypt's | `/opt/seafile-caddy`
`INIT_SEAFILE_MYSQL_ROOT_PASSWORD` | The `root` password of MySQL | (Only required on first deployment)
`SEAFILE_MYSQL_DB_USER` | The user of MySQL (`database` - `user` can be found in `conf/seafile.conf`) | `seafile`
`SEAFILE_MYSQL_DB_PASSWORD` | The user `seafile` password of MySQL | (required)
`SEAFILE_MYSQL_DB_CCNET_DB_NAME` | The database name of ccnet | `ccnet_db`
`SEAFILE_MYSQL_DB_SEAFILE_DB_NAME` | The database name of seafile | `seafile_db`
`SEAFILE_MYSQL_DB_SEAHUB_DB_NAME` | The database name of seahub | `seahub_db`
`JWT_PRIVATE_KEY` | JWT_PRIVATE_KEY, A random string with a length of no less than 32 characters is required for Seafile, which can be generated by using `pwgen -s 40 1` | (required)
`SEAFILE_SERVER_HOSTNAME` | Seafile server hostname or domain | (required)
`SEAFILE_SERVER_PROTOCOL` | Seafile server protocol (http or https) | `http`
`TIME_ZONE` | Time zone | `UTC`
`INIT_SEAFILE_ADMIN_EMAIL` | Admin username | `me@example.com` (Recommend modifications)
`INIT_SEAFILE_ADMIN_PASSWORD` | Admin password | `asecret` (Recommend modifications)

### Start Seafile server

Start Seafile server with the following command

    docker compose up -d

Note

You must run the above command in the directory with the `.env`. If `.env` file is elsewhere, please run

    docker compose --env-file /path/to/.env up -d

Success

After starting the services, you can see the initialization progress by tracing the logs of container `seafile` (i.e., `docker logs seafile -f`)

    ---------------------------------
    This is your configuration
    ---------------------------------

        server name:            seafile
        server ip/domain:       seafile.example.com

        seafile data dir:       /opt/seafile/seafile-data
        fileserver port:        8082

        database:               create new
        ccnet database:         ccnet_db
        seafile database:       seafile_db
        seahub database:        seahub_db
        database user:          seafile

    Generating seafile configuration ...

    done
    Generating seahub configuration ...

    ----------------------------------------
    Now creating seafevents database tables ...

    ----------------------------------------
    ----------------------------------------
    Now creating ccnet database tables ...

    ----------------------------------------
    ----------------------------------------
    Now creating seafile database tables ...

    ----------------------------------------
    ----------------------------------------
    Now creating seahub database tables ...

    ----------------------------------------

    creating seafile-server-latest symbolic link ...  done

    -----------------------------------------------------------------
    Your seafile server configuration has been finished successfully.
    -----------------------------------------------------------------

And then you can see the following messages which the Seafile server starts successfully:

    Starting seafile server, please wait ...
    Seafile server started

    Done.

    Starting seahub at port 8000 ...

    ----------------------------------------
    Successfully created seafile admin
    ----------------------------------------

    Seahub is started

    Done.

Finially, you can go to `http://seafile.example.com` to use Seafile.

## Seafile directory structure

### Path `/opt/seafile-data`

Placeholder spot for shared volumes. You may elect to store certain persistent information outside of a container, in our case we keep various log files and upload directory outside. This allows you to rebuild containers easily without losing important information.

- /opt/seafile-data/seafile: This is the directory for seafile server configuration and data.
  - /opt/seafile-data/seafile/logs: This is the directory that would contain the log files of seafile server processes. For example, you can find seaf-server logs in `/opt/seafile-data/seafile/logs/seafile.log`.
- /opt/seafile-data/logs: This is the directory for operating system.
  - /opt/seafile-data/logs/var-log: This is the directory that would be mounted as `/var/log` inside the container. `/opt/seafile-data/logs/var-log/nginx` contains the logs of Nginx in the Seafile container.

Tip

From Seafile Docker 12.0, we use the Caddy to do web service proxy. If you would like to access the logs of Caddy, you can use following command:

    docker logs seafile-caddy --follow

### Find logs

To monitor container logs (from outside of the container), please use the following commands:

    # if the `.env` file is in current directory:
    docker compose logs --follow
    # if the `.env` file is elsewhere:
    docker compose --env-file /path/to/.env logs --follow

    # you can also specify container name:
    docker compose logs seafile --follow
    # or, if the `.env` file is elsewhere:
    docker compose --env-file /path/to/.env logs seafile --follow

The Seafile logs are under `/shared/logs/seafile` in the docker, or `/opt/seafile-data/logs/seafile` in the server that run the docker.

The system logs are under `/shared/logs/var-log`, or `/opt/seafile-data/logs/var-log` in the server that run the docker.

To monitor all Seafile logs simultaneously (from outside of the container), run

    sudo tail -f $(find /opt/seafile-data/ -type f -name *.log 2>/dev/null)

## More configuration options

The config files are under `/opt/seafile-data/seafile/conf`. You can modify the configurations according to configuration section

## Add a new admin

Ensure the container is running, then enter this command:

    docker exec -it seafile /opt/seafile/seafile-server-latest/reset-admin.sh

Enter the username and password according to the prompts. You now have a new admin account.

## Backup and recovery

Follow the instructions in Backup and restore for Seafile Docker

## Garbage collection

When files are deleted, the blocks comprising those files are not immediately removed as there may be other files that reference those blocks (due to the magic of deduplication). To remove them, Seafile requires a 'garbage collection' process to be run, which detects which blocks no longer used and purges them.

## FAQ

Q: If I want enter into the Docker container, which command I can use?

A: You can enter into the docker container using the command:

    docker exec -it seafile /bin/bash

Q: I forgot the Seafile admin email address/password, how do I create a new admin account?

A: You can create a new admin account by running

    docker exec -it seafile /opt/seafile/seafile-server-latest/reset-admin.sh

The Seafile service must be up when running the superuser command.

Q: If, for whatever reason, the installation fails, how do I to start from a clean slate again?

A: Remove the directories /opt/seafile, /opt/seafile-data and /opt/seafile-mysql and start again.

Q: Something goes wrong during the start of the containers. How can I find out more?

A: You can view the docker logs using this command: `docker compose logs -f`.