如何在Ubuntu 20.04上安装Odoo 14

在虚拟环境中安装Odoo或作为Docker容器进行部署,可以使您更好地控制应用程序,并可以在同一系统上运行多个Odoo实例。

本文介绍了如何在Ubuntu 20.04上的Python虚拟环境中安装和部署Odoo 14。我们将从官方GitHub存储库下载Odoo,并将Nginx用作反向代理。

安装先决条件

以下命令安装Git,Pip,Node.js和[构建所需的工具](https://linuxize.com/post/how-to-install-gcc-on-ubuntu-20-04/ Odoo依赖项:

sudo apt update
sudo apt install git python3-pip build-essential wget python3-dev python3-venv \
    python3-wheel libfreetype6-dev libxml2-dev libzip-dev libldap2-dev libsasl2-dev \
    python3-setuptools node-less libjpeg-dev zlib1g-dev libpq-dev \
    libxslt1-dev libldap2-dev libtiff5-dev libjpeg8-dev libopenjp2-7-dev \
    liblcms2-dev libwebp-dev libharfbuzz-dev libfribidi-dev libxcb1-dev

Creating a System User

不允许在root用户下运行Odoo,因为这存在安全风险。我们将使用主目录创建一个新的系统用户和组/opt/odoo14,以运行Odoo服务。为此,请输入以下命令:

sudo useradd -m -d /opt/odoo14 -U -r -s /bin/bash odoo14

 

您可以使用任意名称为用户命名,只要您创建具有相同名称的PostgreSQL用户即可。

安装和配置PostgreSQL

Odoo使用PostgreSQL作为数据库后端。PostgreSQL包含在标准Ubuntu存储库中。要安装它,请运行:

sudo apt install postgresql

安装完成后,创建一个与先前创建的系统用户同名的PostgreSQL用户。在此示例中,即odoo14:

sudo su - postgres -c "createuser -s odoo14"

安装wkhtmltopdf

wkhtmltopdf是用于将HTML页面呈现为PDF和各种图像格式的一组开源命令行工具。要在Odoo中打印PDF报告,您需要安装该wkhtmltox软件包。Odoo的推荐版本是version 0.12.5,可以从Github下载:

sudo wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6-1/wkhtmltox_0.12.6-1.bionic_amd64.deb

下载文件后,请输入以下内容进行安装:

sudo apt install ./wkhtmltox_0.12.6-1.bionic_amd64.deb

安装和配置Odoo 14

我们将在隔离的Python虚拟环境中从源代码安装Odoo 。

首先,更改为用户“ odoo14”:

sudo su - odoo14

从GitHub克隆Odoo 14源代码:

git clone https://www.github.com/odoo/odoo --depth 1 --branch 14.0 /opt/odoo14/odoo

为Odoo创建一个新的Python虚拟环境:

cd /opt/odoo14
python3 -m venv odoo-venv

激活虚拟环境:

source odoo-venv/bin/activate

 

使用pip3安装所有必需的Python模块:

pip3 install wheel
pip3 install -r odoo/requirements.txt

如果在安装过程中遇到任何编译错误,请确保安装了本Installing Prerequisites节中列出的所有必需依赖项。

完成后,通过键入以下命令停用环境:

deactivate

创建一个包含第三方插件的新目录:

mkdir /opt/odoo14/odoo-custom-addons

我们将此目录添加到addons_path参数中。此参数定义Odoo在其中搜索模块的目录列表。

切换回您的sudo用户:

exit

创建具有以下内容的配置文件:

sudo nano /etc/odoo14.conf

/etc/odoo14.conf

[options]
; This is the password that allows database operations:
admin_passwd = my_admin_passwd
db_host = False
db_port = False
db_user = odoo14
db_password = False
addons_path = /opt/odoo14/odoo/addons,/opt/odoo14/odoo-custom-addons

复制

不要忘记将更my_admin_passwd改为更安全的内容。

创建系统单位文件

打开您的文本编辑器并创建一个服务单元文件odoo14.service,其内容如下:

sudo nano /etc/systemd/system/odoo14.service

/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/odoo-venv/bin/python3 /opt/odoo14/odoo/odoo-bin -c /etc/odoo14.conf
StandardOutput=journal+console

[Install]
WantedBy=multi-user.target

复制

通知systemd一个新的单位文件存在:

sudo systemctl daemon-reload

启动Odoo服务,并通过运行以下命令使其在启动时启动:

sudo systemctl enable --now odoo14

验证服务状态:

sudo systemctl status odoo14

输出应如下所示,表明Odoo服务处于活动状态并正在运行:

● odoo14.service - Odoo14
     Loaded: loaded (/etc/systemd/system/odoo14.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2020-10-16 19:05:32 UTC; 3s ago
...

要查看Odoo服务记录的消息,请使用以下命令:

sudo journalctl -u odoo14

测试安装

打开浏览器并输入: http://<your_domain_or_IP_address>:8069

假设安装成功,将出现类似以下的屏幕:

get-16

将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;
    include snippets/letsencrypt.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;
}

复制

Don’t forget to replace example.com with your Odoo domain and set the correct path to the SSL certificate files. The snippets used in this configuration are created in this guide .

完成后,重新启动Nginx服务:

sudo systemctl restart nginx

接下来,我们需要告诉Odoo使用代理。为此,请打开配置文件并添加以下行:

/etc/odoo14.conf

proxy_mode = True

重新启动Odoo服务以使更改生效:

sudo systemctl restart odoo14

至此,反向代理已配置完毕,您可以在访问Odoo实例https://example.com。

更改绑定界面

此步骤是可选的,但这是一个好的安全做法。

默认情况下,Odoo服务器侦听8069所有接口上的端口。要禁用对Odoo实例的直接访问,可以阻止8069所有公共接口的端口,也可以强制Odoo仅在本地接口上侦听。

我们将Odoo配置为仅监听127.0.0.1。打开配置,在文件末尾添加以下两行:

/etc/odoo14.conf

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 worker can serve ~= 6 concurrent users
  • Cron工人也需要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名工人作为cron工人,总共6名工人。

根据工作线程数计算RAM内存消耗:

  • RAM = 6 * ((0.8*150) + (0.2*1024)) ~= 2 GB of RAM

计算表明,Odoo安装将需要大约2GB的RAM。

要切换到多处理模式,请打开配置文件并附加计算值:

/etc/odoo14.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 odoo14

The rest of the system resources will be used by other services that run on this system. In this guide, we installed Odoo along with PostgreSQL and Nginx on the same server. Depending on your set up you may also have other services running on your server.

结论

本文介绍了在使用Nginx作为反向代理的Python虚拟环境中的Ubuntu 20.04上Odoo 14的安装过程。我们还向您展示了如何针对生产环境启用多处理和优化Odoo

 

原创文章,作者:校长,如若转载,请注明出处:https://www.yundongfang.com/Yun35665.html

(0)
打赏 微信扫一扫不于多少! 微信扫一扫不于多少! 支付宝扫一扫礼轻情意重 支付宝扫一扫礼轻情意重
上一篇 2021年2月4日 下午12:05
下一篇 2021年2月4日

相关推荐