使用 Docker 来安装 Redmine 并结合 gitolite 使用
上一篇介绍了 Docker 之后,仅仅过了3个月时间,Docker又增加了很多变化:
比如 Docker Machine, Docker Compose。
最近项目里要把 Redmine 从盛大云到阿里云,正好可以发挥 Docker 的强项。这里分析一下需要实现的功能:
- Redmine 服务
- Postgres 数据库服务
- gitolite Git repo 服务
- 迁移老数据到新的服务里
- Redmine 服务自启动
Install gitolite
虽然 gitolite 也有docker 提供,但是 redmine 需要访问 git 下面的 repo 文件,所以会有权限问题。
Docker 现在对 权限映射 这方面的支持还不是很好。所以我决定把 gitolite 安装在宿主机器内部。
所以 gitolite 按照官网的安装步骤安装。旧的 repo 数据只要复制覆盖 /home/git/repositories 就可以了。
Docker for Redmine
在 Docker hub 里搜了一下可用的 Redmine 之后,
发现 sameersbn/redmine 版本 比官方版本 多了很多星,
连下载量也比官方多了一倍不止。比较了下内容之后发现官方版无法支持外发邮件,所以只有选择 sameersbn
版了。
如果是完全新安装不需要迁移数据的话,可以直接使用提供的样例 docker-compose.yml 文件了。
所以 Redmine 这部分还是比较简单,使用了
1 | redmine: |
- 其中老服务器中用户上传的文件需要迁移到 /data/redmine/files 文件夹中就可以了。
USERMAP_UID=1001 USERMAP_GID=1001
1001 是 git 用户的 uid, gid。
这样 docker 内的 redmine 的 uid,gid 就与git的一致,解决了权限问题。restart: always
让这个 container 自启动
Docker for Postgres
上面的样例中数据库使用的是被定制化过的 Postgres ,但是我觉得官方的版本完全够用了。
迁移的策略是这样的,
先用 docker 启动一个最基本的 postgres image:
docker-compose up -f /data/pg.yml
postgresql: image: postgres environment: - POSTGRES_USER=redmine - POSTGRES_PASSWORD=secret - PGDATA=/data volumes: - /data/pg:/data
开启一个 postgres client 导入数据库旧数据,默认数据库名字是redmine
$ docker run --link data_postgresql_1:db -v /data:/data -it postgres bash $ psql -h $DB_PORT_5432_TCP_ADDR -U redmine redmine < /data/pg_old_data.sql
链接 Redmine docker 到 postgresql docker 就可以完工了。
完整的 docker-compose.yml 文件
1 | {"postgresql":{"image":"postgres","environment":["POSTGRES_USER=redmine","POSTGRES_PASSWORD=redmine","PGDATA=/data"],"volumes":["/data/pg:/data"],"restart":"always"},"redmine":{"image":"quay.io/sameersbn/redmine:latest","links":["postgresql:postgresql"],"environment":["USERMAP_UID=1001","USERMAP_GID=1001","TZ=Asia/Beijing","REDMINE_PORT=3000","SMTP_ENABLED=true","SMTP_DOMAIN=example.com","SMTP_HOST=smtp.exmail.qq.com","SMTP_PORT=25","SMTP_USER=redmine@example.com","SMTP_PASS=redminepass","SMTP_AUTHENTICATION=:login","IMAP_ENABLED=false","IMAP_USER=mailer@example.com","IMAP_PASS=password","IMAP_HOST=imap.gmail.com","IMAP_PORT=993","IMAP_SSL=true","IMAP_INTERVAL=30","UNICORN_TIMEOUT=300","NGINX_MAX_UPLOAD_SIZE=100m"],"ports":["80:80"],"volumes":["/data/redmine:/home/redmine/data","/home/git/repositories:/home/redmine/repositories"],"restart":"always"}} |