サーバー移転したとき苦労したので、備忘録として残しておきます。
Redmime 利用しているGoogle認証プラグインは、「Redmine Omniauth Google plugin」に対して
の修正版を施したものです。こちらは、redmine 4.1.2 でも動作します。
移転先は、さくら VPS(CentOS Stream8)です。
関連情報
- Let’s Encryptをサーバー停止せずに自動更新っ![Nginx](2021-07-02)
- Redmineのアップグレード(3.4→4.0)とGoogle認証プラグイン
- 【参考】サーバー移転(Nginx):Redmineのアップグレード(3.2→3.3)とGoogle認証プラグイン(2016-06-09)
- Redmineのアップグレード(3.1→3.2)とGoogle認証プラグイン(2016-04-20)
- Redmineのアップグレード(2.4.1→3.1)とGoogle認証プラグイン(2015-07-15)
- 【まめ知識】RedmineでGoogle Apps認証!(2014-02-14)
STEP 1. 新サーバーに Redmine 4.1.2 を新規導入
とても長い道のりがあります。
基本的には上記サイトの通りにセットアップするとよいです。
- DB: MariaDB 10.3.x
- Perl: perl 5.26
- Ruby : 2.6.x
- Unicorn(自動起動)
- Nginx 1.18(非暗号, 自動起動)
ここまでうまくいけば、次に Let's Encrypt を使った常時SSLで redmine を動かしたいと思うはず。
STEP 2. 通知のためにメールサーバ(postfix)を導入しよう
Let's Encrypt の証明書通知のために、メールが送信できる環境が必要です。今回は他のメールサーバーを使わず、自前で完結することを想定しています。そのため postfix をインストールします。postfixをインストールしたなら、mailコマンドも使えるようにしておくとなにかと便利です。
dnf install postfix
dnf install mailx
上記2つコマンドで mailコマンドと postfixをインストールします。
今回は完全にローカルでしか使わないので、外部からの 25/tcp を許可する必要はありません。IPv4 のみで良い場合、下記のように inet_protocols を ipv4 にしておくとよいです。
/etc/postfix/main.cf を編集
inet_protocols = ipv4
myhostname = ホスト名(FQDN)
mydomain = ホスト名(FQDN)
上記3つを設定したら、
service postfix start
systemctl enable postfix
で自動起動しておけばよいです。
かりにホストが、hogehoge.example.com であるなら
echo test | mail -s 'test' 自分のメールアドレス
として自分にメールしてみましょう。
たとえば root ユーザーで実行すると
root@hogehoge.example.com からメールが届くはずです。
また /etc/aliases を編集し
root: サーバーのシステム通知をうけるメールアドレス
をいれて
newaliases
にて、エイリアスデーターベースを更新しておきましょう。このあたりはサーバー管理の問題なので、詳細は割愛します。
STEP 3. Redmine を Let's Encrypt を使った常時SSL化してみよう
証明書発行に、certbot を利用する場合、
http://ホスト名(FQDN)
が外部からアクセスできる状況が必要です。実際には Let's Encrypt 側から http://ホスト名/.well-known/ 以下にアクセスができる必要があります。
さくらVPSであれば、コントロールパネルのパケットフィルターから一時的に 80/tcp を外部から許可しましょう。なお 443/tcp (https://)については、IP制限をかけるなど限定接続可能なら、そのほうが安全です。
nginx の場合の Let's Encrpyt 設定方法
の設定が終わっているとします。
SSLサイト:https://hoge.sample.com
とする場合、
https://hoge.sample.com/.well-known 以下に対するアクセス権限が必要です。常時SSLサイトにしているなら、上記フォルダ以外を https へ転送すればよいです。
server {
listen 80;
server_name hoge.sample.com;
location /.well-known {
root /var/www/certbot/;
}
location / {
return 301 https://$host$request_uri;
}
}
上記のように、http://hoge.sample.com/.well-known 専用の root ディレクトリを指定して、実際にそのディレクトリを作成してください。ここは certbot コマンドによって、一時的に証明書関連のデータが保存されます。実行完了後、データは削除されます。
また
/etc/letsencrypt/renewal/hoge.sample.com.conf の
[[webroot_map]]
hoge.sample.com = /var/www/certbot/
のように webroot_map を上記 http://hoge.sample.com/.well-known で指定したルートディレクトリにしておきましょう。
設定がうまくいっていれば、
/etc/cron.d/letsencrypt で設定されている コマンド
- certbot renew --post-hook "systemctl restart nginx"
を実行して、うまく更新されていることを確認しましょう。
次に
を参考に nginx の設定を変更します。
redmine 用の設定
/etc/nginx/conf.d/redmine.conf を上記リンク先にあるように編集します。
ただし、後ほどインストールする Google 認証プラグインのため、下記の赤部分を追加してください。これを追加することで redmine の back_url が http:// から https:// に切り替わってくれます。
location @app {
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_connect_timeout 60;
proxy_read_timeout 60;
proxy_send_timeout 600;
proxy_pass http://unicorn;
}
これで、https://ホスト名(FQDN)
としてアクセスできたら成功です。
STEP 4. Redmine データの移行
を参考に、元サーバーから
- files フォルダ
- themes フォルダ内の利用テーマフォルダ
- plugins フォルダ内の利用プラグインフォルダ
- redmine 用データベース
をバックアップしましょう。
新規インストールしたのと同じデータベース名(上記例だと redmine)にすると、
私の場合にはエラーがでたので
redmine2 など別のデータベースを作成して、そちらにインポートするのがよいと思います。
DBをインポートする、変更した場合にはその都度
redmine のトップフォルダで
bundle exec rails db:migrate RAILS_ENV=production
bundle exec rails redmine:plugins:migrate RAILS_ENV=production
をすること。
プラグインは個別に移行が必要かもしれないので、細かいところは省きます。
プラグインを出し入れした場合
redmine のトップフォルダで
bundle install
systemctl start redmine-unicorn
systemctl status redmine-unicorn
をしましょう。これで unicorn が fail になるようなら、そのプラグインが新しい redmine に対応していないことになります。それをフォルダから外すなりして、上記コマンドを実行しなおしてください。
files はそのまま入れ替えてください。
テーマ内の利用テーマフォルダもそのまま入れ替えてもいいですが、新しいバージョンが出ているなら更新することも検討すればよいです。
Google Developer Console にログインして、
https://ホスト名(FQDN)
を追加しておく必要があります。
今回ハマったのは、
- proxy_set_header X-Forwarded-Proto $scheme;
の設定をいれていなくて
https://ホスト名(FQDN)/oauth_google?back_url=http%3A%2F%2Fホスト名(FQDN)%2F
のように back_urlが http なので、Google認証できないというものでした。
2021年7月2日 更新
2021年4月12日 @kimipooh
2021年4月12日 @kimipooh
0 件のコメント:
コメントを投稿