Redmine
Redmine 是一个自由和开源的、基于 Web 的项目管理和问题跟踪工具。它处理多个项目和子项目。它功能包括每个项目的 Wiki 和论坛、时间跟踪以及灵活的基于角色的访问控制。它包括一个日历和甘特图,以帮助可视化表示项目及其截止日期。 Redmine 与各种版本控制系统集成,并包括一个存储库浏览器和差异查看器。
Redmine 使用 Ruby on Rails 框架编写。它是跨平台的和跨数据库的,并支持 34 种语言。
安装
本文档将指导您完成 Redmine 的建议安装过程。
如果由于某种原因您想手动设置 Redmine,建议遵循官方的安装指南。
虽然可以在没有其他组件的情况下运行 Redmine 进行测试,但对于生产环境使用,它需要 SQL 数据库以及 Web 服务器。 推荐使用 MariaDB 或 PostgreSQL 作为数据库。 支持的 Web 服务器有
安装
构建和安装
在下文中,我们假设运行 Redmine 的用户是 http
。 因此,ruby 命令将在该特定用户的控制下显式执行。
数据库配置
现在,我们需要创建 Redmine 将用于存储数据的数据库。 目前,数据库及其用户将被命名为 redmine
。 但这些名称可以更改为其他任何名称。
数据库创建
要创建数据库、用户并设置权限
# mysql -u root -p
CREATE DATABASE redmine CHARACTER SET UTF8; CREATE USER 'redmine'@'localhost' IDENTIFIED BY 'my_password'; GRANT ALL PRIVILEGES ON redmine.* TO 'redmine'@'localhost';
对于 PostgreSQL
CREATE ROLE redmine LOGIN ENCRYPTED PASSWORD 'my_password' NOINHERIT VALID UNTIL 'infinity'; CREATE DATABASE redmine WITH ENCODING='UTF8' OWNER=redmine;
数据库访问配置
现在您需要配置 Redmine 以访问我们刚刚创建的数据库。 为此,您必须将 /usr/share/webapps/redmine/config/database.yml.example
复制到 database.yml
# cd /usr/share/webapps/redmine/config # cp database.yml.example database.yml
然后编辑此文件,以便为“production”环境配置数据库设置(您也可以为“development”和“test”环境配置,只需更改相应的 sections)。
MariaDB 和 MySQL 数据库的示例
database.yml
production: adapter: mysql2 database: redmine host: localhost port: 3307 #If your server is not running on the standard port (3306), set it here, otherwise this line is unnecessary. username: redmine password: my_password
PostgreSQL 数据库的示例
database.yml
production: adapter: postgresql database: redmine host: localhost username: redmine password: my_password encoding: utf8 schema_search_path: <database_schema> (default - public)
SQL Server 数据库的示例
database.yml
production: adapter: sqlserver database: redmine host: localhost #Set not default host (localhost) here, otherwise this line is unnecessary. port: 1433 #Set not standard port (1433) here, otherwise this line is unnecessary. username: redmine password: my_password
Ruby gems
Redmine 需要一些 RubyGems,但是 redmine 软件包已预先打包了所有必需项。
会话存储密钥生成
现在您必须生成一个随机密钥,Rails 将使用该密钥来编码存储会话数据的 cookie,从而防止篡改。
# bundle exec rake generate_secret_token
数据库结构创建
创建数据库并为 Redmine 配置访问权限后,现在是时候创建数据库结构了。 这是通过在应用程序根目录下运行以下命令来完成的
# cd /usr/share/webapps/redmine # chown -R http:http db # migration requires write access to db/schema.rb # sudo -u http -g http RAILS_ENV=production bundle exec rake db:migrate
这些命令将通过逐个运行所有迁移来创建表,然后创建权限集和名为 admin 的应用程序管理员帐户。
使用默认数据填充数据库
现在您可能想要在数据库中插入默认配置数据,例如基本任务类型、任务状态、组等。 为此,请执行以下操作
# sudo -u http -g http RAILS_ENV=production bundle exec rake redmine:load_default_data
Redmine 将提示要加载的数据集语言; 您还可以在运行命令之前定义 REDMINE_LANG 环境变量,该变量的值将被任务自动且静默地拾取
# sudo -u http -g http RAILS_ENV=production REDMINE_LANG=de bundle exec rake redmine:load_default_data
文件系统权限
运行应用程序的用户帐户必须对以下子目录具有写入权限
- files:附件存储。
- log:应用程序日志文件 production.log。
- tmp 和 tmp/pdf:用于生成 PDF 文档以及其他内容(如果不存在,请创建这些目录)。
redmine 预先配置了用户 http
的权限。 如果您想使用其他用户,则需要更改所有权,例如
# chown -R redmine:redmine files/ log/ tmp/
测试安装
要使用 WEBrick Web 服务器测试您的新安装,请在 Redmine 文件夹中运行以下命令
# sudo -u http -g http ruby bin/rails server webrick -e production
WEBrick 启动后,将您的浏览器指向 https://127.0.0.1:3000/。 您现在应该看到应用程序欢迎页面。 使用默认管理员帐户登录:admin/admin。 您可以转到“管理”菜单并选择“设置”来修改大多数应用程序设置。
配置生产服务器
Puma / Unicorn
Puma 和 Unicorn 是基于 Mongrel 的 Web 服务器。 建议使用 Puma,因为它具有更高的速度和更小的内存占用。 两者都非常易于设置,但对于生产环境使用,应与反向代理(Apache、Nginx、lighttpd 等)结合使用。
# gem install puma # sudo -u http -g http /opt/ruby2.6/bin/puma
对于生产环境,puma 可以作为 systemd 服务启动
/etc/systemd/system/redmine.service
[Unit] Description=Redmine After=network.target [Service] User=http Group=http RestartSec=1 Restart=always StartLimitInterval=10 StartLimitBurst=10 WorkingDirectory=/usr/share/webapps/redmine/ ExecStart=/opt/ruby2.6/bin/puma -e production -p 9292 [Install] WantedBy=multi-user.target
执行完整的 守护进程重新加载,然后 启动/启用 redmine.service
。
Phusion Passenger
对于 Apache 和 Nginx,建议使用 Phusion Passenger。 Passenger 是 Nginx 和 Apache HTTP 服务器 的可用模块。
首先安装 'passenger' gem
# gem install passenger
现在您必须查看您的 passenger gem 安装目录才能继续。 如果您不知道它在哪里,请键入
# gem env
并查看 GEM PATHS
以查找 gems 的安装位置。 如果您遵循本指南并安装了 RVM,您可能有多个路径,请查看您正在使用的路径。
对于本指南到目前为止,gem 路径是 /usr/local/rvm/gems/ruby-2.0.0-p247@global
。
# cd /usr/local/rvm/gems/ruby-2.0.0-p247@global/gems/passenger-4.0.23
如果您打算使用 Apache HTTP 服务器,请运行
# passenger-install-apache2-module
如果 Rails 应用程序部署在子 URI 中,例如 http://example.com/yourapplication,则需要一些额外的配置,请参阅 Passenger 文档
对于 Nginx
# passenger-install-nginx-module
最后,安装程序将为您提供有关安装的更多信息(例如安装其他库)。 因此,要设置您的服务器,只需按照 passenger 安装程序的输出进行操作即可。
更新
备份 Redmine 中使用的文件
# tar czvf ~/redmine_files.tar.gz -C /usr/share/webapps/redmine/ files
备份 Redmine 中安装的插件
# tar czvf ~/redmine_plugins.tar.gz -C /usr/share/webapps/redmine/ plugins
备份数据库
# mysqldump -u root -p <redmine_database> | gzip > ~/redmine_db.sql.gz
像往常一样更新 redmine 软件包。
更新 gems 需求
# bundle update
为了获得干净的 gems 环境,您可能需要删除所有 gems 并重新安装它们。 要完成此操作,请执行
# for x in `gem list --no-versions`; do gem uninstall $x -a -x -I; done
如果您执行了最后一步并删除了所有 gems,现在您将需要重新安装它们
# gem install bundler # bundle install --without development test
复制已保存的文件
# tar xzvf ~/redmine_files.tar.gz -C /usr/share/webapps/redmine/
复制已安装的插件
# tar xzvf ~/redmine_plugins.tar.gz -C /usr/share/webapps/redmine/
重新生成密钥令牌
# cd /usr/share/webapps/redmine # bundle exec rake generate_secret_token
检查您可能已安装在 public/themes
目录中的任何主题。 您可以复制它们,但检查更新版本是理想的选择。
config/settings.yml
覆盖新的。更新数据库。 此步骤是可能更改数据库内容的一个步骤。 转到您的新 redmine 目录,然后迁移您的数据库
# RAILS_ENV=production REDMINE_LANG=pt-BR bundle exec rake db:migrate
如果您安装了任何插件,您还应该运行其数据库迁移
# RAILS_ENV=production REDMINE_LANG=pt-BR bundle exec rake redmine:plugins:migrate
现在,是时候清理缓存和现有会话了
# RAILS_ENV=production bundle exec rake tmp:cache:clear tmp:sessions:clear
重新启动应用程序服务器(例如 puma、thin、passenger 等)。 最后,转到“管理 -> 角色和权限”以检查/设置新功能的权限(如果有)。
故障排除
运行时错误,提示 RMagick 配置的版本过旧
如果您在升级 ImageMagick 后收到以下运行时错误 This installation of RMagick was configured with ImageMagick 6.8.7 but ImageMagick 6.8.8-1 is in use.
,那么您只需要重新安装(或者在需要的情况下如上所示重建)。
安装 gems 时出错:无法加载此类文件 -- mysql2/mysql2
如果您看到类似 cannot load such file -- mysql2/mysql2
的错误,则说明您在数据库 gem 的安装中遇到问题。 可能是 数据库访问配置 步骤中的配置错误。 在这种情况下,您应该验证 database.yml
文件。
如果这不起作用,您可以手动安装数据库 gem,方法是
# gem install mysql2
作为最后的手段,您可以尝试注释掉数据库 gem 的行并添加一个新行,如下所示
<path-to-mysql2-gem-directory>/lib/mysql2/mysql2.rb
# require 'mysql2/mysql2' require '<path-to-mysql2-gem-directory>/lib/mysql2/mysql2.so'
检出 SVN 源代码
获取 Redmine 源代码(下载说明)。 以下是在 /srv/http/redmine/ 中直接从 subversion 安装 Redmine 的方法
# useradd -d /srv/http/redmine -s /bin/false redmine # mkdir -p /srv/http/redmine # svn checkout https://svn.redmine.org/redmine/branches/2.1-stable /srv/http/redmine # chown -R redmine: /srv/http/redmine
自动化更新过程
更新后脚本示例
#!/usr/bin/bash export RAILS_ENV=production grep -E "^gem 'thin'" Gemfile || echo "gem 'thin'" >> Gemfile bundle update && bundle exec rake generate_secret_token db:migrate redmine:plugins:migrate tmp:cache:clear tmp:sessions:clear
创建 Systemd 单元
如果您希望在系统启动时自动运行应用程序服务器,则需要创建一个 systemd 单元文件。
/etc/systemd/system/redmine.service
[Unit] Description=Redmine server After=network.target [Service] Type=simple User=redmine2 Group=redmine2 Environment=GEM_HOME=/home/redmine2/.gem/ ExecStart=/usr/bin/ruby /usr/share/webapps/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