Odoo(前身为OpenERP)是一款免费开源的ERP解决方案,适用于多种类型的企业。Odoo提供客户关系管理(CRM)、销售管道、项目管理、制造、发票、会计、电子商务等功能。
Odoo是企业最完整的ERP解决方案之一。它默认包含30个核心模块,并提供超过4500个社区模块来帮助您的多项业务。本教程将指导您在Ubuntu 24.04服务器上安装Odoo开源ERP。您将安装并配置最新稳定版Odoo 17,为Odoo设置PostgreSQL数据库,并使用Nginx作为反向代理。
前提条件
要开始本教程,您需要以下条件:
- 一台Ubuntu 24.04服务器(本示例使用主机名为'odoo-server'的Ubuntu服务器)
- 一个具有sudo权限的非root用户,或使用root用户
- 一个已指向服务器IP地址的域名(生产环境需要)
安装依赖
要安装Odoo,您首先需要在Ubuntu系统上安装一些依赖包。Odoo ERP是一个主要用Python编写的Web应用程序,因此还需要安装一些Python包。
在安装软件包之前,运行以下apt命令更新和刷新包索引。
sudo apt update

接下来,通过以下apt命令安装Odoo的包依赖。此安装将包括最新版本的Python、用于编译Python包的build-essentials,以及Odoo需要的一些库。
sudo apt install git wget python3 build-essential libzip-dev python3-dev libxslt1-dev python3-pip libldap2-dev python3-wheel libsasl2-dev python3-venv python3-setuptools node-less libjpeg-dev xfonts-75dpi xfonts-base libxrender1 libpq-dev libffi-dev fontconfig
出现提示时,输入y确认并按ENTER继续。

安装完Python和其他依赖后,下一步是安装Node.js和wkhtmltopdf包。
安装Node.js
要安装Odoo,必须确保系统上已安装Node.js。Node.js用于生成Odoo Web应用程序的静态文件。在本步骤中,您将从第三方Nodesource仓库安装Node.js 20。
运行以下命令下载并设置Node.js 20的Nodesource仓库。
sudo curl -sL https://deb.nodesource.com/setup_20.x | sudo -E bash -

接下来,运行以下apt命令安装Node.js包。
sudo apt install nodejs

Node.js安装完成后,运行以下npm命令安装'rtlcss'包。该包是Odoo所需的,特别是当您使用阿拉伯语和希伯来语等从右到左的用户界面时。
sudo npm install -g rtlcss

安装Wkhtmltopdf
Odoo开源ERP需要安装wkhtmltopdf包。该包用于通过Qt Webkit将HTML页面渲染为PDF和各种图像格式。wkhtmltopdf将通过.deb包手动安装到Ubuntu系统上。
运行以下命令下载wkhtmltopdf包的.deb文件。
cd /tmp
wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-3/wkhtmltox_0.12.6.1-3.jammy_amd64.deb
通过以下dpkg命令安装wkhtmltopdf包。
sudo dpkg -i wkhtmltox_0.12.6.1-3.jammy_amd64.deb
如果遇到缺少包的错误,通过以下apt命令修复。
sudo apt install -f

安装wkhtmltopdf后,可以通过以下命令验证二进制文件是否默认位于'/usr/local/bin'目录。
ls /usr/local/bin
echo $PATH
which wkhtmltopdf
which wkhtmltoimage

安装PostgreSQL数据库服务器
Odoo开源ERP支持MySQL、SQLite和PostgreSQL等数据库。在本步骤中,您将安装并使用PostgreSQL作为Odoo安装的默认数据库。您还将设置PostgreSQL角色并修改PostgreSQL配置。
运行以下apt命令安装PostgreSQL数据库服务器。
sudo apt install postgresql

安装PostgreSQL后,运行以下命令验证服务是否已启用并正在运行。
sudo systemctl is-enabled postgresql
sudo systemctl status postgresql

接下来,为Odoo创建一个新的PostgreSQL角色。运行以下命令以'postgres'用户登录并创建名为'odoo'的新角色。
su - postgres
createuser -sdP odoo
输入新角色'odoo'的密码并重复确认。
通过以下psql命令登录到PostgreSQL shell。
psql
运行以下查询验证PostgreSQL上的角色列表,确保角色'odoo'已创建。
\du
输入'\q'退出PostgreSQL shell,然后输入'exit'退出postgres用户。

创建odoo角色后,测试'odoo'角色的认证。以'postgres'用户登录,并通过psql命令验证'odoo'角色。
su - postgres
psql -h 127.0.0.1 -U odoo -d postgres
登录后,运行'\conn'验证连接。

下载Odoo 17
在本示例中,您将使用'odoo'用户设置并运行odoo v17。运行以下命令创建新用户'odoo',主目录为'/opt/odoo',默认shell为bash。
sudo adduser --system --group --home=/opt/odoo --shell=/bin/bash odoo
进入'/opt/odoo'目录,通过git命令下载odoo 17源代码。
cd /opt/odoo
git clone https://github.com/odoo/odoo.git --depth 1 --branch 17.0 --single-branch odoo-server
运行以下命令将odoo源代码的所有权更改为用户和组'odoo'。
sudo chown -R odoo:odoo /opt/odoo/odoo-server
安装Odoo的Python依赖
在本步骤中,您将为Odoo设置Python虚拟环境,并通过pip3命令安装Python依赖。
将工作目录切换到'/opt/odoo/odoo-server'并创建新的Python虚拟环境'venv'。
cd /opt/odoo/odoo-server
python3 -m venv venv
source venv/bin/activate
激活Python虚拟环境后,运行以下pip3命令安装wheel包和Odoo Python依赖。
pip3 install wheel
pip3 install -r requirements.txt

