What Is the Odoo Bus Service?
The bus service handles real-time communication in Odoo: chat messages, notification popups, presence indicators (online/offline), live data updates, and discuss channel messages. It uses WebSocket (Odoo 16+) or long polling (older versions) on a separate port (default: 8072).
Symptoms When Bus Service Fails
- Live Chat widget does not appear or does not receive messages
- Notifications do not pop up in real time (need page refresh)
- Discuss channels show no new messages until refresh
- User presence (online/offline dots) does not update
- Chatter messages appear only on page reload
- Console error:
Bus service unavailable
Root Cause
The bus service requires a dedicated gevent worker running on a separate port (8072). Without it, all real-time features fail silently.
Fix 1: Configure Gevent Worker
# odoo.conf
workers = 5 # Main HTTP workers
gevent_port = 8072 # Longpolling/WebSocket portYou MUST have workers > 0 for the gevent worker to start. In single-process mode (workers = 0), longpolling runs in-process but does not scale.
Fix 2: Configure Nginx Proxy
# nginx site configuration
upstream odoo-longpolling {
server 127.0.0.1:8072;
}
# WebSocket support (Odoo 16+)
location /websocket {
proxy_pass http://odoo-longpolling;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
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;
proxy_read_timeout 86400; # 24h for persistent connections
}
# Legacy longpolling (Odoo 15 and earlier)
location /longpolling {
proxy_pass http://odoo-longpolling;
proxy_read_timeout 86400;
}Fix 3: Verify Port Is Open
# Check if gevent worker is listening
ss -tlnp | grep 8072
# If not listening, check Odoo logs for gevent startup errors
grep -i "gevent\|8072\|longpolling\|websocket" /var/log/odoo/odoo.logFix 4: Docker Configuration
# docker-compose.yml — expose both ports
services:
odoo:
ports:
- "8069:8069" # Main HTTP
- "8072:8072" # WebSocket/LongpollingVersion-Specific Notes
| Version | Protocol | URL Path |
|---|---|---|
| Odoo 14-15 | Long polling (HTTP) | /longpolling/poll |
| Odoo 16+ | WebSocket | /websocket |
Odoo 16+ uses WebSocket by default. Your nginx configuration must support the WebSocket upgrade headers.
Troubleshooting Checklist
- Is
workers > 0in odoo.conf? (Required for gevent) - Is
gevent_port = 8072set? - Is port 8072 listening? (
ss -tlnp | grep 8072) - Is nginx proxying /websocket (v16+) or /longpolling (v15-)?
- Does nginx have WebSocket upgrade headers?
- Is
proxy_read_timeoutlong enough? (86400 recommended)
DeployMonkey
DeployMonkey configures the bus service, gevent worker, and nginx WebSocket proxy automatically. Real-time features work out of the box on every plan.