Ubuntu18.04でのRedmineアップグレードについての備忘録

仕事やプライベートでRedmineを使ってタスク管理・ナレッジ管理をしていて、Ubuntuのパッケージを利用してRedmineを運用している。
最近、Redmineの環境をUbuntu16.04から18.04にアップグレードした際に、Rubyのバージョン依存での不具合や注意点、Passengerのインストールのつまずきがあったので、対策等をメモしておく。

■Rubyの罠

Redmineの構成や利用しているgemパッケージはそれほど変わっていないようだが、aptパッケージとgemパッケージの依存関係が競合してインストールに失敗する場合がある。

上のようにRMagickのパッケージをインストールするときに関連するライブラリ(パッケージ)がインストールされていないと、インストールを失敗したあとで環境の修復にも時間がかかる。
また、rbenvを使ってrubyのバージョン管理をしている場合は、aptパッケージのrubyと競合するので、少なくともroot権限のrbenvは削除してaptパッケージのrubyを参照するようにしておいたほうがいい。(ユーザー権限のrbenvは残っていてもアップグレードできた)

対策:

  • rmagick関連のパッケージをインストールしていないクリーンな環境で、必要なライブラリ関連のパッケージが全てインストールした状態にしてアップグレードする。もしくは、ソースコードから必要なパッケージを1つずつインストールする。
    条件に合わずにインストールエラーが発生するとRedmineのインストールが完走しなくなり、後述の「aptの罠」にもハマってしまう。

  • 具体的な対策は、gemのインストール(bundle insall ~)の前に必要なaptパッケージのライブラリが揃っているとエラーにならないようだ。以下のパッケージ全てインストールすると大丈夫だと思う。

sudo apt install ruby-fastimage ruby-mini-magick ruby-oily-png
sudo apt install imageinfo imagemagick imagemagick-6-common imagemagick-6-doc imagemagick-6.q16 imagemagick-6.q16hdri imagemagick-common imagemagick-doc
sudo apt install libchart-gnuplot-perl libgraphics-magick* libgraphicsmagick* libmagick*
  • 前述の対応でubuntu側のパッケージが揃うはずだが、環境依存でGemfileでインストールするパッケージのバージョンがあわない場合がある。自分の場合はGemfileに記述されたnokogiriのバージョンがbundle installでは解決できなかった。
    同じ不具合にあった場合は"bundle install"の前に個別にバージョン指定してnokogiriをインストールしてから"bundle ~"すれば解決することができた。
gem install nokogiri -v "1.8.1"

■aptの罠

上のRMagick等のgemの依存関係でRedmineをアップグレードするとaptの途中で止まってしまう場合がある。aptのインストールが途中で失敗すると、他のパッケージをインストールしようとするときにもRedmineも再インストールすることになり、全てのパッケージのインストールに失敗する。

対策:

aptのエラーを修復するためにはパッケージをインストールする都度Redmineのパッケージを削除するか、apt-get upgradeからRedmineパッケージを除外して関連パッケージをインストールしてから再度有効化する必要がある。

参考:apt-get upgradeから特定パッケージを除外する
https://qiita.com/strsk/items/c933a661c077a666073a

■Passengerの罠

Passengerをアップグレードするときにautoオプションでインストールしたのだけど、autoオプションではPassenger専用のnginxのソースビルドが導入されてしまい、動作させるための設定に苦労した。
Passenger版のnginxはディストリビューション版とは異なる最低限のコンパイルオプションでビルドされるため、Passengerを含まないApacheやNginxの設定では正常に動作しない。(自動でインストールされたPassengerの設定を確認してから気がついた)

対策:

  • Passenger版のnginxは利用せずにUbuntuのnginxパッケージを再インストールする
sudo apt install nginx-core nginx-full --reinstall
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

■Permissionの調整

前バージョンまでRailsとPassengerの連携を重視してApacheを利用していたが、最近はnginxのほうが慣れて安心できるためnginxへ変更した。このときに各所でpermissionの調整が必要になったので、これもメモしておく。

対策:

  • ・apache2ユーザーの権限 "www-data"をnginxユーザーへchownする
    パッケージでインストールされているディレクトリ("/usr/share/redmine"等)はエイリアスが多用されているので、"chown nginx:nginx -rf"のようなサブディレクトリ一括でのパーミッション変更ができない場合があるので注意が必要。

  • Web公開用のディレクトリだけでなく、起動スクリプト(/etc/init.d/nginx )とデーモン(/etc/systemd/system/multi-user.target.wants/nginx)にもユーザー指定の記述があれば変更する必要がある。

■まとめ

Redmine3.4+nginxへアップグレードしたことによる利点:

  1. パフォーマンスが大幅に向上した
  • Redmine+Apache2+Passengerでは、チケットの投稿に数秒かかる場合があったのだけど、Redmine+nginxに変更してから1秒以内に投稿できるようになった。
    メモリ効率も向上していて、Apacheではメモリ使用量が200MB以上専有されていたのだけどnginxでは100MB以内になった。
  1. 安定した
  • 1のパフォーマンスと同じ原因だと思われるが、Apacheで運用するRedmineではチケットを投稿したときに(数ヶ月に1度程度)原因不明の503エラーが発生していた。エラーが発生したときはApacheの503エラーしかログに残らず再現性がなかったため不具合回避ができずにいたのだけど、アップグレード(nginxに変更)してからは1度も発生しなくなっている。
  1. 古いバージョンのRubyを捨てることができた
  • rubyのパッケージはバージョン依存が強いものが多くて互換性問題が運用リスクとして抱えることになる場合がある。今回アップグレードしたRedmine3.4はrubyを2.5以上に統一することができたので自分にとって大きな利点だった。特にAWSとの連携では、Lambdaがサポートするrubyが2.5以上必須なので運用上なにかと有用である。

