如何使用Docker在Ubuntu20.04上安装Odoo
介绍
Odoo 是一个用 Python 编写的开源企业资源规划 (ERP) 工具。 它支持许多插件来满足不同类型的业务需求,如会计、工资单、库存管理等。
在本教程中,您将使用 Docker Compose 安装 Odoo 和 PostgreSQL 数据库,然后安装 Nginx 作为 Odoo 站点的反向代理。 最后,您将通过使用 Certbot 从 Let's Encrypt Certificate Authority 下载和配置 TLS 证书来启用安全 HTTPS 连接。
先决条件
要完成本教程,您需要:
- 具有 2 个或更多 CPU、具有 sudo 访问权限的非 root 用户和防火墙的 Ubuntu 20.04 服务器。 要进行设置,请按照我们的 Initial Server Setup with Ubuntu 20.04 教程进行操作。
- 安装了 Docker。 按照 How To Install and Use Docker on Ubuntu 20.04 的 Step 1 和 Step 2 安装并配置您的非 root 用户能够运行
docker
命令。
注意:如果您使用的是DigitalOcean的One-Click Docker Image,您可以跳过这些先决条件。 此映像预配置了 Docker、Docker Compose 和 UFW。
在您选择的区域中启动一个新的 Docker 映像,然后以 root 用户身份登录并继续学习本教程。
最后,要启用 TLS,您需要一个指向服务器公共 IP 地址的域名。 这应该类似于 example.com
或 odoo.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_USER
和 POSTGRES_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
命令启动 odoo
和 postgres
容器:
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 应用程序配置文件允许公共流量到端口 80
和 443
(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 模块或自定义现有模块,开发者文档 是一个很好的起点。