部署社区版

环境要求
安装Seafile社区版至少需要 2核CPU 和 2GB 内存。
文档约定
本文档使用以下约定:
  • /opt/seafile 是存储Seafile docker compose文件的目录。如果您将Seafile放在不同的目录中,请相应地调整所有路径。
  • Seafile 使用两个 Docker 卷 来保存其数据库和 Seafile Docker 容器中生成的数据。卷的 主机路径 分别是 /opt/seafile-mysql /opt/seafile-data ,不建议更改这些路径。 如果您修改了路径,请在按照这些说明进行操作时考虑到这一点。
  • Seafile 和 Nginx 的所有配置和日志文件都存储在 Seafile 容器的卷中。
安装 Docker
请选择适用于您的操作系统进行安装 docker官方安装指南
下载并修改 .env
从 Seafile Docker 12.0开始,我们使用以下三个配置文件: .env seafile-server.yml   caddy.yml
            
                
                
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

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

nano .env
【12.0】以下字段需要特别注意:
变量名
描述
默认值
SEAFILE_VOLUME
Seafile 数据目录
/opt/seafile-data
SEAFILE_MYSQL_VOLUME
MySQL 数据目录
/opt/seafile-mysql/db
SEAFILE_CADDY_VOLUME
用于存储从 Let's Encrypt 获得的证书的 Caddy 数据目录。
/opt/seafile-caddy
INIT_SEAFILE_MYSQL_ROOT_PASSWORD
MySQL root的密码
(仅在首次部署时需要)
SEAFILE_MYSQL_DB_USER
MySQL 的用户(可在conf/seafile.conf中找到)。
seafile
SEAFILE_MYSQL_DB_PASSWORD
MySQL seafile用户密码
(必填)
SEAFILE_MYSQL_DB_CCNET_DB_NAME
ccnet 数据库名称
ccnet_db
SEAFILE_MYSQL_DB_SEAFILE_DB_NAME
seafile 数据库名称
seafile_db
SEAFILE_MYSQL_DB_SEAHUB_DB_NAME
seahub 数据库名称
seahub_db
JWT
JWT 私钥,Seafile 需要一个长度不小于 32 个字符的随机字符串,可以使用`pwgen -s 40 1`生成。
(必填)
SEAFILE_SERVER_HOSTNAME
Seafile服务器的主机名或域名
(必填)
SEAFILE_SERVER_PROTOCOL
Seafile服务器协议(http或https)
http
TIME_ZONE
时区
UTC
INIT_SEAFILE_ADMIN_EMAIL
初始化管理员用户名
me@example.com(建议修改)
INIT_SEAFILE_ADMIN_PASSWORD
初始化管理员密码
asecret(建议修改)
【13.0】新增了以下字段:
变量名
描述
默认值
SEAFILE_MYSQL_DB_HOST
MySQL 的host
db
SEAFILE_MYSQL_DB_PORT
MySQL 的Port
3306
CACHE_PROVIDER
用于 Seafile 的缓存服务器。可用选项包括 redis 和 memcached 。从 Seafile 13 开始,建议使用 redis 作为缓存服务来支持新功能,以及 默认情况下,memcached 将不再集成到 Seafile Docker 中。
redis
REDIS_HOST
Redis 服务地址
redis
REDIS_PORT
Redis 服务端口
6379
REDIS_PASSWORD
Redis 服务密码
MEMCACHED_HOST
Memcached 服务地址
memcached
MEMCACHED_PORT
Memcached 服务端口
11211
ENABLE_NOTIFICATION_SERVER
启用 (true) 或禁用 (false) Seafile 的通知功能
false
NOTIFICATION_SERVER_URL
通知服务地址
MD_FILE_COUNT_LIMIT
(仅在部署元数据服务器时有效)。元数据功能允许的存储库中最大文件数。如果仓库中的文件数超过此值,则不会为仓库启用元数据管理功能。对于启用了元数据管理的仓库,如果其中的记录数达到此值,但仍有一些文件未记录在元数据服务器中,则将跳过未记录文件的元数据管理。
100000
NON_ROOT
在没有 root 用户的情况下运行 Seafile 容器
false
启动Seafile服务
执行以下命令启动 Seafile 服务
            
                
                
docker compose up -d
            
                
                
ERROR: Named volume "xxx" is used in service "xxx" but no declaration was found in the volumes section

当您的 Docker(或 docker-compose)版本过低时,您可能会遇到此问题。您可以根据 Docker 官方文档升级或重新安装 Docker 服务来解决这个问题。
注意: 你必须在包含 .env 的目录中运行上述命令。如果 .env 文件在其他目录,请运行
            
                
                
