Docker 版升级

对于修订版本升级,例如: 从10.0.1 升级到 10.0.4 版本,只需要下载新镜像,停止 docker 容器,把 docker-compose.yml 中的 Seafile 镜像版本修改为新版本,然后执行: docker compose up -d 启动就可以了。
对于大版本升级 ,例如 10.0.x 升级 11.0.x ,一般需要以下步骤
  1. 下载新镜像,停止 docker 容器
  2. 执行一些各个版本特定手工的配置升级
  3. 启动容器
请在升级之前阅读下文查看 各个版本的升级说明
从 12.0 升级到 13.0
从 Seafile Docker 13.0 开始, elasticsearch.yml 已从   seafile-server.yml   分离,Seafile 将支持从环境变量获取缓存配置。
1.停止服务
升级前,停止 Seafile 服务
            
                
                
docker compose down
2.下载最新的.yml文件
2.1 下载 seafile-server.yml
在下载最新 seafile-server.yml 之前,请备份您的原始文件:
            
                
                
mv seafile-server.yml seafile-server.yml.bak
2.2 然后根据以下命令下载新 seafile-server.yml
            
                
                
#社区版
wget https://manual.seafile.com/13.0/repo/docker/ce/seafile-server.yml

#专业版
wget https://manual.seafile.com/13.0/repo/docker/pro/seafile-server.yml
下载 通知服务器的 .yml 文件
            
                
                
#和seafile一起部署
wget https://manual.seafile.com/13.0/repo/docker/notification-server.yml

#单独部署
wget https://manual.seafile.com/13.0/repo/docker/notification-server/notification-server.yml
2.3 下载 搜索引擎 .yml 文件(专业版)
从 Seafile Docker 13.0 ( Pro ) 开始, ElasticSearch   服务将由单独的资源文件(即   elasticsearch.yml )控制。如果您正在使用 Seafile Pro 并仍计划使用   ElasticSearch ,请下载 elasticsearch.yml
            
                
                
wget https://manual.seafile.com/13.0/repo/docker/pro/elasticsearch.yml
如果您使用 SeaSearch 作为搜索引擎,请下载最新的 seasearch.yml 文件:
            
                
                
mv seasearch.yml seasearch.yml.bak
wget https://manual.seafile.com/13.0/repo/docker/pro/seasearch.yml
2.4 下载 seadoc.yml 文件(可选)
如果你使用 SeaDoc 扩展,还需要更新 seadoc.yml 文件。
            
                
                
wget https://manual.seafile.com/13.0/repo/docker/seadoc.yml
3. 修改 .env ,更新镜像版本并添加缓存配置
3.1 将镜像版本更新到 Seafile 13
            
                
                
# 社区版
SEAFILE_IMAGE=seafileltd/seafile-mc:13.0-latest
SEADOC_IMAGE=seafileltd/sdoc-server:2.0-latest
NOTIFICATION_SERVER_IMAGE=seafileltd/notification-server:13.0-latest

#专业版
# -- add `elasticsearch.yml` if you are still using ElasticSearch
# COMPOSE_FILE='...,elasticsearch.yml'

# -- if you are using SeaSearch, please also update the SeaSearch image
# SEASEARCH_IMAGE=seafileltd/seasearch:1.0-latest # or seafileltd/seasearch-nomkl:1.0-latest for Apple chips

SEAFILE_IMAGE=seafileltd/seafile-pro-mc:13.0-latest
SEADOC_IMAGE=seafileltd/sdoc-server:2.0-latest
NOTIFICATION_SERVER_IMAGE=seafileltd/notification-server:13.0-latest
3.2 添加缓存配置
从 Seafile 13 开始,数据库和缓存的配置可以直接通过环境变量进行设置(您可以在   .env   中定义)。此外,推荐Redis作为主要缓存服务器
Redis:
            
                
                
## Cache
CACHE_PROVIDER=redis

### Redis
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_PASSWORD=
Memcached:
            
                
                
## Cache
CACHE_PROVIDER=memcached

### Memcached
MEMCACHED_HOST=memcached
MEMCACHED_PORT=11211
3.3 为通知服务器添加配置
如果您在 Seafile 12 中使用通知服务器,请在   .env   中指定通知服务器 URL:
            
                
                
#如果和seafile部署在同一台服务器
ENABLE_NOTIFICATION_SERVER=true

