从社区版 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用户可以通过指定密码远程访问该数据库。例如:
seafile
db_dev
参考以下命令,授权 root 用户可以远程访问 MySQL:
sudo docker exec -it seafile /usr/bin/mysql -e "grant all on *.* to 'root'@'%.%.%.%' identified by 'db_dev';"
同样,也需要授权seafile
用户可以通过指定的密码远程访问该数据库。例如:
seafile
seafile
用户密码需要查看当前容器的ccnet.conf
配置中的PASSWD
值,假设为:467fa02f-bf9a-4afb-9300-c4683073162a
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
数据库授权完成后,您还需要修改配置文件中指定的 MySQL 服务地址、Memcached 服务地址。
seafile
首先需要停止当前正在运行的旧容器。
sudo docker stop seafile
备份原有的seafile配置文件。
cd /opt/seafile-data/seafile
sudo tar -cf conf.bak.tar conf
cd conf
[Database]
配置段中的HOST
值修改为db
;[database]
配置段中的host
值修改为db
;DATABASES
字典中的'HOST'
值修改为'db'
,并且将CACHES
字典中的'LOCATION'
值修改为'memcached:11211'
。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
示例文件,主要有以下几点:
db_dev
;/opt/seafile-mysql/db:/var/lib/mysql
;/opt/seafile-data:/shared
。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