如何在 Ubuntu 20.04 上安装 Odoo 14

2023-10-20

Odoo 是一款流行的开源商业应用程序套件,可帮助公司管理和运营其业务。它包括广泛的应用程序,例如 CRM、电子商务、网站构建器、计费、会计、制造、仓库、项目管理、库存等等,所有这些都无缝集成。

Odoo根据使用案例和可用技术,可以以不同的方式安装。安装 Odoo 最简单快捷的方法是使用官方Odoo APT存储库。

在虚拟环境中安装 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 updatesudo 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

创建系统用户#

不允许在 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 的推荐版本是 版本0.12.5,可以从Github下载:

sudo 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 14#

我们将从隔离的源代码中安装 OdooPython虚拟环境 .

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

激活虚拟环境:

source odoo-venv/bin/activate

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

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

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

deactivate

创建一个新目录其中将包含第 3 方插件:

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到更安全的东西。

创建 Systemd 单元文件#

打开你的文本编辑器并创建一个名为的服务单元文件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

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

将 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/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内存大小,您可以使用以下公式和假设:

工人数量计算

  • 理论最大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/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

其余的系统资源将由该系统上运行的其他服务使用。在本指南中,我们在同一台服务器上安装了 Odoo 以及 PostgreSQL 和 Nginx。根据您的设置,您的服务器上可能还运行其他服务。

结论#

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

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

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

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

如何在 Ubuntu 20.04 上安装 Odoo 14 的相关文章

