Ubuntu Server 18.04LTSにRedmine3.4をインストールする


はじめに

本記事の目的

  • nginxのWebサーバを、letsencryptの証明書でSSL化し、Redmineをインストールするまでを解説する。
  • Redmineではチケットの登録時などにメール通知をする機能があるので、メールサーバの構築も行う。

前提環境

  • Ubuntu Server 18.04.2 LTS
  • Redmine 3.4.10
  • Nginx
  • Let's Encryptのサーバ証明書

その1:httpサーバを立てる

サーバ証明書の取得(Let's Encrypt)

まずNginxのインストールだけ行う。

$ sudo apt-get install nginx

Let's Encryptのパッケージをインストールする。

$ sudo apt-get install letsencrypt

これで、証明書の更新を自動でやってくれるcertbotなどが一式インストールされる。

$ sudo letsencrypt certonly --standalone -d www.hoge.net

メールアドレスの入力や利用規約への同意確認を求められる。
これだけで自動的に証明書の発行、取得、指定ディレクトリへの格納が行われる。
なお、/etc/crond.d内にも自動的にcertbotファイルが作成され、証明書の更新のcron化までやってくれる。

証明書が格納される指定ディレクトリは以下。

証明書:/etc/letsencrypt/live/www.hoge.net/fullchain.pem
キー :/etc/letsencrypt/live/www.hoge.net/privkey.pem

nginxの基本設定

/etc/nginx/sites-available/default の該当箇所のみ。

server {
    listen *:443 ssl default_server;
    server_name www.hoge.net;
    ssl on;
    ssl_certificate /etc/letsencrypt/live/www.hoge.net/fullchain.pem; # manag
ed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/www.hoge.net/privkey.pem; # man
aged by Certbot
    charset utf-8;

    root /var/www/html;
    # Add index.php to the list if you are usin PHP
    index index.html index.htm index.nginx-debian.html;

    location / {
        try_files $uri $uri/ =404;
    }

}

ついでに、80番ポートへのアクセス時に、自動的に443へリダイレクトする設定は、certbotインストール時に自動的に追記されたので、参考に記載しておく。

server {
    if ($host = www.hoge.net) {
        return 301 https://$host$request_uri;
    } # managed by Certbot
}

その2:メールサーバを立てる

Ubuntuの公式ドキュメントに沿って実行する。
https://help.ubuntu.com/lts/serverguide/postfix.html.ja

メールサーバのホスト名を、mail.hoge.netのようにhttpサーバと異なる名称にしているため、
SSL証明書は改めて取得する。

$ sudo letsencrypt certonly --standalone -d mail.hoge.net

その3:Redmineをインストールする

前提

基本的にはRedmineの公式ドキュメントに沿ってインストールするが、Ubuntuのバージョン、およびApacheではなくNginxを利用するため、差分を中心に記載する。

参照URL:http://blog.redmine.jp/articles/3_4/install/ubuntu/

ソフトウェア バージョン
Redmine 3.4.10
OS Ubuntu Server 18.04.2 LTS
データベース PostgreSQL 10.7
Webサーバ Nginx 1.14.0 (Railsの実行にはPassengerを使用)
Ruby 2.6.2p47

パッケージインストール

PostgreSQLがバージョン10となるため、PostgreSQLのインストールで差分がある。
また個人的にsubversionは今回使用しないため、インストールしない。なおgitはUbuntuにデフォルトでインストールがされている。
以下の順に実施。

$ sudo locale-gen ja_JP.UTF-8
$ sudo apt-get update
$ sudo apt-get install -y build-essential zlib1g-dev libssl-dev libreadline-dev  libyaml-dev libcurl4-openssl-dev libffi-dev
$ sudo apt-get install -y postgresql postgresql-server-dev-10
$ sudo apt-get install -y imagemagick libmagick++-dev fonts-takao-pgothic

Rubyのインストール

2019年4月現在の最新バージョンをダウンロードする。
公式ドキュメントとバージョンが異なるが、同じ手順で問題ない。

$ curl -O https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.2.tar.gz
$ tar zxf ruby-2.6.2.tar.gz
$ cd ruby-2.6.2
$ ./configure --disable-install-doc
$ make
$ sudo make install
$ ruby -v

Bundlerもインストールする。

$ sudo gem install bundler --no-rdoc --no-ri

PostgreSQLの設定

公式ドキュメントとバージョンが異なるが、同じ手順で問題ない。

$ sudo -u postgres createuser -P redmine
$ sudo -u postgres createdb -E UTF-8 -l ja_JP.UTF-8 -O redmine -T template0 redmine

Redmineのインストール

svnは使わずにインストールする。

$ curl -O http://www.redmine.org/releases/redmine-3.4.10.tar.gz
$ sudo tar zxf redmine-3.4.10.tar.gz /var/lib
$ cd /var/lib
$ sudo mv redmine-3.4.10 redmine
$ sudo chown -R www-data.www-data redmine

データベースへの接続設定

公式ドキュメントと同様。

database.yml
production:
  adapter: postgresql
  database: redmine
  host: localhost
  username: redmine
  password: "********"
  encoding: utf8

設定ファイル config/configuration.yml の作成

config/configuration.yml.sample をコピーして利用してOK。production の箇所を見つけて追記する。
メールサーバ等は適宜変更すること。

configuration.yml
production:
  email_delivery:
    delivery_method: :smtp
    smtp_settings:
      address: "mail.hoge.net"
      port: 25
      domain: "hoge.net"

  rmagick_font_path: /usr/share/fonts/truetype/takao-gothic/TakaoPGothic.ttf

gemパッケージのインストール

公式ドキュメント通り。

$ cd /var/lib/redmine
$ sudo -u www-data bundle install --without development test --path vendor/bundle

Redmineの初期設定と初期データ登録

ここも公式ドキュメント通り。

$ sudo -u www-data bundle exec rake generate_secret_token
$ sudo -u www-data RAILS_ENV=production bundle exec rake db:migrate
$ sudo -u www-data RAILS_ENV=production REDMINE_LANG=ja bundle exec rake redmine:load_default_data

Passengerのインストール

ここはnginxのため公式ドキュメントとは異なる。
Passengerをインストールするところは公式ドキュメントと同様。

$ sudo gem install passenger

PassengerのNginx用モジュールのインストール

$ cd /usr/local/bin
$ sudo ./passenger-install-nginx-module

ここから以下のURLを参考にNginx用ライブラリをインストールする。
https://www.phusionpassenger.com/library/install/nginx/install/oss/bionic/

Step.1 install Passenger packages

# Install our PGP key and add HTTPS support for APT
$ sudo apt-get install -y dirmngr gnupg
$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys $ 561F9B9CAC40B2F7
$ sudo apt-get install -y apt-transport-https ca-certificates

# Add our APT repository
$ sudo sh -c 'echo deb https://oss-binaries.phusionpassenger.com/apt/passenger bionic main > /etc/apt/sources.list.d/passenger.list'
$ sudo apt-get update

# Install Passenger + Nginx module
$sudo apt-get install -y libnginx-mod-http-passenger

Step.2 enable the Passenger Nginx module and restart Nginx

configファイルが正常に作成されたか確認する。
ちなみに以下は実施しなくても正常に作成されていたので、ファイルが存在していれば気にしなくていい。

$ 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

Nginxをリロードする。

$ sudo service nginx restart

Step.3 check installation

念の為インストールの正常性を確認しておく。

$ sudo /usr/bin/passenger-config validate-install
$ sudo /usr/sbin/passenger-memory-stats

Nginxの設定

Redmineを公開するURLを、https://www.hoge.net/redmine とするための設定。
その1で作成したNginxのコンフィグ内、serverディレクティブに以下を追記する

server {
        # 省略 listen ~ locatioin / {} まで。

        location ~ ^/redmine {
                root /var/lib/redmine/public;
                passenger_base_uri /redmine;
                passenger_app_root /var/lib/redmine;
                passenger_enabled on;
                rails_env production;
        }
}

これで443ポートで公開される。

以上。

おまけ

ハマったところ

Postfixの設定で、外部から送信されたメールを受信することができなかった。
具体的には、Gmailから、@hoge.net 宛のメールが届かなかったということ。逆はできていた。
原因は、smtpsポートは開いていたがsmtpポートは閉じていたのが原因だった。
これで半日潰れてしまった・・・。