Hi all.
I'm having an Odoo 18 running in docker. All works fine, except the subject issue. I'm stuck, because all real-time services seems to be working - user status updates, chat (I see that someone is typing a message to me when chat is open), notifications, etc. All except the kanban real-time update.
I have following configs (according to best practices, as I'm concerned 🙂):
docker-compose:
services:
db:
image: postgres:15
container_name: odoo-crm-db-1
environment:
POSTGRES_DB: my_db
POSTGRES_USER: my_user
POSTGRES_PASSWORD: my_pwd
volumes:
- db-data:/var/lib/postgresql/data
networks:
- odoo-net
# UI container
web:
image: odoo:18.0
container_name: odoo-crm-web-1
depends_on:
- db
environment:
- HOST=db
- USER=my_user
- PASSWORD=my_pwd
volumes:
- ./addons:/mnt/extra-addons
- ./odoo.conf:/etc/odoo/odoo.conf
- odoo-web-data:/var/lib/odoo
ports:
- "8069:8069"
networks:
- odoo-net
# Background container
bus:
image: odoo:18.0
container_name: odoo-crm-bus-1
depends_on:
- db
environment:
- HOST=db
- USER=my_user
- PASSWORD=my_pwd
volumes:
- ./addons:/mnt/extra-addons
- ./bus.conf:/etc/odoo/odoo.conf
- odoo-web-data:/var/lib/odoo
ports:
- "8072:8072"
networks:
- odoo-net
# cron container
cron:
image: odoo:18.0
container_name: odoo-crm-cron-1
depends_on:
- db
environment:
- HOST=db
- USER=my_user
- PASSWORD=my_pwd
volumes:
- ./addons:/mnt/extra-addons
- ./cron.conf:/etc/odoo/odoo.conf
- odoo-web-data:/var/lib/odoo
networks:
- odoo-net
nginx:
image: nginx:latest
container_name: odoo-crm-nginx-1
depends_on:
- web
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
- ./nginx/certs:/etc/nginx/certs
- ./nginx/log:/var/log/nginx
networks:
- odoo-net
volumes:
db-data:
odoo-web-data:
networks:
odoo-net:
driver: bridge
odoo.conf:
[options]
addons_path = /mnt/extra-addons
data_dir = /var/lib/odoo
#default official config:
limit_memory_hard = 1677721600
limit_memory_soft = 629145600
limit_request = 8192
limit_time_cpu = 600
limit_time_real = 1200
#for web only
max_cron_threads = 0
workers = 15
xmlrpc_port = 8069
longpolling_port = False
bus.conf:
[options]
addons_path = /mnt/extra-addons
data_dir = /var/lib/odoo
# Longpolling/background workers only
workers = 15
max_cron_threads = 0
gevent_port = 8072
longpolling_port = False
cron.conf:
[options]
addons_path = /mnt/extra-addons
data_dir = /var/lib/odoo
limit_memory_hard = 1677721600
limit_memory_soft = 629145600
limit_request = 8192
limit_time_cpu = 600
limit_time_real = 1200
# for cron only
max_cron_threads = 15
workers = -1
no_http = True
odoo.conf (nginx):
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
# http -> https
server {
listen 80;
server_name test.my.website;
rewrite ^(.*) https://$host$1 permanent;
}
server {
listen 443 ssl;
server_name test.my.website;
proxy_read_timeout 720s;
proxy_connect_timeout 720s;
proxy_send_timeout 720s;
# SSL parameters
ssl_certificate /etc/nginx/certs/fullchain.pem;
ssl_certificate_key /etc/nginx/certs/privkey.pem;
ssl_session_timeout 30m;
ssl_protocols TLSv1.2;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
# Redirect requests to odoo backend server
location / {
# Add Headers for odoo proxy mode
proxy_pass http://web:8069;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
# Redirect websocket requests to odoo gevent port
location /websocket {
proxy_pass http://bus:8072;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header X-Forwarded-Host $http_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;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
proxy_cookie_flags session_id samesite=lax secure;
}
# common gzip
gzip_types text/css text/scss text/plain text/xml application/xml application/json application/javascript;
gzip on;
}
Any ideas or suggestions are highly appreciated!