本页内容

  • 先决条件
  • 安装所需依赖
  • 安装并配置 MariaDB 数据库
  • 安装 Ruby 和 Passenger
  • 安装 Redmine
  • 为 Redmine 创建 Systemd 服务文件
  • 配置 Nginx 作为 Redmine 的反向代理
  • 访问 Redmine
  • 总结

Redmine 是一款免费、开源且广受欢迎的项目管理与问题跟踪系统。它支持 PostgreSQL 和 MariaDB 数据库,并基于 Ruby on Rails 框架构建。它内置第三方插件支持,允许你创建多个项目、维基和论坛。它提供丰富的功能,包括电子邮件与订阅通知、多语言支持、基于角色的访问控制、文件管理等。

本教程将介绍如何在 CentOS 上安装 Redmine 项目管理系统。

先决条件

  • 一台运行 CentOS 8 的服务器。
  • 服务器上已配置 root 密码。

安装所需依赖

在开始之前,你需要在服务器上安装一些依赖包。你可以使用以下命令安装它们:

dnf group install "Development Tools"
dnf install zlib-devel curl-devel openssl-devel -y

所有软件包安装完成后,你可以继续进行下一步。

安装并配置 MariaDB 数据库

Redmine 使用 MariaDB 作为数据库后端,因此你需要在服务器上安装 MariaDB 数据库服务器。你可以使用以下命令安装:

dnf install mariadb-server mariadb-devel -y

MariaDB 服务器安装完成后,启动 MariaDB 服务并设置为开机自启:

systemctl start mariadb
systemctl enable mariadb

接下来,使用以下命令登录 MariaDB shell:

mysql

登录后,使用以下命令为 Redmine 创建数据库和用户:

MariaDB [(none)]> CREATE DATABASE redmine CHARACTER SET utf8mb4;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON redmine.* TO 'redmine'@'localhost' IDENTIFIED BY 'password';

接下来,刷新权限并退出 MariaDB,使用以下命令:

MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> EXIT;

完成后,你可以继续进行下一步。

安装 Ruby 和 Passenger

接下来,你需要将 Ruby 和 Passenger 安装到系统中。

首先,使用以下命令安装并启用 EPEL 仓库:

dnf install epel-release -y
dnf config-manager --enable epel -y

接下来,使用以下命令安装 Ruby 和 Passenger:

dnf install mod_passenger passenger passenger-devel ruby ruby-devel -y

所有软件包安装完成后,你可以继续进行下一步。

安装 Redmine

首先,你需要为 Redmine 创建一个独立的用户。你可以使用以下命令创建:

useradd -m -U -r -d /opt/redmine redmine

接下来,登录 Redmine 用户并使用以下命令下载最新版本的 Redmine:

su - redmine
wget --no-check-certificate https://www.redmine.org/releases/redmine-4.2.1.zip

下载完成后,使用以下命令解压下载的文件:

unzip redmine-4.2.1.zip

接下来,使用以下命令重命名解压后的目录:

mv redmine-4.2.1 redmine

接下来,切换到 redmine 目录并复制样例数据库配置文件:

cd redmine
cp config/database.yml.example config/database.yml

接下来,编辑数据库配置文件并设置你的数据库参数:

nano config/database.yml

修改以下与你数据库相匹配的行:

production:
  adapter: mysql2
  database: redmine
  host: localhost
  username: redmine
  password: "password"
  encoding: utf8mb4

保存并关闭文件,然后使用以下命令安装 Bundler:

gem install bundler --no-rdoc --no-ri

接下来,使用以下命令安装其他依赖:

bundle install --without development test postgresql sqlite --path vendor/bundle

接下来,使用以下命令生成密钥令牌(secret token):

bundle exec rake generate_secret_token

接下来,使用以下命令生成应用所需的数据库对象:

RAILS_ENV=production bundle exec rake db:migrate

最后,使用以下命令启动应用:

bundle exec rails server webrick -e production

你应该看到如下输出:

/usr/bin/ruby: warning: shebang line ending with \r may cause problems
=> Booting WEBrick
=> Rails 5.2.5 application starting in production on http://0.0.0.0:3000
=> Run `rails server -h` for more startup options
[2021-06-24 00:40:15] INFO  WEBrick 1.4.2
[2021-06-24 00:40:15] INFO  ruby 2.5.5 (2019-03-15) [x86_64-linux]
[2021-06-24 00:40:15] INFO  WEBrick::HTTPServer#start: pid=43076 port=3000

按 CTRL + C 停止应用。

接下来,使用以下命令退出 Redmine 用户:

exit

为 Redmine 创建 Systemd 服务文件

接下来,你需要创建一个 systemd 服务文件来管理 Redmine 应用。你可以使用以下命令创建:

nano /usr/lib/systemd/system/redmine.service

添加以下行:

[Unit]
Description=Redmine server
After=syslog.target
After=network.target

