如何使用Docker在Ubuntu20.04上安装Odoo

来自菜鸟教程
跳转至:导航、​搜索

介绍

Odoo 是一个用 Python 编写的开源企业资源规划 (ERP) 工具。 它支持许多插件来满足不同类型的业务需求,如会计、工资单、库存管理等。

在本教程中,您将使用 Docker Compose 安装 Odoo 和 PostgreSQL 数据库,然后安装 Nginx 作为 Odoo 站点的反向代理。 最后,您将通过使用 Certbot 从 Let's Encrypt Certificate Authority 下载和配置 TLS 证书来启用安全 HTTPS 连接。

先决条件

要完成本教程,您需要:

注意:如果您使用的是DigitalOcean的One-Click Docker Image,您可以跳过这些先决条件。 此映像预配置了 Docker、Docker Compose 和 UFW。

在您选择的区域中启动一个新的 Docker 映像,然后以 root 用户身份登录并继续学习本教程。


最后,要启用 TLS,您需要一个指向服务器公共 IP 地址的域名。 这应该类似于 example.comodoo.example.com。 如果您使用的是 DigitalOcean,请参阅我们的 DNS 快速入门 ,了解有关在控制面板中创建域资源的信息。

准备好所有先决条件后,继续执行 步骤 1,您将在其中安装 docker-compose 包。

第 1 步 — 安装 Docker Compose

要安装 docker-compose 命令行工具,请刷新您的包列表,然后使用 apt 安装包:

sudo apt update
sudo apt install docker-compose

注意:您还可以安装比 Ubuntu 20.04 中包含的更新的 Docker Compose 包。 为此,请按照 如何在 Ubuntu 20.04 上安装和使用 Docker Compose 的 步骤 1

如果你选择使用这个版本的 Docker Compose,你需要用 docker compose 作为命令来代替 docker-compose


您可以通过运行以下命令来确认软件包已安装:

docker-compose –version

您应该收到如下输出:

Outputdocker-compose version 1.25.0, build unknown
docker-py version: 4.1.0
CPython version: 3.8.10

一旦您确认 Docker Compose 已安装在您的服务器上,您将在本教程的下一步中使用 Docker Compose 配置和启动 Odoo 和 PostgreSQL。

第 2 步 — 使用 Docker Compose 运行 Odoo 和 PostgreSQL

要开始创建您的 Odoo 和 PostgreSQL 容器,请在您的主目录中创建一个名为 odoo 的目录来存储您将在本教程中创建的文件。 您将使用此目录来存储运行 Odoo 所需的所有文件。

运行以下命令创建目录,然后 cd 进入它:

mkdir ~/odoo
cd ~/odoo

现在使用 nano 或您喜欢的编辑器打开一个名为 docker-compose.yml 的新空白 YAML 文件:

nano docker-compose.yml

您将使用此文件和 docker-compose 命令来启动您的 Odoo 和 PostgreSQL 容器并将它们链接在一起。 将以下行添加到文件中:

码头工人-compose.yml

version: '3'
services:
  odoo:
    image: odoo:15.0
    env_file: .env
    depends_on:
      - postgres
    ports:
      - "127.0.0.1:8069:8069"
    volumes:
      - data:/var/lib/odoo
  postgres:
    image: postgres:13
    env_file: .env
    volumes:
      - db:/var/lib/postgresql/data/pgdata

volumes:
  data:
  db:

该文件定义了两个 services。 第一个称为 odoo,它运行 Odoo 应用程序。 第二种叫做postgres,是PostgreSQL数据库容器。 这两个服务都引用了命名卷,它们用于在运行的容器实例之外存储数据。 最后,odoo 服务将服务器上的端口 8069 暴露给在同一端口 8069 上运行的 Odoo 容器。

完成编辑后保存并退出文件。 如果您正在使用 nano,请按 CTRL+O 然后按 RETURN 保存,然后按 CTRL+X 退出。

Odoo 和 PostgreSQL 容器使用环境变量来配置自己。 docker-compose.yml 文件为这两个服务指定了 env_file 指令。 然后,该指令包含引用的文件,该文件包含每个服务需要运行的变量。

通常建议使用此方法,而不是直接将环境变量添加到 docker-compose.yml 文件,因为最好将密码保存在 docker-compose.yml 文件之外。 如果您要将文件提交到 Git 存储库或其他源代码控制系统,这种方法尤其适用。

nano 打开一个新的 .env 文件:

nano .env

