ラベル Redmine の投稿を表示しています。 すべての投稿を表示
ラベル Redmine の投稿を表示しています。 すべての投稿を表示

2021年4月12日月曜日

Redmineのサーバー移行(4.0→4.1.2)とGoogle認証プラグイン

サーバー移転したとき苦労したので、備忘録として残しておきます。

Redmime 利用しているGoogle認証プラグインは、「Redmine Omniauth Google plugin」に対して

の修正版を施したものです。こちらは、redmine 4.1.2 でも動作します。

移転先は、さくら VPS(CentOS Stream8)です。


関連情報


STEP 1. 新サーバーに Redmine 4.1.2 を新規導入


とても長い道のりがあります。
基本的には上記サイトの通りにセットアップするとよいです。
  1. DB: MariaDB 10.3.x
  2. Perl: perl 5.26
  3. Ruby :  2.6.x 
  4. Unicorn(自動起動)
  5. 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 データの移行


を参考に、元サーバーから
  1. files フォルダ
  2. themes フォルダ内の利用テーマフォルダ
  3. plugins フォルダ内の利用プラグインフォルダ
  4. 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

2019年6月7日金曜日

Redmineのアップグレード(3.4→4.0)とGoogle認証プラグイン

そろそろ 4.0系にアップグレードするかぁと思ってやってみました。
今回はメジャーバージョンアップになります。

関連情報





3.3から3.4系にしたときには特に目新しいものはなかったので、Redmine に関するブログを書くのは久しぶりです。なお 3.4 にしたときに、Google認証プラグイン「redmine_omniauth_google」が動作しなくなっていました。
しかし今回、
というオリジナルをフォークした「redmine_omniauth_google」プラグインを使わせていただき、動くようになりました。

アップグレード


インストール場所:/usr/local/redmime-svn/4.0-stable
Nginxで指定する場所:/usr/local/redmine-svn/redmine (/usr/local/redmime-svn/4.0-stable へのシンボリックリンク)
データベース:redmine34 --> redmine40 への移行

とすると仮定します。

Step 1. Redmine のダウンロード


cd /usr/local/redmine-svn
svn co https://svn.redmine.org/redmine/branches/4.0-stable/

これで 4.0-stable フォルダができます。

Step 2. 設定のコピーと編集


cd /usr/local/redmine-svn/4.0-stable
cp -p  ../3.4-stable/config/database.yml   config/
cp -p  ../3.4-stable/config/configuration.yml   config/
cp -p  ../3.4-stable/config/unicorn.rb    config/

config/database.yml の編集(1箇所)

データベースとして、
database:redmine34
database:redmine40

Step 3. データベースのコピー


phpmyadmin 等で redmine34 のデータベースをエクスポートし、redmine40 というデータベースを新規作成した上で、そこにインポートする。

redmine34 と異なるユーザーに権限を渡した場合には、上記 database.yml のユーザーとパスワードのデータを変更すること。

Step 4. ファイルとフォルダのコピー


cd /usr/local/redmine-svn/4.0-stable
rm -rf files
cp -rp ../3.4-stable/files 

Step 5. Google Auth プラグイン「redmine_omniauth_google」のインストール


cd /usr/local/redmine-svn/4.0-stable
cd plugins
git clone https://github.com/yamamanx/redmine_omniauth_google.git
bundle install

※ bundle install で警告やエラーがでたが、とりあえずそのまま進む。

Step 6. 必要なツール類のインストール(Unicorn等)


cd /usr/local/redmine-svn/4.0-stable
gem install bundler --no-rdoc --no-ri
echo 'gem "unicorn"' >> Gemfile
bundle update
bundle exec rake generate_secret_token
bundle exec rake db:migrate RAILS_ENV=production
bundle exec rake redmine:plugins:migrate RAILS_ENV=production

Step 7. A1 テーマのインストールと設定移行


以前から A1テーマを使っていたので、その最新版を入れることにする。
ダウンロードしたものについて

/usr/local/redmine-svn/4.0-stable/public/themes/

に展開する(a1フォルダを入れる)。

/usr/local/redmine-svn/4.0-stable/public/themes/a1/

に入るはず。
以前の a1 テーマにカスタム設定したスタイルシートを移行しておく

cd /usr/local/redmine-svn/4.0-stable
cp -p  ../3.4-stable/public/themes/a1/stylesheets/application.css   public/themes/a1/stylesheets/

どういうカスタマイズをしたかというと

優先度
 今すぐ:紫
 急いで:赤
 高め:オレンジ
 通常と低い:灰色・白
※ただし終了したものは、通常と同じ背景にした上で、文字は青。

