Odooというのは、昔はOpenERPと呼ばれていたのだが、その名の通りERP(Enterprise Resource Planning)を行うためのWebツールだ。 通常Redmineであれば開発プロジェクトとか、特定のエンジニア向けのツールしか用意されていないが、Odooはそれ以外に在庫管理、給与管理、社員管理などのツールが統合されている。 このツール一つで、社内システムを全てカバーしようというのがこのサービスの目的らしい。
これは開発プロジェクトに関わらず、個人で利用するような場合、開発プロジェクトだけでなく個人の様々な情報を一つのツールで確認したくなることはよくある。 このときに、様々なツールが統合されているOdooは、使い物になるだろうか?ちょっと試してみたくなったので、環境を構築することにした。
最終的にはさくらインターネットなどと契約してサーバ上に構築したいが、まずは評価のために仮想マシンを立ち上げるのと、サーバを借りた後も簡単にデプロイするために全てAnsibleで構築できるような環境を作っておく。
Odoo - Wikipedia, the free encyclopedia
Odooのインストールするための方法調査
まずはAnsibleで構築する前に、マニュアルインストールでOdooを構築するための方法を調査しよう。
最新のバージョンは9.0だが、8.0の資料を使っても同様に構築できる。まずは以下のサイトを参考に、Vagrant上に仮想マシンを構築していく。
- ゲストOS : Ubuntu 14.04 LTS
- メモリ: 2048MB (pipのインストールに多量のメモリが必要)
参考にしたサイト
How to Installwww.theopensourcerer.comOpenERPOdoo 8 on Ubuntu Server 14.04 LTS
これらのサイトにあるとおり、まずは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のログイン画面が表示され、うまく起動していることが分かる。
Ansible による Odooを自動的に構築する環境を作る
Ansibleはchefと似ている、コードにより環境を自動的に構築するシステムだ。
ChefとAnsibleはどのように違うのか?
正直Ansibleも試行し始めて1日目なので、何とも言えないのだが、(さらに言うとChefもいつもテンプレートをコピーして使っているのであまり使いこなしてはにないのだが)、どうもChefよりもディレクトリ構造を浅めにつくることができるし、構文もChefよりも多いイメージだ。ちょっと調べただけでも、以下のマニュアルに示すように、様々なモジュールが提供されている。
All Modules — Ansible Documentation
ありすぎる。
これらで、上記のマニュアルインストールしたコードを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をするためのスクリプトが入っている。
- ゲストOSに対してAnsibleをインストールする
- 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 にアクセスすることで、ログイン画面が表示されることが確認できた。ログインすると、各種サービスの設定画面が表示される。うまくいった!