如何在 Ubuntu 18.04 上安装 Odoo 13

2023-11-13

Odoo 是一款流行的开源商业应用程序套件。它提供一系列应用程序,包括 CRM、电子商务、网站构建器、计费、会计、制造、仓库、项目管理、库存等等,所有这些都无缝集成。

Odoo根据使用案例和可用技术,可以通过多种方式安装。安装 Odoo 最简单、最快的方法是使用官方 Odoo APT 存储库。

在虚拟环境中安装 Odoo,或部署为Docker容器,允许您更好地控制系统的设置,并在同一系统上运行多个 Odoo 版本。

在本指南中,我们将引导您在 Ubuntu 18.04 上的 Python 虚拟环境中安装和部署 Odoo 13。我们将从他们的 Github 存储库下载 Odoo 并使用 Nginx 作为反向代理。

安装先决条件#

以以下身份登录您的 Ubuntu须藤用户并更新 Apt 缓存:

sudo apt update

Install 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#

The 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#

如前所述,我们将从隔离的源代码中安装 OdooPython虚拟环境 .

First, 更改为用户“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/odoo13python3 -m venv odoo-venv

使用以下命令激活环境:

source odoo-venv/bin/activate

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

pip3 install wheelpip3 install -r odoo/requirements.txt
如果在安装过程中遇到任何编译错误,请确保列出了所有必需的依赖项Installing Prerequisites部分已安装。

完成后,输入以下命令停用环境:

deactivate

We’ll 创建一个新目录这将保存第 3 方插件。

mkdir /opt/odoo13/odoo-custom-addons

稍后,我们将该目录添加到addons_path范围。此参数定义 Odoo 搜索模块的目录列表。

切换回您的 sudo 用户:

exit

创建一个包含以下内容的配置文件:

sudo nano /etc/odoo13.conf
/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
/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)。

Using a 反向代理为您带来许多好处,例如负载平衡、SSL 终止、缓存、压缩、提供静态内容等等。

在继续本部分之前,请确保您已满足以下先决条件:

  • 域名指向您的公共服务器IP。我们将使用example.com.
  • 已安装 Nginx .
  • 您的域的 SSL 证书。你可以安装免费的 Let’s Encrypt SSL 证书 .

打开文本编辑器并创建/编辑域服务器块:

sudo nano /etc/nginx/sites-enabled/example.com.conf

以下配置设置 SSL 终止,HTTP 到 HTTPS 重定向,WWW到非WWW重定向,缓存静态文件,并启用GZip压缩。

/etc/nginx/sites-enabled/example.com.conf
# 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;
}
不要忘记将 example.com 替换为您的 Odoo 域,并设置 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内存大小,您可以使用以下公式和假设:

工人数量计算

  • 理论最大worker数量 = (system_cpus * 2) + 1
  • 1 个工作线程可以服务 ~= 6 个并发用户
  • Cron 工作线程也需要 CPU

RAM内存大小计算

  • 我们会认为所有请求中 20% 是重请求,80% 是轻请求。大量请求使用大约 1 GB 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 个 Worker + 1 个 Worker 作为 cron Worker,总共 6 个 Worker。

根据worker数量计算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。根据您的设置,您的服务器上可能还运行其他服务。

结论#

本教程引导您在 Python 虚拟环境中使用 Nginx 作为反向代理在 Ubuntu 18.04 上安装 Odoo 13。我们还向您展示了如何为生产环境启用多处理和优化 Odoo。

您可能还想查看我们的教程如何创建 Odoo 数据库的每日自动备份 .

如果您有疑问,请随时在下面发表评论。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Ubuntu 18.04 上安装 Odoo 13 的相关文章

