Redmine 是一款非常流行的项目管理工具,使用 Ruby on Rails 编写,采用 GPL 许可协议(GNU General Public License v2)发布,支持多种操作系统。
部署和使用 Redmine 可以选择第三方提供的云服务,或者下载安装第三方 (如 Bitnami) 提供的安装包或容器。
相对于使用第三方提供的安装包,依据官方的安装部署文档,或者一些经过验证的安装辅助工具 (如 Redmine installer) 有以下优点:
- 在选择数据库、应用服务器和 Web 服务器时有更大的自由度
- 能与其它系统共用数据库 和 Web 服务器
- 在进行插件安装、迁移数据或版本更新时,会有更好的文档支持,也能少遇到一些不必要的麻烦
而且如同多数 Ruby on Rails 应用一样,Redmine 的安装部署过程非常简单,因此不用担心官方文档的安装步骤相对复杂,多数情况下这种安装方式更值得推荐。
本文记录基于官方的安装部署文档在 Ubuntu 16.04 下安装部署 Redmine 3.4.6 的过程。
硬件环境和操作系统
本次安装使用的硬件环境和操作系统如下:
- 阿里云 1 核 2G 云服务器
- Ubuntu 16.04 LTS
更新操作系统并添加需要的软件包
执行以下指令可更新系统并安装需要的软件包,以及以后安装插件可能需要的软件包。在本文中,使用 MySQL, 如果选择其他数据库,需要替换相应的软件包:
apt-get update && apt-get -y upgrade
apt-get install -y build-essential git imagemagick libmagickwand-dev mysql-server libmysqlclient-dev
安装过程中,会提示设置 MySQL 的 root 密码。使用 ssh 远程登录云主机安装时,最好不要需要等待时间过长忽略安装过程。如果安装过程中因连接中断没有得到提示,MySQL 的 root 密码可能未设置密码,也可能需要从配置文件中查找。如果密码找不到,最简单的处理方法就是重新安装 MySQL。
创建 redmine 用户
创建专门的 redmine 用户不是必须的,但在正式环境中有助于维持系统的安全。
adduser --system --shell /bin/bash --gecos 'Redmine Administrator' --group --disabled-password --home /data/redmine redmine
这里把 /data/redmine/ 作为 redmine 用户的工作目录。
安装 rvm 和 ruby
apt-get 安装的 ruby 和 ruby-dev 多数情况下也能使用,但因为文件权限和 ruby 版本选择的原因,推荐使用 rvm 安装 ruby。
不同的 Linux 分发版本下安装 rvm 的命令略有不同,可以详见 rvm 官网中的安装文档。
此处简要列出 Ubuntu 下的安装命令。
apt-get -y install software-properties-common
apt-add-repository -y ppa:rael-gc/rvm
apt-get update
apt-get install rvm
rvm 安装完成后安装可用版本的 ruby, 然后把 redmine 用户加入 rvm 组中,给 redmine 用户安装 gem 的权限。
rvm install 2.4
usermod -a -G rvm redmine
首次安装 rvm 后,如果找不到 rvm 命令,可按照安装 rvm 过程中的提示解决,一般退出当前的命令行再次登录就行。
首次安装 ruby 的过程中可能需要安装 libssl-dev 等软件包,需要 root 或 sudo 权限。后续安装过程不需要 root 或 sudo 权限,假定以 redmine 用户运行。
运行以下命令安装 Bundler:
su - redmine
gem install bundle
创建 redmine 数据库
创建一个空的数据库供 Redmine 使用,并创建一个数据库用户,授予该用户相应的数据库访问权限。
执行以下命令进入 MySQL 命令行环境,中间按照提示输入 MySQL 的 root 密码:
mysql -p -u root
在 MySQL 命令行环境下,执行以下命令创建 Redmine 使用的数据库和访问该数据库的用户并分配数据库权限:
CREATE DATABASE redmine CHARACTER SET utf8;
CREATE USER 'redmine'@'localhost' IDENTIFIED BY 'p@ssw0rd';
GRANT ALL PRIVILEGES ON redmine.* TO 'redmine'@'localhost';
安装 Redmine
下载并解压 Redmine 源码
通过克隆 Redmine 源码库或下载打包好的压缩文件,可获取 Redmine 源码:
wget http://www.redmine.org/releases/redmine-3.4.6.tar.gz
tar xvfz redmine-3.4.6.tar.gz
ln -s redmine-3.4.6 redmine
rm redmine-3.4.6.tar.gz
在以上的命令中,建立了一个软连接 ~/redmine
指向解压后的源码目录,以便于使用。
修改数据库连接配置
进入解压好的源码目录,复制数据库配置模版,并根据实际的数据配置修改生产环境下的数据库配置:
cd ~/redmine
cp -pR config/database.yml.example config/database.yml
vim config/database.yml
如果采用上文中的参数建立数据库,修改后的 config/database.yml
文件中,生产环境下的数据库配置为:
production:
adapter: mysql2
database: redmine
host: localhost
username: redmine
password: "p@ssw0rd"
encoding: utf8
安装依赖的 gems
Redmine 使用 Bundler 管理 gems 依赖关系,Redmine 需要的 Gem 和依赖关系在 Gemfile
中。
如果需要加载额外的 gems, 比如在运行时使用 puma 代替默认的 webrick, 可在 Redmine 安装目录下建立一个名为 Gemfile.local
的文件,指定需额外加载的 gems, 再次运行 bundle install。
以下为 Gemfile.local
文件的示例:
# Gemfile.local
gem 'puma'
进入 Redmine 安装目录,运行以下命令安装之前已经安装过 Redmine 需要的 Gem:
cd ~/redmine
bundle install --without development test
生成 session 密钥
使用以下命令可生成新的 session 密钥:
bundle exec rake generate_secret_token
创建数据库结构
Ruby on Rails 应用,在新安装、软件升级等过程中可以很容易创建或更新数据库结构:
RAILS_ENV=production bundle exec rake db:migrate
导入初始数据
使用以下命令导入初始数据,包括默认的问题类型、工作流程等:
RAILS_ENV=production REDMINE_LANG=zh bundle exec rake redmine:load_default_data
上面的 REDMINE_LANG=zh 选项指定了使用中文,如果不加这个选项,该命令会提示输入语言代码。
设置文件系统权限
如果安装过程中的用户与运行时的用户不一致,则需要设置文件系统权限:
mkdir -p tmp tmp/pdf public/plugin_assets
chown -R redmine:redmine files log tmp public/plugin_assets
chmod -R 755 files log tmp public/plugin_assets
启动服务
执行以下命令可启动自带的应用服务,进行系统测试:
bundle exec rails server webrick -e production -b 0.0.0.0
如果在 Gemfile.local 文件中增加了 puma,还可选择启动 puma 代替 webrick:
bundle exec rails server puma -e production -b 0.0.0.0
当然在正式的生产环境中,应配置 nginx 或 apache2 服务,而不是通过命令行的方式启动服务。
登录 Redmine
在命令行中启动服务时,如果没有问题,会提示了访问地址和访问端口:
=> Booting Puma
=> Rails 4.2.8 application starting in production on http://0.0.0.0:3000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
Puma starting in single mode...
* Version 3.12.0 (ruby 2.3.1-p112), codename: Llamas in Pajamas
* Min threads: 0, max threads: 16
* Environment: production
* Listening on tcp://0.0.0.0:3000
Use Ctrl-C to stop
在使用 ECS 时,需要注意默认的 3000 端口是不开放的,此时需要通过 ECS 控制台添加安全组规则,接受来自客户端 IP 地址段的 TCP 3000 端口访问请求。当然在命令行中也可以指定端口号,只需要保证用户有权限打开该端口号、该端口号未被其他服务占用,且能被云服务和 ECS 的操作系统接受即可。
使用 ECS 的公网 IP 地址在浏览器中输入正确的 URL, 即可登录新安装的 Redmine。假设公网 IP 地址为 39.105.106.107, 端口为 3000, 则 URL 应为 http://39.105.106.107:3000。
默认的登录名和密码都是 admin,首次登录时会提示更改密码。
如果一切正常,Redmine 就算安装完成了,可以用于开发或测试。
在正式生产环境中,还应配置应用服务器、Web 服务器和安全证书,进行数据库调优,以适合大量用户同时访问,具体内容可参见 Easy Redmine 的官方安装文档。