项目

常规

个人资料

操作

在CentOS 7上安装Redmine 4.2.x + SELinux, Apache 2.4, Passenger

2021年8月17日编辑:此指南最初是为Redmine 4.2.1编写的,但在发布后不久,4.2.2版本已发布。此指南中的步骤应适用于任何4.2.x版本的Redmine,但请注意,它只在4.2.1和4.2.2上进行了测试。

此指南将指导您在CentOS7上安装Redmine 4.2.x的过程,包括对SELinux的支持。以下内容大多基于Franck Michel的优秀指南,可在此处找到。

此指南不会涵盖安装和配置Redmine数据库;这在许多其他指南中都有涵盖,而且相当直接。此指南也不会涵盖任何SCM仓库或与LDAP的集成,但会涵盖如何在CentOS7中启用SELinux以使Redmine工作。我遇到的所有Redmine教程都使用了Passenger GEM,然而GEM并没有提供任何SELinux策略。尽管有一个SELinux教程在此,但遵循它并没有真正帮助我。此指南代表了几个小时痛苦地阅读Redmine、Passenger和SELinux错误日志。希望您觉得它有用!

此指南中使用的完整配置如下

  • CentOS Linux release 7.9.2009 (Core)
  • Apache 2.4.6
  • Redmine 4.2.2
  • Ruby 2.7.3
  • Apache Passenger 6.0.8
  • SELinux调整

初始配置

首先,我建议安装一个全新的CentOS系统。当然,您必须安装您选择的RDBMS,无论是同一服务器上的还是专用服务器上的。

安装必要的软件包

我们将安装安装Ruby所需的全部软件包。此外,我们还将安装Apache和mod_ssl,这些是我们需要来提供Redmine服务。

[As root/sudo]:
yum install -y gcc-c++ patch readline readline-devel zlib zlib-devel libyaml-devel libffi-devel openssl-devel make bzip2 autoconf automake libtool bison iconv-devel sqlite-devel wget mysql-devel httpd mod_ssl

安装Ruby 2.7.3

直接从Franck的指南此处

[As root/sudo]:
gpg2 --keyserver hkp://pool.sks-keyservers.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
curl -L get.rvm.io | bash -s stable
source /etc/profile.d/rvm.sh
rvm reload
rvm requirements run
rvm install 2.7
rvm list
ruby --version 

安装Redmine 4.2.2

撰写本文时最新版本为4.2.2。这来自Frank的指南此处
我喜欢在/var/www/中安装Redmine

下载并解压缩Redmine

wget https://redmine.org/releases/redmine-4.2.2.tar.gz
tar xvfz redmine-4.2.2.tar.gz
mv redmine-4.2.2 /var/www/
export REDMINE=/var/www/redmine-4.2.2
cd $REDMINE
cp config/database.yml.example config/database.yml 

这将把 Redmine 安装到 /var/www 目录下。它与 Apache 和 SELinux 配合良好。

自定义您的 `database.yml` 文件。您可以参考指南获取更多帮助。

vi config/database.yml 

安装 Gem 并创建数据库模式

cd $REDMINE
gem install bundler
bundle install --without development test
bundle exec rake generate_secret_token
RAILS_ENV=production REDMINE_LANG=en bundle exec rake db:migrate
RAILS_ENV=production REDMINE_LANG=en bundle exec rake redmine:load_default_data 

安装 Passenger 6.0.8

在这里,本指南将与 Franck 的指南有相当大的不同。那个指南,以及我能找到的所有 Apache 指南,都使用了 Passenger Gem,您可以通过像这样做来安装:

gem install passenger

然而,当您通过那个安装过程时,安装程序实际上会警告您,在 RHEL 类型系统上安装 Passenger 的推荐方法是使用软件包管理器,因为这样将包括 Passenger 正确运行所需的 SELinux 策略。这就是我们要在这里做的。以下步骤是从优秀的 Passenger 安装指南中改编的,该指南可以在这里找到。

yum install -y epel-release yum-utils
yum-config-manager --enable epel
yum clean all && sudo yum update -y
yum install -y pygpgme curl
curl --fail -sSLo /etc/yum.repos.d/passenger.repo https://oss-binaries.phusionpassenger.com/yum/definitions/el-passenger.repo
yum install -y mod_passenger 

一旦安装了 Passenger,您可以使用以下命令验证安装:

/usr/bin/passenger-config validate-install