随机推荐

  • 如何在 Ubuntu 20.04 上安装 Anaconda

    Anaconda 是一个用于 R 编程和 Python 的开源平台 其中包含各种各样的包和存储库 它的功能很重要 因为它提供大规模的处理和计算数据 并且还可以用Python语言进行编程 Anaconda 是一个很好的 Python 应用程序
  • 如何在 Java 中使用三元运算符并举例

    与其他编程语言一样 Java 也提供了三元运算符 三元运算符是 if then else 语句的简单单行语句 三元运算符使用 and 简单 一个简单的三元运算符的工作原理类似于如果 那么 否则陈述 如果任何条件计算为 true 则执行 tr
  • 如何使您的功能分支保持最新。

    在 git 存储库中为新功能创建单独的分支是个好主意 在这种情况下 不要忘记使您的功能分支与主分支保持同步 因此 请定期更新您的功能分支 以避免任何合并冲突 本教程将帮助您从父分支更新功能分支 我们假设您的父分支是 master 执行以下命
  • 如何在 CentOS/RHEL 8 上安装 PHP 8

    PHP 8 0 是 PHP 团队于 2020 年 11 月 26 日发布的重大更新 较之前版本包含大量新功能和优化 要了解更多信息 请阅读PHP 8 变更日志 REMI 和 EPEL 是最流行的存储库 包含用于安装的最新 RPM 软件包 它
  • 什么是开放系统互连 (OSI) 模型?

    The 开放系统互连 OSI 模型是网络中的一个重要概念 您必须理解它才能掌握数据在网络中传输的方式 如果您是网络世界的新手 这份综合指南将为您提供 OSI 模型的扎实介绍 什么是 OSI 模型 OSI 模型是一个概念框架 用于标准化通信或
  • 如何将 Ubuntu 升级到 22.04 LTS (Jammy Jellyfish)

    Ubuntu 22 04 LTS Jammy Jellyfish 已于 2022 年 4 月 21 日发布 该版本将支持到 2027 年 升级谁 Ubuntu 桌面和开发用户可以立即升级到 Ubuntu 22 04 LTS 但Ubuntu服
  • 使用 Curl 传递自定义标头:实用指南

    Curl 是一个强大的命令行工具 世界各地的开发人员都使用它来通过 URL 传输数据 Curl 是一种多功能工具 支持各种协议 例如 HTTP HTTPS FTP 等 Curl 的宝贵功能之一是它能够在发出请求时传递自定义标头 本文旨在深入
  • Linux 中的 ls 命令(列出文件和目录)

    ls是任何 Linux 用户都应该知道的基本命令之一 The ls命令列出文件系统中的文件和目录 并显示有关它们的详细信息 它是安装在所有 Linux 发行版上的 GNU 核心实用程序包的一部分 本文将通过实际示例和最常见 ls 选项的详细
  • 如何在 CentOS 7 上安装 WildFly (JBoss)

    WildFly 以前称为 JBoss 是一个用 Java 编写的跨平台开源应用程序运行时 可帮助您构建令人惊叹的应用程序 WildFly 灵活 轻量 并且基于可根据需要添加或删除的可插拔子系统 本教程介绍如何在 CentOS 7 上安装 W
  • 如何在 CentOS 上启用 EPEL 存储库

    EPEL Extra Packages for Enterprise Linux 存储库提供了标准 Red Hat 和 CentOS 存储库中未包含的附加软件包 创建 EPEL 存储库是因为 Fedora 贡献者希望使用他们在 Red Ha
  • Linux 中的 who 命令

    在这篇文章中 我们解释了who捆绑在 GNU coreutils 包中的命令 who是一个命令行实用程序 用于打印当前登录用户的列表 它还可以显示当前的运行级别 上次系统启动的时间等 如何使用who命令 的基本语法为who命令如下 who
  • 如何在 Linux 中截断(空)文件

    在某些情况下 您可能希望将现有文件截断 清空 至零长度 简单来说 截断文件就是删除文件内容而不删除文件 截断文件比截断文件更快更容易删除文件 重新创造它 并设置正确的权限和所有权 此外 如果该文件由进程打开 则删除该文件可能会导致使用该文件
  • 如何在 CentOS 8 上安装 PostgreSQL

    PostgreSQL 或 Postgres 是一种开源通用对象关系数据库管理系统 具有许多高级功能 允许您构建容错环境或复杂的应用程序 在本指南中 我们将讨论如何在 CentOS 8 上安装 PostgreSQL 数据库服务器 在选择安装哪
  • 如何在 Ubuntu 18.04 上安装 Pip

    Pip 是一个包管理系统 可简化用 Python 编写的软件包 例如 Python 包索引 PyPI 中的软件包 的安装和管理 Ubuntu 18 04 上默认不安装 Pip 但安装非常简单 在本教程中 我们将向您展示如何使用 Ubuntu
  • 如何在 Debian 9 上安装 Go

    Go 是 Google 创建的一种现代开源编程语言 用于构建可靠 简单 快速 高效的软件 许多流行的应用程序 包括 Kubernetes Docker Teraform 和 Grafana 都是用 Go 编写的 在本教程中 我们将引导您完成
  • 如何在 Ubuntu 20.04 上安装 Sublime Text 3

    崇高的文字是用于网络和软件开发的流行文本和源代码编辑器 它速度非常快 并且具有许多开箱即用的强大功能 可以通过安装新插件和创建自定义设置来增强和自定义该应用程序 本文介绍如何在 Ubuntu 20 04 上安装 Sublime Text 3
  • 如何在 Ubuntu 20.04 上安装 Chromium Web 浏览器

    Chromium是一款专为现代网络打造的快速 稳定且安全的浏览器 它是许多浏览器的基础 包括世界上最流行的网络浏览器谷歌浏览器 Chromium 和 Chrome 之间的主要区别在于 Chromium 是开源的 Chromium 不包含专有
  • 如何在 Debian 10 Linux 上安装 Git

    Git 是世界上最流行的分布式版本控制系统 被许多开源和商业项目使用 使用 Git 您可以与其他开发人员协作处理项目 跟踪代码更改 恢复到之前的阶段 创建分支等等 它最初是由莱纳斯 托瓦尔兹Linux内核的创建者 本教程介绍如何在 Debi
  • 如何在 CentOS 7 上安装和配置 Nagios

    Nagios 是最流行的开源监控系统之一 Nagios 保留整个 IT 基础设施的清单 并确保您的网络 服务器 应用程序 服务和流程正常运行 如果发生故障或性能不佳 Nagios 将通过各种方法发送通知警报 本教程介绍如何在 CentOS
  • 如何在 Ubuntu 18.04 上安装 Odoo 13

    Odoo 是一款流行的开源商业应用程序套件 它提供一系列应用程序 包括 CRM 电子商务 网站构建器 计费 会计 制造 仓库 项目管理 库存等等 所有这些都无缝集成 Odoo根据使用案例和可用技术 可以通过多种方式安装 安装 Odoo 最简