【2023年版】虽然不太了解Passenger,但我尝试在Ubuntu 22.04上通过使用Nginx、Passenger和PostgreSQL来运行Redmine5.0.x

修改记录

这是对着墙壁亲亲的记录……

項番版変更日変更内容1v1.0.02023-06-07初版作成2v1.0.12023-06-10nginxのpassenger設定を修正
シンボリックリンクのコマンドを修正

我想要ITS!非常渴望

想知道大家的公司是否使用任务管理系统? 我的公司使用了。

    • 自分のタスクの総量が把握できなくなる

 

    • どれから手を付けるか悩むときがある

 

    • 締め切りをしばしばプッチする

 

    • 炎上具合がわからない

 

    • というマネジメントダメダメマンなので「難しいことは全部システムに任せた!!」と今までやってきました。

 

    • この度、プロジェクト運営を考えていくうえで、上のようなお悩み点が噴出してしまい「もうやだ……Redmine入れよ……」と久しぶりに(5年ぶり4回目くらい) Ubuntu Server 22.04上にRedmineを構築してみました。

 

    私史上初の試みで「ApacheもいいけれどNginxもよくない?」とちょっと調べてみたところ、NginxだとApacheでやっていた「httpの80番で受け取ったリクエストをRubyの3001番に回す」みたいなのをしないでNginxがAPサーバーみたいなことをしてくれるらしいので、その方向で構築してみました。

前提条件和环境

    • 仮想環境: Hyper-V

 

    • ホストOS: Windows10 (21H2)

 

    • ゲストOS: Ubuntu 22.04 Jammy Jerryfish

 

    • Nginx: 1.18.0

 

    • Passenger: 6.0.17

 

    PostgreSQL: 14+238

操作流程

1. 下载安装用的ISO文件并创建虚拟机。

暗号化のサポートでTPMを有効にする

2. Ubuntu的启动和初始设置

一旦成功创建了Hyper-V虚拟机,我们会立即进行启动。
初始设置一般(已参考了相关网站)。只是在过程中设置了固定IP地址。
虽然可以在安装时进行升级,但这次我们优先选择“稍后用apt进行更新”的策略来进行安装。

3. 环境的默认设置

接下来的工作将参考Redmine.JP网站的博客文章来完成。

3.1 设置区域性

听说这是为了在PostgreSQL中处理日语而设置的(编码问题……我曾经为此苦恼过啊)。

$ sudo locale-gen ja_JP.UTF-8
$ locale -a
# こんな感じで"ja_JP.utf8が含まれる
C
C.UTF-8
POSIX
en_US.utf8
ja_JP.utf8

3.2 设置时区

由于似乎不符合标准的设定,并且不是日本的时区,所以我们可以使用timedatectl来进行设置。

$ timedatectl set-timezone Asia/Tokyo

3.3 包裹的更新

所有的包将通过apt进行安装。由于系统需要进行更新,因此先运行apt full-upgrade命令,然后再安装所需的包。

$ sudo apt update
$ sudo apt -y full-upgrade
# ここでゴリっとシステム関係の更新が入ると思うので、更新が終わったら一度再起動して再ログインします。
$ sudo reboot now
# --------
# さ い き ど う
# --------
# ここから再起動後。パッケージリポジトリの内容は変わらないと思うけれどもおまじない的に更新
$ sudo apt update
# RubyとPassengerのビルドに必要なものを導入
$ sudo apt install -y build-essential zlib1g-dev libssl-dev libreadline-dev libyaml-dev libcurl4-openssl-dev libffi-dev
# PostgrerSQLとヘッダファイルの導入
$ sudo apt install -y postgresql libpq-dev
# 日本語フォントの導入
$ sudo apt install -y imagemagick fonts-takao-pgothic
# バージョン管理システム(SubversionとGitの導入∵Redmineをリポジトリから引っ張ってくるのでsvnを入れます)
$ sudo apt install -y subversion git

构建并安装Ruby 3.4版本

由于我是一个不懂Ruby的人,所以我会在想“为什么不能用apt来安装呢?”之后,我会从源代码构建并安装它。

值得一提的是,根据Redmine的推荐使用环境,似乎可以使用Ruby 3.2系列(trunk版),但在稳定版本中只支持到3.1系列。因此,我将使用官方的稳定版本3.1.4。

# ホームディレクトリで作業することを想定
$ pwd
/home/fattoton/
# curlコマンドでソースコードをダウンロードします
$ curl -O https://cache.ruby-lang.org/pub/ruby/3.1/ruby-3.1.4.tar.gz
# tarコマンドで解凍(gzだけれどもxvfでいけた)
$ tar xvf ruby-3.1.4.tar.gz
# 解凍したフォルダーに移動
$ cd ./ruby-3.1.4

# ソースコードのビルドとインストール
# ----  ここから  ----
$ ./configure --disable-install-doc
$ make
$ sudo make install
# ----  ここまで  ----

# インストール完了後にRubyのバージョンを確認
$ ruby -v
ruby 3.1.4p223 (2023-03-30 revision 957bb7cb81) [x86_64-linux]