という感じ。

Step 8. Redmine を止めて移行する


まずは動作している Redmine 3.4系を停止します。

/etc/init.d/unicorn stop

unicorn のプロセスが残っていたら個別に kill してください。
残っていたら、移行後に redmine 4.0 用の unicornが起動できません。

cd /usr/local/redmine-svn/
rm redmine
ln -s 4.0-stable  redmine

として
/usr/local/redmine-svn/redmine (シンボリックリンク)の実体を
 3.4-stable から 4.0-stable フォルダに切り替えます。

/etc/init.d/unicorn start

で起動すればOK.

STEP 9. Google 認証でログインできるようにする


管理者で Redmine にログインし、「管理 > プラグイン」より、「redmine_omniauth_google」プラグインの設定を行います。

設定に関しては
を参考にしてみてください。
基本的に
  • Client ID: Google Developer Console で発行
  • Client Secret: Google Developer Console で発行 
  • Available domains: 無料版 Gmailなら gmail.com、G Suiteならそれぞれのドメインを入れる感じ。
  • Oauth authentiffication: オンにする
になるはずです。

またプラグインの各種設定については

を参考にしてみるとよいでしょう。

実際にログアウトして、Google 認証ボタン(Login via Google)を押して、Googleログイン画面が出てきて、そこにログインすることで Redmine に登録したユーザー(メールアドレス)でログインできたらOKですね。



ということで Redmine 4.0.3(2019-06-07時点)が入ったのでした。
今回 Redmine の新機能をみると、##チケットID でチケットのタイトルが入ってくれるのは大きいなと思いました。

2019年6月7日 @kimipooh

2016年6月9日木曜日

【参考】サーバー移転(Nginx):Redmineのアップグレード(3.2→3.3)とGoogle認証プラグイン

以前、同一サーバーでのアップグレードについては掲載していました。
Redmineのアップグレード(3.1→3.2)とGoogle認証プラグイン
今回は完全なサーバーのお引越しです。

引越前
  • Apache + Passanger + ruby 1.9 + Redmine 3.2 (RHEL 5)
引越後
  • Nginx + Unicorn + ruby 2.3 + Redmine 3.3 (RHEL 6)

Nginxは LibreSSLを使っていますが、RHEL 6標準の opensslも入れています。
このあたりもあって話がややこしく、、、いやいやチャレンジ精神旺盛でしょ!?

1. Ruby 2.3 導入編


2016年4月20日水曜日

Redmineのアップグレード(3.1→3.2)とGoogle認証プラグイン

昨年7月頃に、「Redmineのアップグレード(2.4.1→3.1)とGoogle認証プラグイン」という記事を書きました。IP制限+BASIC認証(SSL)+Google認証でロックされているのでアップデートをさぼっていたのですが、そろそろアップグレードしないとなーと思って、重い腰を上げました。

最新は、 Redmine 3.2.1 ということ。前回のアップグレードメモを見ながらやってみます(ホント、こういうメモを残しておいてよかった)。簡単に行くのでしょうか、Warningを無視するなら簡単でした...

はじめに

  • Ruby, Passenger(mod_rails for Apache)は変更しない 
  • 前の環境にいつでも戻せるようにする
     ※URLは変更する
のポリシーは変更せずです。

/redmine31 --> /redmine32 (データベーステーブルも、redmine31 --> redmine32)とします。

ですので現環境を何も触らずに新しい場所、新しいテーブル(データベース)に移行するという形です。

1. 仕様確認

2015年7月15日水曜日

Redmineのアップグレード(2.4.1→3.1)とGoogle認証プラグイン

Redmine 2.4.1を使っていましたが、3.1がすでにリリースされていてサポートも2.6 / 3.0 / 3.1しかされていない状況です。
「SSL+パスワードロック」+「IP制限」をさらに上からかぶせているので、ちょっと後回しになっていたのですが、一念発起してアップグレードしました。さすがにバージョンを大幅にアップしたこともあり、やった内容についてメモしておきます。

おもにサーバー管理者向けのため、当然知っているはずのウェブサーバー設定など細かい説明は省いている部分があります。

はじめに

  • Ruby, Passenger(mod_rails for Apache)は変更しない 
  • 前の環境にいつでも戻せるようにする
     ※URLは変更する
ことを前提に、Redmineのアップグレードを行いました。
あまり一度にやってしまうとトラブルシューティングが大変だからです。

2014年2月14日金曜日

【まめ知識】RedmineでGoogle Apps認証!

RedmineをようやくRedhat Linux ESで立ちあげられたのですが、さらにユーザー管理としてGoogle Apps認証に成功したのでメモしておきます。