Seafile Docker 社区版从 6.3 升级 7.0

从社区版 7.0.0 开始,我们调整了 seafile-docker 镜像的运行架构。旧的镜像中除了 Seafile 服务外,还运行了 Nginx、MariaDB-Server、Memcached 等必需服务。现在开始,我们将 MariaDB-Server、Memcached 服务从seafile镜像中剥离出来,独立运行在各自容器中。为了兼容之前旧容器的数据,您需要按照以下流程来升级到新的版本。

为了防止意外的用旧的方法来升级,新的 docker 换了一个镜像名,叫做 seafile-mc (Seafile Multiple Container)。新的镜像使用 docker-compose 来配置和安装。

确定当前容器数据

假设当前 Seafile 容器的 volumes 目录为:/opt/seafile-data

那么 Seafile 容器的数据结构应该是这样的:

/opt/seafile-data
├── db                <----------->     MySQL 数据文件目录
├── logs
│   ├── seafile       <----------->     Seafile 日志文件目录
│   └── var-log
└── seafile
    ├── ccnet
    ├── conf          <----------->     Seafile 配置文件目录
    ├── pro-data
    ├── seafile-data
    └── seahub-data

修改数据库授权

旧容器中,数据库用户只被允许通过'127.0.0.1'地址访问,此权限在新容器中是不够的,所以您首先要解决数据库访问的权限问题。

授权root远程访问

需要授权root用户可以通过指定密码远程访问该数据库。例如:

参考以下命令,授权 root 用户可以远程访问 MySQL:

sudo docker exec -it seafile /usr/bin/mysql -e "grant all on *.* to 'root'@'%.%.%.%' identified by 'db_dev';"

授权seafile远程访问

同样,也需要授权seafile用户可以通过指定的密码远程访问该数据库。例如:

for database in {ccnet_db,seafile_db,seahub_db}; do sudo docker exec -it seafile /usr/bin/mysql -e "grant all on ${database}.* to 'seafile'@'%.%.%.%' identified by '467fa02f-bf9a-4afb-9300-c4683073162a';"; done

修改seafile配置文件

数据库授权完成后,您还需要修改配置文件中指定的 MySQL 服务地址、Memcached 服务地址。

停止当前Seafile容器

首先需要停止当前正在运行的旧容器。

sudo docker stop seafile

备份配置文件

备份原有的seafile配置文件。

cd /opt/seafile-data/seafile
sudo tar -cf conf.bak.tar conf
cd conf

修改Seafile配置文件

迁移MySQL数据目录

备份数据

cd /opt/seafile-data
sudo tar -cf db.bak.tar db

迁移数据目录

将db目录迁移出旧容器的volume目录,便于新的 MySQL 容器挂载原有的db数据。假如将该目录迁移到/opt/seafile-mysql目录下:

sudo mkdir -p /opt/seafile-mysql
sudo mv db /opt/seafile-mysql/

修改docker-compose.yml文件

开源版:下载 docker-compose.yml 示例文件到宿主机上。

根据实际情况,修改 docker-compose.yml 示例文件,主要有以下几点:

启动新容器

删除旧容器

sudo docker rm seafile

启动新容器

进入docker-compost.yml文件所在的目录,运行如下命令,即可启动新的容器:

sudo docker-compose up
# 您可能需要事先安装 docker-compose 命令,加上 -d 选项可以将命令运行在后台

提示:除了在 docker-compose.yml 文件中设置正确的 TIME_ZONE 之外,还需要在seahub_settings.py 中设置 TIME_ZONE = 'your-timezone'

Last modified by Daniel Pan, 2019-06-05

确定当前容器数据
修改数据库授权
授权root远程访问
授权seafile远程访问
修改seafile配置文件
停止当前Seafile容器
备份配置文件
修改Seafile配置文件
迁移MySQL数据目录
备份数据
迁移数据目录
修改docker-compose.yml文件
启动新容器
删除旧容器
启动新容器