跳转至

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

参考

回到页面顶部