本文档使用以下约定:
/opt/seafile-data
是 Seafile 的目录。 如果您将 Seafile 放在不同的目录中,请相应地调整所有路径。
Seafile 使用两个 Docker 卷 来保存其数据库和 Seafile Docker 容器中生成的数据。 卷的主机路径分别是/opt/seafile-mysql
和/opt/seafile-data
。 不建议更改这些路径。 如果您这样做,请在按照这些说明进行操作时考虑到这一点。
Seafile 和 Nginx 的所有配置和日志文件都存储在 Seafile 容器的卷中。
因为 Seafile v7.x.x 及以后版本容器是通过 Docker 运行的,所以您应该先在服务器上安装 Docker。
根据您需要的版本,下载 Seafile docker-compose.yml 文件。
下载示例文件到您的服务器上,然后根据您的实际环境修改该文件。尤其是以下几项配置:
Seafile 镜像的版本,最新版为 latest
MySQL root 用户的密码 (MYSQL_ROOT_PASSWORD and DB_ROOT_PASSWD)
持久化存储 MySQL 数据的 volumes 目录 (volumes)
持久化存储 Seafile 数据的 volumes 目录 (volumes)
执行以下命令启动 Seafile 服务
docker compose up -d
需要等待几分钟,等容器首次启动时的初始化操作完成后,您就可以在浏览器上访问http://seafile.example.com
来打开 Seafile 主页。
文件所在的目下执行以上命令
。文件所在的目下执行以上命令
。文件所在的目下执行以上命令
。
/opt/seafile-data
共享卷的挂载点,您可以选择在容器外部存储某些持久性信息.在这个项目中,我们会在外部保存各种日志文件和上传数据。 这使您可以轻松重建容器而不会丢失重要信息。
/opt/seafile-data/seafile: Seafile 服务的配置文件以及数据文件
/opt/seafile-data/logs: 日志目录
/opt/seafile-data/logs/var-log: 我们将容器内的/var/log
链接到本目录。您可以在/opt/seafile-data/logs/var-log/nginx/
中找到 nginx 的日志文件
/opt/seafile-data/logs/seafile: Seafile 服务运行产生的日志文件目录。比如您可以在 /opt/seafile-data/logs/seafile/seafile.log
文件中看到 seaf-server 的日志
/opt/seafile-data/ssl: 存放证书的目录,默认不存在
默认的管理员账号是 me@example.com
并且该账号的密码是 asecret
,您可以在 docker-compose.yml
中配置不同的用户名和密码,为此您需要做如下配置:
seafile:
...
environment:
...
- SEAFILE_ADMIN_EMAIL=me@example.com
- SEAFILE_ADMIN_PASSWORD=a_very_secret_password
...
如果您把 SEAFILE_SERVER_LETSENCRYPT
设置为 true
,该容器将会自动为您申请一个 letsencrypt 机构颁发的 SSL 证书,并开启 https 访问,为此您需要做如下配置:
seafile:
...
ports:
- "80:80"
- "443:443"
...
environment:
...
- SEAFILE_SERVER_LETSENCRYPT=true
- SEAFILE_SERVER_HOSTNAME=
...
如果您想要使用自己的 SSL 证书,而且如果用来持久化存储 Seafile 数据的目录为 /opt/seafile-data
,您可以做如下处理:
创建 /opt/seafile-data/ssl
目录,然后拷贝您的证书文件和密钥文件到ssl目录下。
按照如下示例修改 Nginx 的配置文件/opt/seafile-data/nginx/conf/seafile.nginx.conf。请不要更改该配置文件的文件名。
server {
listen 80;
server_name example.seafile.com default_server;
location / {
rewrite ^ https://$host$request_uri? permanent;
}
}
server {
listen 443;
ssl on;
ssl_certificate /shared/ssl/your-ssl-crt.crt;
ssl_certificate_key /shared/ssl/your-ssl-key.key;
ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS;
server_name example.seafile.com;
...
docker exec -it seafile /usr/sbin/nginx -s reload
SEAFILE_SERVER_LETSENCRYPT
设置为 true
,遇到了 Seafile 无法启动并且有如下错误subprocess.CalledProcessError: Command '/scripts/ssl.sh /shared/ssl cloud.seafile-demo.de' returned non-zero exit status 128.
容器中的脚本 /scripts/ssl.sh 需要修改内容, git clone git://
替换为 git clone https://
您需要重启服务以使其生效:
docker compose restart
自 9.0.6 版本后,我们使用 acme 代替 acme-tiny 来获取证书,并修复了这个问题。
Seafile 的配置文件存放在 /opt/seafile-data/seafile/conf
目录下,您可以根据Seafile 手册的指导来修改这些配置项。
一旦修改了配置文件,您需要重启服务以使其生效:
docker compose restart
您可以使用以下命令来查看 Seafile Docker 的日志
docker compose logs -f
Seafile 容器中 Seafile 服务本身的日志文件存放在 /shared/logs/seafile
目录下,或者您可以在宿主机上 Seafile 容器的卷目录中找到这些日志,例如:/opt/seafile-data/logs/seafile
同样 Seafile 容器的系统日志存放在 /shared/logs/var-log
目录下,或者宿主机目录 /opt/seafile-data/logs/var-log
。
确保各容器正常运行,然后执行以下命令:
docker exec -it seafile /opt/seafile/seafile-server-latest/reset-admin.sh
根据提示输入用户名和密码,您现在有了一个新的管理帐户。
请参考手册:备份和恢复
在 seafile 中,当文件被删除时,组成这些文件的块数据不会立即删除,因为可能有其他文件也会引用这些块数据(用于去重功能的实现)。为了真正删除无用的块数据,还需要额外运行"GC"程序。GC 会自动检测到哪些数据块不再被任何文件所引用,并清除它们。
GC 脚本被放在docker容器的 /scripts
目录下。执行 GC 的方法很简单:docker exec seafile /scripts/gc.sh
。对于社区版来说,该程序会暂停 Seafile 服务,但这是一个相对较快的程序,一旦程序运行完成,Seafile 服务也会自动重新启动。而专业版提供了在线运行 GC 的功能,不会暂停 Seafile 服务。
如何进入docker 容器内部排查错误
docker exec -it seafile /bin/bash
LetsEncrypt SSL 证书将要过期
如果证书没有自动更新,需要执行命令 /scripts/ssl.sh /shared/ssl/ <你的 seafile 域名>
以手动更新证书。
例如:/scripts/ssl.sh /shared/ssl/ example.seafile.com
SEAFILE_SERVER_LETSENCRYPT=false 改为 true
在使用 http 一段时间后,想改为 https,需要移走并备份 seafile.nginx.conf
mv /opt/seafile-data/nginx/conf/seafile.nginx.conf /opt/seafile-data/nginx/conf/seafile.nginx.conf.bak
启动新的容器,将会自动申请证书
docker compose down
docker compose up -d
您还需要手动将其他陪配置文件中的 http 改为 https,系统管理员页面中的 SERVICE_URL、FILE_SERVER_ROOT 也需要修改。
如果曾经改动过旧的 seafile.nginx.conf,现在可以按照您想要的内容修改新的 seafile.nginx.conf,然后执行以下命令使 nginx 配置生效。
docker exec seafile nginx -s reload
Last modified by 马宇航, 2024-04-01
/opt/seafile-data