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

# はじめに
## 本記事の目的

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


## 前提環境

* Ubuntu Server 18.04.2 LTS
* Redmine 3.4.10
* Nginx
 * サーバ名は www.hoge.net とする。
* Let's Encryptのサーバ証明書


# その１：httpサーバを立てる
## サーバ証明書の取得（Let's Encrypt）
まずNginxのインストールだけ行う。

```sh
$ sudo apt-get install nginx
```

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

```sh
$ sudo apt-get install letsencrypt
```
これで、証明書の更新を自動でやってくれるcertbotなどが一式インストールされる。

```sh
$ 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 の該当箇所のみ。

```conf
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インストール時に自動的に追記されたので、参考に記載しておく。

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


# その２：メールサーバを立てる

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

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

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

# その３：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にデフォルトでインストールがされている。
以下の順に実施。

```sh
$ 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月現在の最新バージョンをダウンロードする。
公式ドキュメントとバージョンが異なるが、同じ手順で問題ない。

```sh
$ 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もインストールする。

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

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

```sh
$ 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は使わずにインストールする。

```sh
$ 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パッケージのインストール
公式ドキュメント通り。

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

## Redmineの初期設定と初期データ登録
ここも公式ドキュメント通り。

```sh
$ 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をインストールするところは公式ドキュメントと同様。

```sh
$ sudo gem install passenger
```

### PassengerのNginx用モジュールのインストール
```sh
$ 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
```sh
# 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ファイルが正常に作成されたか確認する。
ちなみに以下は実施しなくても正常に作成されていたので、ファイルが存在していれば気にしなくていい。

```sh
$ 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をリロードする。

```sh
$ sudo service nginx restart
```

#### Step.3 check installation
念の為インストールの正常性を確認しておく。

```sh
$ sudo /usr/bin/passenger-config validate-install
$ sudo /usr/sbin/passenger-memory-stats
```
### Nginxの設定
Redmineを公開するURLを、https://www.hoge.net/redmine とするための設定。
その１で作成したNginxのコンフィグ内、serverディレクティブに以下を追記する

```conf
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ポートは閉じていたのが原因だった。
これで半日潰れてしまった・・・。