随机推荐

  • 在 Linux 中使用 for 循环迭代文件

    在 Linux 中循环文件是一项方便的技能 它可以帮助您更轻松地管理和组织文件 在本教程中 我们将学习如何使用 Bash 循环文件 我们将看看如何使用for loop迭代常规文件 名称中带有空格的文件 目录 忽略大小写等等 在本教程结束时
  • 使用 to_gbq 将 Pandas DataFrame 导出到 Google BigQuery

    The to gbq功能允许您从a上传数据Pandas到 BigQuery 表中 在本教程中 您将学习如何从 Pandas 导出数据数据框使用 BigQueryto gbq功能 目录 hide 1 安装所需的库 2 设置 Google Cl
  • 在 Python 中创建 Pandas DataFrame 的 14 种方法

    A pandasDataFrame是一种二维标记数据结构 可以容纳整数 字符串 浮点等不同类型的数据 在本教程中 我们将揭示创建 pandas DataFrame 的几种不同方法 使用列表 字典 系列等数据结构 NumPy 数组 甚至其他
  • 过滤 Pandas DataFrame 的 20 种方法

    蟒蛇的Pandas是一个用于数据操作和分析的强大库 其主要功能之一是能够从 Pandas DataFrame 中过滤数据 在 Pandas 中过滤数据有很多不同的方法 它使您能够检查特定行或数据子集 按列或多列过滤 Pandas DataF
  • 如何在 CentOS/RHEL 8 和 Fedora 36/35 上安装 Python 3.10

    Python开发团队已经发布了最新版本的Python 3 10 这包括更多新功能 安全补丁和许多其他改进 此版本包含一个新功能 即括号内的上下文管理器 现在支持在上下文管理器中使用括号在多行中继续 欲了解更多详细信息 请阅读完整的变更日志
  • 如何在 Ubuntu 和 LinuxMint 上安装 Spotify

    Spotify 是一家娱乐公司 可让您即时访问数百万首歌曲 从旧的最爱到最新的热门歌曲 本教程将帮助您在 Ubuntu 和 LinuxMint 桌面系统上安装 Spotify 应用程序 本教程介绍了使用命令行在 Ubuntu 和 Linux
  • TCP/IP 与 OSI 模型:比较研究

    在数字通信方面 有两个模型已成为理解和描述不同网络协议如何交互和协同工作的支柱 传输控制协议 互联网协议 TCP IP 和开放系统互连 OSI 模型 这两种模型都有其独特的结构 优点和应用 本文旨在对此进行探讨 TCP IP模型 TCP I
  • 如何在 Debian 10 上安装 PHP 8

    PHP 是一种脚本语言 是开发动态和交互式网页的强大工具 它最初由丹麦裔加拿大程序员 Rasmus Lerdorf 于 1994 年创建 根据 W3Techs 的数据 公共网络上运行的网站有 78 9 使用 PHP 因此 互联网上几乎每 1
  • 如何使用 RVM 在 Debian 上安装 Ruby

    Ruby 是一种深受众多开发人员欢迎的编程语言 Rails是运行Ruby语言的框架 Ruby 语言由 Yukihiro Matz Matsumoto 创建 并于 1995 年首次发布 本文将帮助您使用 RVM 在 Debian Linux
  • 如何在 Debian 10 上安装 Dovecot (POP/IMAP)

    Dovecot 是类 Unix 操作系统上 IMAP 和 POP3 的开源服务 它专注于可用于大多数 Linux 操作系统的轻量级且安全的邮件服务器 POP3 邮局协议 3 和 IMAP 互联网消息访问协议 都是用作消息访问代理的协议 这些
  • 如何在 WordPress 中禁用附件评论

    许多垃圾邮件发送者会针对您的 WordPress 网站上的媒体附件进行评论 您可以通过使用 WordPress 插件或在主题文件中添加自定义 PHP 代码来禁用媒体附件上的评论 下面介绍了两种禁用媒体附件评论的方法 Read 如何在 Wor
  • 如何在 CentOS 8 上安装 Laravel 9

    Laravel 是一个功能强大的开源 PHP Web 框架 专为更快地开发 Web 应用程序而设计 它基于Symfony框架 遵循MVC架构模式 在本教程的最近更新期间 Laravel 9 是可用的最新版本 Laravel 框架还提供了一个
  • 如何在 Ubuntu 18.04 和 16.04 上安装 Nginx

    Nginx 是 Apache HTTP Server 之外的另一个最受欢迎的 Web 服务器 它被全球大量流行网站使用 该网络服务器对于大流量网站非常有用 本教程将帮助您使用 apt get 在 Ubuntu 18 04 和 16 04 上
  • 使用 PHPMailer 发送电子邮件

    电子邮件发送功能是许多 Web 应用程序的重要组成部分 从帐户验证电子邮件到忘记密码提醒 电子邮件有助于在您的应用程序与其用户之间建立沟通桥梁 PHPMailer 是从 PHP 应用程序发送电子邮件的最流行的库之一 它具有许多功能 使其成为
  • 如何在 Ubuntu 18.04 LTS 上安装 Swift

    Swift 是一种安全 快速 富有表现力的通用编程语言 专为软件设计模式而构建 它最适合系统编程 移动和桌面应用程序 Swift 提供了大量功能 使编程变得更加容易 同时为开发人员提供了真正的系统编程语言所需的控制能力 本教程将帮助您在 U
  • 解决 MySQL 错误 1041 (HY000):内存不足

    在使用 MySQL 时 您可能偶尔会遇到以下情况 错误 1041 HY000 内存不足错误 此错误表明 MySQL 服务器 mysqld 在尝试执行操作时内存不足 此类问题可能有点令人困惑 特别是如果您的服务器似乎有足够的可用内存 让我们深
  • 什么是 500 内部服务器错误

    浏览网页时最常见的错误之一是 500 内部服务器错误 此消息表明网络服务器遇到技术问题 本文解释了 500 错误的含义 为什么会收到 HTTP 500 代码以及如何解决这些错误 什么是 HTTP 500 错误 每次打开网页时 浏览器都会向托
  • Linux 中的 Basename 命令

    basename是一个命令行实用程序 可以从给定的文件名中删除目录和尾随后缀 使用basename命令 The basename命令支持两种语法格式 basename NAME SUFFIX basename OPTION NAME bas
  • 如何在 Linux 上创建可启动的 Ubuntu U 盘

    在本教程中 我们将向您展示如何从 Linux 终端创建可启动的 Ubuntu U 盘 您可以使用此 U 盘来启动并测试或在任何支持从 USB 启动的计算机上安装 Ubuntu 先决条件 4GB 或更大的 USB 记忆棒驱动器 运行任何 Li
  • 如何在 Ubuntu 20.04 上安装 Odoo 14

    Odoo 是一款流行的开源商业应用程序套件 可帮助公司管理和运营其业务 它包括广泛的应用程序 例如 CRM 电子商务 网站构建器 计费 会计 制造 仓库 项目管理 库存等等 所有这些都无缝集成 Odoo根据使用案例和可用技术 可以以不同的方