环境要求
安装Seafile社区版至少需要 2核CPU 和 2GB 内存。
文档约定
本文档使用以下约定:
-
/opt/seafile 是存储Seafile docker compose文件的目录。如果您将Seafile放在不同的目录中,请相应地调整所有路径。
-
Seafile 使用两个 Docker 卷 来保存其数据库和 Seafile Docker 容器中生成的数据。卷的 主机路径 分别是 /opt/seafile-mysql 和 /opt/seafile-data ,不建议更改这些路径。 如果您修改了路径,请在按照这些说明进行操作时考虑到这一点。
-
Seafile 和 Nginx 的所有配置和日志文件都存储在 Seafile 容器的卷中。
安装 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)
更多配置项
增加一个新的管理员
确保各容器正常运行,然后执行以下命令:
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
)中。为避免歧义,我们建议您更新这些配置文件。