[Service]
Type=simple
User=redmine
Group=redmine
ExecStart=/bin/ruby /opt/redmine/redmine/bin/rails server webrick -e production

# Give a reasonable amount of time for the server to start up/shut down
TimeoutSec=300

[Install]
WantedBy=multi-user.target

保存并关闭文件,然后使用以下命令重新加载 systemd 守护进程:

systemctl daemon-reload

接下来,启动 Redmine 服务并设置为开机自启:

systemctl start redmine
systemctl enable redmine

现在,使用以下命令检查 Redmine 的状态:

systemctl status redmine

你应该看到如下输出:

? redmine.service - Redmine server
   Loaded: loaded (/usr/lib/systemd/system/redmine.service; disabled; vendor preset: disabled)
   Active: active (running) since Thu 2021-06-24 04:26:51 EDT; 1min 37s ago
 Main PID: 44044 (ruby)
    Tasks: 3 (limit: 25014)
   Memory: 121.6M
   CGroup: /system.slice/redmine.service
           ??44044 /bin/ruby /opt/redmine/redmine/bin/rails server webrick -e production

Jun 24 04:26:51 centos8 systemd[1]: Started Redmine server.
Jun 24 04:26:52 centos8 ruby[44044]: /bin/ruby: warning: shebang line ending with \r may cause problems
Jun 24 04:26:56 centos8 ruby[44044]: [2021-06-24 04:26:56] INFO  WEBrick 1.4.2
Jun 24 04:26:56 centos8 ruby[44044]: [2021-06-24 04:26:56] INFO  ruby 2.5.5 (2019-03-15) [x86_64-linux]
Jun 24 04:26:56 centos8 ruby[44044]: [2021-06-24 04:26:56] INFO  WEBrick::HTTPServer#start: pid=44044 port=3000

此时,Redmine 已启动并监听 3000 端口。你可以使用以下命令检查:

ss -antpl | grep 3000

你应该得到如下输出:

LISTEN    0         128                0.0.0.0:3000             0.0.0.0:*        users:(("ruby",pid=44044,fd=9))   

配置 Nginx 作为 Redmine 的反向代理

接下来,你需要安装并配置 Nginx 作为 Redmine 的反向代理。首先,使用以下命令安装 Nginx 服务器:

dnf install nginx -y

接下来,使用以下命令创建 Nginx 虚拟主机配置文件:

nano /etc/nginx/conf.d/redmine.conf

添加以下行:

upstream backend {
  server 127.0.0.1:3000;
}

server {
    listen 80;
    server_name redmine.example.com;
    access_log /var/log/nginx/redmine.example.com-access.log;
    error_log /var/log/nginx/redmine.example.com-error.log;

    location / {
        proxy_pass http://backend/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $http_host;

        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forward-Proto http;
        proxy_set_header X-Nginx-Proxy true;
        proxy_redirect off;
    }
}

保存并关闭文件,然后使用以下命令检查 Nginx 是否存在语法错误:

nginx -t

你应该得到如下输出:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

接下来,启动 Nginx 服务并设置为开机自启:

systemctl start nginx
systemctl enable nginx

你也可以使用以下命令检查 Nginx 的状态:

systemctl status nginx

你应该得到如下输出:

? nginx.service - The nginx HTTP and reverse proxy server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
  Drop-In: /usr/lib/systemd/system/nginx.service.d
           ??php-fpm.conf
   Active: active (running) since Thu 2021-06-24 04:33:48 EDT; 25s ago
  Process: 45832 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
  Process: 45830 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS)
  Process: 45828 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS)
 Main PID: 45833 (nginx)
    Tasks: 3 (limit: 25014)
   Memory: 5.3M
   CGroup: /system.slice/nginx.service
           ??45833 nginx: master process /usr/sbin/nginx
           ??45834 nginx: worker process
           ??45835 nginx: worker process

Jun 24 04:33:48 centos8 systemd[1]: Starting The nginx HTTP and reverse proxy server...
Jun 24 04:33:48 centos8 nginx[45830]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
Jun 24 04:33:48 centos8 nginx[45830]: nginx: configuration file /etc/nginx/nginx.conf test is successful
Jun 24 04:33:48 centos8 systemd[1]: Started The nginx HTTP and reverse proxy server.

访问 Redmine

现在,你可以通过 URL http://redmine.example.com 访问 Redmine 的 Web 界面。你应该看到如下页面:

在 CentOS 上安装与配置 Redmine 项目管理平台

点击“Sign in”按钮。你应该看到 Redmine 的登录页面:

在 CentOS 上安装与配置 Redmine 项目管理平台

输入默认用户名和密码(均为 admin),然后点击 Login 按钮。你将被重定向到修改密码页面:

在 CentOS 上安装与配置 Redmine 项目管理平台

设置新的 admin 密码,然后点击 Save 按钮保存更改。

总结

恭喜!你已成功在 CentOS 8 上通过 Nginx 安装 Redmine。现在你可以在组织中使用 Redmine,并从统一的位置管理你的项目。