安装完成后,运行以下命令退出Python虚拟环境。
deactivate
创建Odoo配置
使用nano编辑器创建新的配置文件'/etc/odoo.conf'。
sudo nano /etc/odoo.conf
将以下配置添加到文件中,确保将'admin_passwd'和数据库用户及密码更改为您自己的设置。
[options] ; This is the password that allows database operations: admin_passwd = adminpassodoo db_host = 127.0.0.1 db_port = 5432 db_user = odoo db_password = odoo addons_path = /opt/odoo/odoo-server/addons xmlrpc_port = 8069 logfile = /var/log/odoo/odoo-server.log log_level = debug
保存文件并退出编辑器。然后更改配置文件的所有权。
sudo chown odoo:odoo /etc/odoo.conf
sudo mkdir /var/log/odoo
sudo chown odoo:odoo /var/log/odoo
sudo chmod 755 /var/log/odoo
将Odoo配置为systemd服务
您可以手动通过命令行运行odoo,但更方便的做法是将odoo作为systemd服务运行,这样可以通过systemctl命令管理odoo。
使用nano编辑器创建新的systemd服务文件'/lib/systemd/system/odoo-server.service'。
sudo nano /lib/systemd/system/odoo-server.service
添加以下配置到文件中。
[Unit] Description=Odoo 17.0 Service Requires=postgresql.service After=network.target postgresql.service [Service] Type=simple SyslogIdentifier=odoo PermissionsStartOnly=true User=odoo Group=odoo ExecStart=/opt/odoo/odoo-server/venv/bin/python3 /opt/odoo/odoo-server/odoo-bin -c /etc/odoo.conf StandardOutput=journal+console [Install] WantedBy=multi-user.target
保存文件并退出。重新加载systemd管理器,启动并启用服务。
sudo systemctl daemon-reload
sudo systemctl start odoo-server
sudo systemctl enable odoo-server
sudo systemctl status odoo-server


配置Nginx反向代理
在生产环境中部署odoo的推荐方式是使用反向代理。在本步骤中,您将安装并配置Nginx作为odoo Web应用程序的反向代理,并使用SSL证书保护odoo安装。
首先,修改odoo配置文件'/etc/odoo.conf',添加以下配置使odoo作为后端应用运行在127.0.0.1上。
sudo nano /etc/odoo.conf
添加以下两行配置:
xmlrpc_interface = 127.0.0.1 proxy_mode = True
保存并重启odoo服务。
sudo systemctl restart odoo-server
安装Nginx Web服务器。
sudo apt install nginx

创建新的Nginx服务器块配置'/etc/nginx/sites-available/odoo.conf'。
sudo nano /etc/nginx/sites-available/odoo.conf
将以下配置添加到文件中,确保将域名和SSL证书路径更改为您自己的设置。
#odoo server
upstream odoo {
server 127.0.0.1:8069;
}
upstream odoochat {
server 127.0.0.1:8072;
}
# http -> https
server {
listen 80;
server_name odoo.howtoforge.local;
rewrite ^(.*) https://$host$1 permanent;
}
server {
listen 443 ssl http2;
server_name odoo.howtoforge.local;
proxy_read_timeout 720s;
proxy_connect_timeout 720s;
proxy_send_timeout 720s;
# Add Headers for odoo proxy mode
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/odoo.howtoforge.local/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/odoo.howtoforge.local/privkey.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m;
ssl_session_tickets off;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
# log
access_log /var/log/nginx/odoo.access.log;
error_log /var/log/nginx/odoo.error.log;
# Redirect longpoll requests to odoo longpolling port
location /longpolling {
proxy_pass http://odoochat;
}
# Redirect requests to the odoo backend server
location / {
proxy_redirect off;
proxy_pass http://odoo;
}
# common gzip
gzip_types text/css text/scss text/plain text/xml application/xml application/json application/javascript;
gzip on;
}
保存文件后,激活Nginx服务器块配置并验证配置。
sudo ln -s /etc/nginx/sites-available/odoo.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx

配置UFW防火墙
建议在odoo安装中启用防火墙。运行以下命令将OpenSSH和Nginx Full添加到UFW防火墙。
sudo ufw allow "OpenSSH"
sudo ufw enable
sudo ufw allow "Nginx Full"
sudo ufw status

Odoo数据库迁移和安装
打开Web浏览器访问您的odoo安装域名(如 https://odoo.howtoforge.local/)。首次访问时需要迁移数据库并创建新的管理员用户。
此处的Master Password就是在'/etc/odoo.conf'文件中设置的'admin_passwd'。输入新的数据库名称,输入odoo管理员用户的详细信息和密码。您还可以选择Demo data复选框添加演示数据。
点击"Create database"开始odoo安装。

Odoo安装完成后,您将被重定向到odoo登录页面。输入管理员邮箱和密码并点击"Login"。

您现在应该可以看到odoo用户仪表板。

总结
恭喜!您已在Ubuntu 24.04服务器上成功安装了Odoo开源ERP。您还学习了PostgreSQL数据库服务器的基本安装和配置为反向代理的Nginx Web服务器。此时,您的Ubuntu服务器上已完全安全的Odoo安装。您可以开始添加适合您业务的额外插件和附加组件。