将以下行添加到文件中,用您选择的 POSTGRES_USERPOSTGRES_PASSWORD 代替突出显示的值:

.env

# postgresql environment variables
POSTGRES_DB=postgres
POSTGRES_PASSWORD=a_strong_password_for_user
POSTGRES_USER=odoo
PGDATA=/var/lib/postgresql/data/pgdata

# odoo environment variables
HOST=postgres
USER=odoo
PASSWORD=a_strong_password_for_user

要为 Odoo 和 PostgreSQL 生成密码,请使用 openssl 命令,该命令在大多数 Linux 系统上都应该可用。 在您的服务器上运行以下命令以生成一组随机字节并打印可用作密码的 base64 编码版本:

openssl rand -base64 30

将生成的字符串粘贴到 .env 文件中,代替 a_strong_password_for_user 占位符密码。

编辑完 .env 文件后,保存并退出文本编辑器。

您现在可以使用 docker-compose 命令启动 odoopostgres 容器:

docker-compose up -d

up 子命令告诉 docker-compose 启动在 docker-compose.yml 文件中定义的容器以及相关的卷和网络。 -d 标志(代表“守护进程”)告诉 docker-compose 在后台运行容器,这样命令就不会接管您的终端。 docker-compose 将在下载所需的 Docker 映像并启动容器时打印一些简短的输出:

OutputCreating network "odoo_default" with the default driver
Creating volume "odoo_odoo_data" with default driver
Creating volume "odoo_postgres_data" with default driver
Pulling odoo (odoo:14.0)...
15.0: Pulling from library/odoo
. . .

如果您想随时停止 Odoo 和 PostgreSQL 容器,请在 ~/odoo 目录中运行以下命令:

docker-compose stop

容器将被停止。 将保留其卷中的配置和数据,以便您可以使用 docker-compose up -d 命令再次启动容器。


完成后,Odoo 应该会运行。 您可以通过使用 curl 命令获取主页来测试 Web 服务器是否在 127.0.0.1:8069 上运行:

curl --head http://localhost:8069

这将仅打印响应中的 HTTP 标头:

OutputHTTP/1.0 303 SEE OTHER
Content-Type: text/html; charset=utf-8
Content-Length: 215
Location: http://localhost:8069/web
Set-Cookie: session_id=142fa5c02742d0f5f16c73bc14ec8144b8230f8a; Expires=Mon, 06-Jun-2022 20:45:34 GMT; Max-Age=7776000; HttpOnly; Path=/
Server: Werkzeug/0.14.1 Python/3.7.3
Date: Tue, 08 Mar 2022 20:45:34 GMT

303 SEE OTHER 响应意味着 Odoo 服务器已启动并正在运行,但您应该访问另一个页面以完成安装。 突出显示的 http://localhost:8069/web 位置标题指示在浏览器中访问 Odoo 安装程序页面的位置。

接下来,我们将设置 Nginx 将公共流量代理到 Odoo 容器。

第 3 步 — 安装和配置 Nginx

将 Nginx 等 Web 服务器放在 Odoo 服务器前面可以通过将缓存、压缩和静态文件服务卸载到更高效的进程来提高性能。 我们将安装 Nginx 并将其配置为 反向代理 对 Odoo 的请求,这意味着它将负责将用户的请求传递给 Odoo 并再次返回。 使用非容器化的 Nginx 进程也将更容易在下一步中添加 Let's Encrypt TLS 证书。

首先,刷新你的包列表,然后使用 apt 安装 Nginx:

sudo apt update
sudo apt install nginx

使用 Nginx Full UFW 应用程序配置文件允许公共流量到端口 80443(HTTP 和 HTTPS):

sudo ufw allow "Nginx Full"
OutputRule added
Rule added (v6)

接下来,在/etc/nginx/sites-available目录下打开一个新的Nginx配置文件。 我们将调用我们的 odoo.conf 但您可以使用不同的名称:

sudo nano /etc/nginx/sites-available/odoo.conf

将以下内容粘贴到新的配置文件中,确保将 your_domain_here 替换为您配置为指向 Odoo 服务器的域。 这应该类似于 odoo.example.com,例如:

/etc/nginx/sites-available/odoo.conf

server {
    listen       80;
    listen       [::]:80;
    server_name  your_domain_here;

    access_log  /var/log/nginx/odoo.access.log;
    error_log   /var/log/nginx/odoo.error.log;

    location / {
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-Host $host;
      proxy_set_header X-Forwarded-Proto https;
      proxy_pass http://localhost:8069;
  }
}

