Odoo部署

dbfilter

Odoo是一个多租户的系统:一个单Odoo系统可以跑多个数据库实例,并且它是高度可定制化的,不同的database可以安装不同的modules。
对于那些需要登录web后台的用户来说,dbfilter的配置不存在任何问题,因为他们在登录的时候,需要选择对应的database。
但是对于那些不要登录的用户来说(如:module中的 portal, website),Odoo就需要知道使用哪个database的数据来显示website page。如果没有使用Odoo的多租户系统,那就没问题,因为只存在一个数据库实例。但是如果有多个数据库实例,就需要一些东西来帮助Odoo理解使用哪个数据库了。
这也就是--db-filter参数存在的意义了。通过配置这个参数,Odoo可以针对hostname来决定使用哪一个数据库里面的数据。参数的值为一个正则表达式,可以使用%h%d来代替hostname和domain。
生产环境中,如果有多个数据库实例,尤其是website模块安装了的,一定要配置dbfilter,否则有很多特性都不能使用。

配置样例

  • 只显示名字以'mycompany' 开头的数据库

/etc/odoo.conf中,

[options]
dbfilter = ^mycompany.*$
  • 只显示名字与www之后子域名匹配的数据库,比如在域名为www.mycompany.commycompany.co.uk中,mycompany数据库会被显示,而在域名www2.mycompany.comhelpdesk.mycompany.com中不会显示

/etc/odoo.conf中:

[options]
dbfilter = ^%d$

提示:
配置一个合适的 --db-filter 对与系统安全是有一定帮助的。如果你的配置正确,并且这个dbfilter只有一个数据库名字能满足,那么强烈推荐你使用--no-database-list参数,来隐藏所有数据库的显示和选择。

PostgreSQL

默认情况下,PostgreSQL仅接受来自UNIX sockets和本地环路(也就是localhost)的连接。
如果你的Odoo和PostgreSQL泡在同一台服务器上,那么UNIX socket也是可以的,并且如果你没指定pg host的情况下,默认使用的也就是unix socket。如果你的Odoo和PostgreSQL不再同一台机器上,那么就需要配置pg,使其接受网络连接,方法如下:

  • 一种是,pg还是只接受本地环路,但是在两台机器上使用 SSH tunnel,然后配置Odoo连接tunnel
  • 另一种,pg接受来自odoo机器的网路连接,然后配置odoo

配置样例

  • 接受localhost上的tcp连接
  • 接受192.168.1.x网段的tcp连接

/etc/postgresql/9.5/main/pg_hba.conf中:

host all all 127.0.0.1/32 md5
host all all 192.168.1.0/24 md5

/etc/postgreql/9.5/main/postgresql.conf中:

listen_address = 'localhost,192.168.1.2'
port = 5432
max_connections = 80

配置Odoo

默认的,Odoo通过5432端口连接本地的PostgreSQL,可以通过配置db参数来覆盖默认的配置。
如果使用deb或rpm包安装的odoo,默认会创建一个odoo用户来连接pg。

  • 数据库的管理密码为admin_passwd配置项的值,在对数据库进行修改操作时,会校验此密码,此密码建议随机生成一个。
  • 所有的数据库操作,都会使用这些配置,在也需要连接postgresql的user有createdb的权限。
  • users可以删除他们自己的db。如果想要在/web/database/manager界面中,使那些创建db的按钮没有效果,那么连接pg的user就要no-createdb权限,并且没有所有数据库都要归属于不同的用户。

警告: pg user不能为superuser

配置样例
  • 连接在192.168.1.2上的pg
  • 端口为 5432
  • 使用odoo用户连接数据库
  • 密码为pwd
  • 只要数据库名称以‘mycompany’开头的数据库

/etc/odoo.conf中:

[options]
admin_passwd = mysupersecretpassword
db_host = 192.168.1.2
db_port = 5432
db_user = odoo
db_password = pwd
dbfilter = ^mycompany.*$

内建server

Odoo提供了内建的 HTTP servers,多进程和多线程的都有。
真实生产环境,建议使用多进程模式。

  • 开启多进程服务,只需要配置一个非零的进程数即可,具体的进程数应当基于CPU的核数
  • 也可以对worker进行一定的限制,避免资源枯竭

警告:windows中多进程模式无法启用

