如何在 Ubuntu 18.04 上安装 Odoo 13
Odoo 是流行的开源商务应用程序套件。它提供了一系列应用程序,包括 CRM ,电子商务,网站构建器,计费,会计,制造,仓库,项目管理,库存等等,所有这些都无缝集成。
存在很多方法和技术以多种方式安装 Odoo ,但是安装 Odoo 的最简单,最快的方法是使用官方的 Odoo APT 存储库。
在虚拟环境中安装 Odoo 或作为 Docker 容器进行部署,使您可以更好地控制系统的设置,并在同一系统上运行多个 Odoo 版本。
在本指南中,我们将引导您在 Ubuntu 18.04 上的 Python 虚拟环境中安装和部署 Odoo 13 。我们将从其 Github 存储库中下载 Odoo ,并将 Nginx 用作反向代理。
安装先决条件
以 sudo 用户身份登录到 Ubuntu ,并更新 Apt 缓存:
sudo apt update
安装 Git , Pip , Node.js 和构建 Odoo 依赖项所需的工具:
sudo apt install git python3-pip build-essential wget python3-dev python3-venv python3-wheel libxslt-dev libzip-dev libldap2-dev libsasl2-dev python3-setuptools node-less
创建系统用户
创建一个将运行 Odoo 的系统用户,并 odoo13
使用主目录命名 /opt/odoo13
:
sudo useradd -m -d /opt/odoo13 -U -r -s /bin/bash odoo13
您可以将用户名设置为任何所需的名称,只要您创建具有相同名称的 PostgreSQL 用户即可。
安装和配置 PostgreSQL
Odoo 使用 PostgreSQL 作为数据库后端。请运行以下命令安装 PostgreSQL:
sudo apt install postgresql
安装完成后,以与先前创建的系统用户相同的名称创建一个 PostgreSQL 用户,在本例中为 odoo13
:
sudo su - postgres -c "createuser -s odoo13"
安装 Wkhtmltopdf
该 wkhtmltox
软件包提供了一组开源命令行工具,可以将 HTML 渲染为 PDF 和各种图像格式。为了能够打印 PDF 报告,您需要安装该 wkhtmltopdf
工具。 Odoo 的推荐版本为 0.12.5
,默认的 Ubuntu 18.04 存储库中不提供该版本。
使用以下 wget 命令下载软件包:
wget https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.5/wkhtmltox_0.12.5-1.bionic_amd64.deb
下载完成后,输入以下命令安装软件包:
sudo apt install ./wkhtmltox_0.12.5-1.bionic_amd64.deb
安装和配置 Odoo 13
如前所述,我们将在隔离的 Python 虚拟环境中从源代码安装 Odoo 。
首先,切换用户为 “odoo13” :
sudo su - odoo13
从 GitHub 存储库克隆 Odoo 13 源代码:
git clone https://www.github.com/odoo/odoo --depth 1 --branch 13.0 /opt/odoo13/odoo
下载完成后,为 Odoo 创建一个新的 Python 虚拟环境:
cd /opt/odoo13
python3 -m venv odoo-venv
使用以下命令激活环境:
source odoo-venv/bin/activate
使用 pip3 安装所有必需的 Python 模块:
pip3 install wheel
pip3 install -r odoo/requirements.txt
如果在安装过程中遇到任何编译错误,请确保安装了上面列出的所有必需依赖项。
完成后,通过键入以下命令停用环境:
deactivate
我们将创建一个新目录,其中将包含第三方插件。
mkdir /opt/odoo13/odoo-custom-addons
稍后,我们将把该目录添加到 addons_path
参数中。此参数定义 Odoo 在其中搜索模块的目录列表。
切换回您的 sudo 用户:
exit
创建具有以下内容的配置文件 /etc/odoo13.conf
:
sudo nano /etc/odoo13.conf
[options]
; This is the password that allows database operations:
admin_passwd = my_admin_passwd
db_host = False
db_port = False
db_user = odoo13
db_password = False
addons_path = /opt/odoo13/odoo/addons,/opt/odoo13/odoo-custom-addons
不要忘记将更
my_admin_passwd
改为更安全的内容。
创建 systemd 单位文件
打开您的文本编辑器,然后创建一个包含以下内容的服务单元文件 odoo13.service
:
sudo nano /etc/systemd/system/odoo13.service
[Unit]
Description=Odoo13
Requires=postgresql.service
After=network.target postgresql.service
[Service]
Type=simple
SyslogIdentifier=odoo13
PermissionsStartOnly=true
User=odoo13
Group=odoo13
ExecStart=/opt/odoo13/odoo-venv/bin/python3 /opt/odoo13/odoo/odoo-bin -c /etc/odoo13.conf
StandardOutput=journal+console
[Install]
WantedBy=multi-user.target
通知 systemd 加在新的单位文件:
sudo systemctl daemon-reload
启动 Odoo 服务,并通过运行以下命令使其随机自启动:
sudo systemctl enable --now odoo13
验证服务状态:
sudo systemctl status odoo13
输出应如下所示,表明 Odoo 服务处于活动状态并正在运行。
● odoo13.service
Loaded: loaded (/etc/systemd/system/odoo13.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2019-10-19 20:06:23 UTC; 3s ago
Main PID: 1860 (python3)
Tasks: 4 (limit: 2362)
CGroup: /system.slice/odoo13.service
└─1860 /opt/odoo13/odoo-venv/bin/python3 /opt/odoo13/odoo/odoo-bin -c /etc/odoo13.conf
要查看 Odoo 服务记录的消息,请使用以下命令:
sudo journalctl -u odoo13
测试安装
打开浏览器并输入: http://<your_domain_or_IP_address>:8069
假设安装成功,将出现类似以下的屏幕:
将 Nginx 配置为 SSL 代理
默认的 Odoo Web 服务器通过 HTTP 提供流量。为了使 Odoo 部署更加安全,我们将 Nginx 配置为 SSL 代理,该代理将提供 HTTPS 访问。
SSL 代理是处理 SSL 加密/解密的代理服务器。这意味着代理 (Nginx) 将处理并解密传入的 TLS 连接 (HTTPS) ,并将未加密的请求传递给内部服务 (Odoo) 。 Nginx 和 Odoo 之间的流量不会被加密 (HTTP) 。
使用反向代理可以为您带来很多好处,例如负载平衡, SSL,缓存,压缩,提供静态内容等。
在继续本节之前,请确保您满足以下先决条件:
- 指向您的公共服务器 IP 的域名。我们将使用
example.com
。 - 已安装了 Nginx。
- 您的域名已经有了 SSL 证书。您可以安装免费的 Let’s Encrypt SSL 证书。
打开文本编辑器,然后创建/编辑域服务器块:
sudo nano /etc/nginx/sites-enabled/example.com
以下配置设置了 SSL , HTTP 重定向到 HTTPS, WWW 重定向到非 WWW ,缓存静态文件并启用 GZip 压缩。
/etc/nginx/sites-enabled/example.com
# 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;
# 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;
}
不要忘记用自己的域名替换 example.com 并为 SSL 证书文件设置正确的路径。
完成后,重新启动 Nginx 服务:
sudo systemctl restart nginx
接下来,我们需要告诉 Odoo 使用代理。为此,请打开配置文件 /etc/odoo13.conf
并添加以下行:
proxy_mode = True
重新启动 Odoo 服务以使更改生效:
sudo systemctl restart odoo13
至此,反向代理已配置完毕,您可以在以下位置访问 Odoo 实例: https://example.com
更改绑定接口
此步骤是可选的,但这是一个很好的安全实践。
默认情况下, Odoo 服务器侦听所有接口上的 8069
端口。要禁用对 Odoo 实例的直接访问,可以阻止所有公共接口的 8069
端口,也可以强制 Odoo 仅在本地接口上侦听。
我们将 Odoo 配置为仅监听 127.0.0.1
。打开配置,在文件末尾添加以下两行:
/etc/odoo13.conf
xmlrpc_interface = 127.0.0.1
netrpc_interface = 127.0.0.1
保存配置文件并重新启动 Odoo 服务器,以使更改生效:
sudo systemctl restart odoo13
启用多进程
默认情况下, Odoo 在多线程模式下工作。对于生产部署,建议更改为多进程处理,因为它可以提高稳定性并更好地利用系统资源。
要启用多进程处理,您需要编辑 Odoo 配置并设置非零数量的工作进程。根据系统中 CPU 内核的数量和可用的 RAM 内存来计算工作程序的数量。
根据 Odoo 的官方文档来计算工作进程的数量和所需的 RAM 内存大小,您可以使用以下公式和假设:
工作进程计算
- 理论上的最大工作进程数 =(system_cpus * 2)+ 1
- 1个工作进程可以服务〜 = 6 个并发用户
- 守护进程也需要 CPU
RAM内存大小计算
- 我们将认为所有请求中有 20% 是重度请求,而 80% 是轻度请求。繁重的请求使用大约 1 GB 的 RAM ,而较轻的请求使用大约 150 MB 的 RAM
- 需要的 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 守护进程,总共 6 个进程。
根据工作线程数计算 RAM 内存消耗:
RAM = 6 * ((0.8*150) + (0.2*1024)) ~= 2 GB of RAM
计算表明, Odoo 安装将需要大约 2GB 的 RAM 。
要切换到多处理模式,请打开配置文件 /etc/odoo13.conf
并附加计算值:
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 odoo13
其余的系统资源将由在此系统上运行的其他服务使用。在本指南中,我们将 Odoo 与 PostgreSQL 和 Nginx 一起安装在同一服务器上。根据您的设置,您可能还会在服务器上运行其他服务。
结论
本教程将向您介绍在使用 Nginx 作为反向代理的 Python 虚拟环境中,如何在 Ubuntu 18.04 上安装 Odoo 13 。我们还向您展示了如何针对生产环境启用多处理和优化 Odoo 。
您可能还需要查看有关如何创建 Odoo 数据库每日自动备份的教程。