Redmine 是一个网页界面的项目管理与缺陷跟踪管理系统的自由及开放源代码软件工具,可以同时处理多个项目。它集成了项目管理所需的各项功能,包括日历、燃尽图和甘特图以协助可视化表现项目与时间限制,问题跟踪和版本控制。本篇介绍如何使用 Docker 安装 Redmine,以 Bitnami Redmine + Ubuntu18.04 为例,所有命令以普通用户运行,但需要 sudo 权限。

安装 docker

docker 和 docker-compose 的安装请参考我的另一篇博文:docker 简单介绍

安装 redmine

我们这里使用 bitnami/redmine 来安装 redmine。

下载 docker-compose.yml

1
2
3
4
sudo mkdir /usr/local/redmine
sudo chown -R jinzhongxu /usr/local/redmine
cd /usr/local/redmine
wget https://raw.githubusercontent.com/bitnami/containers/main/bitnami/redmine/docker-compose.yml

配置 docker-compose.yml

编辑配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
version: '2'
services:
mariadb:
image: docker.io/bitnami/mariadb:10.6 # 这里使用 mariadb 数据库
volumes:
- '/disk0/redmine/mariadb_data:/bitnami/mariadb' # 把数据保存到宿主机
environment:
# ALLOW_EMPTY_PASSWORD is recommended only for development.
- ALLOW_EMPTY_PASSWORD=yes
- MARIADB_PASSWORD=123456 # 增加密码
- MARIADB_USER=bn_redmine
- MARIADB_DATABASE=bitnami_redmine
redmine:
image: docker.io/bitnami/redmine:5 # 这里使用的 bitnami redmine
ports:
- '8300:3000' # 这里把容器里的3000端口映射到宿主机的 8300 端口
volumes:
- '/disk0/redmine/redmine_data:/bitnami/redmine' # 把数据保持到宿主机
depends_on:
- mariadb
environment:
# ALLOW_EMPTY_PASSWORD is recommended only for development.
#- ALLOW_EMPTY_PASSWORD=yes # 关闭
- REDMINE_DATABASE_PASSWORD=123456 # 增加密码
- REDMINE_DATABASE_HOST=mariadb
- REDMINE_DATABASE_PORT_NUMBER=3306
- REDMINE_DATABASE_USER=bn_redmine
- REDMINE_DATABASE_NAME=bitnami_redmine
volumes:
mariadb_data:
driver: local
redmine_data:
driver: local

启动容器

配置完成后,运行服务

1
2
3
4
5
6
7
# 创建数据保存路径
mkdir -p /disk0/redmine
# 注意访问权限,权限不够会影响数据库运行
sudo chmod 777 /disk0/redmine

cd /usr/local/redmine
docker-compose up -d

此时,访问链接:http://宿主机IP:8300 即可访问 redmine,默认管理员:user,密码:bitnami1,登录进去后可更改。

更新 baseurl

默认的登录连接路由指向 /,但有时我们希望它指向二级目录,如 /redmine,此时,访问链接: http://宿主机IP:8300/redmine 可以访问 redmine. 方法如下:

  1. 修改 config/environment.rb。进入 redmine 容器,然后在 /opt/bitnami/redmine/config/environment.rb 最底部增加如下内容:

    1
    2
    3
    4
    5
    ActionController::Base.relative_url_root = RedmineApp::Application.routes.default_scope
    Redmine::Utils::relative_url_root = RedmineApp::Application.routes.default_scope

    ENV['RAILS_RELATIVE_URL_ROOT'] = "/redmine"
    Redmine::Utils::relative_url_root = ENV['RAILS_RELATIVE_URL_ROOT']
  2. 修改 config.ru。进入 redmine 容器,然后在 /opt/bitnami/redmine/config.ru 里面的内容进行修改。把

    1
    2
    3
    4
    # This file is used by Rack-based servers to start the application.

    require ::File.expand_path('../config/environment', __FILE__)
    run Rails.application

    改为

    1
    2
    3
    4
    5
    6
    # This file is used by Rack-based servers to start the application.

    require ::File.expand_path('../config/environment', __FILE__)
    map ENV['RAILS_RELATIVE_URL_ROOT'] || '/' do
    run Rails.application
    end
  3. 修改 config/additional_environment.rb。进入 redmine 容器,然后创建新文件 /opt/bitnami/redmine/config/additional_environment.rb,增加如下内容:

    1
    config.relative_url_root = '/redmine'
  4. 重启容器:

    1
    2
    # 注意不要使用 docker-compose down,然后再 docker-compose up -d,这会清空现有容器,重新创建新容器
    docker-compose restart

此时,即可使用链接: http://宿主机IP:8300/redmine 可以访问 redmine.

但是,不小心使用 docker-compose down 命令就又会清空容器中修改的内容。可以如下解决:

1
2
3
4
# 把修改过的容器 commit 成镜像
docker commit -a "jinzhongxu" -m "change base url to /redmine" redmine-redmine-1 bitnami/redmine:5_url_redmine
# 修改 docker-compose.yml,使用 commit 后的镜像
vim /usr/local/redmine/docker-compose.yml