Redmine3.4へのアップグレード対応について、反省点と今後のリスク:

  1. 時間の消費
  • Ubuntuで利用するRedmineパッケージのアップグレードは、OS標準のオプションだけで解決できていた為30分~1時間もあれば対応できていたのだが、今回はパッケージの競合等で手作業での調査と対策が必要になり、不具合調査に1日+手順書作成に1日、実施に半日程度かかった。
    振り返りとしては、Dockerや新規のAWSインスタンスを新規で立ち上げて、Redmine18.04用のRedmineを構築してから、旧環境とDBを移行したほうが安全で早く対応できたように思える。
  1. 外部パッケージの導入
  • Ubuntuの標準リポジトリではnginx対応のPassengerが配布されていないため、外部リポジトリからPassengerをインストールしたが、今後の運用管理でリスクになる可能性がある。

letsencryptの設定メモ

■セットアップ

githubからソースをcloneして取得する


$su

#mkdir letsencrypt
#cd letsencrypt
#yum install git
#git clone https://github.com/letsencrypt/letsencrypt.git

■鍵の生成(新規)

letsencryptのSSLを新規作成する場合は下記のような書式で実行する


#新規
#sudo ./letsencrypt-auto certonly  --webroot --webroot-path (nginxのルートフォルダ) -d (ドメイン名)

■鍵の生成(更新)

既にletsencryptのSSLを作成済みで更新する場合


# 更新
#sudo ./letsencrypt-auto --renew certonly --webroot --webroot-path (nginxのルートフォルダ) -d (ドメイン名)

■nginxのconfファイル設定

nginxのconfファイルのSSLを下記のように指定すればOK

    ssl_certificate /etc/letsencrypt/live/(ドメイン名)/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/(ドメイン名)/privkey.pem;

■nginx サービスを再起動

#systemctl restart nginx.service

サービス再起動後にhttpsを確認、letsencryptによって信頼された証明書になっていればOK

無料のERP OpenERP Odoo v8 をCentoOS7で構築する手順

OSSで配布されている無料のERP、OpenERP odooを試してみました。

odooのセットアップは公式ページに概要が掲載されていましたが、
関連するパッケージ等、まとまった記事が見つからなかったので、もろもろをyumで運用できるように導入手順を作成しました。

■yumのパッケージをクリーン&最新版に更新

sudo yum clean all
sudo yum update
sudo yum install wget vim

■epelレポジトリの登録

sudo yum install epel-release

■Apacheのインストール

sudo yum install httpd mod_ssl
sudo systemctl restart httpd.service

cd /var
sudo chown apache:apache www -R -f
sudo chmod 775 www -R -f
umask 022 www
cd

■その他、依存パッケージの登録

sudo yum install pychart python-feedparser python-mock python-openid python-passlib python-psutil python-simplejson python-unittest2 python-vobject

■開発系のパッケージをインストール

sudo yum install babel python-devel libxslt-python pyparsing python-dateutil python-decorator python-imaging python-jinja2 python-ldap python-lxml python-mako python-psycopg2 python-reportlab python-requests python-werkzeug python-yaml python-docutils python-matplotlib python-unittest2.noarch python-babel python-gevent pygtk2 glade3 pytz libxslt-devel bzr automake gcc gcc-c++ byacc kernel-headers

■PostgreSQLとPHP のインストール

#※9.4 odoo8だと9.4が良いらしい
wget http://yum.postgresql.org/9.4/redhat/rhel-7-x86_64/pgdg-centos94-9.4-1.noarch.rpm
sudo rpm -ivh pgdg-centos94-9.4-1.noarch.rpm
sudo yum -y install postgresql94-server postgresql94-devel postgresql94-contrib

#※CentOS7 標準の9.2を使う場合
(sudo yum install postgresql-libs postgresql-server postgresql php-pgsql php-gd)

■関連するユーザーの作成

sudo useradd postgres
sudo passwd postgres

sudo useradd odoo
sudo passwd odoo

■PostgreSQLの初期化

su - postgres -c /usr/pgsql-9.4/bin/initdb
sudo systemctl enable postgresql-9.4.service
sudo systemctl start postgresql-9.4.service

sudo systemctl start postgresql-9.4.service
su - postgres
psql
\password postgres
(Enter new password twice)
\q
exit

■odooユーザーをpostgreに登録

su - postgres -c "createuser --pwprompt --createdb --no-createrole --no-superuser odoo"

■Install Odoo 8

wget https://nightly.odoo.com/8.0/nightly/rpm/odoo_8.0.latest.noarch.rpm
sudo rpm -ivh odoo_8.0.latest.noarch.rpm
sudo systemctl enable odoo
sudo systemctl start odoo

#※odoo本体のインストールはrpmのインストールだけでOK

■Webの管理画面へ接続する

http://[サーバーのIP]:8069/web/
#上のURLへ接続して管理画面が表示されたら、DB名(企業名等)とパスワードを設定して保存する。
#初回のDB作成に数分程度掛かる場合があるようで、ブラウザが反応しなくなっても暫く放置して待つ。
#
#※セットアップが終了すれば、通常のUIは軽快に動作するようです。

responsive-sp

UIはレスポンシブデザインに対応、

サードパーティのアプリケーションも豊富に提供されているようです。
https://www.odoo.com/apps

構築や運用のご要望ご指摘などありましたら、コメント欄へお知らせ頂けますと幸いです。

 

 

 

 

 

※追記
odoo v9が公開されたようです。
https://www.odoo.com/editions