Traefik + Odoo v16

Hello guys I have docker swarm cluster and traefik is my reverse proxy routing request and service on my cluster I deploy recently odoo v16 and I have a big problem because I receive constantly get this error "GET /websocket HTTP/1.1" 400, I need help is someone solved this problem. Thank you.

Share your Traefik static and dynamic config, and docker-compose.yml if used.

yes of course:
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/odoo/http.py", line 1988, in call
response = request._serve_db()
File "/usr/lib/python3/dist-packages/odoo/http.py", line 1583, in _serve_db
return service_model.retrying(self._serve_ir_http, self.env)
File "/usr/lib/python3/dist-packages/odoo/service/model.py", line 134, in retrying
result = func()
File "/usr/lib/python3/dist-packages/odoo/http.py", line 1610, in _serve_ir_http
response = self.dispatcher.dispatch(rule.endpoint, args)
File "/usr/lib/python3/dist-packages/odoo/http.py", line 1724, in dispatch
return self.request.registry['ir.http']._dispatch(endpoint)
File "/usr/lib/python3/dist-packages/odoo/addons/website/models/ir_http.py", line 235, in _dispatch
response = super()._dispatch(endpoint)
File "/usr/lib/python3/dist-packages/odoo/addons/base/models/ir_http.py", line 154, in _dispatch
result = endpoint(**request.params)
File "/usr/lib/python3/dist-packages/odoo/http.py", line 696, in route_wrapper
result = endpoint(self, *args, **params_ok)
File "/usr/lib/python3/dist-packages/odoo/addons/bus/controllers/websocket.py", line 23, in websocket
return WebsocketConnectionHandler.open_connection(request)
File "/usr/lib/python3/dist-packages/odoo/addons/bus/websocket.py", line 814, in open_connection
Websocket(request.httprequest.environ['socket'], request.session),
KeyError: 'socket'
2023-06-15 08:57:22,540 16 INFO odoo16 werkzeug: 188.26.212.144 - - [15/Jun/2023 08:57:22] "GET /websocket HTTP/1.1" 500 - 28 1.378 1.835

labels in compose
labels:
- "traefik.enable=true"
- "traefik.http.routers.${NAME_SERVICE_TRAEFIK}.rule=Host(${URL_DEPLOY})"
- "traefik.http.routers.${NAME_SERVICE_TRAEFIK}.service=${NAME_SERVICE_TRAEFIK}@docker"
- "traefik.http.services.${NAME_SERVICE_TRAEFIK}.loadbalancer.server.port=8069"
- "traefik.http.routers.${NAME_SERVICE_TRAEFIK}.entrypoints=https"
- "traefik.http.routers.${NAME_SERVICE_TRAEFIK}.tls=true"
- "traefik.docker.network=traefik-swarm"
##
websocket work 8072 port

I try with all this labels:
##########################################
#Create a middleware named "websocket-middleware" this middleware sets the necessary headers
#to support connections WebSocket:
#Upgrade, Connection, X-Forwarded-Host, X-Forwarded-For, X-Forwarded-Proto y X-Real-IP
- "traefik.http.middlewares.websocket-middleware.headers.customRequestHeaders.Upgrade=websocket"
- "traefik.http.middlewares.websocket-middleware.headers.customRequestHeaders.Connection=upgrade"
- "traefik.http.middlewares.websocket-middleware.headers.customRequestHeaders.X-Forwarded-Host={host}"
- "traefik.http.middlewares.websocket-middleware.headers.customRequestHeaders.X-Forwarded-For={clientHost}"
- "traefik.http.middlewares.websocket-middleware.headers.customRequestHeaders.X-Forwarded-Proto={scheme}"
- "traefik.http.middlewares.websocket-middleware.headers.customRequestHeaders.X-Real-IP={remoteAddr}"
#Create routers "livechat-router" route WebSocket requests to the Odoo application.
#The router is configured to match any request with the route starting with "/websocket/livechat"
#- "traefik.http.routers.${NAME_SERVICE_TRAEFIK}.rule=PathPrefix(/websocket/im_livechat)" #
#- "traefik.http.routers.${NAME_SERVICE_TRAEFIK}.middlewares=websocket-middleware"
#- "traefik.http.routers.${NAME_SERVICE_TRAEFIK}.entrypoints=https"
#- "traefik.http.routers.${NAME_SERVICE_TRAEFIK}.service=im_livechat.channel"
#Create routers "mail.channel" route WebSocket requests to the Odoo application.
#The router is configured to match any request with the route starting with "/websocket/notifications"
- "traefik.http.routers.websocket-middleware.rule=Host(${URL_DEPLOY}) && PathPrefix(/websocket/)"
- "traefik.http.routers.websocket-middleware.middlewares=websocket-middleware"
- "traefik.http.routers.websocket-middleware.entrypoints=https"
- "traefik.http.routers.websocket-middleware.tls=true"
- "traefik.http.routers.websocket-middleware.service=websocket-middleware@docker"
- "traefik.http.services.websocket-middleware.loadbalancer.server.port=8072"