docker compose --env-file /path/to/.env up -d
启动服务后,您可以通过跟踪容器 seafile 的日志(即 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.
-----------------------------------------------------------------
然后,你可以看到 Seafile 服务器成功启动的以下消息:
            
                
                
Starting seafile server, please wait ...
Seafile server started

Done.

Starting seahub at port 8000 ...

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

Seahub is started

Done.
最后,您可以访问  http://example.seafile.com 来使用 Seafile。
Seafile 目录结构
/opt/seafile-data
共享卷的挂载点,您可以选择在容器外部存储某些持久性信息。在这个目录中,我们会在外部保存各种日志文件和上传数据,这使您可以轻松重建容器而不会丢失重要信息。
  • /opt/seafile-data/seafile: Seafile 服务的配置文件以及数据文件
    • /opt/seafile-data/seafile/logs: Seafile 服务运行产生的日志文件目录。 例如,您可以在 /opt/seafile-data/seafile/logs/seafile.log 中找到 seaf-server 日志。
  • /opt/seafile-data/logs: 日志目录
    • /opt/seafile-data/logs/var-log: 我们将容器内的 /var/log 链接到本目录。您可以在 /opt/seafile-data/logs/var-log/nginx/ 中找到 nginx 的日志文件
提示:从Seafile Docker 12.0开始,我们使用 Caddy 代理Web服务,如果您想访问 Caddy 的日志,可以使用以下命令:
            
                
                
docker logs seafile-caddy --follow
查找日志
在容器外查看日志,命令如下:
            
                
                
# 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
Seafile 容器中 Seafile 服务本身的日志文件存放在 /shared/logs/seafile 目录下,或者您可以在宿主机上 Seafile 容器的卷目录中找到这些日志,例如: /opt/seafile-data/logs/seafile
同样 Seafile 容器的系统日志存放在 /shared/logs/var-log 目录下,或者宿主机目录 /opt/seafile-data/logs/var-log
在容器外查看Seafile的所有日志,运行以下命令:
            
                
                
sudo tail -f $(find /opt/seafile-data/ -type f -name *.log 2>/dev/null)
更多配置项
Seafile 的 配置文件位于 /opt/seafile-data/seafile/conf 。您可以根据 配置部分 修改配置项。
增加一个新的管理员
确保各容器正常运行,然后执行以下命令:
            
                
                
docker exec -it seafile /opt/seafile/seafile-server-latest/reset-admin.sh
根据提示输入用户名和密码,您现在有了一个新的管理员帐户。
备份和恢复
请参考手册: 备份和恢复
垃圾回收
在 seafile 中,当文件被删除时,组成这些文件的块数据不会立即删除,因为可能有其他文件也会引用这些块数据(用于去重功能的实现)。为了真正删除无用的块数据,还需要额外运行" GC "程序。GC 会自动检测到哪些数据块不再被任何文件所引用,并清除它们。
常见问题
如何进入docker 容器内部排查错误?
            
                
                
docker exec -it seafile /bin/bash
如果忘记了Seafile的管理员账号或密码,如何创建新的管理员账户?
            
                
                
docker exec -it seafile /opt/seafile/seafile-server-latest/reset-admin.sh
运行命令时,Seafile 服务必须处于运行状态。
如果安装失败,如何恢复初始状态重新开始安装?
删除 opt/seafile , /opt/seafile-data /opt/seafile-mysql  这三个目录即可重新开始。
容器启动期间出现了问题,如何查看更多信息?
可以使用此命令查看 Docker 日志: docker compose logs -f
Seafile 如何使用缓存?
Seafile 在许多情况下使用缓存来提高性能。内容包括但不限于用户会话信息、头像、个人资料、数据库记录等。从 Seafile Docker 13 开始, Redis 作为默认缓存服务器来支持新功能(请参阅 upgradte notes),它已集成在 Seafile Docker 13 中,可以直接在.env中进行配置, 默认情况下不需要额外的设置
成在 Seafile Docker 中的 Redis 安全吗?它有访问密码吗?
Seafile Docker 集成的 Redis 默认没有设置密码,只能通过 Docker 专网访问,不会对外暴露服务端口。当然,如有必要,您也可以为其设置密码。您可以在 .env 设置 REDIS_PASSWORD 并移除 seafile-server.yml 中注释内容来启用 Redis 密码
            
                
                
services:
    ...
    redis:
    image: ${SEAFILE_REDIS_IMAGE:-redis}
    container_name: seafile-redis
    # remove the following comment markers
    command:
        - /bin/sh
        - -c
        - redis-server --requirepass "$${REDIS_PASSWORD:?Variable is not set or empty}"
    networks:
    - seafile-net
    ...
出于某种原因,如果仍然必须使用 Memcached 作为缓存服务器,应该怎么做?
如果您仍想使用 Memcached(Seafile Docker 13 未提供),只需按照以下步骤作:
  • CACHE_PROVIDER 设置为   memcached   并修改   .env   中的 MEMCACHED_xxx
  • 删除在 seafile-server.yml 的   redis   部分和   redis   依赖项 部分。
也可以在服务启动后对缓存服务器进行更改(通过在 .env ),但相应的配置文件不会直接更新(例如 seahub_settings.py seafile.conf seafevents.conf )中。为避免歧义,我们建议您更新这些配置文件。