改为

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
version: '2'
services:
mariadb:
image: bitnami/mariadb:10.6
volumes:
- '/disk0/redmine/mariadb_data:/bitnami/mariadb'
environment:
# ALLOW_EMPTY_PASSWORD is recommended only for development.
- ALLOW_EMPTY_PASSWORD=yes
- MARIADB_PASSWORD=123456
- MARIADB_USER=bn_redmine
- MARIADB_DATABASE=bitnami_redmine
redmine:
image: bitnami/redmine:5_url_redmine # 指定使用本地 commit 后的镜像
ports:
- '8300:3000'
volumes:
- '/disk0/redmine/redmine_data:/bitnami/redmine'
depends_on:
- mariadb
environment:
# ALLOW_EMPTY_PASSWORD is recommended only for development.
#- ALLOW_EMPTY_PASSWORD=yes
- REDMINE_DATABASE_PASSWORD=123456
- REDMINE_DATABASE_HOST=mariadb
- REDMINE_DATABASE_PORT_NUMBER=3306
- REDMINE_DATABASE_USER=bn_redmine
- REDMINE_DATABASE_NAME=bitnami_redmine
volumes:
mariadb_data:
driver: local
redmine_data:
driver: local

此时,就可以放心的使用

1
2
3
cd /usr/local/redmine
docker-compose down
docker-compose up -d

配置邮箱

因为数据我们保存到宿主机上,运行时挂载到容器上。因此,我们可以直接修改本地宿主机上的配置文件。

1
vim /disk0/redmine/redmine_data/config/configuration.yml

改为

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
default:
# Outgoing emails configuration
# See the examples below and the Rails guide for more configuration options:
# http://guides.rubyonrails.org/action_mailer_basics.html#action-mailer-configuration
email_delivery:

# ==== Simple SMTP server at localhost
#
# email_delivery:
# delivery_method: :smtp
# smtp_settings:
# address: "localhost"
# port: 25
#
# ==== SMTP server at example.com using LOGIN authentication and checking HELO for foo.com
#
# email_delivery:
delivery_method: :smtp
smtp_settings:
address: "smtp.163.com"
port: 25
authentication: :login
domain: '163.com'
user_name: 'xujinzhong@163.com'
password: 'ABCDIWJSLSIEJSLS' # 注意这里的密码是通过 163邮箱设置 pop3 获得的 16 位密钥

注意,使用 QQ 邮箱可能导致邮箱无法使用,需要开启SSL,163邮箱默认都开放SSL。

重启:

1
2
3
cd /usr/local/redmine
docker-compose down
docker-compose up -d

登录到 redmine 网站,打开:管理 —> 配置 —> 邮件通知 —> 邮件发件人地址,填写上面配置的邮箱:xujinzhong@163.com —> 保存 —> 右下角: 发送测试邮件.

配置上传文件的大小

在 管理 —> 配置 —> 文件 —> 附件大小限制和批量下载附近大小总计大小限制 —> 保存。

插件安装

redmine 插件严重依赖版本,不同版本的 redmine 适用的插件不同。安装前请先检查 redmine 版本信息。本篇以 redmine 5 为例。

访问:https://www.redmine.org/projects/redmine/wiki/Plugins 获取插件安装方法。
访问:https://www.redmine.org/plugins?utf8=%E2%9C%93&page=1&sort=&v=5.0 获取适合版本 5 的所有插件。

假设要安装的插件是:Lightbox2 Plugin by RedmineX ,进入官网 https://www.redmine-x.com/redmine-lightbox2 ,注册下载压缩包,安装方法如下:

1
2
3
4
5
6
7
8
# 1. 把压缩包拷贝到插件目录
7z x redminex-lightbox2-1-0-0_UNZIP_ME_FIRST.zip
cp -r redmine_x_lightbox2 /disk0/redmine/redmine_data/plugins
# 2. 进入容器,安装
docker exec -it redmine-redmine-1 bash
cd /opt/bitnami/redmine/
bundle install
bundle exec rake redmine:plugins:migrate RAILS_ENV=production

重启 redmine。为了方便,可以像上面一样 commit 镜像。

解决 PDF 预览问题:

1
2
3
4
docker exec -it redmine-redmine-1 bash

cp /etc/ImageMagick-6/policy.xml /etc/ImageMagick-6/policy.xml.origin
sed -i 's/^.*policy.*coder.*none.*PDF.*//' /etc/ImageMagick-6/policy.xml

重启 redmine。为了方便,可以像上面一样 commit 镜像。

解决 favicon 图标显示问题:

1
2
3
4
docker exec -it redmine-redmine-1 bash

apt update
apt install wget curl -y

重启 redmine。为了方便,可以像上面一样 commit 镜像。

菜单字体大小

redmine 的菜单栏字体比较小,网页端没有提供修改字体的入口,需要手动修改网页 CSS,方法如下:

1
2
3
4
5
6
7
8
docker exec -it redmine-redmine-1 bash
vim /opt/bitnami/redmine/public/stylesheets/application.css

# 找到 body 的 font-size 修改为合适的大小
# 然后保存

# 必要时,可以把该容器 commit 成一个镜像,然后从新进行启动
docker commit -a "jinzhongxu" -m "font size 16" redmine-redmine-1 bitnami/redmine:v5_font_size_16

参考文献

  1. bitnami/redmine
  2. 將Redmine架在sub-URI