ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Rocky Linux生产环境部署Odoo企业版全流程实战指南

Rocky Linux生产环境部署Odoo企业版全流程实战指南 Rocky Linux部署Odoo企业级实战指南做企业级应用选型的时候我经常遇到一个场景公司想把ERP、CRM、进销存甚至官网全部打通预算又有限商业软件每年的授权费动辄几十万小团队根本吃不消。这种时候Odoo基本是绕不开的一个选项功能覆盖销售、采购、库存、财务、生产、人力资源社区版免费开源再往后还能平滑升级企业版算是一条从零到一成本最低的路。但真正动手部署的时候问题就来了。跑在什么系统上很多人第一反应是Ubuntu或者Debian毕竟网上教程一抓一大把。可国内不少企业的服务器还是CentOS系出身特别是金融、政企、制造业这类对稳定性和生命周期要求很高的场景。CentOS 7停服之后RHEL系的下游发行版里Rocky Linux是接棒最稳的那个二进制兼容RHEL社区维护10年生命周期拿来扛Odoo这种长期运行的企业应用再合适不过。这篇文章我结合自己几次完整的部署经历把Rocky Linux上从零搭建Odoo生产环境的整个过程拆开讲透。不光是命令一行行贴出来还会解释每一步为什么这么做、有哪些坑、怎么排查。适合有一定Linux基础、准备把Odoo真正跑进生产环境的运维和开发同学参考。1. 方案选型与整体架构1.1 为什么选Rocky Linux而不是其他发行版Odoo官方文档推荐Ubuntu 22.04 LTS和Debian 12理由无非是Python版本新、依赖好装、社区资料多。但国内企业实际环境里CentOS/RHEL系存量仍然很大很多老运维对yum/dnf的肌肉记忆比apt深得多。还有一层隐性因素——不少企业的合规要求只认RHEL系或者总部下发的安全基线就是基于RHEL模板写的你上一台Ubuntu过等保或者验收的时候每一项都得重新解释非常痛苦。Rocky Linux是CentOS停服后社区接管的项目与RHEL保持高度二进制兼容。这意味着RHEL的文档、二进制包、安全通告绝大多数都能直接用在Rocky上。Rocky Linux 9.x是基于RHEL 9构建的自带Python 3.9虽然Odoo 17以上推荐Python 3.10但可以通过SCL或者源码编译解决后面会详细讲。选Rocky另一个实际好处是SELinux默认强制模式这对企业安全审计是加分项虽然部署Odoo时需要适当放行规则但比起裸奔状态有SELinux兜底心里踏实得多。1.2 Odoo版本选择社区版还是企业版Odoo的主版本迭代很快目前Odoo 20已经发布。每次大版本升级底层框架和前端都会有不少变化所以选版本不能只听官方宣传要结合自己的业务需求。社区版功能上对中小企业完全够用但有几个企业版才有的关键模块要提前认清财务上的高级报表、库存里的预订和波次、生产里的MRP高级排程、以及Odoo Studio这种可视化自定义工具社区版都没有。如果你的业务在这些模块上有强需求建议先把企业版的年度订阅费算进预算社区版跑通流程后再升级数据是平滑迁移的不用推倒重来。从部署角度看我只建议用官方源码包不要用发行版仓库里的老版本也不要图省事去pip随便装。原因很简单Odoo的模块体系非常依赖版本一致性官方源码包自带requirements.txt版本匹配有保障后续升级时git fetch git checkout切分支就能做到大版本迁移非常灵活。发行版仓库的版本往往滞后一到两个大版本安全补丁跟不上出了问题也不好查。1.3 源码部署与Docker部署怎么选这可能是部署Odoo时最纠结的一个决定。我的建议很直接单机部署、小规模团队用、没有专职运维、要快速跑起来选Docker Compose方案确实省事但如果是公司级的正式生产环境有专职运维要长期维护、二次开发、深度集成我强烈建议源码部署。为什么Odoo的模块开发是家常便饭自定义模块要放在addons路径下源码部署直接改文件、加断点、看日志都直观得多。Docker容器里做开发调试每次改代码要重建镜像或者挂载卷文件权限和日志收集都要额外配置效率低不少。另外Odoo依赖PostgreSQL的某些扩展插件比如pg_trgm容器化部署时要额外处理数据库初始化脚本一旦忘记配置某些模块安装的时候会直接报错。源码部署下PostgreSQL是宿主机原生服务这些依赖天然就满足。当然源码部署也有劣势升级时要自己处理依赖、配置文件、systemd服务环境变了容易出小问题。所以我的推荐方案是生产环境用源码部署配合venv虚拟环境隔离Python依赖用systemd做守护进程Nginx做反向代理和SSL终结。这套组合既稳又灵活下面整个实战过程就围绕这个架构展开。1.4 整体架构一览先梳理一下这次要搭建的完整架构后面每一步都对应到这张图上的一个环节Rocky Linux 9.x服务器一台至少4核8G内存建议SSD硬盘PostgreSQL 13作为主数据库和Odoo同机部署Odoo 20社区版源码方式安装在/opt/odoo下使用独立系统用户运行Python虚拟环境venv隔离依赖Nginx监听80/443端口反向代理到Odoo默认的8069端口SSL证书启用HTTPS后台上传附件走本地文件存储配合定时备份很多教程会建议把Nginx和Odoo分开部署在两台机器上理论上没毛病但对绝大多数中小企业来说一台物理机或云主机搞定所有组件就够了前期省成本后期量大了再拆也不迟。分离部署的痛点在于配置复杂度上升Nginx和Odoo之间的长轮询连接、静态文件路径、日志聚合都要重新设计投入产出比不划算。2. 基础环境准备静态IP、仓库、数据库2.1 第一步先把静态IP配好别让服务器地址飘了如果你是在物理机房或者内网环境部署这一步非常关键。DHCP分配的IP一旦变化所有依赖IP的业务系统全部断连尤其是Odoo这种多模块联动、各方都在访问的系统IP变了等于事故。云服务器阿里云、腾讯云、AWS默认是静态内网IP不需要这一步但如果是VMware、KVM或者物理机一定要手动配置。Rocky Linux 9默认使用NetworkManager管理网络修改IP最稳妥的方式是用nmcli命令不建议直接改/etc/sysconfig/network-scripts/下的配置文件新版本默认不再生成这些传统配置文件改了也不生效。先看当前网卡名称和连接状态nmcli connection show假设网卡连接名是ens160把它改成静态IP、网关和DNSnmcli connection modify ens160 ipv4.method manual ipv4.addresses 192.168.1.100/24 ipv4.gateway 192.168.1.1 ipv4.dns 8.8.8.8 114.114.114.114 nmcli connection up ens160改完用ip addr show ens160确认一下再用ping -c 3 192.168.1.1验证网络通不通。这里有个非常隐蔽的坑如果你改了IP导致SSH断开了重连时用的还是旧IP连不上就去服务器控制台或者物理机上操作改完再连新IP。另外nmcli修改时如果不小心把ipv4.method写成auto系统会回落到DHCP模式看起来配置了静态IP实际没有生效排查时先确认这一项。2.2 系统更新与必备工具装完系统第一件事把软件源和系统组件全部更新到最新。Rocky的默认仓库是官方源国内访问速度不理想建议先换成国内镜像源阿里云、腾讯云、清华源都行。以阿里云为例sed -e s|^mirrorlist|#mirrorlist|g -e s|^#baseurlhttp://dl.rockylinux.org/$contentdir|baseurlhttps://mirrors.aliyun.com/rockylinux|g -i.bak /etc/yum.repos.d/rocky.repo /etc/yum.repos.d/rocky-extras.repo /etc/yum.repos.d/rocky-devel.repo dnf clean all dnf makecache dnf update -y然后安装一些基础工具后面编译、排查都会用到dnf install -y vim wget curl git tar unzip gcc gcc-c make kernel-devel openssl-devel bzip2-devel libffi-devel readline-devel sqlite-devel ncurses-devel xz-devel这里重点说一下libffi-devel和sqlite-devel后面源码编译Python时缺了它们会报莫名其妙的错误比如_ctypes导入失败、sqlite3模块缺失Odoo运行时这两个依赖是强依赖提前装上能省很多事。2.3 PostgreSQL数据库部署与调优Odoo的数据存储完全依赖PostgreSQL版本至少13以上推荐直接用Rocky 9仓库自带的PostgreSQL 13。安装和初始化的命令如下dnf install -y postgresql-server postgresql-contrib postgresql-setup --initdb systemctl enable --now postgresql安装完成后默认只监听本地回环地址这其实是好事生产环境数据库不应该暴露到公网。如果有多机部署需求再单独改listen_addresses和pg_hba.conf单机部署完全不用动。接下来创建一个专供Odoo使用的数据库用户。Odoo官方不推荐用postgres超级用户跑业务应该单独建角色su - postgres createuser --createdb --no-superuser --no-createrole odoo psql -c ALTER USER odoo WITH PASSWORD YourStrongPassword; exit密码尽量复杂别用odoo123这种数据库存储的是企业核心业务数据弱密码等于裸奔。这里有一个很多人忽略的点createuser --createdb这个参数很关键Odoo在创建新数据库时比如从界面初始化数据库需要当前数据库用户有CREATEDB权限少了它Odoo报错“permission denied to create database”折腾半天查不到原因。PostgreSQL的默认配置比较保守跑Odoo建议做两处调整。编辑/var/lib/pgsql/data/postgresql.confshared_buffers 1GB # 建议为物理内存的1/4 work_mem 64MB # 排序和哈希操作的临时内存 maintenance_work_mem 256MB # 维护操作建索引等的内存改完后重启systemctl restart postgresql。内存参数不是越大越好work_mem过大会导致每个连接都占用较多内存并发一高反而OOM根据服务器实际内存量力而行。2.4 编译安装Python 3.10Rocky 9自带Python 3.9但Odoo 20要求Python 3.10及以上。虽然有各种第三方源可以装但为了可控性和安全性我推荐编译安装Python 3.10.x整个过程不到十分钟一劳永逸。cd /usr/src wget https://www.python.org/ftp/python/3.10.15/Python-3.10.15.tgz tar xf Python-3.10.15.tgz cd Python-3.10.15 ./configure --enable-optimizations --prefix/usr/local/python310 make -j$(nproc) make altinstall这里敲黑板配置时用了--enable-optimizations编译时间会比普通编译长不少但生成的Python解释器性能更好用了altinstall而不是install避免覆盖系统自带的Python 3.9。如果系统Python被搞坏了dnf等系统工具会跟着出问题比如提示ModuleNotFoundError: No module named dnf到时候想修复很头疼。编译完成后验证版本并确保python3.10在PATH中/usr/local/python310/bin/python3.10 --version ln -s /usr/local/python310/bin/python3.10 /usr/bin/python3.10Odoo依赖的很多库也需要编译所以刚才装的基础工具包gcc、openssl-devel、libffi-devel等在这里就发挥作用了缺任何一个后面pip安装依赖时都会失败。3. Odoo安装与配置核心环节3.1 源码目录规划与系统用户隔离生产环境部署Odoo最忌讳的就是用root用户直接运行。Odoo有Web访问入口一旦有代码执行漏洞root权限意味着整台服务器沦陷。所以第一步创建专用用户和目录useradd -m -d /home/odoo -s /bin/bash odoo mkdir -p /opt/odoo chown -R odoo:odoo /opt/odooOdoo源码放在/opt/odoo/odoo-server目录后续的所有操作都用odoo用户身份执行避免权限问题。如果后面需要自定义模块建议单独建一个目录/opt/odoo/custom-addons和官方源码分开管理升级时不会把自研模块搞丢。获取Odoo 20源码su - odoo cd /opt/odoo git clone --depth 1 --branch 20.0 https://github.com/odoo/odoo.git odoo-server生产环境我建议加--depth 1只拉取当前版本快照这样仓库体积小、升级时切标签也方便。如果后续要做二次开发需要看历史提交再git fetch --unshallow补全历史。3.2 Python虚拟环境与依赖安装Odoo的依赖包有几百个版本约束严格直接用系统全局Python安装很容易和系统其他软件冲突。官方推荐的做法是创建虚拟环境把Odoo的依赖全部隔离在虚拟环境里cd /opt/odoo /usr/local/python310/bin/python3.10 -m venv venv source venv/bin/activate pip install --upgrade pip wheel setuptools pip install -r odoo-server/requirements.txt依赖安装过程是最容易出问题的地方。常见错误是编译某个Python库时缺系统头文件比如安装psycopg2时提示Error: pg_config executable not found解决方法是安装postgresql-develdnf install -y postgresql-devel安装完成后激活虚拟环境验证一下python -c import odoo; print(odoo.__version__)如果提示找不到模块确认当前目录和虚拟环境路径是否正确。这里有个经验之谈所有Odoo相关操作都要先source /opt/odoo/venv/bin/activate包括后面手动启动Odoo测试不然会出现“虚拟环境里能跑、systemd服务起不来”这种玄学问题。3.3 Odoo配置文件详解Odoo的配置文件默认路径是/etc/odoo.conf生产环境手动创建一份重点参数逐个说清楚[options] ; 数据库连接配置 db_host 127.0.0.1 db_port 5432 db_user odoo db_password YourStrongPassword db_name False ; 数据目录和插件目录 data_dir /var/lib/odoo addons_path /opt/odoo/odoo-server/addons,/opt/odoo/custom-addons ; 网络监听 http_interface 127.0.0.1 http_port 8069 longpolling_port 8072 workers 4 max_cron_threads 1 ; 性能与限制 limit_time_real 120 limit_time_cpu 60 limit_memory_hard 2684354560 limit_memory_soft 2147483648 ; 附件与日志 data_dir /var/lib/odoo logfile /var/log/odoo/odoo.log log_level info ; 文件存储 list_db True几个关键参数展开讲讲。workers是处理用户请求的进程数生产环境一定要设置成大于1的值否则Odoo默认以单进程模式运行前端请求串行处理并发一高直接卡死。workers的计算经验值是2 * CPU核心数 1比如4核就是9但也要考虑内存每个worker大约占用150-200MB内存8G内存的机器开4个worker比较稳妥。max_cron_threads控制后台定时任务的线程数一般1-2就够太多会抢业务请求的资源。limit_memory_hard和limit_memory_soft是Odoo每个worker的内存上限单位是字节。注意Odoo的worker一旦超过limit_memory_hard会被直接kill然后自动重启。如果业务处理大报表时worker频繁重启多半是内存上限设低了可以适当调大但更大的问题可能是服务器本身内存不够需要扩容。http_interface 127.0.0.1非常关键这表示Odoo只监听本机回环地址外部无法直接通过IP8069端口访问所有外部流量必须经过Nginx转发。这是安全实践否则你的Odoo会直接裸奔在公网上各种扫描工具分分钟盯上你。提前创建数据目录和日志目录mkdir -p /var/lib/odoo /var/log/odoo chown -R odoo:odoo /var/lib/odoo /var/log/odoo3.4 systemd服务管理开机自启生产环境绝对不能手动用odoo-server加上后台运行一是不规范二是服务器重启后Odoo不会自动恢复。用systemd做守护进程崩溃自动重启开机自启还能用journalctl统一看日志。创建/etc/systemd/system/odoo.service[Unit] DescriptionOdoo ERP Requirespostgresql.service Afternetwork.target postgresql.service [Service] Typesimple Userodoo Groupodoo PermissionsStartOnlytrue ExecStart/opt/odoo/venv/bin/python /opt/odoo/odoo-server/odoo-bin --config/etc/odoo.conf Restarton-failure RestartSec5 StandardOutputjournal StandardErrorjournal [Install] WantedBymulti-user.target关键点在于ExecStart要用虚拟环境里的Python解释器跑odoo-bin不是系统自带Python否则依赖找不到。Restarton-failure表示非正常退出时自动拉起对于偶发的内存暴涨被OOM Kill服务能自行恢复。启动服务并设置开机自启systemctl daemon-reload systemctl enable --now odoo systemctl status odoo启动后先看日志确认没有报错tail -f /var/log/odoo/odoo.log正常会看到类似HTTP service (werkzeug) running on 127.0.0.1:8069的日志说明Odoo已经在监听端口了。3.5 初始化数据库与首次访问Odoo第一次访问时浏览器打开http://服务器IP:8069会出现一个数据库管理页面需要填写数据库名称、管理员邮箱和密码。这一步实际上是在PostgreSQL中创建数据库和对应账号信息。注意生产环境先通过Nginx和HTTPS访问不要直接用IP和端口暴露在公网上不然任何人都可以在这个页面创建数据库消耗服务器资源。填好信息后点击创建Odoo会开始初始化种子数据整个过程根据服务器配置要1-3分钟之后就能登录后台选择安装应用模块了。这一步如果卡在某个百分比不动大概率是数据库权限或磁盘空间问题查看日志会有明确报错。4. Nginx反向代理与HTTPS配置4.1 为什么一定要加一层NginxOdoo自带的HTTP服务可以对外提供服务但有两个明显的缺陷一是单worker模式下并发能力有限二是不能优雅地处理HTTPS证书。Nginx在前面扛接入层既能做静态文件缓存、压缩、访问控制、限流又能把证书维护在一个地方后续要加站点、加代理、做安全策略都非常方便。装好Nginxdnf install -y nginx systemctl enable --now nginx创建Odoo站点配置/etc/nginx/conf.d/odoo.confupstream odoo_backend { server 127.0.0.1:8069; } upstream odoo_longpolling { server 127.0.0.1:8072; } server { listen 80; server_name erp.example.com; return 301 https://$host$request_uri; } server { listen 443 ssl http2; server_name erp.example.com; ssl_certificate /etc/nginx/ssl/erp.example.com.crt; ssl_certificate_key /etc/nginx/ssl/erp.example.com.key; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; client_max_body_size 100m; proxy_read_timeout 300s; proxy_connect_timeout 60s; proxy_send_timeout 300s; location / { proxy_pass http://odoo_backend; proxy_set_header Host $host; 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_redirect off; } location /websocket/ { proxy_pass http://odoo_longpolling; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; proxy_set_header Host $host; proxy_http_version 1.1; } location ~* /web/static/ { proxy_cache_valid 200 90m; proxy_pass http://odoo_backend; expires 7d; } gzip on; gzip_types text/css text/javascript application/javascript application/json image/svgxml; }这段配置里有几个容易踩的坑。一个是location /websocket/Odoo 20的实时协作、聊天、消息通知依赖Longpolling服务Nginx必须正确转发WebSocket升级请求。如果漏掉这段后台聊天功能会一直显示连接失败看起来像网络问题实际是反向代理不支持WebSocket。另一个是proxy_set_header X-Forwarded-Proto $scheme这个Header告诉Odoo当前请求是通过HTTPS进来的Odoo才会正确生成HTTPS链接。如果你忘了配置Odoo生成的资源链接会全部变成HTTP浏览器混合内容拦截导致页面样式丢失排查半天发现是这里的问题。client_max_body_size设置成100M以上是为了支持大附件的上传比如产品图片、合同PDF、导入Excel等。默认Nginx限制1M不调整的话上传大文件直接返回413错误。4.2 启用HTTPS与证书配置生产环境必须启用HTTPS理由不用多说登录密码、业务数据走明文实在太危险。证书方面如果域名已经备案直接申请云厂商的免费证书就行有效期一般为一年到期前记得续期如果是内网环境也要用自建CA签发的证书至少保证传输加密。证书放置好后分别指定ssl_certificate和ssl_certificate_key路径。配置完成执行nginx -t检查语法再systemctl reload nginx。然后从外网试一下https://erp.example.com能正常跳转并打开Odoo的数据库管理页面就基本成功了。4.3 SELinux放行Nginx代理Rocky Linux默认开启SELinux而且安全策略默认禁止Nginx发起对外网络连接。这时候你配置好Nginx后会发现访问返回502 Bad GatewayNginx日志里出现Permission denied类似的错误。解决方法是放行httpd的网络连接权限setsebool -P httpd_can_network_connect 1这个参数改了之后重启Nginx再试通常就能解决问题。setsebool -P的-P参数表示持久化重启后依然生效。如果是完全内网环境、对安全要求不是极致苛刻也可以考虑把SELinux设为Permissive模式但我不推荐保持Enforcing并正确放行规则才是企业级该有的态度。4.4 防火墙配置只留该留的端口生产环境防火墙一定要收敛端口。用firewalld把80、443放行其他端口一律不对外开放firewall-cmd --permanent --add-servicehttp firewall-cmd --permanent --add-servicehttps firewall-cmd --reloadOdoo的8069和8072端口只监听在127.0.0.1外部本来就不通不需要在防火墙里放行。如果你之前做了端口转发或者把HTTP服务监听在所有网卡这里千万不要为了省事再把8069端口直接暴露到公网。5. 常见问题与排查技巧实录部署Odoo过程中会遇到不少问题我把实际踩过的一些高频坑整理成查表方便遇到问题快速定位。现象可能原因排查与解决办法静态IP配置后重启失效NetworkManager连接配置没有持久化用nmcli connection up确认连接名nmcli connection modify后重启验证访问IP:8069打不开Odoo服务未启动/监听在回环地址systemctl status odoo看状态ss -tlnp创建数据库时卡住或报错PostgreSQL权限不足确认db_user有CREATEDB权限psql -U odoo -d postgres -c \du验证worker进程频繁被杀limit_memory_hard设置过小调大限制或增加服务器物理内存网页样式错乱资源加载失败Nginx未设置X-Forwarded-Proto检查Nginx配置确保header正确传递聊天/消息功能一直转圈Nginx没有转发WebSocket参考上文/websocket/配置确保proxy_http_version 1.1上传大文件报413Nginx的client_max_body_size太小调大到100M以上Nginx报502SELinux阻止httpd网络连接setsebool -P httpd_can_network_connect 1依赖安装时编译失败缺少系统开发包安装postgresql-devel、libffi-devel、openssl-devel等Odoo日志报PermissionError目录属主不是odoo用户chown -R odoo:odoo /var/lib/odoo /var/log/odoo5.1 数据库迁移时字符集与排序规则问题有一种情况容易踩坑在阿里云RDS这类云数据库上创建Odoo数据库时默认字符集可能是UTF8但排序规则不是C.UTF-8这会导致安装某些模块时报错比如提示index row size exceeds maximum。Odoo官方推荐数据库初始化和运行均使用UTF8和C.UTF-8排序规则。在本地PG实例上一般不会有这个问题但还是建议创建数据库时显式指定su - postgres -c createdb -O odoo --encodingUTF8 --lc-collateC.UTF-8 --lc-ctypeC.UTF-8 odoo_prod5.2 关于“国内为什么很少用Odoo”的一点思考很多同行问过我这个问题我的感受是国内ERP市场长期被用友、金蝶这类本地化产品教育企业的使用习惯和Odoo的模块化理念差异很大再加上Odoo的汉化、本地化财务合规、发票对接等需要不少二次开发很多团队评估到一半就放弃了。但这些年情况在变化。Odoo的社区版生态越来越成熟国内也出现了一些做本土化插件和实施的团队不少跨境电商、制造企业已经跑通了Odoo的完整流程。如果你所在企业有技术团队愿意投入一段时间做适配Odoo的灵活性和总拥有成本依然是很大的优势。这也是我坚持写这篇部署实战的原因先把技术底座搭稳后面才好谈业务落地。5.3 备份策略越早做越好部署完成不代表万事大吉Odoo的数据全在PostgreSQL里附件和文件存在本地data_dir两者缺一不可。一套简单有效的备份方案是每天凌晨用pg_dump导出数据库用rsync同步附件目录再保留最近7天的备份mkdir -p /backup/odoo find /backup/odoo -name *.dump -mtime 7 -delete su - postgres -c pg_dump -Fc odoo_prod /backup/odoo/odoo_$(date %Y%m%d).dump rsync -av --delete /var/lib/odoo/ /backup/odoo/filestore/我是强烈建议把备份脚本加入crontab的每日凌晨2点执行。恢复流程也要事先演练一遍不然真出事时手忙脚乱。备份文件可以再同步到异地存储或者对象存储本地磁盘损坏时能救急。这一层可能不直接影响部署但企业级应用没有备份等于没部署这点怎么强调都不过分。5.4 静态IP失效的快速定位三板斧每次在内网环境部署静态IP问题都是重灾区。配置好之后重启发现连不上了按下面三板斧定位ip addr show # 看网卡IP是否生效 ip route show # 看默认路由是否存在 cat /etc/resolv.conf # 看DNS配置如果IP是空的说明NetworkManager没有正确加载连接配置。使用nmcli connection reload重新加载再用nmcli connection up 连接名激活。如果路由丢失检查ipv4.gateway是不是填对了以及物理网络环境是否允许这个网关。DNS不对通常表现为域名解析不了改成公共DNS再试。这三板斧能解决九成以上的IP配置问题。5.5 日志排查的几条经验Odoo生产环境的日志量不小直接看/var/log/odoo/odoo.log会一屏一屏往外刷。有排查需要时我习惯配合这几个命令tail -50 /var/log/odoo/odoo.log grep -i error /var/log/odoo/odoo.log | tail -20 journalctl -u odoo -n 50 --no-pager日志按优先级分日常跑着的时候是INFO级排查问题临时改成DEBUG级可以看SQL语句和请求详情但生产环境不要长期开DEBUG日志量会爆炸。要改日志级别直接在/etc/odoo.conf里改log_level debug重启服务生效。5.6 内存资源不足的优化方案Odoo对内存的需求起步就是2GB跑着跑着超过4GB很正常。如果你的服务器是2G内存的小机器部署Odoo会比较吃力。有几个优化手段可以先试把PostgreSQL的shared_buffers调小到512MB左右Odoo的worker减到2个limit_memory_hard下调到1.5GB同时开启系统Swap。这样小内存机器勉强能用但并发用户多的时候还是会卡长期跑生产环境还是建议至少4G内存起步。写在最后Rocky Linux Odoo这套组合是我在实际项目里验证过多次的稳定搭配。部署本身不难难的是把每一个环节都按生产标准做扎实权限隔离、SELinux放行、Nginx反向代理、静态IP持久化、备份策略每一项单独看都是基础操作但组合在一起就是一个能够长期稳定运行的企业级系统。我自己在多次部署中最大的体会是不要为了图省事跳过安全配置比如顺手把8069端口暴露出去、用root跑Odoo、跳过SELinux设置这些问题短时间内看不出影响但一旦上线被扫描或者被攻击代价远大于当初省下的那几分钟。严格按照上面的步骤走虽然前期多一点配置成本但后面几年你都会为此受益。如果你正在规划Odoo的部署或者在部署过程中遇到了类似的坑希望这份实战记录能帮你少走一些弯路。后续如果要往高可用方向演进还可以考虑主从数据库、多节点Odoo、负载均衡和集中式文件存储这些都是从这套基础架构自然延伸的方向等技术沉淀到位再逐步扩展就好。
返回列表