安装Nginx和Passenger 3.5。

乗客可以通过安装乘客的宝石来进行,但据Phusion提供的手册说,“您需要添加存储库到apt,然后再进行安装!!” 我会参照英文文档进行逐步操作。
在这一点上我遇到了一些困惑(仔细考虑其实是理所当然的),仅仅安装Nginx和乘客是不够的,你还需要一个库来连接它们。
图示如下:

除了那些过时的方法之外,还有一种方法是不使用钥匙链来存储PGP加密密钥,但是由于Ubuntu对此方法表示不满,“我不是早就告诉你别那样做了吗?”,所以我选择了官方最新的方法来安装。

# PGP暗号鍵の復号とhttps経由でのダウンロードをするために必要なモジュールの導入
$ sudo apt install -y dirmngr gnupg apt-transport-https ca-certificates curl
# 暗号鍵のダウンロードとキーチェーンへの登録
# (最後出力を/dev/nullに突っ込んでるのはバイナリファイルの内容をコンソールに表示させないため)
$ curl https://oss-binaries.phusionpassenger.com/auto-software-signing-gpg-key.txt | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/phusion.gpg >/dev/null
# aptにリポジトリを追加
$ sudo sh -c 'echo deb https://oss-binaries.phusionpassenger.com/apt/passenger jammy main > /etc/apt/sources.list.d/passenger.list'
# aptの情報を更新
$ sudo apt update

# (1)Nginx, (2)Passenger, (3)Passenger+Nginxのライブラリの順で導入
$ sudo apt install -y nginx
$ sudo apt install -y passenger
$ sudo apt install -y libnginx-mod-http-passenger

# libnginx-mod-http-passengerの設定ファイルがあるか確認の上シンボリックリンクをうまい具合につくってくれる
$ if [ ! -f /etc/nginx/modules-enabled/50-mod-http-passenger.conf ]; then sudo ln -s /usr/share/nginx/modules-available/mod-http-passenger.load /etc/nginx/modules-enabled/50-mod-http-passenger.conf ; fi
$ sudo ls /etc/nginx/conf.d/mod-http-passenger.conf

据公告,如果/etc/nginx/conf.d/mod-http-passenger.conf不存在,请自行创建。

passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini;
passenger_ruby /usr/bin/passenger_free_ruby;

据说很少出现需要这样做的情况。由于我没有遇到过,所以我认为可以忽略它而不会有问题。我已经安装好了Nginx、Passenger和libnginx-mod-http-passenger,所以我会通过systemd重新启动服务。

# サービス再起動
$ sudo systemctl restart nginx
# サービスのステータス確認
$ sudo systemctl status nginx
# Passengerの動作状態確認
$ sudo passenger-memory-stats
Passengerのメモリ使用量

3.6 数据库的设置

在创建了用于Redmine的用户后,创建Redmine所需的数据库。

# PostgreSQLにユーザーredmineを追加
$ sudo -i -u postgres createuser -P redmine
# パスワードを設定するように求められます
Enter pasword for new role:   # PostgreSQLにユーザー名redmineでアクセスする際のパスワードを入力
Enter it again:               # パスワードを再入力

# PostgreSQLにデータベースを作成
# ここで一番最初にやった"ja_JP.UTF-8"を使う
$ sudo -i -u postgres createdb -E UTF-8 -l ja_JP.UTF-8 -O redmine -T template0 redmine

3.7 下载Redmine

简单来说,Redmine的安装步骤可以总结如下。

    • すごーく昔のRedmine

手作業でGemを一つずつ流し込むんで超めんどい & Gem間で依存パッケージの管理ができてなくて(プラグインで)時々詰む

bundlerが導入されてからのRedmine

Gem.lockの中にバージョン指定が書いてあるからあとはbundlerが良きに計らってくれるよ!!何なら特定の場所にGemを配置して複数のRubyの環境が同居できるようになるよ!!

由于这样的感觉,不是只要下载Redmine就能自动运行。虽然变得容易了很多,不再为无法理解的错误而烦恼了。
所以下载Redmine到特定的文件夹,然后修改配置文件,通过bundler引入Gem。
这次将文件放在与Redmine.JP的文章相同的/var/lib/redmine文件夹中。

sudo mkdir /var/lib/redmine
sudo chown www-data /var/lib/redmine
# redmine.orgからver.5.0の安定版を/var/lib/redmine/以下にダウンロード
sudo -u www-data svn co https://svn.redmine.org/redmine/branches/5.0-stable /var/lib/redmine

3.8 数据库配置文件database.yml和configuration.yml的设置

有关连接从Ruby到PostgreSQL的连接信息,以及邮件发送和附件存储区等设置,分别在文件中进行记录。
分别
/var/lib/redmine/config/database.yml.example
/var/lib/redmine/config/configuration.yml.example
有样本文件可供参考,复制并删除扩展名.example,使用会更方便。

