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 TeamTechnical Writing
The ECOSIRE technical writing team covers Odoo ERP, Shopify eCommerce, AI agents, Power BI analytics, GoHighLevel automation, and enterprise software best practices. Our guides help businesses make informed technology decisions.
関連記事
AI を活用した顧客セグメンテーション: RFM から予測クラスタリングまで
AI が顧客セグメンテーションを静的な RFM 分析から動的な予測クラスタリングにどのように変換するかを学びます。 Python、Odoo、および実際の ROI データを使用した実装ガイド。
サプライチェーン最適化のための AI: 可視性、予測、自動化
AI を使用してサプライ チェーンの運用を変革します。需要の検知、サプライヤーのリスク スコアリング、ルートの最適化、倉庫の自動化、混乱の予測などです。 2026年のガイド。
B2B E コマース戦略: 2026 年に卸売オンライン ビジネスを構築する
卸売価格設定、アカウント管理、クレジット条件、パンチアウト カタログ、Odoo B2B ポータル構成の戦略を使用して B2B e コマースをマスターします。