收到部署Odoo 19系统的任务后,我首先查阅了官方资料。作为一款基于Python的企业级应用,Odoo 19在Ubuntu 24.04上的兼容性较好。以下记录从系统准备到服务上线的完整过程,供大家参考。
首先完成服务器的基础安装与配置。安装后发现系统时区有误,为了避免后续日志和业务时间错乱,需要立即修正。
apt update && apt upgrade -y
timedatectl set-timezone Asia/Shanghai
timedatectl set-ntp true
接着,安装一些项目运行所必需的基础依赖。
apt install -y wget curl gnupg2 python3-pip libpq-dev build-essential
安装PostgreSQL 16数据库
根据官方推荐,Odoo 19最好搭配PostgreSQL 16运行。我们需要添加PostgreSQL的官方软件源来安装指定版本,以避免系统默认版本可能带来的适配问题。
#添加PostgreSQL官方源
echo "deb http://apt.postgresql.org/pub/repos/apt/ noble-pgdg main" > /etc/apt/sources.list.d/pgdg.list
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
apt update
执行以下命令安装PostgreSQL 16及其附加组件。
apt install -y postgresql-16 postgresql-contrib-16
验证数据库安装状态
安装完成后,务必验证数据库版本和集群状态,这是确保后续步骤顺利进行的关键。
psql --version
pg_lsclusters

配置Odoo专用数据库
接下来,为Odoo创建一个专用的数据库用户和数据库。在实验环境中,我们使用简单密码;但在生产环境中,请务必设置高强度密码。
su - postgres -c "createuser -s odoo"
su - postgres -c "psql -c \"ALTER USER odoo WITH PASSWORD 'odoo123';\""
su - postgres -c "createdb -O odoo odoo19"
为了简化部署流程(生产环境请根据安全需求调整),我们修改PostgreSQL的本地连接认证方式。
sed -i 's/peer/trust/g' /etc/postgresql/16/main/pg_hba.conf
sed -i 's/md5/trust/g' /etc/postgresql/16/main/pg_hba.conf
修改配置后,重启数据库服务并设置开机自启。
systemctl restart postgresql@16-main
systemctl enable postgresql@16-main
部署Odoo 19应用
Odoo 19可以从其官方网站下载对应的Debian安装包。官网提供了社区版和企业版,支持多种系统。

下载完成后,使用 dpkg 命令进行安装。
dpkg -i /md0/odoo_19.0.20260118_all.deb
安装过程中很可能会遇到依赖缺失的报错。此时,运行以下命令可以自动修复依赖并完成安装。
apt -f install -y
依赖安装完毕后,可以验证Odoo是否安装成功。系统可能会提示使用root用户运行存在安全风险,在测试环境中我们可以暂时忽略。
odoo --version

至此,Odoo已经可以运行。但在实际场景中,我们可能需要将数据和日志存储到特定的挂载点(例如软阵列 /md0)。因此,需要进行数据目录迁移和配置。
配置Odoo数据与日志路径
首先,创建用于存放数据和日志的目录,并修改其属主为 odoo 用户。
mkdir -p /md0/odoo/{data,logs}
chown -R odoo:odoo /md0/odoo
接下来是配置的核心步骤:创建Odoo的主配置文件,指定数据库连接信息、数据目录和日志路径。
cat > /etc/odoo/odoo.conf << EOF
[options]
admin_passwd = admin123 #这个根据需要修改即可
db_host = localhost
db_port = 5432
db_user = odoo
db_password = odoo123
data_dir = /md0/odoo/data
logfile = /md0/odoo/logs/odoo.log
addons_path = /usr/lib/python3/dist-packages/odoo/addons
EOF
这里有一个需要注意的细节:默认的 odoo.service 系统服务文件会硬编码日志路径,我们需要修改它以使用配置文件中的设置。
编辑服务文件:
vim /usr/lib/systemd/system/odoo.service
找到 ExecStart 这一行并进行修改:
# 原始ExecStart行(需修改):
ExecStart=/usr/bin/python3 /usr/bin/odoo --config /etc/odoo/odoo.conf --logfile /var/log/odoo-server.log
# 修改为:
ExecStart=/usr/bin/python3 /usr/bin/odoo --config /etc/odoo/odoo.conf
启动并验证Odoo服务
修改完系统服务配置后,需要重新加载并启动Odoo。
systemctl daemon-reload
systemctl restart odoo
systemctl enable odoo
通过查看服务状态,可以确认Odoo是否正常运行,并检查其使用的配置文件路径是否正确。
systemctl status odoo

常见问题排查
访问 服务器IP:8059 时出现 “Internal Server Error” 是一个高频问题,请按以下步骤排查。
首先,养成查看日志的习惯,这是定位问题最直接的方法。
tail -100f /md0/odoo/logs/odoo.log
如果日志中显示类似 ERROR: relation \"ir_module_module\" does not exist 的错误,说明数据库尚未初始化。
这时,需要切换到 odoo 用户手动初始化数据库。
su - odoo -s /bin/bash
odoo -d odoo19 --init base --stop-after-init
exit
# 重启服务
systemctl restart odoo.service
完成初始化后,再次通过浏览器访问 http://服务器IP:8059。使用默认账号密码 admin / admin 登录。

成功登录后,你将看到Odoo丰富的应用模块界面。

生产环境优化建议
若计划用于生产环境,以下几点优化至关重要:
- 密码安全:务必修改
/etc/odoo/odoo.conf 中的 admin_passwd 以及PostgreSQL数据库里 odoo 用户的密码,避免因弱密码导致的安全攻击。
- 网络防护:配置防火墙,仅开放必要的端口(如Odoo的8059和SSH的22)。生产环境强烈建议使用Nginx进行反向代理,并配置HTTPS。
- 日志管理:配置
logrotate 对Odoo的日志文件进行轮转,防止日志文件无限增大占用磁盘空间。
- 数据备份:制定定期备份策略,包括
/md0/odoo/data 目录以及PostgreSQL数据库本身。
- 性能调优:根据服务器的硬件配置,适当调整PostgreSQL的
shared_buffers、work_mem 等参数,以提升数据库性能。
以上就是本次在Ubuntu 24.04上部署Odoo 19和PostgreSQL 16的完整流程。如果在部署中遇到其他问题,欢迎到 云栈社区 的技术论坛与更多开发者交流探讨。