#单独部署
ENABLE_NOTIFICATION_SERVER=true
NOTIFICATION_SERVER_URL=http://<your notification server host>:8083
INNER_NOTIFICATION_SERVER_URL=$NOTIFICATION_SERVER_URL
3.4 添加存储后端的配置 (Pro)
Seafile 13.0 新增了 seaf-server 组件的存储后端 SEAF_SERVER_STORAGE_TYPE 。您可以删除变量或将其设置为空 ( SEAF_SERVER_STORAGE_TYPE= ) 以使用旧方法,即从 seafile.conf 确定存储后端。
本地存储(默认):
            
                
                
#本地存储(默认)
SEAF_SERVER_STORAGE_TYPE=disk
S3 存储:
            
                
                
#S3存储
SEAF_SERVER_STORAGE_TYPE=s3

S3_COMMIT_BUCKET=<your commit bucket name>
S3_FS_BUCKET=<your fs bucket name>
S3_BLOCK_BUCKET=<your block bucket name>
S3_SS_BUCKET=<your seasearch bucket name> # for seasearch
S3_MD_BUCKET=<your metadata bucket name> # for metadata-server
S3_KEY_ID=<your-key-id>
S3_SECRET_KEY=<your-secret-key>
S3_USE_V4_SIGNATURE=true
S3_PATH_STYLE_REQUEST=false
S3_AWS_REGION=us-east-1
S3_HOST=
S3_USE_HTTPS=true
S3_SSE_C_KEY=
多存储后端:
SEAF_SERVER_STORAGE_TYPE 设置为 multiple 。在这种情况下,您无需更改   seafile.conf   中的存储配置。
            
                
                
SEAF_SERVER_STORAGE_TYPE=multiple
如果您想使用   seafile.conf   中的存储配置,请删除   .env   中的默认值   SEAF_SERVER_STORAGE_TYPE
            
                
                
SEAF_SERVER_STORAGE_TYPE=
4. 删除 obsolote 配置
尽管环境中的配置(即   .env )的优先级高于配置文件中的配置,但我们建议您删除或修改以下文件中的缓存配置以避免歧义:
4.1 备份旧的配置文件:
            
                
                
# please replace /opt/seafile-data to your $SEAFILE_VOLUME

cp /opt/seafile-data/seafile/conf/seafile.conf /opt/seafile-data/seafile/conf/seafile.conf.bak
cp /opt/seafile-data/seafile/conf/seahub_settings.py /opt/seafile-data/seafile/conf/seahub_settings.py.bak
cp /opt/seafile-data/seafile/conf/seafevents.conf /opt/seafile-data/seafile/conf/seafevents.conf.bak
4.2 清理配置文件中的冗余配置项:
打开 /opt/seafile-data/seafile/conf/seafile.conf 并删除 [memcached] [database] [commit_object_backend] [fs_object_backend] [notification] [block_backend]
  如果上述部分在 .env 中已配置。 在大多数情况下, seafile.conf   仅包含 Seafile 文件服务器的侦听端口   8082
打开 /opt/seafile-data/seafile/conf/seafile.conf 并删除[database]相关配置。
打开 /opt/seafile-data/seafile/conf/seahub_settings.py 并删除 DATABASES = {...} CAHCES = {...}
5. 启动服务
            
                
                