woker数量的计算

  • (#CPU * 2) + 1
  • Cron worker也需要CPU
  • 1个worker能支持大约6个并发用户

内存的计算

  • 通常来说20%的请求比较重型,80%的请求比较简单
  • 一个重型的worker大约 1GB的内存
  • 轻型的workder大约150MB的内存

需要的内存 = #worker * ( (0.8 * 150mb) + (0.2 * 1024mb) )

在线聊天

在多进程模式中,一个专门用于聊天的进程会自动启动,并且监听 longpolling port 默认8072端口。
所以,你必须配置一个反向代理,将/longpolling/的请求,转至longpolling端口中。其他请求则转移至正常的监听端口

配置样例

  • 一个4核8线程的服务器
  • 60个并发用户
  • 60 / 6 = 10 <-(理论上,需要的worker数)
  • (4 * 2 ) + 1 = 9 <- (理论上,服务器支持的最大worker数)
  • 我们使用8个worker 外加 1个cron进程,也使用监听系统来统计CPU load,看它是否处在 7 - 7.5之间。
  • RAM = 9 * ((0.8 * 150) + (0.2 * 1024)) ~= 3GB

/etc/odoo.conf 中:

[options]
limit_memory_hard = 1677721600
limit_memory_soft = 629145600
limit_request = 8192
limit_time_cpu = 600
limit_time_real = 1200
max_cron_threads = 1
workers = 8

HTTPS

odoo在提交信息时,使用的都是明文。所以为了安全,HTTPS是很有必要的:

  • Odoo在反向代理之后,应当开启Odoo的proxy mode
  • 设置SSL temination proxy (Nginx 样例)
  • 设置转移到odoo的代理 (Nginx 样例)
  • 将http自动redirect到https

配置样例

/etc/odoo.conf 中:

proxy_mode = True

/etc/nginx/sites-enabled/odoo.conf中:

#odoo server
upstream odoo {
 server 127.0.0.1:8069;
}
upstream odoochat {
 server 127.0.0.1:8072;
}

# http -> https
server {
   listen 80;
   server_name odoo.mycompany.com;
   rewrite ^(.*) https://$host$1 permanent;
}

server {
 listen 443;
 server_name odoo.mycompany.com;
 proxy_read_timeout 720s;
 proxy_connect_timeout 720s;
 proxy_send_timeout 720s;

 # Add Headers for odoo proxy mode
 proxy_set_header X-Forwarded-Host $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;

 # SSL parameters
 ssl on;
 ssl_certificate /etc/ssl/nginx/server.crt;
 ssl_certificate_key /etc/ssl/nginx/server.key;
 ssl_session_timeout 30m;
 ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
 ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
 ssl_prefer_server_ciphers on;

 # log
 access_log /var/log/nginx/odoo.access.log;
 error_log /var/log/nginx/odoo.error.log;

 # Redirect requests to odoo backend server
 location / {
   proxy_redirect off;
   proxy_pass http://odoo;
 }
 location /longpolling {
     proxy_pass http://odoochat;
 }

 # common gzip
 gzip_types text/css text/less text/plain text/xml application/xml application/json application/javascript;
 gzip on;
}

5. Odoo作为一个普通的WSGI应用

把Odoo当做一个WSGI应用是可以的,它也提供了一个基本的样例odoo-wsgi.example.py。如果要进行额外配置,建议复制这个文件,并且在odoo.tools.config进行修改,而不是使用命令行参数或修改配置文件。
如果这样使用Odoo,那么启动的worker实例就是标准的HTTP服务,没有cron worker和 livechat worker了。

5.1 Cron workers

这种情况,需要如下设置:
- 一个典型的Odoo进程(run via odoo-bin)
- 指定需要cron的db (via odoo-bin -d)
- 这个进程不应当处理来自网络的请求,需要关闭网络监听,odoo-bin --no-xmlrpc 或者配置文件中xmlrpc = False

LiveChat

odoo作为wsgi应用启动,导致的第二问题就是,绝大部分HTTP请求都是简短的,需要快速返回响应,并且处理另外的请求,但是LiveChat需要一个针对每一个人的long-lived connection,用来处理实时消息提醒。
这个与多进程模式的设计的相对立的,这种长连接将会阻塞进程,进而阻止其他用户的连接。但是,livechat的请求相当简单,进程大部分时间都只是在等待而已。
所以解决这个问题的方法就是下列之一:
- 部署一个线程模式的Odoo,然后反向代理只把/longpolling/的请求转发到这个Odoo中,这种方式也顺便解决了Cron worker的问题,一举两得
- 或者,使用odoo-bin gevent 启动Odoo, 然后反向代理也只把/longpolling/的请求转发给它。

静态文件

### 如何安装和部署 Odoo 18 #### 准备工作 在开始之前,确保已经完成以下准备工作: - 使用的是支持的 Linux 发行版(如 Ubuntu 或 Rocky Linux),并已配置好环境。 - 已创建具有 `sudo` 权限的新用户[^1]。 以下是详细的安装与部署过程: --- #### 1. 更新系统包管理器 为了确保系统的稳定性和兼容性,在安装任何新软件前应先更新系统包列表。对于基于 Debian/Ubuntu 的发行版,可以执行以下命令来更新系统包索引: ```bash sudo apt update && sudo apt upgrade -y ``` --- #### 2. 安装必要的依赖项 Odoo 运行需要一些基本的依赖库和支持工具。这些可以通过 APT 包管理器一次性安装: ```bash sudo apt install wget git python3-pip python3-dev python3-venv \ libxml2-dev libxslt1-dev zlib1g-dev libsasl2-dev libldap2-dev \ libssl-dev libffi-dev libjpeg-dev libpq-dev node-less nginx -y ``` 上述命令会安装 Python 开发所需的头文件以及 PostgreSQL 数据库的支持组件等必要依赖[^4]。 --- #### 3. 配置 PostgreSQL 数据库服务 Odoo 默认使用 PostgreSQL 作为其数据库管理系统 (DBMS),因此需设置专用的 PostgreSQL 用户及其关联数据库实例。 通过如下指令实现此目标: ```bash sudo -u postgres psql -c "CREATE USER odoo18 WITH PASSWORD 'your_password';" sudo -u postgres psql -c "ALTER ROLE odoo18 CREATEDB;" sudo -u postgres createdb -O odoo18 odoo18db ``` 这里,“your_password” 应替换为你希望设定的实际密码字符串;最后一条语句则用于建立初始测试用途的数据存储区[^2]。 --- #### 4. 下载并解压 Odoo 源码 访问官方 GitHub 存储库获取最新的源代码压缩档或者克隆仓库到本地目录下: ```bash cd /opt/ sudo mkdir odoo18-custom-addons git clone --depth=1 --branch 18.0 https://github.com/odoo/odoo.git odoo18-server chown -R odoo18: . ``` 这一步骤将下载指定分支版本号为 18 的核心程序框架至 `/opt/odoo18-server` 路径位置,并赋予适当的所有权归属给先前定义好的账户主体名称 “odoo18”。 --- #### 5. 构建虚拟环境及激活 推荐采用独立隔离的方式运行应用程序以减少冲突风险。为此可构建专属的 Python 虚拟化区域: ```bash cd /opt/odoo18-server sudo su -s /bin/bash odoo18 python3 -m venv odoo-venv source odoo-venv/bin/activate pip install wheel pip setuptools --upgrade pip install -r requirements.txt deactivate exit ``` 注意切换回常规 shell 后记得重新加载 profile 文件以便生效更改后的 PATH 变量值。 --- #### 6. 编辑配置文件 编辑默认生成的服务端参数文档路径通常位于 `/etc/odoo/odoo.conf` 中,调整其中的关键字段比如监听地址范围、日志等级以及其他自定义选项等内容满足实际需求即可保存退出编辑模式[^3]。 --- #### 7. 设置开机启动脚本 编写 systemd service unit definition file 并放置于合适的位置使得每次重启机器之后能够自动恢复业务操作状态正常运转下去而不必手动干预太多次序关系复杂度较高的环节部分处理逻辑设计思路等方面考虑周全些更好一点效果也不错哦😊! ```ini [Unit] Description=Odoo18 Server Instance After=network.target [Service] Type=simple User=odoo18 Group=odoo18 ExecStart=/opt/odoo18-server/odoo-bin --config=/etc/odoo/odoo.conf --logfile=/var/log/odoo/odoo.log Restart=always StandardOutput=syslog StandardError=syslog SyslogIdentifier=odoo18-instance [Install] WantedBy=multi-user.target ``` 将其命名为类似于 `odoo18.service` 放置于 `/etc/systemd/system/` 目录之下随后启用该单元即刻生效啦🎉! ```bash systemctl daemon-reload systemctl enable odoo18.service systemctl start odoo18.service ``` --- #### 8. 测试连接验证成功与否状况如何? 打开浏览器输入网址形如 http://localhost:8069 即可见登录页面证明一切准备就绪等待下一步具体实施计划安排吧😎! --- ### 注意事项 在整个过程中务必小心谨慎对待每一个细节之处以免遗漏造成不必要的麻烦困扰影响整体进度效率质量等等因素考量全面合理规划科学布局统筹兼顾均衡发展共同进步携手共进再创辉煌未来可期💪!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值