如何迁移 Redmine 到 Docker ?
2019-05-21 by dongnan
目标
- 迁移
redmine
服务。服务器部署方式,由 VM虚拟机 调整为 Docker容器。 - 为了增加迁移成功概率,选择使用与当前
redmine
差异较小的版本。
环境
当前运行环境
软件 | 版本 |
---|---|
CentOS | 6.6 amd64 |
MySql | 5.6 |
Redmine | 2.6.5.stable |
Ruby | 2.1.5-p273 (2014-11-13) |
Rails | 3.2.21 |
待迁移的数据
包括两方面 一是上传文件(附件数据保存在files
目录),二是 MySql数据库中的数据(主要的配置信息)。
目录结构
tree -d -L 1 /opt/redmine/
/opt/redmine/
├── app
├── config
├── db
├── doc
├── extra
├── files
├── lib
├── log
├── plugins
├── public
├── script
├── test
├── tmp
└── vendor
14 directories
附件数据
其中 files 目录为上传的附件数据,需要迁移,注意文件权限为 redmine。
操作步骤
介绍完成运行环境,接下来就可以开始迁移相关操作了。
新的运行环境
使用 docker 最神奇的地方就是,只需要一条命令就能够完成部署工作。
docker-compose up -d
docker-compose 配置文档
这么神奇是因为在 docker-compose.yml
配置文件中预先定义好了相应的参数。
cat redmine/docker-compose.yml
version: '3.1'
services:
redmine:
image: redmine:2
ports:
- 3000:3000
volumes:
- /etc/localtime:/etc/localtime
- web-data:/usr/src/redmine/files
environment:
REDMINE_DB_MYSQL: db
REDMINE_DB_PORT: 3306
REDMINE_DB_USERNAME: redmine
REDMINE_DB_PASSWORD: example
REDMINE_NO_DB_MIGRATE: 1
db:
image: mysql:5.7
volumes:
- /etc/localtime:/etc/localtime
- db-data:/var/lib/mysql
environment:
- TZ: Asia/Chongqing
- MYSQL_DATABASE: redmine
- MYSQL_USER: redmine
- MYSQL_PASSWORD=example
- MYSQL_ROOT_PASSWORD=example
command:
--character-set-server=utf8
--collation-server=utf8_general_ci
--sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
volumes:
web-data:
driver: local
db-data:
driver: local
简单来说,配置文件定义了两个服务(容器),一个是 redmine服务用于运行 Redmine 程序,另一个是 db服务也就是MySQL数据库。
最后的 volumes 部分则是为了数据持久化而创建的数据卷,用于防止容器生命周期结束数据一起消失,通过 docker-compose up -d
命令创建了这两个容器。
这里重点说下 redmine 的 environment 部分 REDMINE_NO_DB_MIGRATE: 1
选项,因为我的目标是迁移 redmine,我已经有 数据库结构(MySQL表),
所以显示设置 REDMINE_NO_DB_MIGRATE
参数,如果你是新部署 redmine 无需显示设置这个参数。
其它的参数基本就是字面含义,可以参考官方网站 。
数据导入
- 数据库
gzip -dc 2019-05-07-redmine.sql.gz | mysql --defaults-file=/root/shell/.ops.conf redmine
- 附件数据 查找 redmine 卷目录位置
docker volume ls | grep redmine
local redmine_web-data
- 根据 volume 名称查找实际目录
docker volume inspect redmine_web-data | grep "Mountpoint"
"Mountpoint": "/data/docker/volumes/redmine_web-data/_data",
- 迁移数据
mv migrate/files/* /data/docker/volumes/redmine_web-data/_data/
- 修改文件权限为 redmine 用户
docker exec -ti redmine_redmine_1 chown -R redmine.redmine files
验证
下图是迁移后的 redmine 版本信息,可以正常运行在。