此配置目前仅适用于 HTTP,因为我们将让 Certbot 在下一步中负责配置 TLS。 配置文件的其余部分设置日志记录位置,然后将所有流量以及一些重要的代理标头传递到 http://localhost:8069,即我们在上一步中启动的 Odoo 容器。

保存并关闭文件,然后通过将其链接到 /etc/nginx/sites-enabled/ 来启用配置:

sudo ln -s /etc/nginx/sites-available/odoo.conf /etc/nginx/sites-enabled/

使用 nginx -t 验证配置文件语法是否正确:

sudo nginx -t
Outputnginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

最后,使用新配置重新加载 nginx 服务:

sudo systemctl reload nginx.service

您的 Odoo 站点现在应该可以在纯 HTTP 上使用。 加载 http://your_domain_here(您可能需要点击安全警告),它看起来像这样:

现在您的站点已通过 HTTP 启动并运行,是时候使用 Certbot 和 Let's Encrypt 证书来保护连接了。 您应该在 完成 Odoo 的基于 Web 的设置程序之前执行此

第 4 步 — 安装 Certbot 并设置 TLS 证书

感谢 Certbot 和 Let's Encrypt 免费证书颁发机构,将 TLS 加密添加到您的 Odoo 应用程序只需两个命令。

首先,安装 Certbot 及其 Nginx 插件:

sudo apt install certbot python3-certbot-nginx

接下来,在 --nginx 模式下运行 certbot,并指定您在 Nginx server_name 配置指令中使用的相同域:

sudo certbot --nginx -d your_domain_here

系统将提示您同意 Let's Encrypt 服务条款,并输入电子邮件地址。

之后,系统会询问您是否要将所有 HTTP 流量重定向到 HTTPS。 这取决于您,但通常建议这样做并且安全。

之后,Let's Encrypt 将确认您的请求,Certbot 将下载您的证书:

OutputCongratulations! You have successfully enabled https://odoo.example.com

You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=odoo.example.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/odoo.example.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/odoo.example.com/privkey.pem
   Your cert will expire on 2022-05-09. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot again
   with the "certonly" option. To non-interactively renew *all* of
   your certificates, run "certbot renew"
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

Certbot 将使用新的配置和证书自动重新加载 Nginx。 在浏览器中重新加载您的网站,如果您选择重定向选项,它应该会自动将您切换到 HTTPS。

您的站点现在是安全的,可以安全地继续执行基于 Web 的设置步骤。

第 5 步 — 设置 Odoo

返回您的网络浏览器,重新加载页面。 您现在应该通过安全的 https:// 连接打开 Odoo 的数据库配置页面。 现在您可以安全地输入用户名和密码来完成安装过程。

您在此页面上填写的信息将告诉 Odoo 应用程序如何创建其 PostgreSQL 数据库以及有关默认管理用户的详细信息。

填写以下字段:

  • 数据库名称: odoo
  • 电子邮件: 您的电子邮件地址
  • 密码: 管理员登录的唯一密码
  • 演示数据:如果这是您第一次安装odoo,请确保选中此选项

其余字段的默认值很好。 请务必记录您选择的电子邮件和密码值,因为您将来将使用它们登录 Odoo。

现在点击页面左下角的创建数据库按钮。 Odoo 可能需要一两分钟来创建它的数据库表。 该过程完成后,您将被重定向到 Odoo Apps 管理页面。

从这里您可以选择您想要安装和使用的 Odoo 模块以满足您的 ERP 需求。 如果您想测试应用程序,请单击 Sales 磁贴上的 Install 按钮。 Odoo 将安装该模块,然后将您重定向到您的个人讨论应用页面。

单击屏幕左上角的分段方形图标,然后在下拉选项列表中选择 Sales 链接。

您将进入一个页面,该页面将指导您自定义数据、报价、订单和您可以试验的示例销售列表。

结论

在本教程中,您使用 Docker Compose 启动了 Odoo ERP 应用程序和 PostgreSQL 数据库,然后设置了 Nginx 反向代理并使用 Let's Encrypt TLS 证书对其进行保护。

您现在已准备好开始使用提供的模块构建您的 ERP 网站。 有关使用 Odoo 的更多信息,请参阅 Odoo 官方文档

如果您想编写自己的自定义 Odoo 模块或自定义现有模块,开发者文档 是一个很好的起点。