0% found this document useful (0 votes)
4 views14 pages

Deployment Guide

The Odoo Docker Deployment Guide provides comprehensive instructions for setting up multi-version Odoo environments using Docker and Docker Compose. It covers prerequisites, architecture, deployment steps, and management of Odoo instances, including database and module management. The guide also includes troubleshooting tips and common operations for maintaining the deployed services.

Uploaded by

niloy581567
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
4 views14 pages

Deployment Guide

The Odoo Docker Deployment Guide provides comprehensive instructions for setting up multi-version Odoo environments using Docker and Docker Compose. It covers prerequisites, architecture, deployment steps, and management of Odoo instances, including database and module management. The guide also includes troubleshooting tips and common operations for maintaining the deployed services.

Uploaded by

niloy581567
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

Odoo Docker Deployment Guide

This guide provides step-by-step instructions for deploying multi-version Odoo


environments using Docker and Docker Compose.

Table of Contents
1. Prerequisites
2. Architecture Overview
3. Quick Start
4. Configuration
5. Deployment Steps
6. Access and Credentials
7. Common Operations
8. Module Management
9. Database Management
10. Backup and Recovery
11. Troubleshooting

Prerequisites
Required Software
Software Version Purpose
Docker 20.10+ Container runtime
Docker Compose 2.0+ Multi-container
orchestration
Git Latest Version control
(optional)

System Requirements
Resource Minimum Recommended
RAM 8 GB 16 GB+
CPU 2 cores 4+ cores
Disk 20 GB 50 GB+ SSD

Verify Installation
docker --version
docker compose version
Architecture Overview
Service Architecture
┌─────────────────────────────────────────────────────────────────┐
│ Docker Network (odoo-docker) │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────────┐ ┌──────────────────┐ ┌───────────────┐ │
│ │ Odoo 17 │ │ Odoo 18 │ │ MHD Odoo │ │
│ │ Port: 8017 │ │ Port: 8018 │ │ Port: 8019 │ │
│ │ Container: │ │ Container: │ │ Container: │ │
│ │ odoo17 │ │ odoo18 │ │ mhd │ │
│ └────────┬─────────┘ └────────┬─────────┘ └───────┬───────┘ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌──────────────────┐ ┌──────────────────┐ ┌───────────────┐ │
│ │ PostgreSQL 15 │ │ PostgreSQL 15 │ │ PostgreSQL │ │
│ │ Container: │ │ Container: │ │ Container: │ │
│ │ db17 │ │ db18 │ │ db_mhd │ │
│ └──────────────────┘ └──────────────────┘ └───────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘

Directory Structure
odoo-docker/
├── [Link] # Service orchestration
├── .env # Environment variables
├── config/ # Odoo configuration files
│ ├── [Link]
│ ├── [Link]
│ └── odoo_mhd.conf
├── addons/ # Custom Odoo modules
│ ├── repo17/ # Odoo 17 modules
│ ├── repo18/ # Odoo 18 core modules
│ ├── repo18_other_addons/ # Odoo 18 extended modules
│ └── mhd/ # MHD custom modules
└── data/ # Database volumes
├── pg17/
├── pg18/
└── pg_mhd/

Quick Start
1. Clone or Setup Project Directory
# Create project directory
mkdir -p odoo-docker
cd odoo-docker
2. Create Environment File
Create .env file with your configuration:
# PostgreSQL
POSTGRES_USER=odoo
POSTGRES_PASSWORD=odoo
POSTGRES_DB=postgres

# Odoo 17
ODOO17_PORT=8017

# Odoo 18
ODOO18_PORT=8018
MASTERPASS=your-secure-master-password
USER=admin
PASS=your-admin-password

# MHD Odoo 18
MHD_PORT=8019

3. Create Configuration Files


config/[Link]
[options]
addons_path = /mnt/extra-addons
db_host = db17
db_port = 5432
db_user = odoo
db_password = odoo

config/[Link]
[options]
admin_passwd = your-master-password
addons_path = /mnt/extra-addons,/mnt/extra-addons-more
db_host = db18
db_port = 5432
db_user = odoo
db_password = odoo

