Odoo 是世界上最流行的一体式商务软件。它提供一系列业务应用程序,包括 CRM、网站、电子商务、计费、会计、制造、仓库、项目管理、库存等,所有应用程序都无缝集成。
Odoo可以以不同的方式安装,具体取决于用例和可用技术。安装 Odoo 的最简单和最快的方法是使用官方的Odoo APT存储库。
在虚拟环境中安装 Odoo 或部署为Docker容器,使您能够更好地控制应用程序,并允许您在同一系统上运行多个 Odoo 实例。
本文介绍如何在 CentOS 8 上的 Python 虚拟环境中安装和部署 Odoo 14。我们将从官方 GitHub 存储库下载 Odoo,并使用 Nginx 作为反向代理。
安装先决条件
Odoo 是用 Python 写的。第一步是安装Python 3、Git、pip以及从源构建 Odoo 所需的所有库和工具:
sudo dnf install python3 python3-devel git gcc sassc redhat-rpm-config libxslt-devel \
bzip2-devel openldap-devel libjpeg-devel freetype-devel
创建系统用户
不允许在根用户下运行 Odoo,因为存在安全风险。创建一个新的系统用户和组与主目录,将运行 Odoo 服务:/opt/odoo
sudo useradd -m -U -r -d /opt/odoo14 -s /bin/bash odoo14
您可以为用户命名任何你喜欢的名称;只需确保创建具有相同名称的 Postgresql 用户。
安装和配置 PostgreSQL
Odoo 使用 PostgreSQL 作为数据库的背面。我们将从标准 CentOS 8 存储库安装PostgreSQL 12:
sudo dnf install @postgresql:12
安装完成后,创建新的 PostgreSQL 数据库群集:
sudo postgresql-setup initdb
启用并启动 PostgreSQL 服务:
sudo systemctl enable --now postgresql
创建与以前创建的系统用户同名的 PostgreSQL 用户。在此示例中,这是:odoo14
sudo su - postgres -c "createuser -s odoo14"
安装 Wkhtmltopdf
wkhtmltopdf 是一组开源命令行工具,用于将 HTML 页面呈现为 PDF 和各种图像格式。若要在 Odoo 中打印 PDF 报表,您需要安装包。Odoo 推荐的版本是 版本,可以从 Github 下载和安装:wkhtmltox
0.12.5
sudo dnf install https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.5/wkhtmltox-0.12.5-1.centos8.x86_64.rpm
安装和配置 Odoo 14
我们将在隔离的 Python 虚拟环境中从源安装 Odoo。
首先,更改为用户”odoo14″:
sudo su - odoo14
从 Odoo GitHub 存储库克隆 Odoo 14 源代码:
git clone https://www.github.com/odoo/odoo --depth 1 --branch 14.0 /opt/odoo14/odoo
导航到目录并创建一个新的 Python 虚拟环境,用于 Odoo 安装:/opt/odoo14
cd /opt/odoo14
python3 -m venv venv
使用源命令激活
环境:
source venv/bin/activate
安装所需的 Python 模块:
pip3 install -r odoo/requirements.txt
Installing Prerequisites
完成后,通过键入:
deactivate
为自定义加载项创建新目录:
mkdir /opt/odoo14/odoo-custom-addons
我们将将此目录添加到参数中。此参数定义 Odoo 搜索模块的目录列表。addons_path
切换回您的 sudo 用户:
exit
创建包含以下内容的配置文件:
sudo nano /etc/odoo14.conf
[options]
admin_passwd = superadmin_passwd
db_host = False
db_port = False
db_user = odoo14
db_password = False
addons_path = /opt/odoo14/odoo/addons, /opt/odoo14/odoo-custom-addons
保存并关闭文件。
superadmin_passwd
创建系统单元文件
打开文本编辑器并创建使用以下内容调用的服务单元文件:odoo14.service
sudo nano /etc/systemd/system/odoo14.service
粘贴以下内容:
[Unit]
Description=Odoo14
Requires=postgresql.service
After=network.target postgresql.service
[Service]
Type=simple
SyslogIdentifier=odoo14
PermissionsStartOnly=true
User=odoo14
Group=odoo14
ExecStart=/opt/odoo14/venv/bin/python3 /opt/odoo14/odoo/odoo-bin -c /etc/odoo14.conf
StandardOutput=journal+console
[Install]
WantedBy=multi-user.target
通知系统存在新的单位文件:
sudo systemctl daemon-reload
启动并启用 Odoo 服务:
sudo systemctl enable --now odoo14
验证 Odoo 是否正在使用以下命令运行:
sudo systemctl status odoo14
输出应如下所示,显示 Odoo 服务处于活动状态并运行:
● odoo14.service - Odoo14
Loaded: loaded (/etc/systemd/system/odoo14.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2020-11-02 20:12:24 UTC; 3s ago
...
若要查看 Odoo 服务记录的消息,请使用以下命令:
sudo journalctl -u odoo14
测试安装
打开浏览器并键入:http://<your_domain_or_IP_address>:8069
假设安装成功,将显示类似于以下内容的屏幕:
如果无法访问该页面,请确保防火墙中的端口已打开:8069
sudo firewall-cmd --permanent --zone=public --add-port=8069/tcp
sudo firewall-cmd --reload
将 Nginx 配置为 SSL 终止代理
默认的 Odoo Web 服务器通过 HTTP 提供流量。为使 Odoo 实例更安全,我们将 Nginx 配置为 SSL 终止代理,通过 HTTPS 为流量服务。
SSL 终止代理是处理 SSL 加密/解密的代理服务器。这意味着终止代理 (Nginx) 将处理和解密传入的 TLS 连接 (HTTPS),并将未加密的请求传递给内部服务 (Odoo)。Nginx 和 Odoo 之间的流量不会加密 (HTTP)。
使用反向代理为您提供许多好处,如负载平衡、SSL 终止、缓存、压缩、提供静态内容等。
在继续本节之前,请确保您已满足以下先决条件:
- 指向公共服务器 IP 的域名。我们将使用 。
example.com
- 已安装 Nginx 。
- 域的 SSL 证书。您可以安装一个免费的让我们加密SSL证书。
打开文本编辑器并创建/编辑域服务器块:
sudo nano /etc/nginx/conf.d/example.com
以下配置设置 SSL 终止、HTTP到 HTTPS 重定向、WWW 到非 WWW 重定向、缓存静态文件以及启用GZip压缩。
# Odoo servers
upstream odoo {
server 127.0.0.1:8069;
}
upstream odoochat {
server 127.0.0.1:8072;
}
# HTTP -> HTTPS
server {
listen 80;
server_name www.example.com example.com;
include snippets/letsencrypt.conf;
return 301 https://example.com$request_uri;
}
# WWW -> NON WWW
server {
listen 443 ssl http2;
server_name www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
include snippets/ssl.conf;
return 301 https://example.com$request_uri;
}
server {
listen 443 ssl http2;
server_name example.com;
proxy_read_timeout 720s;
proxy_connect_timeout 720s;
proxy_send_timeout 720s;
# Proxy headers
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_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
include snippets/ssl.conf;
include snippets/letsencrypt.conf;
# log files
access_log /var/log/nginx/odoo.access.log;
error_log /var/log/nginx/odoo.error.log;
# Handle longpoll requests
location /longpolling {
proxy_pass http://odoochat;
}
# Handle / requests
location / {
proxy_redirect off;
proxy_pass http://odoo;
}
# Cache static files
location ~* /web/static/ {
proxy_cache_valid 200 90m;
proxy_buffering on;
expires 864000;
proxy_pass http://odoo;
}
# Gzip
gzip_types text/css text/less text/plain text/xml application/xml application/json application/javascript;
gzip on;
}
完成后,重新启动Nginx 服务:
sudo systemctl restart nginx
接下来,我们需要告诉 Odoo 使用代理。为此,请打开配置文件并添加以下行:
proxy_mode = True
重新启动 Odoo 服务以使更改生效:
sudo systemctl restart odoo14
此时,将配置反向代理,您可以在 访问 Odoo 实例。https://example.com
更改绑定接口
此步骤是可选的,但它是一个很好的安全实践。
默认情况下,Odoo 服务器侦听所有接口上的端口。若要禁用对 Odoo 实例的直接访问,可以阻止所有公共接口的端口,也可以强制 Odoo 仅在本地接口上侦听。8069
8069
我们将将 Odoo 配置为仅在 侦听 。打开配置,在文件末尾添加以下两行:127.0.0.1
xmlrpc_interface = 127.0.0.1
netrpc_interface = 127.0.0.1
保存配置文件并重新启动 Odoo 服务器以使更改生效:
sudo systemctl restart odoo14
启用多处理
默认情况下,Odoo 在多线程模式下工作。对于生产部署,建议更改为多处理服务器,因为它提高了稳定性,并更好地使用系统资源。
要启用多处理,您需要编辑 Odoo 配置并设置非零数量的工作进程。工作线程数根据 CPU 内核数和可用 RAM 计算。
根据官方的Odoo文档,要计算工人的数量和所需的RAM内存大小,您可以使用以下公式和假设:
工作人员编号计算
- 理论最大工人人数 = (system_cpus * 2) = 1
- 1 名工人可为 + 6 个并发用户服务
- Cron 工作线程还需要 CPU
RAM 内存大小计算
- 我们将考虑 20% 的请求是较重的请求,80% 的请求是较轻的请求。重要求使用约 1 GB 的 RAM,而较轻的 RAM 使用约 150 MB 的 RAM
- 需要拉姆 |
number_of_workers * ( (light_worker_ratio * light_worker_ram_estimation) + (heavy_worker_ratio * heavy_worker_ram_estimation) )
如果您不知道您的系统有多少 CPU,请使用以下grep
命令:
grep -c ^processor /proc/cpuinfo
假设您有一个系统,具有 4 个 CPU 内核、8 GB 的 RAM 内存和 30 个并发 Odoo 用户。
30 users / 6 = **5**
(5 是所需的理论工人数量)(4 * 2) + 1 = **9**
(9 是理论上的最大工人数量)
根据上述计算,您可以使用 5 个工作工 + 1 个工种作为 cron 工人,总共 6 个工人。
根据工作人员数量计算 RAM 消耗量:
RAM = 6 * ((0.8*150) + (0.2*1024)) ~= 2 GB of RAM
计算表明,Odoo 安装将需要大约 2GB 的 RAM。
要切换到多处理模式,请打开配置文件并追加计算值:
limit_memory_hard = 2684354560
limit_memory_soft = 2147483648
limit_request = 8192
limit_time_cpu = 600
limit_time_real = 1200
max_cron_threads = 1
workers = 5
重新启动 Odoo 服务以使更改生效:
sudo systemctl restart odoo14
系统资源的其余部分将由在此系统上运行的其他服务使用。在本教程中,我们在同一服务器上安装了 Odoo 以及 PostgreSQL 和 Nginx。根据您的设置,您可能还在服务器上运行其他服务。
原创文章,作者:校长,如若转载,请注明出处:https://www.yundongfang.com/Yun35723.html