FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

Odooを構築するVagrantの環境をAnsibleで作ろう

Odooというのは、昔はOpenERPと呼ばれていたのだが、その名の通りERP(Enterprise Resource Planning)を行うためのWebツールだ。 通常Redmineであれば開発プロジェクトとか、特定のエンジニア向けのツールしか用意されていないが、Odooはそれ以外に在庫管理、給与管理、社員管理などのツールが統合されている。 このツール一つで、社内システムを全てカバーしようというのがこのサービスの目的らしい。

これは開発プロジェクトに関わらず、個人で利用するような場合、開発プロジェクトだけでなく個人の様々な情報を一つのツールで確認したくなることはよくある。 このときに、様々なツールが統合されているOdooは、使い物になるだろうか?ちょっと試してみたくなったので、環境を構築することにした。

最終的にはさくらインターネットなどと契約してサーバ上に構築したいが、まずは評価のために仮想マシンを立ち上げるのと、サーバを借りた後も簡単にデプロイするために全てAnsibleで構築できるような環境を作っておく。

www.openerp-asia.net

Odoo - Wikipedia, the free encyclopedia

Odooのインストールするための方法調査

まずはAnsibleで構築する前に、マニュアルインストールでOdooを構築するための方法を調査しよう。

最新のバージョンは9.0だが、8.0の資料を使っても同様に構築できる。まずは以下のサイトを参考に、Vagrant上に仮想マシンを構築していく。

  • ゲストOS : Ubuntu 14.04 LTS
  • メモリ: 2048MB (pipのインストールに多量のメモリが必要)

参考にしたサイト

How to Install OpenERP Odoo 8 on Ubuntu Server 14.04 LTS
www.theopensourcerer.com

www.linode.com

これらのサイトにあるとおり、まずはgithubからOdooのリポジトリを取得し、構築していく。詳細はそれぞれのサイトの説明を参照して欲しいのだが、特に難しいところはなく、普通にインストールできる。

インストールが完了したら、/etc/init.d/にサービスを登録して立ち上げる。

$ sudo /etc/init.d/odoo-server start
$ ps aux | grep odoo
odoo      2929  1.0  6.0 843344 123512 ?       Sl   07:49   0:16 python /opt/odoo/odoo-repo/openerp-server -c /etc/odoo-server.conf
vagrant   3226  0.0  0.0  10464   940 pts/0    S+   08:17   0:00 grep --color=auto odoo

Odooのサイトはポート番号8069で構築されるので、あらかじめVagrantfileでこのポートを別のポートにフォワードしておき、ローカルのブラウザで動作を確認する。

  config.vm.network "forwarded_port", guest: 8069, host: 18069
  config.vm.network "forwarded_port", guest: 80,   host: 18080

ローカルブラウザから http://localhost:10869を参照すると、Odooのログイン画面が表示され、うまく起動していることが分かる。

f:id:msyksphinz:20160103171919p:plain

Ansible による Odooを自動的に構築する環境を作る

Ansibleはchefと似ている、コードにより環境を自動的に構築するシステムだ。

www.ansible.com

ChefとAnsibleはどのように違うのか?

正直Ansibleも試行し始めて1日目なので、何とも言えないのだが、(さらに言うとChefもいつもテンプレートをコピーして使っているのであまり使いこなしてはにないのだが)、どうもChefよりもディレクトリ構造を浅めにつくることができるし、構文もChefよりも多いイメージだ。ちょっと調べただけでも、以下のマニュアルに示すように、様々なモジュールが提供されている。

All Modules — Ansible Documentation

ありすぎる。

f:id:msyksphinz:20160103172252p:plain

これらで、上記のマニュアルインストールしたコードをAnsibleのコードにしていけば良い訳だ。

ディレクトリ構造

$ tree .
.
├── ansible
│   ├── hosts
│   └── playbook.yml
├── odoo-server
├── odoo-server.conf
├── provision.sh
└── Vagrantfile

このようにシンプルなディレクトリ構造でAnsibleを構築できる。

  • Vagrantfile : Vagrantを動作させるためのファイル。provisionでprovision.shを実行するために、以下の行が追加されている。
  config.vm.synced_folder ".", "/vagrant", :mount_options => ["dmode=775", "fmode=664"]
  config.vm.provision "shell", :path => "provision.sh"
  • provision.sh : provisionをするためのスクリプトが入っている。

    1. ゲストOSに対してAnsibleをインストールする
    2. Ansibleを実行して環境を構築する。
  • odoo-server.conf : odooの環境設定ファイルを外部に用意しておく。マニュアルインストールではエディタで設定しただがAnsibleでは難しいので、予めファイルを用意しておく。

  • odoo-server : 上記に同じ。 http://www.theopensourcerer.com/wp-content/uploads/2014/09/odoo-server をそのまま拝借させて頂く。

  • ansible : ansibleの環境構築手順を示すファイルが入っている。

AnisbleによるOdooの構築

基本的にマニュアルインストールで記載したものをすべてAnsibleの文法に置き換えていけば良いのだが、まずは最新版のAnsibleを使うべきだということ。このためにpipからansibleをインストールすることにした。

provision.sh

if ! [ `which ansible` ]; then
    apt-get -y update
    apt-get -y upgrade
    apt-get -y install python-dev python-pip
    pip install ansible
fi

あとは殆どAnsibleの文法で対応できる。cpコマンドと同一のものが存在しないため、そこはcommandを作ってファイルの移動を行った。

    - command: cp /usr/local/bin/wkhtmltopdf /usr/bin/wkhtmltopdf
    - command: cp /usr/local/bin/wkhtmltoimage /usr/bin/wkhtmltoimage

PostgreSQLのユーザ作成なども、Ansibleのコマンドで殆ど対応できる。Ansible便利だなー。

    - postgresql_user: name=odoo password=odoo role_attr_flags=SUPERUSER
      sudo: yes
      sudo_user: postgres

最終的にOdooを立ち上げるコマンドを挿入して、インストールは完了となる。

      command: /etc/init.d/odoo-server start

Odoo起動の確認

localhost:18069 にアクセスすることで、ログイン画面が表示されることが確認できた。ログインすると、各種サービスの設定画面が表示される。うまくいった!

f:id:msyksphinz:20160103173245p:plain

f:id:msyksphinz:20160103173254p:plain