应该会得到如下输出:

 * Checking whether this Passenger install is in PATH... ✓
 * Checking whether there are no other Passenger installations... ✓ 

现在,事情变得有些复杂。作为其安装过程的一部分,`RVM` 会安装您请求的任何版本的 Ruby,但也会安装系统版本的 Ruby(截至本文撰写时,这是 CentOS7 的 2.0.0.648-36.el7,这非常过时)。当安装 Passenger 时,系统 Ruby 软件包是必需的,并且 Passenger 会“指向”系统版本的 Ruby。这将给我们带来各种各样的问题,因为 Redmine 至少需要 Ruby 2.4,但我们想使用不是 EOL 的东西。幸运的是,Passenger 的文档涵盖了这一点
“一旦安装,您可以在任何 Ruby 解释器下运行 Passenger 的 Ruby 部分,即使那个 Ruby 解释器不是您最初与 Passenger 一起安装的。”

太好了!让我们来做这件事。在我们离开这一部分之前,我们需要确定 RVM Ruby 解释器安装的位置。使用此命令来完成此操作

/usr/bin/passenger-config --ruby-command 

这应该返回如下内容:

passenger-config was invoked through the following Ruby interpreter:
  Command: /usr/local/rvm/gems/ruby-2.7.2/wrappers/ruby
  Version: ruby 2.7.2p137 (2020-10-01 revision 5445e04352) [x86_64-linux]
  To use in Apache: PassengerRuby /usr/local/rvm/gems/ruby-2.7.2/wrappers/ruby
  To use in Nginx : passenger_ruby /usr/local/rvm/gems/ruby-2.7.2/wrappers/ruby
  To use with Standalone: /usr/local/rvm/gems/ruby-2.7.2/wrappers/ruby /usr/bin/passenger start

## Notes for RVM users
Do you want to know which command to use for a different Ruby interpreter? 'rvm use' that Ruby interpreter, then re-run 'passenger-config about ruby-command'. 

配置 Apache

在 Apache 中创建一个新的虚拟主机配置文件:/etc/httpd/conf.d/redmine.conf。同样,本节的大部分内容来自 Franck 的指南,但增加了一个关键点。此第一行来自上一节中的命令输出,告诉 Passenger 使用哪个 Ruby 解释器。

PassengerRuby /usr/local/rvm/gems/ruby-2.7.2/wrappers/ruby

<VirtualHost *:80>
    ServerName yourserver.domain.org
    DocumentRoot "/var/www/redmine-4.2.2/public" 

    ErrorLog logs/redmine_error_log
    LogLevel warn

    <Directory "/var/www/redmine-4.2.2/public">
        Options Indexes ExecCGI FollowSymLinks
        Require all granted
        AllowOverride all
    </Directory>
</VirtualHost> 

权限和 SELinux 策略

现在,是时候设置权限和 SELinux 策略了。我们将首先设置整个 Redmine 文件夹的常规 Linux 权限。一些其他指南只将其应用于一些子文件夹,但我在 SELinux 启用时发现,有必要将所有内容 chown 为 apache:apache。

cd $REDMINE
cd ..
chown -R apache:apache redmine-4.2.2 

接下来,我们将设置 SELinux 策略。这些是从指南中摘取的。

# Set SELinux permissions
chcon -R -t httpd_log_t redmine-4.2.2/log/
chcon -R -t httpd_tmpfs_t redmine-4.2.2/tmp/
chcon -R -t httpd_sys_script_rw_t redmine-4.2.2/files/
chcon -R -t httpd_sys_script_rw_t redmine-4.2.2/public/plugin_assets/
restorecon -Rv redmine-4.2.2/ 

环境变量

Passenger 可能会抱怨它无法安装本机支持 .so 文件。我们可以通过向以下行添加来抑制此警告:

vi /etc/sysconfig/httpd

PASSENGER_COMPILE_NATIVE_SUPPORT_BINARY=0
PASSENGER_DOWNLOAD_NATIVE_SUPPORT_BINARY=0 

这就完了!

此时,重新启动 Apache。

systemctl restart httpd 

您应该能够访问您在步骤 X 中输入的域名上的 Redmine。

额外考虑

一些额外的考虑因素

  • 明智的做法是安装某种类型的防火墙(iptables 或 firewalld)以保护您的服务器。
  • 如果您为 Redmine 安装主题或插件,您将不得不重复上面的 chown 过程。

Fletcher Johnston 更新 将近 3 年前 · 3 次修订