Dockerを使用してUbuntu20.04にOdooをインストールする方法
序章
Odoo は、Pythonで記述されたオープンソースのエンタープライズリソースプランニング(ERP)ツールです。 経理、給与、在庫管理など、さまざまな種類のビジネスニーズに対応する多数のプラグインをサポートしています。
このチュートリアルでは、Docker Composeを使用してOdooとPostgreSQLデータベースをインストールし、次にNginxをインストールしてOdooサイトのリバースプロキシとして機能させます。 最後に、Certbotを使用して Let’s Encrypt Certificate Authority からTLS証明書をダウンロードして構成することにより、安全なHTTPS接続を有効にします。
前提条件
このチュートリアルを完了するには、次のものが必要です。
- 2つ以上のCPUを搭載したUbuntu20.04サーバー、sudoアクセス権を持つ非rootユーザー、およびファイアウォール。 これを設定するには、 Ubuntu20.04を使用したサーバーの初期設定チュートリアルに従ってください。
- Dockerがインストールされています。 Ubuntu 20.04にDockerをインストールして使用する方法のステップ1およびステップ2に従って、Dockerをインストールしてroot以外のユーザーを構成します
docker
コマンドを実行できるようにします。
注: DigitalOceanのワンクリックDockerイメージを使用している場合は、これらの前提条件をスキップできます。 このイメージは、Docker、Docker Compose、およびUFWで事前構成されています。
選択したリージョンで新しいDockerイメージを起動し、 root ユーザーとしてログインして、チュートリアルを続行します。
最後に、TLSを有効にするには、サーバーのパブリックIPアドレスを指すドメイン名が必要です。 これは、example.com
またはodoo.example.com
のようになります。 DigitalOceanを使用している場合は、コントロールパネルでドメインリソースを作成する方法について、DNSクイックスタートを参照してください。
すべての前提条件が整ったら、ステップ1 に進み、docker-compose
パッケージをインストールします。
ステップ1—DockerComposeをインストールする
docker-compose
コマンドラインツールをインストールするには、パッケージリストを更新してから、apt
を使用してパッケージをインストールします。
- sudo apt update
- sudo apt docker-compose
注:Ubuntu20.04に含まれているものよりも新しいDockerComposeパッケージをインストールすることもできます。 これを行うには、 Ubuntu20.04にDockerComposeをインストールして使用する方法のステップ1に従います。
このバージョンのDockerComposeを使用する場合は、コマンドとしてdocker-compose
の代わりにdocker compose
を使用する必要があります。
次のコマンドを実行して、パッケージがインストールされていることを確認できます。
- docker-compose –version
次のような出力を受け取るはずです。
Outputdocker-compose version 1.25.0, build unknown
docker-py version: 4.1.0
CPython version: 3.8.10
Docker Composeがサーバーにインストールされていることを確認したら、このチュートリアルの次のステップで、DockerComposeを使用してOdooとPostgreSQLを構成して起動します。
ステップ2—DockerComposeでOdooとPostgreSQLを実行する
OdooおよびPostgreSQLコンテナの作成を開始するには、ホームディレクトリにodoo
というディレクトリを作成して、このチュートリアルで作成するファイルを保存します。 このディレクトリを使用して、Odooを実行するために必要なすべてのファイルを保存します。
次のコマンドを実行してディレクトリを作成し、cd
をそのディレクトリに追加します。
- mkdir ~/odoo
- cd ~/odoo
次に、nano
またはお好みのエディターを使用して、docker-compose.yml
という新しい空のYAMLファイルを開きます。
- nano docker-compose.yml
このファイルをdocker-compose
コマンドとともに使用して、OdooコンテナーとPostgreSQLコンテナーを起動し、それらをリンクします。 次の行をファイルに追加します。
version: '3'
services:
odoo:
image: odoo:15.0
env_file: .env
depends_on:
- postgres
ports:
- "8069:8069"
volumes:
- data:/var/lib/odoo
postgres:
image: postgres:13
env_file: .env
volumes:
- db:/var/lib/postgresql/data/pgdata
volumes:
data:
db:
このファイルは、2つのservices
を定義しています。 1つ目はodoo
と呼ばれ、Odooアプリケーションを実行します。 2つ目はpostgres
と呼ばれ、PostgreSQLデータベースコンテナです。 どちらのサービスも、実行中のコンテナインスタンスの外部にデータを格納するために使用する名前付きボリュームを参照します。 最後に、odoo
サービスは、サーバー上のポート8069
を、同じポート8069
で実行されているOdooコンテナーに公開します。
編集が完了したら、ファイルを保存して終了します。 nano
を使用している場合は、CTRL+O
、RETURN
の順に押して保存し、CTRL+X
を押して終了します。
OdooおよびPostgreSQLコンテナーは、環境変数を使用して自身を構成します。 docker-compose.yml
ファイルは、両方のサービスのenv_file
ディレクティブを指定します。 そのディレクティブには、各サービスが実行する必要のある変数を含む参照ファイルが含まれます。
docker-compose.yml
ファイルに環境変数を直接追加するのではなく、このアプローチをお勧めします。これは、docker-compose.yml
ファイルにパスワードを含めないようにすることをお勧めします。 このアプローチは、ファイルをGitリポジトリまたは別のソース管理システムにコミットする場合に特に適用できます。
nano
を使用して新しい.env
ファイルを開きます。
- nano .env
次の行をファイルに追加し、強調表示された値の代わりに、選択したPOSTGRES_USER
およびPOSTGRES_PASSWORD
に置き換えます。
# postgresql environment variables
POSTGRES_DB=postgres
POSTGRES_PASSWORD=a_strong_password_for_user
POSTGRES_USER=odoo
PGDATA=/var/lib/postgresql/data/pgdata
# odoo environment variables
HOST=postgres
USER=odoo
PASSWORD=a_strong_password_for_user
OdooとPostgreSQLのパスワードを生成するには、openssl
コマンドを使用します。これは、ほとんどのLinuxシステムで使用できるはずです。 サーバーで次のコマンドを実行して、ランダムなバイトセットを生成し、パスワードとして使用できるbase64でエンコードされたバージョンを出力します。
- openssl rand -base64 30
結果の文字列を、a_strong_password_for_user
プレースホルダーパスワードの代わりに.env
ファイルに貼り付けます。
.env
ファイルの編集が完了したら、テキストエディタを保存して終了します。
これで、docker-compose
コマンドを使用してodoo
およびpostgres
コンテナーを開始する準備が整いました。
- docker-compose up -d
up
サブコマンドは、docker-compose
に、docker-compose.yml
ファイルで定義されているコンテナーおよび関連するボリュームとネットワークを開始するように指示します。 -d
フラグ(「デーモン化」を表す)は、コマンドが端末を引き継がないように、docker-compose
にコンテナーをバックグラウンドで実行するように指示します。 docker-compose
は、必要なDockerイメージをダウンロードしてからコンテナーを起動するときに、簡単な出力を出力します。
OutputCreating network "odoo_default" with the default driver
Creating volume "odoo_odoo_data" with default driver
Creating volume "odoo_postgres_data" with default driver
Pulling odoo (odoo:14.0)...
15.0: Pulling from library/odoo
. . .
OdooおよびPostgreSQLコンテナをいつでも停止したい場合は、~/odoo
ディレクトリで次のコマンドを実行します。
- docker-compose stop
コンテナは停止します。 docker-compose up -d
コマンドを使用してコンテナーを再開できるように、ボリューム内の構成とデータは保持されます。
それが完了すると、Odooが実行されているはずです。 curl
コマンドを使用してホームページを取得することにより、Webサーバーが127.0.0.1:8069
で実行されていることをテストできます。
- curl --head http://localhost:8069
これにより、応答からHTTPヘッダーのみが出力されます。
OutputHTTP/1.0 303 SEE OTHER
Content-Type: text/html; charset=utf-8
Content-Length: 215
Location: http://localhost:8069/web
Set-Cookie: session_id=142fa5c02742d0f5f16c73bc14ec8144b8230f8a; Expires=Mon, 06-Jun-2022 20:45:34 GMT; Max-Age=7776000; HttpOnly; Path=/
Server: Werkzeug/0.14.1 Python/3.7.3
Date: Tue, 08 Mar 2022 20:45:34 GMT
303 SEE OTHER
応答は、Odooサーバーが稼働中であることを意味しますが、インストールを完了するには別のページにアクセスする必要があります。 強調表示されたhttp://localhost:8069/web
Locationヘッダーは、ブラウザーのOdooインストーラーページにアクセスする場所を示します。
次に、パブリックトラフィックをOdooコンテナにプロキシするようにNginxを設定します。
ステップ3—Nginxのインストールと構成
NginxなどのWebサーバーをOdooサーバーの前に配置すると、キャッシュ、圧縮、静的ファイルの提供をより効率的なプロセスにオフロードすることで、パフォーマンスを向上させることができます。 Nginxをインストールし、Odooへのリバースプロキシリクエストを構成します。つまり、ユーザーからOdooへのリクエストの受け渡しとそのやり直しを処理します。 コンテナ化されていないNginxプロセスを使用すると、次のステップでLet’sEncryptTLS証明書を追加するのも簡単になります。
まず、パッケージリストを更新してから、apt
を使用してNginxをインストールします。
- sudo apt update
- sudo apt install nginx
Nginx Full UFWアプリケーションプロファイルを使用して、ポート80
および443
(HTTPおよびHTTPS)へのパブリックトラフィックを許可します。
- sudo ufw allow "Nginx Full"
OutputRule added
Rule added (v6)
次に、/etc/nginx/sites-available
ディレクトリにある新しいNginx構成ファイルを開きます。 odoo.conf
と呼びますが、別の名前を使用することもできます。
- sudo nano /etc/nginx/sites-available/odoo.conf
以下を新しい構成ファイルに貼り付けます。必ずyour_domain_here
をOdooサーバーを指すように構成したドメインに置き換えてください。 これは、たとえばodoo.example.com
のようになります。
server {
listen 80;
listen [::]:80;
server_name your_domain_here;
access_log /var/log/nginx/odoo.access.log;
error_log /var/log/nginx/odoo.error.log;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Proto https;
proxy_pass http://localhost:8069;
}
}
次のステップでCertbotにTLSの構成を任せるため、この構成は現時点ではHTTPのみです。 構成ファイルの残りの部分は、ログの場所を設定してから、すべてのトラフィックといくつかの重要なプロキシヘッダーを、前の手順で起動したOdooコンテナーであるhttp://localhost:8069
に渡します。
ファイルを保存して閉じ、/etc/nginx/sites-enabled/
にリンクして構成を有効にします。
- sudo ln -s /etc/nginx/sites-available/odoo.conf /etc/nginx/sites-enabled/
nginx -t
を使用して、構成ファイルの構文が正しいことを確認します。
- sudo nginx -t
Outputnginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
そして最後に、nginx
サービスを新しい構成でリロードします。
- sudo systemctl reload nginx.service
これで、OdooサイトがプレーンHTTPで利用できるようになります。 http://your_domain_here
をロードすると(セキュリティ警告をクリックする必要がある場合があります)、次のようになります。
サイトがHTTP経由で稼働しているので、CertbotおよびLet’sEncrypt証明書を使用して接続を保護します。 これは、OdooのWebベースのセットアップ手順を実行する前に実行する必要があります。
ステップ4—CertbotのインストールとTLS証明書の設定
CertbotとLet’sEncryptの無料認証局のおかげで、OdooアプリにTLS暗号化を追加するのに必要なコマンドは2つだけです。
まず、CertbotとそのNginxプラグインをインストールします。
- sudo apt install certbot python3-certbot-nginx
次に、certbot
を--nginx
モードで実行し、Nginxserver_name
構成ディレクティブで使用したものと同じドメインを指定します。
- sudo certbot --nginx -d your_domain_here
Let’s Encryptの利用規約に同意し、メールアドレスを入力するよう求められます。
その後、すべてのHTTPトラフィックをHTTPSにリダイレクトするかどうかを尋ねられます。 それはあなた次第ですが、これは一般的に推奨され、安全に行うことができます。
その後、Let’s Encryptがリクエストを確認し、Certbotが証明書をダウンロードします。
OutputCongratulations! You have successfully enabled https://odoo.example.com
You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=odoo.example.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/odoo.example.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/odoo.example.com/privkey.pem
Your cert will expire on 2022-05-09. To obtain a new or tweaked
version of this certificate in the future, simply run certbot again
with the "certonly" option. To non-interactively renew *all* of
your certificates, run "certbot renew"
- Your account credentials have been saved in your Certbot
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Certbot so
making regular backups of this folder is ideal.
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
Certbotは、新しい構成と証明書を使用してNginxを自動的にリロードします。 ブラウザにサイトをリロードすると、リダイレクトオプションを選択した場合、自動的にHTTPSに切り替わります。
これでサイトは安全になり、Webベースのセットアップ手順を安全に続行できます。
ステップ5—Odooを設定する
Webブラウザーに戻り、ページをリロードします。 これで、安全なhttps://
接続を介してOdooのデータベース構成ページが開くはずです。 これで、ユーザー名とパスワードを安全に入力して、インストールプロセスを完了することができます。
このページに入力する情報は、OdooアプリケーションにPostgreSQLデータベースの作成方法とデフォルトの管理ユーザーに関する詳細を示します。
次のフィールドに入力します。
- データベース名: odoo
- メール:あなたのメールアドレス
- パスワード:管理者ログイン用の強力で一意のパスワード
- デモデータ: odooを初めてインストールする場合は、このオプションがオンになっていることを確認してください
残りのフィールドはデフォルトで問題ありません。 将来Odooにログインするために使用するため、選択した電子メールとパスワードの値を必ず記録してください。
次に、ページの左下にあるデータベースの作成ボタンをクリックします。 Odooがデータベーステーブルを作成するのに1、2分かかる場合があります。 プロセスが完了すると、Odoo Apps管理ページにリダイレクトされます。
ここから、ERPのニーズに合わせてインストールして使用するOdooモジュールを選択できます。 アプリをテストする場合は、SalesタイルのInstallボタンをクリックします。 Odooはモジュールをインストールしてから、個人のDiscussアプリページにリダイレクトします。
画面の左上にあるセグメント化された正方形のアイコンをクリックし、ドロップダウンオプションのリストでSalesリンクを選択します。
データ、見積もり、注文、および実験可能な販売例のリストをカスタマイズするためのガイドとなるページが表示されます。
結論
このチュートリアルでは、DockerComposeを使用してOdooERPアプリとPostgreSQLデータベースを起動し、Nginxリバースプロキシを設定して、Let’sEncryptTLS証明書を使用して保護しました。
これで、付属のモジュールを使用してERPWebサイトの構築を開始する準備が整いました。 Odooの使用の詳細については、公式のOdooドキュメントを参照してください。
独自のカスタムOdooモジュールを作成したり、既存のモジュールをカスタマイズしたりする場合は、開発者向けドキュメントから始めることをお勧めします。