Overview
Nurosentrix uses Docker to deploy Odoo instances, providing consistent environments and easy management. Each instance runs in isolated containers.
Each instance appears in the Instances list with its container health and status indicators.
Container Architecture
A typical Odoo deployment includes these containers:
| Container | Purpose |
|---|---|
| odoo | Odoo application server |
| postgres | PostgreSQL database |
| nginx | Reverse proxy with SSL |
Docker Compose Structure
Nurosentrix generates a docker-compose.yml for each instance:
version: '3.8'
services:
odoo:
image: odoo:17.0
container_name: odoo-production
depends_on:
- postgres
ports:
- "8069:8069"
- "8072:8072"
volumes:
- odoo-data:/var/lib/odoo
- ./addons:/mnt/extra-addons
- ./config:/etc/odoo
environment:
- HOST=postgres
- PORT=5432
- USER=odoo
- PASSWORD=${DB_PASSWORD}
restart: unless-stopped
postgres:
image: postgres:15-alpine
container_name: postgres-production
volumes:
- postgres-data:/var/lib/postgresql/data
environment:
- POSTGRES_USER=odoo
- POSTGRES_PASSWORD=${DB_PASSWORD}
- POSTGRES_DB=odoo
restart: unless-stopped
nginx:
image: nginx:alpine
container_name: nginx-production
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
- ./ssl:/etc/ssl/certs
depends_on:
- odoo
restart: unless-stopped
volumes:
odoo-data:
postgres-data:Odoo Configuration
The odoo.conf file is generated with these settings:
[options] ; Database db_host = postgres db_port = 5432 db_user = odoo db_password = <generated> db_name = odoo ; Paths addons_path = /mnt/extra-addons,/usr/lib/python3/dist-packages/odoo/addons data_dir = /var/lib/odoo ; Performance workers = 4 max_cron_threads = 2 limit_memory_hard = 2684354560 limit_memory_soft = 2147483648 limit_time_cpu = 600 limit_time_real = 1200 ; Security admin_passwd = <generated> list_db = False proxy_mode = True ; Logging log_level = info logfile = /var/log/odoo/odoo.log
Resource Limits
Configure container resource limits:
services:
odoo:
deploy:
resources:
limits:
cpus: '2.0'
memory: 4G
reservations:
cpus: '0.5'
memory: 1GRecommended Resources
| Workload | CPU | Memory |
|---|---|---|
| Development | 1 core | 2 GB |
| Small Production | 2 cores | 4 GB |
| Medium Production | 4 cores | 8 GB |
| Large Production | 8+ cores | 16+ GB |
Volume Management
Data Volumes
| Volume | Purpose | Location |
|---|---|---|
| odoo-data | Filestore and sessions | /var/lib/odoo |
| postgres-data | Database files | /var/lib/postgresql/data |
| addons | Custom modules | /mnt/extra-addons |
Backup Volumes
# Backup database docker exec postgres pg_dump -U odoo odoo > backup.sql # Backup filestore docker cp odoo:/var/lib/odoo/filestore ./filestore-backup
Networking
Containers communicate through a Docker network:
networks:
odoo-network:
driver: bridge
services:
odoo:
networks:
- odoo-network
postgres:
networks:
- odoo-networkSSL Configuration
Nurosentrix automatically configures SSL using Let's Encrypt:
# nginx/conf.d/odoo.conf
upstream odoo {
server odoo:8069;
}
upstream odoo-chat {
server odoo:8072;
}
server {
listen 80;
server_name odoo.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name odoo.example.com;
ssl_certificate /etc/ssl/certs/fullchain.pem;
ssl_certificate_key /etc/ssl/certs/privkey.pem;
location / {
proxy_pass http://odoo;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /longpolling {
proxy_pass http://odoo-chat;
}
}Container Management
Common Commands
# View running containers docker compose ps # View logs docker compose logs -f odoo # Restart a service docker compose restart odoo # Stop all services docker compose down # Start all services docker compose up -d # Update images docker compose pull docker compose up -d
Accessing Container Shell
# Access Odoo container docker exec -it odoo-production bash # Access PostgreSQL docker exec -it postgres-production psql -U odoo
Updating Odoo
- Create a backup
- Update the image version in docker-compose.yml
- Pull the new image
- Restart containers
- Run database upgrades if needed
# Update process docker compose down docker compose pull docker compose up -d # Update Odoo database docker exec odoo-production odoo -u all -d odoo --stop-after-init
Troubleshooting
Container Won't Start
# Check container logs docker compose logs odoo # Check container status docker compose ps # Inspect container docker inspect odoo-production
Database Connection Issues
- Verify PostgreSQL container is running
- Check database credentials in environment
- Ensure containers are on the same network
Performance Issues
- Increase container memory limits
- Add more Odoo workers
- Check disk I/O on the host
- Review PostgreSQL slow queries