config/odoo_mhd.conf
[options]
admin_passwd = your-master-password
addons_path = /mnt/extra-addons
db_host = db_mhd
db_port = 5432
db_user = odoo
db_password = odoo
limit_time_real = 600
limit_time_cpu = 600
limit_time_real_cron = -1

4. Create Docker Compose File


Create [Link]:
services:
# PostgreSQL for Odoo 17
db17:
image: postgres:15
container_name: db17
restart: always
environment:
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_DB=${POSTGRES_DB}
volumes:
- ./data/pg17:/var/lib/postgresql/data

# PostgreSQL for Odoo 18


db18:
image: postgres:15
container_name: db18
restart: always
environment:
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_DB=${POSTGRES_DB}
volumes:
- ./data/pg18:/var/lib/postgresql/data

# Odoo 17
odoo17:
image: odoo:17
container_name: odoo17
restart: always
depends_on:
- db17
ports:
- "${ODOO17_PORT}:8069"
volumes:
- ./config/[Link]:/etc/odoo/[Link]
- ./addons/repo17:/mnt/extra-addons

# Odoo 18
odoo18:
image: odoo:18
container_name: odoo18
restart: always
depends_on:
- db18
ports:
- "${ODOO18_PORT}:8069"
volumes:
- ./config/[Link]:/etc/odoo/[Link]
- ./addons/repo18:/mnt/extra-addons
- ./addons/repo18_other_addons/odoo_addons:/mnt/extra-addons-more

# PostgreSQL for MHD Odoo 18


db_mhd:
image: postgres:15
container_name: db_mhd
restart: always
environment:
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_DB=${POSTGRES_DB}
volumes:
- ./data/pg_mhd:/var/lib/postgresql/data

# MHD Odoo 18
mhd:
image: odoo:18
container_name: mhd
restart: always
depends_on:
- db_mhd
ports:
- "${MHD_PORT}:8069"
volumes:
- ./config/odoo_mhd.conf:/etc/odoo/[Link]
- ./addons/mhd:/mnt/extra-addons

5. Create Addon Directories


mkdir -p addons/{repo17,repo18,repo18_other_addons/odoo_addons,mhd}
mkdir -p data/{pg17,pg18,pg_mhd}

6. Start All Services


docker compose up -d

7. Verify Deployment
# Check running containers
docker compose ps

# View logs
docker compose logs -f
Configuration
Environment Variables (.env)
Variable Description Default
POSTGRES_USER Database user odoo
POSTGRES_PASSWORD Database password odoo
POSTGRES_DB Default database postgres
ODOO17_PORT Odoo 17 host port 8017
ODOO18_PORT Odoo 18 host port 8018
MHD_PORT MHD Odoo host port 8019
MASTERPASS Odoo master password Required
USER Default admin admin
username
PASS Default admin Required
password

Odoo Configuration Options


Option Description Default
addons_path Comma-separated Varies
addon paths
db_host Database host Container name
db_port Database port 5432
db_user Database user odoo
db_password Database password odoo
admin_passwd Master password Required
(Odoo 18+)
limit_time_real Real execution timeout 600
limit_time_cpu CPU execution timeout 600
limit_time_real_cr Cron timeout -1 (unlimited)
on

Deployment Steps
Initial Deployment
# 1. Navigate to project directory
cd odoo-docker

# 2. Pull latest Docker images


docker compose pull
# 3. Start all services
docker compose up -d

# 4. Wait for services to be healthy (30-60 seconds)


docker compose ps

# 5. Access Odoo instances


# Odoo 17: [Link]
# Odoo 18: [Link]
# MHD Odoo: [Link]

Selective Service Deployment


# Deploy only Odoo 17 stack
docker compose up -d db17 odoo17

# Deploy only Odoo 18 stack


docker compose up -d db18 odoo18

# Deploy only MHD stack


docker compose up -d db_mhd mhd

Rebuild After Configuration Changes


# Rebuild and restart after Dockerfile changes
docker compose up -d --build

# Recreate containers (preserve data)


docker compose up -d --force-recreate

Access and Credentials


Access URLs
Instance URL Container
Odoo 17 [Link] odoo17
Odoo 18 [Link] odoo18
MHD Odoo [Link] mhd

