Odoo 服务显示启动成功,浏览器打开 http://服务器IP:8069 却一直转圈或直接拒绝连接。这个问题我遇到过不下五次,原因基本逃不出四类:服务其实没起来、端口没监听对、防火墙拦了、反向代理配错。按下面的顺序查,一般十分钟内能定位。
第一步:确认服务真的在跑
systemctl status odoo
ps aux | grep odoo-bin
status 显示 active (running) 不代表万事大吉。Odoo 有个坑:主进程活着,但初始化数据库时卡住了。直接看日志才可靠:
tail -50 /var/log/odoo/odoo-server.log
正常启动的最后一行是 HTTP service (werkzeug) running on 0.0.0.0:8069。如果卡在数据库连接报错,比如 FATAL: password authentication failed for user "odoo",那就先去修 PostgreSQL 的账号密码,改 /etc/odoo/odoo.conf 里的 db_password。
第二步:看端口监听在哪个地址
ss -tlnp | grep 8069
重点看监听地址。如果输出是 127.0.0.1:8069,说明 Odoo 只接受本机连接,外网自然打不开。检查 odoo.conf:
xmlrpc_interface = 127.0.0.1
有 Nginx 反代的话这个配置是对的(安全),问题出在反代;没有反代就把它改成 0.0.0.0 或直接注释掉,然后 systemctl restart odoo。
第三步:防火墙和云安全组
本机防火墙先查:
ufw status | grep 8069
没放行就 ufw allow 8069/tcp。用云服务器的还有一层容易漏:控制台里的安全组。阿里云、腾讯云的安全组默认只开 22/80/443,8069 要手动加入站规则。判断方法很简单——在服务器本机 curl -I http://127.0.0.1:8069 能通、外网不通,那就是防火墙或安全组的事。
第四步:反向代理配置
生产环境一般用 Nginx 反代 80 端口到 8069。最容易错的是 proxy_pass 后面的地址和 Odoo 的 proxy_mode 没对上。Nginx 侧核心配置:
location / {
proxy_pass http://127.0.0.1:8069;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
}
同时 odoo.conf 里要有 proxy_mode = True,不然登录后会因为 cookie 域名问题反复跳回登录页。改完两边都要重启:nginx -s reload && systemctl restart odoo。
常见问题
页面能打开但一直显示 Internal Server Error?
多半是 addons 路径下有损坏的模块或文件权限不对。执行 chown -R odoo:odoo /opt/odoo 修正属主,再看日志里具体是哪个模块抛异常。
8069 通了但 WebSocket 报错、聊天不实时?
Odoo 16+ 的长轮询走 8072 端口(gevent),Nginx 里要单独加一段 location /websocket 反代到 8072,安全组也要放行。
重装后数据库列表是空的?
检查 odoo.conf 的 db_host、db_user 是否指向了正确的 PostgreSQL 实例,用 sudo -u postgres psql -l 确认库还在不在。
你的 Odoo 卡在哪一步了?把日志报错贴到 fenij.com 的评论区,我们一起看看。