docker compose up -d
从 11.0 升级到 12.0
注意:如果在 MySQL 中有大量的 Activity ,请先清除此表 清理数据库 。否则,数据库升级将需要很长时间。
从 Seafile Docker 12.0 开始,使用 .env 和 seafile-server.yml 进行配置。
备份配置文件 ( docker-compose.yml
            
                
                
mv docker-compose.yml docker-compose.yml.bak
下载配置文件
下载.env、seafile-server.yml和caddy.yml,并根据 docker-compose.yml.bak 中的配置修改.env 文件。
            
                
                
#Seafile社区版
wget -O .env https://manual.seafile.com/12.0/repo/docker/ce/env
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企业版(Github镜像源)
wget -O .env https://manual.seafile.com/12.0/repo/docker/pro/env
wget https://manual.seafile.com/12.0/repo/docker/pro/seafile-server.yml
wget https://manual.seafile.com/12.0/repo/docker/caddy.yml
以下字段需要特别注意:
社区版:
变量名
描述
默认值
SEAFILE_VOLUME
Seafile 数据目录
/opt/seafile-data
SEAFILE_MYSQL_VOLUME
MySQL 数据目录
/opt/seafile-mysql/db
SEAFILE_CADDY_VOLUME
用于存储从 Let's Encrypt 获得的证书的 Caddy 数据目录。
/opt/seafile-caddy
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
时区
Asia/Shanghai
专业版:
变量名
描述
默认值
SEAFILE_VOLUME
Seafile 数据目录
/opt/seafile-data
SEAFILE_MYSQL_VOLUME
MySQL 数据目录
/opt/seafile-mysql/db
SEAFILE_CADDY_VOLUME
用于存储从 Let's Encrypt 获得的证书的 Caddy 数据目录
/opt/seafile-caddy
SEAFILE_ELASTICSEARCH_VOLUME
Elasticsearch数据目录(仅专业版有效)
/opt/seafile-elasticsearch/data
SEAFILE_MYSQL_DB_USER
MySQL 的用户(可在conf/seafile.conf中找到)
seafile
SEAFILE_MYSQL_DB_PASSWORD
MySQL seafile用户密码
(必填)
JWT
JWT 私钥,Seafile 需要一个长度不小于 32 个字符的随机字符串,可以使用`pwgen -s 40 1` 生成。
(必填)
SEAFILE_SERVER_HOSTNAME
Seafile服务器的主机名或域名
(必填)
SEAFILE_SERVER_PROTOCOL
Seafile服务器协议(http或https)
http
TIME_ZONE
时区
Asia/Shanghai
注意:
  • 上表中变量的值应与现有的配置保持一致,您可以从 seafile.conf 或其他配置文件中查验这些值。
  • 配置文件  .env  中初始化配置的变量可以删除,例如   INIT_SEAFILE_ADMIN_EMAIL INIT_SEAFILE_ADMIN_PASSWORD
SSL 现在由 Caddy 服务 处理。如果您之前使用过 SSL,还需要修改 seafile.nginx.conf,将服务器监听的 443 改为 80。
备份seafile.nginx.conf配置文件:
            
                
                
cp seafile.nginx.conf seafile.nginx.conf.bak
注释 “ server listen 80 ” 部分:
            
                
                
#server {
# listen 80;
# server_name _ default_server;

     # allow certbot to connect to challenge location via HTTP Port 80
     # otherwise renewal request will fail
# location /.well-known/acme-challenge/ {
# alias /var/www/challenges/;
# try_files $uri =404;
# }

# location / {
# rewrite ^ https://example.seafile.com$request_uri? permanent;
# }
#}
server listen 443 改为 80
            
                
                
server {
#listen 443 ssl;
listen 80;

# ssl_certificate /shared/ssl/pkg.seafile.top.crt;
# ssl_certificate_key /shared/ssl/pkg.seafile.top.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;

    ...
启动容器。
升级 notification 服务
如果你已经部署了通知服务。 通知服务 现在已移至其自己的 Docker 镜像中,您需要根据 通知服务文档 重新部署。
SeaDoc升级(0.8到1.0)
如果您已经使用 Seafile v11.0 部署了 SeaDoc v0.8,在Seafile12.0中则可以按照以下步骤将其升级到 1.0:
  • 删除 sdoc_db
  • 删除 seafile.nginx.conf文件中SeaDoc相关配置
  • 删除旧的 SeaDoc 并部署一个新的 SeaDoc 服务
删除 sdoc_db
SeaDoc从 1.0 版本开始,开始使用 seahub_db 数据库存储其操作日志,不再需要额外的数据库 sdoc_db。将 Seafile 服务从 11.0 版本升级到 12.0 版本时,seahub_db 中的数据库表会自动创建,sdoc_db可直接删除。
删除 seafile.nginx.conf文件中SeaDoc相关配置
如果您部署了旧版本的 SeaDoc,需要删除 seafile.nginx.conf 文件中的 /sdoc-server/ /socket.io 配置
            
                
                
# location /sdoc-server/ {
# add_header Access-Control-Allow-Origin *;
# add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS;
# add_header Access-Control-Allow-Headers "deviceType,token, authorization, content-type";
# if ($request_method = 'OPTIONS') {
# add_header Access-Control-Allow-Origin *;
# add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS;
# add_header Access-Control-Allow-Headers "deviceType,token, authorization, content-type";
# return 204;
# }
# proxy_pass http://sdoc-server:7070/;
# proxy_redirect off;
# proxy_set_header Host $host;
# proxy_set_header X-Real-IP $remote_addr;
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# proxy_set_header X-Forwarded-Host $server_name;
# proxy_set_header X-Forwarded-Proto $scheme;
# client_max_body_size 100m;
# }
# location /socket.io {
# proxy_pass http://sdoc-server:7070;
# proxy_http_version 1.1;
# proxy_set_header Upgrade $http_upgrade;
# proxy_set_header Connection 'upgrade';
# proxy_redirect off;
# proxy_buffers 8 32k;
# proxy_buffer_size 64k;
# proxy_set_header X-Real-IP $remote_addr;
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# proxy_set_header Host $http_host;
# proxy_set_header X-NginX-Proxy true;
# }
部署一个新的 SeaDoc 服务
请参阅文档 “ 安装SeaDoc ” 以使用 Seafile 安装 SeaDoc。
其他配置
启用 REMOTE_USER
默认情况下,REMOTE_USER 不会传递给 Seafile,如果你需要 SSO 的 REMOTE_USER ,则需要更改 gunicorn.conf.py
            
                
                
forwarder_headers = 'SCRIPT_NAME,PATH_INFO,REMOTE_USER'
在seahub中补充或删除ALLOWED_HOSTS
自版本 12.0 起,seaf-server 组件需要向 seahub 组件发送内部请求以检查权限,如果 ALLOWED_HOSTS 设置不正确,在下载文件时会报告 400 Error 错误。在这种情况下,你可以在 seahub_settings.py 删除 ALLOWED_HOSTS ,或者在 ALLOWED_HOSTS 列表中 补充 127.0.0.1
            
                
                
# seahub_settings.py

ALLOWED_HOSTS = ['...(your domain)', '127.0.0.1']
从 10.0 升级到 11.0
下载新镜像,停止旧的 docker 容器,将 docker-compose.yml 中的 Seafile 镜像版本修改为新版本。
迁移 LDAP 和 OAuth 的配置和其他一些配置请参考: https://cloud.seafile.com/published/seafile-manual-cn/upgrade/upgrade_notes_for_11.0.x.md
执行:docker compose up - d 启动容器
从 9.0 升级到 10.0
下载新镜像,停止旧的 docker 容器,将 docker-compose.yml 中的 Seafile 镜像版本修改为新版本,然后执行:docker compose up - d启动容器。
如果您使用的是带有 ElasticSearch、SAML SSO 和存储后端功能的专业版,请按照升级手册了解如何更新这些功能的配置: https://cloud.seafile.com/published/seafile-manual-cn/upgrade/upgrade_notes_for_10.0.x.md
如果您想使用新的通知服务器和速率控制(仅限专业版),请参考升级手册: https://cloud.seafile.com/published/seafile-manual-cn/upgrade/upgrade_notes_for_10.0.x.md
从 8.0 升级到 9.0
只需下载新镜像,停止旧的 docker 容器,将 docker-compose.yml 中的 Seafile 镜像版本修改为新版本,然后执行:docker compose up -d 启动。
如果您使用的是带有 ElasticSearch,需要给ElasticSearch升级,请参考升级手册: https://cloud.seafile.com/published/seafile-manual-cn/upgrade/upgrade_notes_for_9.0.x.md
启用 https
9.0.6 及以后版本中使用了 acme v3 申请证书。 如果存在旧版本生成的证书,启动前需要备份并移走旧的证书目录和旧的 seafile.nginx.conf。
            
                
                
mv /opt/seafile/shared/ssl /opt/seafile/shared/ssl-bak
mv /opt/seafile/shared/nginx/conf/seafile.nginx.conf /opt/seafile/shared/nginx/conf/seafile.nginx.conf.bak
启动新容器会自动申请证书。
            
                
                
docker compose down
docker compose up -d
等待证书申请成功,然后您可以按照想要的内容修改新的 seafile.nginx.conf,并执行以下命令使 nginx 配置生效。
            
                
                
docker exec seafile nginx -s reload
新容器内的定时任务会自动更新证书,无需再次执行本操作
7.1 升级到 8.0
只需下载新镜像,停止旧的 docker 容器,将 docker-compose.yml 中的 Seafile 镜像版本修改为新版本,然后执行:docker compose up -d 启动容器。
7.0 升级到 7.1
只需下载新镜像,停止旧的 docker 容器,将 docker-compose.yml 中的 Seafile 镜像版本修改为新版本,然后执行:docker compose up -d 启动容器。