如何迁移 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 版本信息,可以正常运行在。
