在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 次修订