非 Docker 部署 Seafile 迁移到 Docker

Seafile 服务器从 9.0 版本开始推荐以 Docker 方式部署 Seafile。从 9.0 开始,二进制包不能运行在 CentOS 7, CentOS 8 上。如果你需要在 CentOS 或其他一些二进制包不支持的平台上运行 Seafile,那么建议你先迁移到 Docker 方式来运行 Seafile。

建议的步骤为:

  1. 先升级二进制包的版本为 8.0.x,并确保系统正常运行。

  2. 关闭 Seafile 和本机的 Nginx,Memcached

  3. 创建 Seafile Docker image 运行需要的目录,并把本地部署的 Seafile 的一些文件拷贝到该目录下

  4. 根据您需要的版本,下载 Seafile docker-compose.yml 文件,配置 Seafile Docker 使用非 Docker 版本的配置信息,连接旧的 MySQL 数据库和旧的 seafile-data 目录。

  5. 启动 Seafile Docker。

下面的文档,假定你非 Docker 版本 Seafile 部署路径为 /opt/seafile。假如你使用了其他路径,运行命令前,注意要修改命令路径。

注意,你也可以参考 Seafile 备份恢复文档,在另一台机器部署 Seafile Docker,然后把旧版的配置信息、数据库、seafile-data 拷贝到新的机器上来完成迁移。这样的好处是就算迁移过程中出错,也不会破坏已有的系统。

迁移

停止 Seafile, Nginx

停止本地部署的 Seafile,Nginx, Memcache
systemctl stop nginx &&  systemctl disable nginx
systemctl stop memcached &&  systemctl disable memcached
./seafile.sh stop  && ./seahub.sh stop

配置 Seafile Docker 使用原来的 MySQL 服务器

给本地 MySQL 的 Seafile 用户添加权限

非 Docker 版本使用的是本地的 MySQL,现在要让 Docker 版本的 Seafile 连接这个 MySQL,需要增加相应的访问权限。

下列命令是以 mysql 的 seafile 用户为例说明:

GRANT ALL PRIVILEGES ON *.* TO 'seafile'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;  ## password是您本地 mysql 的 seafile 用户密码
## 给数据库授权
GRANT ALL PRIVILEGES ON `ccnet_db`.* to 'seafile'@'%';
GRANT ALL PRIVILEGES ON `seafile_db`.* to 'seafile'@'%';
GRANT ALL PRIVILEGES ON `seahub_db`.* to 'seafile'@'%';
##重启 mysql 使修改生效
systemctl restart mariadb
创建 Seafile Docker image 需要的目录
mkdir -p /opt/seafile-data/seafile
把原来的 conf 配置及其它文件拷贝到 docker 版本的 seafile 要映射的目录下
cp -r /opt/seafile/conf  /opt/seafile-data/seafile
cp -r /opt/seafile/seahub-data  /opt/seafile-data/seafile
cp -r /opt/seafile/ccnet  /opt/seafile-data/seafile

修改 /opt/seafile-data/seafile/conf 里的 mysql 配置 host 字段配置,把 HOST=127.0.0.1 改成 HOST = 本机ip,要修改的文件有 ccnet.conf、seafile.conf、seahub_settings.py。

注意:seahub_settings.py 配置文件中的 memcached 的 IP 字段需要指向 docker 中的 memcached,修改后字段如:'LOCATION': 'memcached:11211'​

修改 docker-compose.yml

因为 mysql 要用本地部署的,所以要注释掉 mysql 容器相关的选项

services:
#  db:
#    image: mariadb:10.5
#    container_name: seafile-mysql
#    environment:
#      - MYSQL_ROOT_PASSWORD=db_dev  # Requested, set the root's password of MySQL service.
#      - MYSQL_LOG_CONSOLE=true
#    volumes:
#      - /opt/seafile-mysql/db:/var/lib/mysql  # Requested, specifies the path to MySQL data persistent store.
#    networks:
#      - seafile-net
.........
   depends_on:
#     - db             
      - memcached
......

配置 Seafile Docker 使用旧的 seafile-data

添加本地存储映射路径,在 docker-compose.yml 中 seafile 的 volumes 字段下添加

 - /xxxx/seafile-data:/shared/seafile/seafile-data

只需要修改冒号前的路径,修改成原来的 seafile-data 的绝对路径 (冒号后的路径是 seafile 容器内的路径,不能修改)。

.........
    seafile:
    image: seafileltd/seafile-mc:8.0.7-1
    container_name: seafile
    ports:
      - "80:80"
#      - "443:443"  # If https is enabled, cancel the comment.
    volumes:
      - /opt/seafile-data:/shared
      - /xxxx/seafile-data:/shared/seafile/seafile-data
  .......

注意:​

验证

然后启动容器

docker compose  up -d

在浏览器上登录,看下是否能正常使用

Last modified by 马宇航, 2024-04-01

迁移
停止 Seafile, Nginx
配置 Seafile Docker 使用原来的 MySQL 服务器
配置 Seafile Docker 使用旧的 seafile-data
验证