Default Credentials
Credential
Type Odoo 17 Odoo 18 MHD Odoo
Database odoo / odoo odoo / odoo odoo / odoo
(PostgreSQL)
Admin User admin / admin / admin /
admin@[Link] admin@[Link] admin@[Link]
Master N/A <MASTER_PASS> <MASTER_PASS>
Credential
Type Odoo 17 Odoo 18 MHD Odoo
Password

Common Operations
Container Management
# View all running containers
docker compose ps

# View logs for all services


docker compose logs -f

# View logs for specific service


docker compose logs -f odoo17
docker compose logs -f odoo18
docker compose logs -f mhd

# Restart a specific service


docker compose restart odoo17
docker compose restart odoo18
docker compose restart mhd

# Stop all services


docker compose stop

# Stop specific service


docker compose stop odoo17

# Start all services


docker compose start

# Remove all containers (preserves volumes)


docker compose down

# Remove all containers and volumes (⚠️ deletes data)


docker compose down -v

Execute Commands Inside Containers


# Open bash shell in container
docker compose exec odoo17 bash
docker compose exec odoo18 bash
docker compose exec mhd bash

# Execute single command


docker compose exec odoo17 odoo --help
# Update all modules from command line
docker compose exec odoo17 odoo -c /etc/odoo/[Link] -u all --stop-after-
init
docker compose exec odoo18 odoo -c /etc/odoo/[Link] -u all --stop-after-
init
docker compose exec mhd odoo -c /etc/odoo/[Link] -u all --stop-after-init

Database Access
# Access PostgreSQL 17
docker compose exec db17 psql -U odoo -d postgres

# Access PostgreSQL 18
docker compose exec db18 psql -U odoo -d postgres

# Access MHD PostgreSQL


docker compose exec db_mhd psql -U odoo -d postgres

# List all databases


docker compose exec db17 psql -U odoo -d postgres -c "\l"

# Connect to specific database


docker compose exec db17 psql -U odoo -d your_database_name

Module Management
Module Installation via Web UI
1. Access Odoo instance
2. Go to Apps menu
3. Update module list (if needed)
4. Search for module
5. Click Install
Module Installation via Command Line
# Install specific module
docker compose exec odoo17 odoo -c /etc/odoo/[Link] -i module_name --stop-
after-init

# Update specific module


docker compose exec odoo17 odoo -c /etc/odoo/[Link] -u module_name --stop-
after-init

# Update all modules


docker compose exec odoo17 odoo -c /etc/odoo/[Link] -u all --stop-after-
init
Adding Custom Modules
# 1. Place module in appropriate addon directory
# For Odoo 17: addons/repo17/
# For Odoo 18 core: addons/repo18/
# For Odoo 18 extended: addons/repo18_other_addons/odoo_addons/
# For MHD: addons/mhd/

# 2. Restart the Odoo container


docker compose restart odoo17

# 3. Update module list in Apps menu


# 4. Install the module

Module Directory Mapping


Odoo Version Container Path Host Path
Odoo 17 /mnt/extra-addons ./addons/repo17
Odoo 18 (primary) /mnt/extra-addons ./addons/repo18
Odoo 18 (secondary) /mnt/extra-addons-more ./addons/repo18_o
ther_addons/odoo_
addons
MHD Odoo /mnt/extra-addons ./addons/mhd

Database Management
Creating a New Database
1. Access Odoo instance via web UI
2. Click Manage Databases
3. Enter master password
4. Click Create button
5. Fill in database details and create
Database Backup via Web UI
1. Access Manage Databases
2. Enter master password
3. Select database
4. Click Backup
5. Choose backup format and download

Database Backup via Command Line


# Backup database to file
docker compose exec db17 pg_dump -U odoo database_name > backup_$(date
+%Y%m%d).sql

# Backup with custom format (faster restore)


docker compose exec db17 pg_dump -U odoo -Fc database_name > backup_$(date
+%Y%m%d).dump

Database Restore via Command Line


# Restore from SQL file
docker compose exec -T db17 psql -U odoo database_name < backup_file.sql

# Restore from custom format


docker compose exec -T db17 pg_restore -U odoo -d database_name <
backup_file.dump

Backup and Recovery


File System Backup
# Backup entire project (excluding data volumes)
tar -czf odoo-docker-backup-$(date +%Y%m%d).[Link] \
--exclude='data/' \
--exclude='*.pyc' \
--exclude='__pycache__' \
--exclude='.git' \
.