Please format your code using 3 backticks before and after or using the </> button on selected text. Especially in yaml format every space matters.

actually this are my labels on compose

 labels:
      # # global config       
        - "traefik.enable=true"
        - "traefik.docker.network=traefik-swarm"      
      # # main routers 8069 web rule "/*"
        - "traefik.http.routers.${NAME_SERVICE_TRAEFIK}.tls=true"
        - "traefik.http.routers.${NAME_SERVICE_TRAEFIK}.entrypoints=https"
        - "traefik.http.routers.${NAME_SERVICE_TRAEFIK}.rule=Host(`${URL_DEPLOY}`)"                          -"traefik.http.routers.${NAME_SERVICE_TRAEFIK}.service=${NAME_SERVICE_TRAEFIK}@docker"
        - "traefik.http.routers.${NAME_SERVICE_TRAEFIK}.middlewares=gzip"
        - "traefik.http.services.${NAME_SERVICE_TRAEFIK}.loadbalancer.server.port=8069"
       # # main routers 8072 websocket rule "/websocket"
        - "traefik.http.routers.backend-websock.tls=true"
        - "traefik.http.routers.backend-websock.entrypoints=https"
        - "traefik.http.routers.backend-websock.rule=Path(`/websocket`)"
        - "traefik.http.routers.backend-websock.middlewares=upgradeheader,gzip"
        - "traefik.http.routers.backend-websock.service=backend-websock@docker"
        - "traefik.http.services.backend-websock.loadbalancer.server.port=8072"
      # # upgrade headers 
        - "traefik.http.middlewares.upgradeheader.headers.customRequestHeaders.Upgrade=websocket"
        - "traefik.http.middlewares.upgradeheader.headers.customRequestHeaders.Connection=Upgrade"
        - "traefik.http.middlewares.upgradeheader.headers.hostsproxyheaders=websocket,Upgrade"
        # - "traefik.http.middlewares.upgradeheader.headers.forcestsheader=true"
      # # gzip compress
        - "traefik.http.middlewares.gzip.compress=true"

this is a error logs from odoo service on docker

"GET /websocket HTTP/1.1" 400 - 5 0.032 0.084
"POST /mail/rtc/session/update_and_broadcast HTTP/1.1" 200 - 14 0.238 0.247
"POST /mail/rtc/session/update_and_broadcast HTTP/1.1" 200 - 12 0.075 0.223
"GET /websocket HTTP/1.1" 400 - 2 0.016 0.052
"POST /mail/channel/ping HTTP/1.1" 200 - 17 0.788 0.287

You can reproduce this error is very easy only deploy a traefik and odoo v16 in docker-compose.yml, and the problem come

Try

.backend-websock.rule=Path(`/websocket`) && Host(`${URL_DEPLOY}`

Thank you so much I will do some test, for the moment it work

This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.