主版本和次要版本升级
Seafile 在主要版本和次要版本中添加新功能,很可能需要修改一些数据库表或更新搜索索引。简单来说,升级集群需要以下步骤:
-
更新 Seafile 镜像
-
升级数据库
-
更新每个节点的配置文件
-
在后端节点更新搜索索引
要升级一个集群,你需要:
-
下载新镜像,停止旧的 Docker 容器,将 docker-compose.yml 中的 Seafile 镜像版本修改为新版本,使用 docker compose up 启动。
-
在一个前端节点中运行容器中的升级脚本(例如 /opt/seafile/seafile-server-latest/upgrade/upgrade_x_x_x_x.sh )。
-
根据每个版本的文档在每个节点上更新配置文件。
-
如果需要,在后端节点中删除旧的搜索索引。
将集群从seafile12升级到13版本
1.停止所有节点的seafile服务
docker compose down
2.
下载适用于
Seafile 13
的 seafile-server.yml 文件
在下载最新
seafile-server.yml
之前,请先备份您的原文件
mv seafile-server.yml seafile-server.yml.bak
然后按照以下命令下载新
seafile-server.yml
wget https://manual.seafile.com/13.0/repo/docker/cluster/seafile-server.yml
3.
修改
.env
,更新镜像版本和部分配置
3.1
将镜像版本更新为 Seafile 13
SEAFILE_IMAGE=seafileltd/seafile-pro-mc:13.0-latest
3.2
添加缓存配置
从 Seafile 13 中,缓存配置可以在.env中通过环境变量直接设置
。此外,推荐Redis 作为主要缓存服务器,支持部分新功能(
可以参考 Seafile Docker 中关于 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_MYSQL_DB_HOST=db
SEAFILE_MYSQL_DB_USER=seafile
SEAFILE_MYSQL_DB_PASSWORD=PASSWORD
SEAFILE_MYSQL_DB_CCNET_DB_NAME=ccnet_db
SEAFILE_MYSQL_DB_SEAFILE_DB_NAME=seafile_db
SEAFILE_MYSQL_DB_SEAHUB_DB_NAME=seahub_db
3.4
添加存储后端配置
Seafile 13.0 新增环境
SEAF_SERVER_STORAGE_TYPE
确定 seaf-server 组件的存储后端。你可以删除变量或设置为空 (
SEAF_SERVER_STORAGE_TYPE=
)使用旧方法,即从 seafile.conf 确定存储后端。
#Local disk(default)
SEAF_SERVER_STORAGE_TYPE=disk
#S3 backend
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_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=
#Multiple Storage backends
SEAF_SERVER_STORAGE_TYPE=multiple
#Use the configuration in seafile.conf
SEAF_SERVER_STORAGE_TYPE=
4.
移除过时配置
尽管
.env
环境中的配置
优先级更高,我们建议您移除或修改以下文件中的缓存配置,以避免产生歧义:
4.1
备份旧配置文件
cp /opt/seafile/shared/seafile/conf/seafile.conf /opt/seafile/shared/seafile/conf/seafile.conf.bak
cp /opt/seafile/shared/seafile/conf/seahub_settings.py /opt/seafile/shared/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/shared/seafile/conf/seafile.conf,并删除所有 [memcached]、[database]、[[commit_object_backend]、[[fs_object_backend]、[[notification]和 [block_backend],如果上述部分在 .env 中已正确指定。 在大多数情况下, seafile.conf 只包含 Seafile 服务器的监听端口 8082 。
-
/opt/seafile/shared/seafile/conf/seahub_settings.py 中移除 DATABASES = {...} 以及 CAHCES = {...} 相关内容。
-
/opt/seafile/shared/seafile/conf/seafevents.conf中移除DATABASE相关内容。
5. 启动Seafile节点服务
docker compose up -d
根据这份升级文档,前
端
服务将在这里启动。如果你打算用这个节点作为后端节点,你需要修改
.env
中的这个项,并将其设置为
backend
:
CLUSTER_MODE=backend
6. 升级Seafile
docker exec -it seafile bash
# enter the container `seafile`
# stop servers
cd /opt/seafile/seafile-server-latest
./seafile.sh stop
./seahub.sh stop
# upgrade seafile
cd upgrade
./upgrade_12.0_13.0.sh
#升级成功,您会在终端中看到如下信息:
Updating seafile/seahub database ...
[INFO] You are using MySQL
[INFO] updating seafile database...
[INFO] updating seahub database...
[INFO] updating seafevents database...
Done
migrating avatars ...
Done
updating /opt/seafile/seafile-server-latest symbolic link to /opt/seafile/seafile-pro-server-13.0.11 ...
-----------------------------------------------------------------
Upgraded your seafile server successfully.
-----------------------------------------------------------------
7.
重启当前节点
docker compose down
docker compose up -d
你可以用docker logs -f seafile 检查当前节点服务是否正常运行。
8. 操作其他节点
-
下载最新的 seafile-sever.yml 文件并修改 .env 类似于第一个节点(对于后端节点,你应该设置 CLUSTER_MODE=backend )
-
启动Seafile服务
docker compose up -d
将集群从seafile11 升级到 12版本
-
停止所有节点的seafile服务。
docker compose down
2.
下载适用于
Seafile 12
的配置文件。
wget -O .env https://manual.seafile.com/12.0/repo/docker/cluster/env
wget https://manual.seafile.com/12.0/repo/docker/cluster/seafile-server.yml
3. 修改
.env
:
-
生成一个 JWT 密钥。
pwgen -s 40 1
# e.g., EkosWcXonPCrpPE9CFsnyQLLPqoPhSJZaqA3JMFw
-
根据你在 Seafile 11 中的配置填写以下字段:
SEAFILE_SERVER_HOSTNAME=<your loadbalance's host>
SEAFILE_SERVER_PROTOCOL=https # or http
SEAFILE_MYSQL_DB_HOST=<your mysql host>
SEAFILE_MYSQL_DB_USER=seafile # if you don't use `seafile` as your Seafile server's account, please correct it
SEAFILE_MYSQL_DB_PASSWORD=<your mysql password for user `seafile`>
JWT_PRIVATE_KEY=<your JWT key generated in Sec. 3.1>
删除在集群初始化中使用的变量
由于在 Seafile 11 中已经初始化了 Seafile,因此与 Seafile 集群初始化相关的变量可以从
.env
中删除
-
INIT_SEAFILE_MYSQL_ROOT_PASSWORD
-
CLUSTER_INIT_MODE
-
CLUSTER_INIT_MEMCACHED_HOST
-
CLUSTER_INIT_ES_HOST
-
CLUSTER_INIT_ES_PORT
-
INIT_S3_STORAGE_BACKEND_CONFIG
-
INIT_S3_COMMIT_BUCKET
-
INIT_S3_FS_BUCKET
-
INIT_S3_BLOCK_BUCKET
-
INIT_S3_KEY_ID
-
INIT_S3_USE_V4_SIGNATURE
-
INIT_S3_SECRET_KEY
-
INIT_S3_AWS_REGION
-
INIT_S3_HOST
-
INIT_S3_USE_HTTPS
4. 在一个节点启动Seafile:
这里将启动一个
前端
服务,如果你计划将此节点用作后端节点,则需要在
.env
中修改此项并将其设置为
backend
:
CLUSTER_MODE=backend
启动容器:
docker compose up -d
5. 升级 Seafile
# 进入容器
docker exec -it seafile bash
# 停止服务
cd /opt/seafile/seafile-server-latest
./seafile.sh stop
./seahub.sh stop
# 升级 seafile
cd upgrade
./upgrade_11.0_12.0.sh
升级 Seafile 成功后,可以在控制台中看到以下消息:
Updating seafile/seahub database ...
[INFO] You are using MySQL
[INFO] updating seafile database...
[INFO] updating seahub database...
[INFO] updating seafevents database...
Done
migrating avatars ...
Done
updating /opt/seafile/seafile-server-latest symbolic link to /opt/seafile/seafile-pro-server-12.0.6 ...
-----------------------------------------------------------------
Upgraded your seafile server successfully.
-----------------------------------------------------------------
Then you can exit the container by exit
6. 重启这个节点
docker compose down
docker compose up -d
你可以使用docker logs -f seafile来检查当前节点服务是否正常运行。
7. 操作其他节点
-
下载并修改.env,与第一个节点类似(对于后端节点,应设置 CLUSTER_MODE=backend )。
-
启动 Seafile 服务:
docker compose up -d