# Backup data volumes


docker run --rm \
-v odoo-docker_data_pg17:/data \
-v $(pwd):/backup \
alpine tar -czf /backup/pg17-$(date +%Y%m%d).[Link] -C /data .

docker run --rm \


-v odoo-docker_data_pg18:/data \
-v $(pwd):/backup \
alpine tar -czf /backup/pg18-$(date +%Y%m%d).[Link] -C /data .

Automated Backup Script


Create [Link]:
#!/bin/bash
BACKUP_DIR="./backups"
DATE=$(date +%Y%m%d_%H%M%S)

mkdir -p $BACKUP_DIR

# Backup databases
docker compose exec -T db17 pg_dump -U odoo postgres >
$BACKUP_DIR/db17_$[Link]
docker compose exec -T db18 pg_dump -U odoo postgres >
$BACKUP_DIR/db18_$[Link]
docker compose exec -T db_mhd pg_dump -U odoo postgres >
$BACKUP_DIR/db_mhd_$[Link]

# Backup addon directories


tar -czf $BACKUP_DIR/addons_$[Link] addons/

echo "Backup completed: $BACKUP_DIR"

Recovery Procedure
# Stop services
docker compose stop

# Restore data volumes


docker run --rm \
-v odoo-docker_data_pg17:/data \
-v $(pwd):/backup \
alpine tar -xzf /backup/[Link] -C /data

# Start services
docker compose start

Troubleshooting
Common Issues and Solutions

Issue: Container won’t start


# Check logs
docker compose logs service_name

# Check container status


docker compose ps -a

# Restart the service


docker compose restart service_name

Issue: Database connection failed


# Verify database container is running
docker compose ps db17

# Check database logs


docker compose logs db17

# Verify network connectivity


docker compose exec odoo17 ping db17 -c 3

Issue: Port already in use


# Check what's using the port
sudo lsof -i :8017
# Change port in .env file
# ODOO17_PORT=8027

# Restart services
docker compose up -d

Issue: Module not appearing in Apps menu


# 1. Verify module is in correct directory
ls -la addons/repo17/your_module/

# 2. Check manifest file exists


cat addons/repo17/your_module/__manifest__.py

# 3. Restart Odoo container


docker compose restart odoo17

# 4. Update module list in Apps menu


# Apps -> Update Apps List

Issue: Permission denied on data volumes


# Fix data directory permissions
sudo chown -R $USER:$USER data/

# Fix volume permissions inside container


docker compose exec odoo17 chown -R odoo:odoo /mnt/extra-addons

Health Check Commands


# Check all services are running
docker compose ps

# Check database connectivity


docker compose exec odoo17 odoo -c /etc/odoo/[Link] --db_host=db17 --
db_port=5432 --db_user=odoo --db_password=odoo --stop-after-init

# Check available databases


docker compose exec db17 psql -U odoo -d postgres -c "\l"

# Check Odoo logs for errors


docker compose logs --tail=100 odoo17 | grep -i error

Resource Monitoring
# Check container resource usage
docker stats

# Check disk usage


du -sh data/*
du -sh addons/*
# Check PostgreSQL database sizes
docker compose exec db17 psql -U odoo -d postgres -c "SELECT
pg_database.datname, pg_size_pretty(pg_database_size(pg_database.datname)) AS
size FROM pg_database;"

Security Best Practices


1. Change Default Passwords: Modify default credentials in .env before production
deployment
2. Master Password: Use strong, unique master passwords for Odoo 18 instances
3. Database Credentials: Use strong PostgreSQL passwords
4. Network Isolation: Consider running in isolated Docker networks
5. HTTPS: Use reverse proxy (nginx/traefik) with SSL for production
6. Regular Backups: Implement automated backup schedules
7. Volume Management: Store data volumes on reliable storage
8. Access Control: Limit container access and use firewall rules

Additional Resources
• Odoo Documentation
• Docker Documentation
• Docker Compose Documentation
• PostgreSQL Documentation

Version History
Version Date Changes
1.0 2025-08-21 Initial documentation for Odoo
17/18 dual deployment
1.1 2025-12-30 Added MHD Odoo 18 instance
1.2 2026-02-17 Updated with comprehensive
deployment guide

You might also like