共计 6907 个字符,预计需要花费 18 分钟才能阅读完成。
Odoo 是世界上最受欢迎的一体化商业软件,包含 CRM,网站,电子商务,计费,会计,制造,仓库,项目管理,库存等多种商业应用程序,无缝地 集成。
根据所需的用例,有几种安装 Odoo 的方法。本指南涵盖了在 Ubuntu 18.04 系统上使用 Git 源代码和 Python virtualenv 安装和配置 Odoo 进行生产所需的步骤。
在你开始之前
将系统更新到最新的软件包:
sudo apt update && sudo apt upgrade
安装 git,pip 以及构建 Odoo 依赖所需的工具和库:
sudo apt install git python3-pip build-essential wget python3-dev libxslt-dev libzip-dev libldap2-dev libsasl2-dev python3-setuptools
创建 Odoo 用户
创建一个新的系统用户和组,其主目录 /opt/odoo 将运行 Odoo 服务。
useradd -m -d /opt/odoo -U -r -s /bin/bash odoo
你可以任意命名用户,只要确保你创建了一个具有相同名字的 postgres 用户。
安装和配置 PostgreSQL
从 Ubuntu 的默认存储库安装 Postgres 软件包:
sudo apt-get install postgresql
安装完成后,创建一个与以前创建的系统用户名相同的 postgres 用户,在我们的例子中为 odoo:
sudo su – postgres -c “createuser -s odoo”
安装并配置 Odoo
我们将从 GitHub 存储库安装 odoo,这样我们就可以对版本和更新有更多的控制。我们还将使用 virtualenv 这是一个创建独立 Python 环境的工具。
在开始安装过程之前,请确保您切换到 odoo 用户。
sudo su – odoo
要确认您以 odoo 用户身份登录,您可以使用以下命令:
whoami
现在我们可以从安装过程开始,首先从 GitHub 存储库克隆 odoo:
git clone https://www.github.com/odoo/odoo –depth 1 –branch 11.0 /opt/odoo/odoo11
- 如果您想安装不同的 Odoo 版本,只需在 –branch 开关后更改版本号。
- 您可以随意命名目录,例如 odoo11,您可以使用域的名称。
pip 是一个用于安装和管理 Python 包的工具,我们将使用它来安装所有必需的 Python 模块,并将其安装到:
pip3 install virtualenv
为我们的 Odoo 11 安装运行创建一个新的虚拟环境:
cd /opt/odoo
virtualenv odoo11-venv
输出
Using base prefix ‘/usr’
New python executable in /opt/odoo/odoo11-venv/bin/python3
Also creating executable in /opt/odoo/odoo11-venv/bin/python
Installing setuptools, pip, wheel…done.
激活环境:
source odoo11-venv/bin/activate】
并安装所有必需的 Python 模块:
pip3 install -r odoo11/requirements.txt
如果在安装过程中遇到任何编译错误,请确保已安装“开始之前”部分中列出的所有必需依赖项。
安装完成后,请停用环境并使用以下命令切换回 sudo 用户:
deactivate
exit
如果您计划安装自定义模块,最好将这些模块安装在单独的目录中。要为我们的自定义模块运行创建一个新的目录:
sudo mkdir /opt/odoo/odoo11-custom-addons
sudo chown odoo: /opt/odoo/odoo11-custom-addons
接下来,我们需要创建一个配置文件,我们可以从头创建一个新的配置文件或复制包含的配置文件:
sudo cp /opt/odoo/odoo11/debian/odoo.conf /etc/odoo11.conf
打开文件并编辑它,如下所示:
/etc/odoo11.conf
[options]
; This is the password that allows database operations:
admin_passwd = my_admin_passwd
db_host = False
db_port = False
db_user = odoo
db_password = False
addons_path = /opt/odoo/odoo11/addons
; If you are using custom modules
; addons_path = /opt/odoo/odoo11/addons,/opt/odoo/odoo11-custom-addons
如果您使用自定义模块,请不要忘记将 my_admin_passwd 更改为更安全的内容并调整 addons_path。
创建一个 systemd 单元文件
要将 odoo 作为服务运行,我们将使用以下内容在 / etc / systemd / system / 目录中创建 odoo11.service 单元文件:
/etc/systemd/system/odoo11.service
[Unit]
Description=Odoo11
Requires=postgresql.service
After=network.target postgresql.service
[Service]
Type=simple
SyslogIdentifier=odoo11
PermissionsStartOnly=true
User=odoo
Group=odoo
ExecStart=/opt/odoo/odoo11-venv/bin/python3 /opt/odoo/odoo11/odoo-bin -c /etc/odoo11.conf
StandardOutput=journal+console
[Install]
WantedBy=multi-user.target
通知 systemd 我们创建了一个新的单元文件并通过执行以下命令来启动 Odoo 服务:
sudo systemctl daemon-reload
sudo systemctl start odoo11
您可以使用以下命令检查服务状态:
sudo systemctl status odoo11
输出:
● odoo11.service – Odoo11
Loaded: loaded (/etc/systemd/system/odoo11.service; disabled; vendor preset: enabled)
Active: active (running) since Thu 2018-05-03 21:23:08 UTC; 3s ago
Main PID: 18351 (python3)
Tasks: 4 (limit: 507)
CGroup: /system.slice/odoo11.service
└─18351 /opt/odoo/odoo11-venv/bin/python3 /opt/odoo/odoo11/odoo-bin -c /etc/odoo11.conf
如果没有错误,您可以启用 Odoo 服务在启动时自动启动:
sudo systemctl enable odoo11
如果你想查看 Odoo 服务记录的消息,你可以使用下面的命令:
sudo journalctl -u odoo11
测试安装
打开浏览器并键入:http://<your_domain_or_IP_address>:8069
假设安装成功,将出现类似于以下的截图:
将 Nginx 配置为 SSL 终止代理
如果您想使用 Nginx 作为 SSL 终止代理,请确保您符合以下先决条件:
您有一个指向您的公共服务器 IP 的域名。在本教程中,我们将使用 example.com。
通过下面的介绍安装 Nginx。
您的域名安装了 SSL 证书。通过以下介绍,您可以安装免费的 Let’s Encrypt SSL 证书。
默认的 Odoo Web 服务器通过 HTTP 提供流量。为了使我们的 Odoo 部署最安全,我们将 Nginx 配置为一个 SSL 终止代理,它将通过 HTTPS 提供流量。
SSL 终止代理是处理 SSL 加密 / 解密的代理服务器。这意味着我们的终止代理(Nginx)将处理和解密传入的 TLS 连接(HTTPS),并将未加密的请求传递给我们的内部服务(Odoo),因此 Nginx 和 Odoo 之间的流量不会被加密(HTTP)。
我们需要告诉 Odoo 我们将使用代理,打开配置文件并添加以下行:
/etc/odoo11.conf
proxy_mode = True
重新启动 Odoo 服务以使更改生效:
sudo systemctl restart odoo11
使用 Nginx 作为代理给了我们几个好处。在本例中,我们将配置 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;
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;
# 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 服务器在所有接口上侦听端口 8069,因此如果要禁用直接访问您的 Odoo 实例,您可以阻止所有公共接口的端口 8069,或强制 Odoo 只在本地接口上侦听。
在本指南中,我们将强制 Odoo 只在 127.0.0.1 上进行监听,打开 Odoo 配置文件末尾添加以下两行:
/etc/odoo11.conf
xmlrpc_interface = 127.0.0.1
netrpc_interface = 127.0.0.1
保存配置文件并重新启动 Odoo 服务器以使更改生效:
sudo systemctl restart odoo
启用多处理
默认情况下,Odoo 正在使用多线程模式。对于生产部署,建议切换到多处理服务器,因为它可以提��稳定性并更好地使用系统资源。为了启用多处理,我们需要编辑 Odoo 配置并设置非零数量的工作进程。
多处理模式仅适用于 Windows 系统上可用的基于 Unix 的系统
工作人员的数量是根据系统中的 CPU 核心数量和可用的 RAM 内存来计算的。
根据官方的 [Odoo 文档](“https://www.odoo.com/documentation/11.0/setup/deploy.html”)计算工人数量和所需的 RAM 内存大小,我们将使用以下公式和假设:
工人数量计算
- 理论最大工人数 =(system_cpus * 2)+1
- 1 名工作人员可以服务〜= 6 个并发用户
- 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 -c ^processor /proc/cpuinfo
假设我们有一个带有 4 个 CPU 核心,8 GB RAM 内存和 30 个并发 Odoo 用户的系统。
- 30 个用户 / 6 = ** 5 **(5 是需要工人的理论数量)
- (4 * 2)+ 1 = ** 9 **(9 是工人的理论最大数量)
根据上面的计算,我们可以使用 5 名工人 + 1 名工人,工人总数为 6 人。让我们根据工作人员的人数来检查 RAM 内存消耗。
RAM = 6 * ((0.8*150) + (0.2*1024)) ~= 2 GB of RAM
上面的计算表明我们的 Odoo 安装需要大约 2GB 的 RAM。
要切换到多处理模式,请打开配置文件并追加以下几行:
/etc/odoo11.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 odoo11
剩下的系统资源将被我们机器上运行的其他服务使用。在本指南中,我们在同一台服务器上安装了 Odoo 以及 PostgreSQL 和 Nginx,根据您的设置,您的服务器上可能还会运行其他服务。
搞定!如果您有任何问题,请随时在下面留言。
更多 Ubuntu 相关信息见 Ubuntu 专题页面 https://www.linuxidc.com/topicnews.aspx?tid=2