公司动态

Ubuntu 20.04源码安装Odoo 14全攻略:从环境配置到生产部署

📅 2026/8/15 2:03:22
Ubuntu 20.04源码安装Odoo 14全攻略:从环境配置到生产部署
1. 从零到一为什么选择Odoo 14以及安装前的清醒认知如果你正在寻找一款能打通销售、库存、财务、生产、人力资源等所有业务环节的企业管理软件并且希望它足够灵活、开源、可定制那么Odoo原名OpenERP几乎是你绕不开的选择。而Odoo 14作为其长期支持版本中的一个经典稳定版至今仍在大量生产环境中服役其生态成熟、文档齐全、社区资源丰富是学习和部署的绝佳起点。但很多朋友尤其是开发者在第一步“安装”上就栽了跟头不是环境冲突就是依赖报错最后留下一句“Odoo安装太麻烦了”的抱怨。今天我就以一个踩过无数坑的过来人身份带你手把手、无痛地完成Odoo 14的安装并讲清楚每一步背后的“为什么”让你不仅能把环境跑起来更能理解其技术栈构成为后续的开发和运维打下坚实基础。首先我们必须明确一点Odoo不是一个简单的“点下一步”就能安装的桌面应用。它是一个典型的、基于Python的Web应用背后依赖着PostgreSQL数据库、一系列Python库、Node.js用于前端资源构建以及一个Web服务器如Nginx。因此它的安装过程本质上是搭建一个完整的Web应用开发/生产环境。网络上充斥着各种教程有的用Docker一键搞定适合快速体验有的用系统包管理器适合生产部署还有的用源码手动编译适合深度定制开发。本文将聚焦于在Ubuntu 20.04 LTS系统上通过源码方式进行安装。为什么选择这种方式因为它能让你最清晰地看到Odoo的各个组件是如何协同工作的当出现问题时你也拥有最高的排查和调试权限这对于开发者而言至关重要。当然我也会在关键节点指出其他安装方式的优劣供你根据自身场景选择。在开始之前请确保你有一个干净的Ubuntu 20.04环境物理机、虚拟机或WSL2均可。我将假设你具备基本的Linux命令行操作能力。我们的目标不仅仅是让Odoo 14运行起来更是要构建一个易于管理、便于后续模块开发的标准化环境。2. 地基工程系统环境与核心依赖的精准配置安装任何复杂软件前打好地基是成功的一半。对于Odoo 14这个地基包括一个可靠的Python环境、一个高性能的数据库以及编译各种原生依赖所需的工具链。盲目地复制粘贴安装命令常常会导致版本冲突因此理解每一个步骤的目的至关重要。2.1 系统更新与基础工具链安装首先我们登录系统更新软件包列表并升级现有软件。这能确保我们从一个稳定的基础开始。sudo apt update sudo apt upgrade -y接下来安装一系列编译工具和基础依赖。这些工具是后续编译Python包特别是那些包含C扩展的包如psycopg2、Pillow所必需的。sudo apt install -y git build-essential wget libssl-dev libffi-dev libsasl2-dev libldap2-dev libpq-dev libxml2-dev libxslt1-dev libzip-dev libjpeg-dev zlib1g-dev libfreetype6-dev liblcms2-dev libopenjp2-7 libtiff5 libpcre3-dev libevent-dev这里简单解释几个关键包build-essential: 包含GCC、make等核心编译工具。libpq-dev: PostgreSQL客户端开发库用于编译psycopg2Python连接PostgreSQL的驱动。libxml2-dev,libxslt1-dev: 处理XML和XSLT所必需Odoo中大量用于报告生成和数据交换。libzip-dev,libjpeg-dev,zlib1g-dev: 处理压缩文件和图像文件的依赖。libsasl2-dev,libldap2-dev: 如果你未来需要集成LDAP认证这些是必需的。2.2 PostgreSQL数据库的安装与配置Odoo官方推荐且仅支持PostgreSQL。我们将安装PostgreSQL 12与Ubuntu 20.04仓库中的版本匹配且完全兼容Odoo 14。sudo apt install -y postgresql postgresql-client安装完成后PostgreSQL服务会自动启动。我们需要为Odoo创建一个专用的数据库用户。默认情况下PostgreSQL使用“peer”认证方式允许与系统用户名同名的用户无需密码直接登录。我们创建一个名为odoo的系统用户并同时创建同名的数据库用户。sudo su - postgres -c createuser --createdb --username postgres --no-createrole --no-superuser --pwprompt odoo执行上述命令时会提示你为odoo数据库用户设置密码请务必记住这个密码。注意在生产环境中密码应设置为强密码并妥善保管。这里为了演示你可以设置一个临时密码但务必在后续配置文件中正确填写。接下来验证数据库用户是否创建成功并测试连接sudo -u postgres psql -c \du你应该能在用户列表里看到odoo用户。然后切换到odoo用户尝试创建一个测试数据库sudo -u odoo psql -d postgres -c CREATE DATABASE test_odoo;如果命令执行成功说明数据库环境配置正确。完成后可以删除这个测试库sudo -u odoo psql -d postgres -c DROP DATABASE test_odoo;。2.3 Python环境管理虚拟环境的必要性Odoo 14官方支持Python 3.6到3.8。Ubuntu 20.04默认安装了Python 3.8这正好在我们的支持范围内。强烈不建议直接使用系统Python来安装Odoo的依赖这会导致包管理混乱影响系统其他服务。我们将使用venv模块创建独立的Python虚拟环境。首先确保安装了python3-venvsudo apt install -y python3-venv python3-pip然后为我们即将下载的Odoo源码创建一个工作目录并在其中创建虚拟环境。我习惯将Odoo安装在/opt目录下sudo mkdir /opt/odoo sudo chown $USER:$USER /opt/odoo cd /opt/odoo python3 -m venv odoo-venv这将在/opt/odoo/odoo-venv目录下创建一个独立的Python环境。激活它source odoo-venv/bin/activate激活后你的命令行提示符前通常会显示(odoo-venv)表示你正工作在这个虚拟环境中。此后所有通过pip安装的包都将仅限于此环境内。3. 核心组件安装获取源码与依赖解析地基打牢后我们就可以开始构建Odoo本体了。这一步的核心是获取Odoo 14的源代码并安装其庞大的Python依赖树。3.1 克隆Odoo源码与指定版本Odoo的源代码托管在GitHub上。我们直接克隆官方仓库并切换到14.0版本的分支。cd /opt/odoo git clone https://github.com/odoo/odoo.git --depth 1 --branch 14.0 --single-branch odoo14 cd odoo14参数解释--depth 1: 只克隆最近一次提交节省时间和空间。--branch 14.0: 指定克隆14.0分支。--single-branch: 只克隆该分支进一步优化。odoo14: 将克隆的仓库放在当前目录下的odoo14文件夹中。现在你的目录结构应该是/opt/odoo/odoo14。3.2 安装Python依赖requirements.txt的玄机Odoo项目根目录下有一个requirements.txt文件列出了所有必需的Python包。在虚拟环境激活的状态下使用pip安装它们pip install --upgrade pip wheel setuptools pip install -r requirements.txt这个过程可能会花费一些时间因为它需要从PyPI下载并编译数十个依赖包。这里是你可能遇到的第一个“坑”某些依赖如psycopg2、Pillow、lxml需要编译如果之前“地基工程”中的系统依赖libpq-dev,libjpeg-dev等没有安装完整编译就会失败并报出令人困惑的错误信息。这也是为什么我反复强调第一步要装齐那些-dev包的原因。安装完成后你可以通过pip list查看已安装的包应该能看到odoo、psycopg2-binaryOdoo 14使用这个替代psycopg2以简化安装、Pillow、lxml等关键包。3.3 前端依赖Node.js与Less的安装Odoo的网页界面使用了Less作为CSS预处理器需要在运行时将.less文件编译成.css。这需要Node.js和less编译器。Odoo 14对Node.js版本有要求通常 8.0.0我们通过NodeSource仓库安装一个较新的LTS版本。curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash - sudo apt install -y nodejs安装完成后验证版本node --version npm --version然后全局安装less编译器sudo npm install -g less less-plugin-clean-css实操心得有时全局安装的less可能因为路径问题不被Odoo识别。一个更稳妥的做法是在Odoo源码目录内也安装一份本地less。你可以通过npm init -y初始化一个package.json然后npm install less。但Odoo通常能正确找到全局安装的less如果后续启动时报告找不到lessc再考虑此方案。4. 首次运行与配置优化让Odoo真正“活”起来依赖全部就位现在我们可以尝试首次启动Odoo了。但直接运行可能会遇到问题我们需要一个合理的启动方式和配置文件。4.1 创建专属的Odoo用户和配置文件虽然我们可以用当前用户运行但为了安全尤其是生产环境最好创建一个专用的系统用户来运行Odoo服务并限制其权限。sudo adduser --system --home/opt/odoo --group odoo sudo chown -R odoo:odoo /opt/odoo接下来创建一个配置文件。Odoo支持通过命令行参数或配置文件传递设置。配置文件更易于管理。我们复制一份样例配置并修改sudo cp /opt/odoo/odoo14/debian/odoo.conf /etc/odoo14.conf sudo chown odoo:odoo /etc/odoo14.conf sudo chmod 640 /etc/odoo14.conf现在用文本编辑器如sudo nano /etc/odoo14.conf打开这个配置文件进行关键修改[options] ; 这是核心部分 admin_passwd admin_master_password ; 创建一个强密码用于访问数据库管理页面 db_host False ; 默认为False使用Unix socket连接性能更好 db_port False ; 同上 db_user odoo ; 我们之前创建的数据库用户 db_password your_db_password_here ; 填写创建odoo数据库用户时设置的密码 addons_path /opt/odoo/odoo14/addons,/opt/odoo/odoo14/odoo/addons ; 指定模块路径第一个是自定义模块目录可以先创建后两个是源码自带模块重要提示admin_passwd是超级管理员密码用于创建、删除、备份数据库等危险操作务必设置一个复杂且唯一的密码并绝对不要与db_password相同。4.2 首次启动与数据库初始化现在切换到odoo用户并使用配置文件启动Odoo服务sudo su - odoo -s /bin/bash source /opt/odoo/odoo-venv/bin/activate cd /opt/odoo/odoo14 python3 odoo-bin -c /etc/odoo14.conf如果一切顺利你将看到大量的日志输出最后几行应该类似于... INFO ? odoo.service.server: HTTP service (werkzeug) running on 0.0.0.0:8069这表明Odoo已经成功启动并在所有网络接口的8069端口监听。现在打开你的浏览器访问http://你的服务器IP地址:8069。第一次访问时你会看到Odoo的数据库创建页面。这里就是使用admin_passwd的地方。在“Master Password”字段输入你在配置文件中设置的admin_passwd然后点击“Create database”。填写数据库名称如mycompany、邮箱、密码这是你登录Odoo应用的管理员账号密码选择语言和时区最后点击“Create Database”按钮。系统将开始初始化数据库安装基础模块这个过程需要几分钟。完成后会自动跳转到Odoo 14的登录界面使用你刚才设置的管理员邮箱和密码登录恭喜你一个全新的Odoo 14实例已经就绪4.3 以系统服务方式运行实现开机自启与稳定守护在终端前台运行python3 odoo-bin不是长久之计。我们需要将其配置为系统服务使用systemd来管理。创建服务单元文件sudo nano /etc/systemd/system/odoo14.service写入以下内容请根据你的实际路径调整[Unit] DescriptionOdoo14 Afternetwork.target postgresql.service [Service] Typesimple Userodoo Groupodoo ExecStart/opt/odoo/odoo-venv/bin/python3 /opt/odoo/odoo14/odoo-bin -c /etc/odoo14.conf Restarton-failure RestartSec5 KillModeprocess TimeoutStartSecinfinity [Install] WantedBymulti-user.target保存退出后重新加载systemd配置启动服务并设置开机自启sudo systemctl daemon-reload sudo systemctl start odoo14 sudo systemctl enable odoo14检查服务状态sudo systemctl status odoo14如果显示active (running)说明服务已成功在后台运行。现在你可以关闭之前的终端窗口Odoo服务依然稳定运行。日志可以通过sudo journalctl -u odoo14 -f来实时查看。5. 进阶配置与深度排坑指南让Odoo跑起来只是第一步。一个可用于开发或生产的稳定环境还需要一些额外的优化和问题预防。5.1 反向代理与SSL配置面向公网访问直接暴露8069端口到公网是不安全的也显得不专业。我们应该使用Nginx作为反向代理并配置SSL证书使用Let‘s Encrypt免费证书以实现HTTPS访问。首先安装Nginxsudo apt install -y nginx为你的域名创建一个Nginx配置文件例如/etc/nginx/sites-available/odooupstream odoo { server 127.0.0.1:8069; } upstream odoochat { server 127.0.0.1:8072; } server { listen 80; server_name your_domain.com www.your_domain.com; # 重定向HTTP到HTTPS return 301 https://$server_name$request_uri; } server { listen 443 ssl http2; server_name your_domain.com www.your_domain.com; ssl_certificate /etc/letsencrypt/live/your_domain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/your_domain.com/privkey.pem; # 其他SSL优化配置... proxy_read_timeout 720s; proxy_connect_timeout 720s; proxy_send_timeout 720s; # 代理主应用请求 location / { proxy_pass http://odoo; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } # 代理长轮询请求用于实时聊天、通知 location /longpolling { proxy_pass http://odoochat; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } # 缓存静态文件 location ~* /web/static/ { proxy_cache_valid 200 60m; proxy_buffering on; expires 864000; proxy_pass http://odoo; } }启用该配置并测试Nginxsudo ln -s /etc/nginx/sites-available/odoo /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl reload nginx同时需要修改Odoo配置文件/etc/odoo14.conf告诉Odoo它正在被代理后面运行以便生成正确的URLproxy_mode True x-forwarded-for True最后使用Certbot获取SSL证书sudo apt install -y certbot python3-certbot-nginx sudo certbot --nginx -d your_domain.com -d www.your_domain.com5.2 常见安装与启动问题排查即使按照步骤操作你也可能遇到意外。以下是几个常见问题及解决方案启动时报错ModuleNotFoundError: No module named ‘psycopg2’或类似原因虚拟环境未激活或者在错误的环境下运行。解决确保执行命令前已source /opt/odoo/odoo-venv/bin/activate并且确认pip list里有该包。对于psycopg2Odoo 14使用的是psycopg2-binary。访问页面时CSS样式丢失页面布局混乱原因Less文件编译失败。通常是Node.js未安装、less命令未找到或者addons_path中包含的模块有Less语法错误。解决首先确认node --version和which lessc有正确输出。然后检查Odoo日志journalctl -u odoo14看是否有Less编译错误。可以尝试手动触发资源重新生成在Odoo的“设置” - “技术” - “动作” - “清理” - “清理”中勾选“清理所有资产”。创建数据库时非常缓慢或卡在某个模块原因可能是网络问题导致下载外部依赖如wkhtmltopdf超时或者是某个模块的初始化脚本有性能问题。解决可以提前手动安装wkhtmltopdf。去其官网下载适用于Ubuntu 20.04的预编译包并安装。在Odoo配置文件中添加without_demoall可以跳过安装演示数据加快初始化速度。服务启动失败日志显示Address already in use原因8069端口已被占用。可能是之前启动的Odoo进程没有完全退出。解决使用sudo lsof -i :8069查找占用端口的进程ID然后用kill -9 PID结束它。或者在配置文件中修改http_port为其他端口。5.3 开发环境优化建议如果你安装Odoo是为了进行二次开发以下几点能让你的效率倍增使用PyCharm或VSCode将它们的工作目录指向/opt/odoo/odoo14并配置解释器为/opt/odoo/odoo-venv/bin/python3。这能提供代码补全、调试、跳转等强大功能。启用开发者模式登录Odoo后在右上角点击用户名 - “关于”连续点击“Odoo”字样区域会弹出激活开发者模式的对话框。激活后页面会多出调试菜单可以方便地查看字段定义、元数据、跟踪ORM方法等。配置日志级别在/etc/odoo14.conf中设置log_level debug可以获取最详细的运行日志对排查问题极有帮助。使用--dev模式启动在开发时可以在systemd服务的ExecStart命令后添加--devall参数。这会启用自动代码重载修改Python代码后无需重启服务、浏览器端资源不缓存等特性极大提升开发体验。但切记不要在生产环境使用此模式。走到这里你已经拥有了一个完全受控、可深度定制的Odoo 14开发/学习环境。这个从源码搭建的过程虽然步骤稍多但它赋予了你对Odoo技术栈最透彻的理解。下次当你需要升级版本、调试一个诡异的前端问题或者优化服务器性能时今天打下的这些基础将会成为你最得力的工具。安装从来不是终点它只是你开启Odoo世界大门的钥匙门后的业务建模与流程优化才是真正的精彩所在。