odoo 虽然有内置的 WSGL 服务器,但是 odoo 本身也是一个标准的 WSGI 应用程序,所以可以通过第三方 WSGI 服务器来进行挂载,如 uWSGI , Gunicorn 。uWSGI 是一个由 C 语言编写的高性能 WSGI 服务器,适合应用于高并发场景的生产环境部署。接下来介绍在ubuntu 中通过 uWSGI 启动 odoo 服务。
uWSGI安装与配置
#安装命令
apt install uwsgi
apt install uwsgi-plugin-python3
# 命令行启动
uwsgi_python3 --http-socket :9091 --wsgi-disable-file-wrapper --processes 3 --threads 2 --virtualenv /opt/odoo16/odoo16-venv --pythonpath . --wsgi-file odoo-wsgi.py
# .ini文件启动,假设文件名称是:odoo_uwsgi.ini
[uwsgi]
; 监听 HTTP 请求的端口
http-socket = :9091
; 禁用 wsgi.file_wrapper
wsgi-disable-file-wrapper = true
; 工作进程数
processes = 3
; 每个工作进程的线程数
threads = 2
; 虚拟环境路径
virtualenv = /opt/odoo16/odoo16-venv
; Python 路径
pythonpath = /opt/odoo16/odoo
; WSGI 入口文件
wsgi-file = odoo-wsgi.py
# 启动命令:uwsgi_python3 --ini odoo_uwsgi.ini
Nginx反向代理配置
#odoo server
upstream odoo {
server 127.0.0.1:9091;
}
upstream odoochat {
server 127.0.0.1:8072;
}
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 80;
server_name 192.168.1.11;
root /var/www/html;
#确保将 your_domain.com 替换为你的实际域名,并将 root 设置为你网站文件所在的路径。
index index.html index.htm index.nginx-debian.html;
# Redirect websocket requests to odoo gevent port
location ~ /(websocket|web/image|static/) {
# location /websocket {
proxy_pass http://odoochat;
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; # requires nginx 1.19.8
}
# Redirect requests to odoo backend server
location / {
# Add Headers for odoo proxy mode
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;
proxy_redirect off;
proxy_pass http://odoo;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
# proxy_cookie_flags session_id samesite=lax secure; # requires nginx 1.19.8
}
# common gzip
gzip_types text/css text/scss text/plain text/xml application/xml application/json application/javascript;
gzip on;
}