Linux 下安装 Redmine

简介: Redmine 是一款非常流行的项目管理工具,使用 Ruby on Rails 编写,采用 GPL 许可协议(GNU General Public License v2)发布,支持多种操作系统。本文记录在 Ubuntu 16.04 下安装部署 Redmine 3.4.6 的过程,以及在 ECS 环境下的测试验证步骤。

Redmine 是一款非常流行的项目管理工具,使用 Ruby on Rails 编写,采用 GPL 许可协议(GNU General Public License v2)发布,支持多种操作系统。

部署和使用 Redmine 可以选择第三方提供的云服务,或者下载安装第三方 (如 Bitnami) 提供的安装包或容器。

相对于使用第三方提供的安装包,依据官方的安装部署文档,或者一些经过验证的安装辅助工具 (如 Redmine installer) 有以下优点:

  1. 在选择数据库、应用服务器和 Web 服务器时有更大的自由度
  2. 能与其它系统共用数据库 和 Web 服务器
  3. 在进行插件安装、迁移数据或版本更新时,会有更好的文档支持,也能少遇到一些不必要的麻烦

而且如同多数 Ruby on Rails 应用一样,Redmine 的安装部署过程非常简单,因此不用担心官方文档的安装步骤相对复杂,多数情况下这种安装方式更值得推荐。

本文记录基于官方的安装部署文档在 Ubuntu 16.04 下安装部署 Redmine 3.4.6 的过程。

硬件环境和操作系统

本次安装使用的硬件环境和操作系统如下:

更新操作系统并添加需要的软件包

执行以下指令可更新系统并安装需要的软件包,以及以后安装插件可能需要的软件包。在本文中,使用 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 的官方安装文档。

相关实践学习
通义万相文本绘图与人像美化
本解决方案展示了如何利用自研的通义万相AIGC技术在Web服务中实现先进的图像生成。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
相关文章
|
关系型数据库 MySQL Linux
|
前端开发 容器
css点滴2—六种方式实现元素水平居中
本文参考文章《六种方式实现元素水平居中》 元素水平居中的方法,最常见的莫过于给元素一个显式的宽度,然后加上margin的左右值为auto。这种方式给固定宽度的元素设置居中是最方便不过的。但是很多情况下,无法确定容器宽度,这里我们讨论一下这些问题。
1616 0
|
存储 网络协议 API
Cpp网络编程Winsock API
本文详细介绍了使用Winsock API进行C++网络编程的过程,通过具体实例实现了一个基于TCP协议的C/S架构通信demo。文章从服务端与客户端两方面展开,涵盖网络库初始化、套接字创建、绑定IP与端口、监听与连接、数据收发到关闭连接等关键步骤。重点解析了`WSAStartup`、`socket`、`bind`、`listen`、`accept`、`connect`、`send`和`recv`等函数的使用方法及注意事项,并对比了标准库与Winsock库在链接时的区别。适合初学者了解Winsock网络编程基础。
883 35
|
新零售 分布式计算 安全
御膳房:构建大数据的美食厨房
御膳房:构建大数据的美食厨房 早在2008年,阿里巴巴即确定了云计算、大数据为中心的DT战略,并在云计算底层平台的搭建上取得了令业界瞩目的成就。同时,金币的另一面,大数据的业务尤其是基于淘宝、天猫等电子商务平台的数据业务也是风生水起,领行业之先。早期“淘宝指数”、“数据魔方”不但让用户有了耳目一新
5239 0
|
运维 监控 Linux
如何在Linux上部署1Panel运维管理面板并远程访问内网进行操作
如何在Linux上部署1Panel运维管理面板并远程访问内网进行操作
970 0
如何在Linux上部署1Panel运维管理面板并远程访问内网进行操作
|
机器学习/深度学习 人工智能 BI
解析Python解释器:从基础到应用的完整指南
解析Python解释器:从基础到应用的完整指南
615 2
|
存储 关系型数据库 数据库
初探PostgreSQL体系结构
初探PostgreSQL体系结构
745 0
|
SQL C# 数据库
SQL点滴文章总结
  去年写了很多关于SQL语句的文章,有一些收获,很多博友也参与到讨论中来。SQL如果复杂起来会很头疼的,特别是性能优化,涉及到很多cpu,内存知识,我写的这些只是点点滴滴,表面上的,没有理论支撑,没有深入,其实一直想找一本大部头读一读,就是没有时间和精力,只能遇到问题了总结一下,又遇到了就再总结一下。
1050 0

热门文章

最新文章