Docker Odoo デプロイメント: 実稼働対応のコンテナーのセットアップ
Docker は実稼働環境における Odoo の標準的なデプロイ方法となっており、Docker Hub では 1,000 万を超える Odoo Docker イメージがプルされています。 コンテナ化されたデプロイメントにより、再現可能な環境、簡単なスケーリング、簡素化されたバックアップ、および Odoo インスタンス間の明確な分離が実現します。このガイドでは、本番環境に対応した完全な Docker Odoo セットアップについて説明します。
重要なポイント
- Docker Compose は、接続されたサービスとして Odoo、PostgreSQL、Nginx を調整します
- 永続ボリュームにより、コンテナの再起動や更新後もデータが存続することが保証されます
- Nginx リバース プロキシが SSL 終了、静的ファイル キャッシュ、ロード バランシングを処理します
- 自動バックアップにより、手動介入を最小限に抑えてデータ損失を防ぎます。
アーキテクチャの概要
運用環境の Odoo Docker デプロイメントは、次の 3 つのコア サービスで構成されます。
- Odoo アプリケーション サーバー: Web サーバーとアプリケーション ロジックを実行する Odoo コンテナ
- PostgreSQL データベース: すべての Odoo データを保存する専用のデータベース コンテナー
- Nginx リバース プロキシ: SSL を処理し、静的ファイルを提供し、Odoo へのリクエストをプロキシします。
オプションのサービスには、Redis (キャッシュおよびセッション ストレージ用)、バックアップ コンテナー (自動データベース ダンプ)、および監視 (Prometheus + Grafana) が含まれます。
Docker Compose 構成
デプロイメントの基礎となるのは、すべてのサービスを定義する docker-compose.yml ファイルです。
version: "3.8"
services:
odoo:
image: odoo:17.0
depends_on:
- db
ports:
- "8069:8069"
- "8072:8072"
volumes:
- odoo-data:/var/lib/odoo
- ./config:/etc/odoo
- ./addons:/mnt/extra-addons
environment:
- HOST=db
- PORT=5432
- USER=odoo
- PASSWORD=odoo_db_password
restart: unless-stopped
db:
image: postgres:16
environment:
- POSTGRES_DB=postgres
- POSTGRES_USER=odoo
- POSTGRES_PASSWORD=odoo_db_password
- PGDATA=/var/lib/postgresql/data/pgdata
volumes:
- postgres-data:/var/lib/postgresql/data/pgdata
restart: unless-stopped
nginx:
image: nginx:alpine
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf
- ./certbot/conf:/etc/letsencrypt
- ./certbot/www:/var/www/certbot
depends_on:
- odoo
restart: unless-stopped
volumes:
odoo-data:
postgres-data:
Odoo 設定ファイル
運用環境に最適化された設定で config/odoo.conf を作成します。
[options]
addons_path = /mnt/extra-addons,/usr/lib/python3/dist-packages/odoo/addons
admin_passwd = your_strong_admin_password
db_host = db
db_port = 5432
db_user = odoo
db_password = odoo_db_password
db_name = production_db
dbfilter = ^production_db$
list_db = False
proxy_mode = True
workers = 4
max_cron_threads = 2
limit_memory_hard = 2684354560
limit_memory_soft = 2147483648
limit_time_cpu = 600
limit_time_real = 1200
log_level = warn
主要な設定の説明:
proxy_mode = True: 転送されたヘッダーを正しく処理するために Nginx の背後で実行する場合に必要ですworkers = 4: ワーカー プロセスの数 (経験則: CPU コアあたり 2 ワーカー)max_cron_threads = 2: スケジュールされたアクションの専用スレッドlist_db = False: ログイン ページにデータベースが表示されないようにします (セキュリティ)dbfilter: 単一データベースへのアクセスを制限します
Nginx リバースプロキシ構成
upstream odoo {
server odoo:8069;
}
upstream odoochat {
server odoo:8072;
}
server {
listen 80;
server_name your-domain.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name your-domain.com;
ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
client_max_body_size 200m;
proxy_read_timeout 720s;
proxy_connect_timeout 720s;
proxy_send_timeout 720s;
location /websocket {
proxy_pass http://odoochat;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location / {
proxy_pass http://odoo;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
}
location ~* /web/static/ {
proxy_cache_valid 200 90m;
proxy_buffering on;
expires 864000;
proxy_pass http://odoo;
}
}
バックアップ戦略
自動データベースバックアップ
cron 経由で毎日実行されるバックアップ スクリプトを作成します。
#!/bin/bash
BACKUP_DIR=/backups/odoo
DATE=$(date +%Y%m%d_%H%M%S)
docker exec odoo-db pg_dump -U odoo production_db | gzip > $BACKUP_DIR/odoo_$DATE.sql.gz
find $BACKUP_DIR -name "*.sql.gz" -mtime +30 -delete
ファイルストアのバックアップ
Odoo ファイルストア (アップロードされたドキュメント、添付ファイル) は odoo-data ボリュームに存在します。データベースと一緒にバックアップします。
docker run --rm -v odoo-data:/data -v /backups:/backup alpine \
tar czf /backup/odoo-filestore_$DATE.tar.gz /data
セキュリティ強化
- odoo.conf のデフォルトの
admin_passwdを強力なランダムパスワードに変更します list_db = Falseを設定してデータベースの列挙を防止しますdbfilterを使用して、データベースへのアクセスを単一のデータベースに制限します- 可能な場合は非 root ユーザーとしてコンテナを実行します。
- セキュリティ パッチを適用して Docker イメージを常に最新の状態に保つ
- Docker シークレットまたは環境変数ファイルを使用します (インライン パスワードではありません)。
- Docker ネットワークを使用したコンテナ ネットワーク アクセスを制限する
よくある質問
Q: 1 つの Odoo コンテナで同時に処理できるユーザーの数は何人ですか?
ワーカーが 4 人の場合、Odoo コンテナは約 20 ~ 30 人の同時ユーザーを快適に処理します。同時実行性を高めるには、ワーカー (CPU/RAM によって制限される) を増やすか、ロード バランサーの背後に複数の Odoo コンテナーをデプロイします。
Q: Docker で Odoo を更新するにはどうすればよいですか?
新しいイメージをプルし、現在のコンテナを停止し、既存のボリュームで新しいイメージを実行します。永続ボリュームは、イメージの更新後もデータとファイルストアを保持します。
Q: 公式の Odoo Docker イメージを使用する必要がありますか、それとも独自のイメージを構築する必要がありますか?
公式イメージは標準的な展開で機能します。特定の Python パッケージ、カスタム モジュールのシステム依存関係、またはプレインストールされたコミュニティ モジュールが必要な場合は、カスタム イメージを構築します。
Q: Docker で Odoo Enterprise を処理するにはどうすればよいですか?
Odoo Enterprise は、パブリック Docker イメージとしては利用できません。エンタープライズ アドオン ディレクトリをボリュームとしてマウントし、addons_path 構成で参照します。有効な Odoo Enterprise サブスクリプションが必要です。
次は何ですか
Docker のデプロイメントにより、再現可能、スケーラブル、保守可能な Odoo 運用環境が得られます。この構成から始めて、使用パターンに基づいてワーカー数、メモリ制限、キャッシュを調整します。
Odoo 導入に関するサポートについては ECOSIRE にお問い合わせ、マネージド ホスティングについては Odoo サポート サービス をご覧ください。
ECOSIRE が発行 -- エンタープライズ ソフトウェア ソリューションによるビジネスの拡大を支援します。
執筆者
ECOSIRE Research and Development Team
ECOSIREでエンタープライズグレードのデジタル製品を開発。Odoo統合、eコマース自動化、AI搭載ビジネスソリューションに関するインサイトを共有しています。
関連記事
Allegro Marketplace と Odoo の統合: ポーランドの主要な e コマース プラットフォーム
Allegro マーケットプレイスと Odoo ERP を統合するための完全なガイド。ポーランドの e コマース向けの REST API セットアップ、Allegro Smart、入札、配送をカバーしています。
Odoo による買掛金自動化: 請求書から支払いまで
請求書の取得から承認ワークフロー、支払い実行まで、Odoo の買掛金を自動化します。処理コストを削減し、支払い遅延によるペナルティを排除します。
2026 年のビジネスに最適な CRM を選択する方法
Odoo CRM、Salesforce、HubSpot、GoHighLevel、Zoho を機能、価格設定、スケーラビリティ、業界適合性に関して比較し、2026 年に適切な CRM プラットフォームを選択するための完全なガイドです。