はじめに
本記事の目的
- nginxのWebサーバを、letsencryptの証明書でSSL化し、Redmineをインストールするまでを解説する。
- Redmineではチケットの登録時などにメール通知をする機能があるので、メールサーバの構築も行う。
前提環境
- Ubuntu Server 18.04.2 LTS
- Redmine 3.4.10
- Nginx
- サーバ名は www.hoge.net とする。
- 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は使わずにインストールする。
```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
データベースへの接続設定
公式ドキュメントと同様。
production:
adapter: postgresql
database: redmine
host: localhost
username: redmine
password: "********"
encoding: utf8
設定ファイル config/configuration.yml の作成
config/configuration.yml.sample
をコピーして利用してOK。production の箇所を見つけて追記する。
メールサーバ等は適宜変更すること。
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ポートは閉じていたのが原因だった。
これで半日潰れてしまった・・・。