#作業ディレクトリの確認
$ pwd
/var/lib/redmine/config/
# /var/lib/redmine以下の所有者がwww-dataなので、sudoにユーザーを指定して実行
$ sudo -u www-data cp ./database.yml.example ./database.yml
$ sudo -u www-data cp ./configuration.yml.example ./configuration.yml
production:
  adapter: postgresql
  database: redmine
  host: localhost
  username: redmine
  password: "********" # 3.6で設定したPostgreSQLにアクセスするためのパスワード
  encoding: utf8
default:
  # 今回はメール送信は設定しなかったので割愛
  # email_delivery:
  #   delivery_method: :smtp
  #   smtp_settings:
  #     address: "localhost"
  #     port: 25
  #     domain: "example.com"
  # 添付ファイルの保存フォルダーを設定
  attachements_storage_path: /var/lib/redmine/files
  # バージョン管理システム(使用するもののみ)のコマンドを設定
  scm_git_command: git
  # 日本語用フォントを設定
  rmagick_font_path: /usr/share/fonts/truetype/takao-gothic/TakaoPGothic.ttf

3.9 导入用于 Redmine 的 Ruby Gem 的方法

我将使用Bundler来引入Gem库。

$ cd /var/lib/redmine
# オプションの--without development testをつけることでProduction版以外の環境の作成を抑止する
$ sudo bundle install --without development test

启动Redmine的设置方法为3.10。

创建用于保存防止会话篡改的私钥和数据的表格。

# 【重要】必ずRedmineのルートディレクトリで実施すること
$ pwd
/var/lib/redmine/
# セッション改ざん防止用秘密鍵の作成
$ sudo -u www-data bin/rake generate_secret_token
# PostgreSQLのデータベースにテーブルを作成
$ sudo -u www-data RAILS_ENV=production bin/rake db:migrate

3.11 Nginx配置

我要设置用Nginx公开的网站。根据我对相关知识的临时理解,我会这样写。

    1. Nginx的配置文件的主要来源是/etc/nginx/nginx.conf。

在nginx.conf中,插件的配置是从/etc/nginx/conf.d/*.conf中引用和加载的,虚拟主机的配置是从/etc/nginx/sites-enabled/*中引用和加载的。

在/etc/nginx/sites-enabled/目录下,通过在其中放置指向/etc/nginx/sites-available/目录中的.conf文件的符号链接,可以方便地更换网站(只需修改符号链接的指向方向)。

据说,可以用图表表示成这样的样子。

然而,最开始自然没有名为redmine的符号链接,只有一个名为default的文件。

    1. 我会删除默认设置

 

    1. 我会创建redmine_server.conf文件

 

    我会创建一个名为redmine的符号链接
# 作業フォルダーは/etc/nginx/
$ pwd
/etc/nginx/
# 先にnginxのサービスを止める
$ sudo systemctl stop nginx
# シンボリックリンクの削除(rmでもできるけれどもunlinkで)
$ unlink ./sites-enabled/default
# sites-availableにあるdefaultの設定を名前を変えてコピーしてやる
$ cp ./sites-available/default ./sites-available/redmine.conf
# シンボリックリンクの作成(フルパスで指定してね(^o^)/)
$ ln -s /etc/nginx/sites-available/redmine.conf /etc/nginx/sites-enabled/redmine

然后将默认的redmine.conf复制并对其进行修改。

server {
    listen 80;
    server_name redmine;
    # passeengerを有効に設定
    passenger_enabled on;
    # passengerに指定するrubyのインストールパス
    passenger_ruby /usr/local/bin/ruby;
    # Redmineを実行するためのルートディレクトリの設定
    root /var/lib/redmine/public;
}

在启动nginx之前,一定要确保修正工作已经完成,并进行语法检查(否则nginx将无法启动,这将带来痛苦)。

$ sudo nginx -t
# 問題なければ以下のように表示される
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

当你到达这一步时,启动nginx服务并在浏览器中访问页面,如果登录页面显示出来,则表示完成。

sudo systemctl start nginx
sudo systemctl status nginx
image.png

印象

Nginx的配置比预想的简单,令人惊讶。
相反地,困扰的要点是…

    在没有充分理解的情况下,我同时运行了sudo apt install passenger和sudo gem install passenger,并遇到了困难。在过程中,Passenger对我说:“为什么安装了两次?”而我对Nginx、Passenger和libnginx-mod-http-passenger的关系并不清楚,所以我尝试了大约三次的安装和卸载,当我手动删除了/etc/下的配置文件后,服务器彻底崩溃了,我不得不重新创建它(即使使用apt –purge也无法重新创建配置文件……)而当我匆忙安装了Ruby 3.2.2后,Bundler不友善地告诉我:“无法使用”。总之,经过这些磨练,我已经确定了步骤,所以我希望能够继续推广Redmine(不仅限于问题管理系统)到各个地方。

下面是对”参考文献”的原生中文释义:

引用资料
文献目录
参考资料
参考书目

 

就个人而言,以前我会把/redmine/之类的东西放在/opt/文件夹里,但是我不知道放在哪里才是正确的选择。
广告
将在 10 秒后关闭
bannerAds