Redmine

来自 ArchWiki

Redmine 是一个自由和开源的、基于 Web 的项目管理问题跟踪工具。它处理多个项目和子项目。它功能包括每个项目的 Wiki 和论坛、时间跟踪以及灵活的基于角色的访问控制。它包括一个日历甘特图,以帮助可视化表示项目及其截止日期。 Redmine 与各种版本控制系统集成,并包括一个存储库浏览器和差异查看器。

Redmine 使用 Ruby on Rails 框架编写。它是跨平台的和跨数据库的,并支持 34 种语言。

安装

本文档将指导您完成 Redmine 的建议安装过程。

如果由于某种原因您想手动设置 Redmine,建议遵循官方的安装指南

虽然可以在没有其他组件的情况下运行 Redmine 进行测试,但对于生产环境使用,它需要 SQL 数据库以及 Web 服务器。 推荐使用 MariaDBPostgreSQL 作为数据库。 支持的 Web 服务器有

安装

构建和安装

安装 redmine 软件包。

在下文中,我们假设运行 Redmine 的用户是 http。 因此,ruby 命令将在该特定用户的控制下显式执行。

数据库配置

现在,我们需要创建 Redmine 将用于存储数据的数据库。 目前,数据库及其用户将被命名为 redmine。 但这些名称可以更改为其他任何名称。

注意: MariaDBMySQL 的配置将相同,因为两者都是二进制兼容的。

数据库创建

要创建数据库、用户并设置权限

# 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;
注意: 如果您想使用其他环境,则必须为每个环境创建单独的数据库(例如:developmenttest)。

数据库访问配置

现在您需要配置 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
注意: 此步骤不是强制性的,但它肯定会为您节省大量开始使用 Redmine 的工作。 对于初次使用,它可能非常有指导意义。

文件系统权限

运行应用程序的用户帐户必须对以下子目录具有写入权限

  • files:附件存储。
  • log:应用程序日志文件 production.log。
  • tmptmp/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。 您可以转到“管理”菜单并选择“设置”来修改大多数应用程序设置。

警告: Webrick 不适合生产环境使用,请仅使用 webrick 测试到目前为止的安装是否正常运行。 请使用本 wiki 中的许多其他指南之一来设置 Redmine 以使用 Passenger(又名 mod_rails)、FCGI 或 Rack 服务器(Unicorn、Thin、Puma 或 hellip)来提供您的 Redmine 服务。

配置生产服务器

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 是 NginxApache 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 软件包现在位于 extra 中,并且有其自己的依赖项。 更新过程略有不同。 (在 Talk:Redmine 中讨论)

备份 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,具体取决于您在先决条件步骤中进行的 Ruby 安装类型。 您必须注意,否则可能会停止运行依赖于 Ruby gems 的其他应用程序。

如果您执行了最后一步并删除了所有 gems,现在您将需要重新安装它们

# gem install bundler
# bundle install --without development test
注意: 如果您如上所述删除了所有 gems,并且使用了使用 gem 的服务器,请记住重新安装服务器 gem:passenger(对于 Apache 和 Nginx)、Mongrel 或 Unicorn。 为此,只需按照上面安装教程中的步骤进行操作即可。

复制已保存的文件

# 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.,那么您只需要重新安装(或者在需要的情况下如上所示重建)。

注意: 这是因为当您安装 RMagick gem 时,它会编译一些本机扩展,并且在某些 ImageMagick 升级后可能需要重建它们。

安装 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
注意: 请注意,此脚本使用 Thin 作为应用程序服务器,因此您必须根据自己的需要进行更改。

创建 Systemd 单元

如果您希望在系统启动时自动运行应用程序服务器,则需要创建一个 systemd 单元文件。

注意: 如果您将 apachenginx 与 Passenger gem 一起使用,则不需要这样做。 这些服务器已经有自己的单元文件,因此您只需启用它即可。
/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

参见