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!
