本文档详细说明如何部署 Odoo 18 服务器,包括开发环境和生产环境的完整配置步骤。
目录
1. 环境准备
1.1 系统要求
操作系统
- Linux: Ubuntu 22.04+ / Debian 12+ / CentOS 8+ / RHEL 8+
- Windows: Windows 10/11 / Windows Server 2016+
- macOS: macOS 12+
Python 版本
- 要求: Python 3.10 - 3.12
- 推荐: Python 3.11
检查 Python 版本:
python3 --version
如果版本不符合要求,请升级 Python:
# Ubuntu/Debian
sudo apt update
sudo apt install python3.11 python3.11-venv python3.11-dev
# CentOS/RHEL
sudo yum install python3.11 python3.11-devel
PostgreSQL 数据库
- 要求: PostgreSQL 12.0 或更高版本
- 推荐: PostgreSQL 14+ 或 15+
检查 PostgreSQL 版本:
psql --version
1.2 安装 PostgreSQL
Ubuntu/Debian
sudo apt update
sudo apt install postgresql postgresql-contrib -y
sudo systemctl start postgresql
sudo systemctl enable postgresql
CentOS/RHEL
sudo yum install postgresql-server postgresql-contrib -y
sudo postgresql-setup --initdb
sudo systemctl start postgresql
sudo systemctl enable postgresql
Windows
从 PostgreSQL 官网 下载并安装 PostgreSQL。
1.3 创建 PostgreSQL 用户
重要 : Odoo 不允许使用 postgres 超级用户,必须创建专用数据库用户。
# 切换到 postgres 用户
sudo -u postgres psql
# 在 PostgreSQL 命令行中执行
CREATE USER odoo WITH CREATEDB PASSWORD 'your_secure_password';
\q
1.4 安装系统依赖
Ubuntu/Debian
sudo apt install \
python3-pip \
python3-dev \
libxml2-dev \
libxslt1-dev \
libldap2-dev \
libsasl2-dev \
libjpeg-dev \
libpq-dev \
libffi-dev \
libssl-dev \
zlib1g-dev \
build-essential \
git \
wget \
curl \
-y
CentOS/RHEL
sudo yum install \
python3-pip \
python3-devel \
libxml2-devel \
libxslt-devel \
openldap-devel \
libjpeg-turbo-devel \
postgresql-devel \
libffi-devel \
openssl-devel \
zlib-devel \
gcc \
gcc-c++ \
git \
wget \
curl \
-y
安装 wkhtmltopdf(PDF 报表支持)
# Ubuntu/Debian
sudo apt install wkhtmltopdf -y
# CentOS/RHEL
sudo yum install wkhtmltopdf -y
# 或者从官网下载
wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-2/wkhtmltox_0.12.6.1-2.bullseye_amd64.deb
sudo dpkg -i wkhtmltox_0.12.6.1-2.bullseye_amd64.deb
sudo apt install -f
2. 安装步骤
2.1 获取源代码
方式一:从 Git 仓库克隆(推荐)
# 克隆 Odoo 18.0 分支
git clone https://github.com/odoo/odoo.git --branch 18.0 --depth 1
# 或克隆完整历史
git clone https://github.com/odoo/odoo.git --branch 18.0
cd odoo
方式二:下载 ZIP 压缩包
从 GitHub Releases 下载 Odoo 18.0 源代码包并解压。
2.2 创建 Python 虚拟环境
强烈建议使用虚拟环境隔离依赖:
# 创建虚拟环境
python3 -m venv venv
# 激活虚拟环境
# Linux/macOS
source venv/bin/activate
# Windows
venv\Scripts\activate
2.3 安装 Python 依赖
# 升级 pip
pip install --upgrade pip
# 安装 wheel
pip install wheel
# 如果有 requirements.txt,安装依赖
# 注意:Odoo 18.0 通常使用 setup.py,可通过以下方式安装
pip install -e .
如果没有 requirements.txt,Odoo 会通过 setup.py 自动管理依赖。安装完成后,所需的 Python 包会自动安装。
3. 配置文件设置
3.1 创建配置文件
Odoo 支持通过配置文件或命令行参数进行配置。推荐使用配置文件。
方式一:自动生成配置文件
# 启动一次 Odoo,使用 --save 参数保存配置
./odoo-bin --save --stop-after-init
# 配置文件将保存到 ~/.odoorc(Linux/macOS)或 ~/.odoorc(Windows)
方式二:手动创建配置文件
创建配置文件 odoo.conf:
# 在项目根目录创建配置文件
touch odoo.conf
3.2 配置文件参数说明
编辑 odoo.conf,配置以下参数:
[options]
# ==========================================
# 数据库配置
# ==========================================
# 数据库主机(False 表示使用环境变量或默认 localhost)
db_host = False
# 数据库端口(False 表示使用默认 5432)
db_port = False
# 数据库用户名(必须设置,不能使用 postgres)
db_user = odoo
# 数据库密码(False 表示使用 .pgpass 或环境变量)
db_password = False
# 数据库模板(创建新数据库时使用)
db_template = template0
# 最大数据库连接数
db_maxconn = 64
# 数据库 SSL 模式(prefer/require/disable 等)
db_sslmode = prefer
# ==========================================
# 插件路径配置
# ==========================================
# 插件路径,多个路径用逗号分隔
# {root_path} 会被替换为 Odoo 安装目录
addons_path = {root_path}/odoo/addons,{root_path}/addons
# ==========================================
# HTTP 服务配置
# ==========================================
# HTTP 监听接口(空字符串表示所有接口 0.0.0.0)
http_interface =
# HTTP 端口(默认 8069)
http_port = 8069
# 是否启用 HTTP 服务
http_enable = True
# Gevent 端口(用于长轮询)
gevent_port = 8072
# 反向代理模式(生产环境必须启用)
proxy_mode = False
# ==========================================
# 安全配置
# ==========================================
# 数据库管理主密码(用于创建/删除数据库)
admin_passwd = your_strong_admin_password
# 数据库过滤规则(限制可访问的数据库)
# 示例:dbfilter = ^%d$ (只允许访问与域名匹配的数据库)
dbfilter =
# ==========================================
# 日志配置
# ==========================================
# 日志级别(debug/info/warning/error/critical)
log_level = info
# 日志处理器(格式:logger:level,logger:level)
# 示例::INFO,werkzeug:WARNING,odoo.addons:DEBUG
log_handler = :INFO
# 日志文件路径(不设置则输出到控制台)
logfile = /var/log/odoo/odoo.log
# 是否记录到数据库
log_db = False
log_db_level = warning
# ==========================================
# 性能配置
# ==========================================
# Worker 进程数(0 表示禁用多进程,开发环境推荐 0,生产环境根据 CPU 核心数设置)
workers = 0
# 请求大小限制(字节)
limit_request = 65536
# CPU 时间限制(秒)
limit_time_cpu = 60
# 真实时间限制(秒)
limit_time_real = 120
# Cron 作业真实时间限制(-1 表示无限制)
limit_time_real_cron = -1
# Cron 线程数
max_cron_threads = 2
# 内存软限制(字节)
limit_memory_soft = 2147483648
# 内存硬限制(字节)
limit_memory_hard = 2684354560
# ==========================================
# 邮件配置
# ==========================================
# SMTP 服务器
smtp_server = localhost
# SMTP 端口
smtp_port = 25
# SMTP 用户
smtp_user = False
# SMTP 密码
smtp_password = False
# 是否使用 SSL
smtp_ssl = False
# 发件人地址
email_from = False
from_filter = False
# ==========================================
# 数据目录
# ==========================================
# Odoo 数据存储目录(附件、会话等)
data_dir = {homedir}/.local/share/Odoo
# ==========================================
# 其他配置
# ==========================================
# 服务器级模块(启动时加载的模块)
server_wide_modules = base,web
# 是否列出所有数据库(生产环境建议 False)
list_db = True
# PID 文件路径
pidfile = /var/run/odoo/odoo.pid
# 不使用演示数据
without_demo = False
# 报告压缩
reportgz = False
3.3 配置文件路径
Odoo 按以下顺序查找配置文件:
- 命令行参数
-c或--config指定的文件 - 环境变量
ODOO_RC或OPENERP_SERVER指定的文件 - 当前目录下的
odoo.conf ~/.odoorc(Linux/macOS)或%USERPROFILE%\.odoorc(Windows)
3.4 配置文件模板示例
开发环境配置 (odoo-dev.conf):
[options]
addons_path = ./odoo/addons,./addons
db_user = odoo
db_password = odoo
admin_passwd = admin
http_port = 8069
log_level = debug
workers = 0
without_demo = False
生产环境配置 (odoo-prod.conf):
[options]
addons_path = /opt/odoo/odoo/addons,/opt/odoo/addons
db_host = localhost
db_port = 5432
db_user = odoo
db_password = your_secure_db_password
admin_passwd = your_strong_admin_password
http_interface = 127.0.0.1
http_port = 8069
proxy_mode = True
workers = 4
max_cron_threads = 2
limit_memory_soft = 2147483648
limit_memory_hard = 2684354560
limit_time_cpu = 600
limit_time_real = 1200
log_level = info
logfile = /var/log/odoo/odoo.log
pidfile = /var/run/odoo/odoo.pid
data_dir = /var/lib/odoo
list_db = False
dbfilter = ^%d$
without_demo = True
4. 数据库配置
4.1 创建数据库
方式一:通过 Odoo 命令行创建(推荐)
# 创建数据库并初始化基础模块
./odoo-bin -d my_database --db_user=odoo --db_password=your_password --stop-after-init
# 创建数据库并安装指定模块
./odoo-bin -d my_database -i base,sale,purchase --stop-after-init
# 创建数据库(不使用演示数据)
./odoo-bin -d my_database --without-demo=all --stop-after-init
方式二:通过 PostgreSQL 命令行创建
# 连接到 PostgreSQL
sudo -u postgres psql
# 创建数据库
CREATE DATABASE my_database OWNER odoo ENCODING 'unicode' TEMPLATE template0;
# 退出
\q
方式三:通过 Odoo Web 界面创建
- 启动 Odoo 服务器(确保
list_db = True) - 访问
http://localhost:8069 - 点击 "Create Database"
- 填写数据库信息:
- Master Password: 配置文件中的
admin_passwd - Database Name: 数据库名称
- Email: 管理员邮箱
- Password: 管理员密码
- Language: 选择语言
- Country: 选择国家
- Demo data: 是否加载演示数据
- Master Password: 配置文件中的
4.2 初始化数据库
首次创建数据库后,Odoo 会自动:
- 创建数据库结构
- 安装
base模块 - 创建管理员用户(默认登录名:admin)
- 初始化基础数据
4.3 安装模块
# 安装单个模块
./odoo-bin -d my_database -i sale --stop-after-init
# 安装多个模块
./odoo-bin -d my_database -i sale,purchase,stock --stop-after-init
# 安装所有可用模块(不推荐,会安装大量不需要的模块)
./odoo-bin -d my_database -i all --stop-after-init
4.4 更新模块
# 更新单个模块
./odoo-bin -d my_database -u sale --stop-after-init
# 更新多个模块
./odoo-bin -d my_database -u sale,purchase --stop-after-init
# 更新所有已安装模块
./odoo-bin -d my_database -u all --stop-after-init
4.5 数据库备份与恢复
备份数据库
# 使用 pg_dump 备份
pg_dump -U odoo -h localhost my_database > backup_$(date +%Y%m%d).sql
# 压缩备份
pg_dump -U odoo -h localhost my_database | gzip > backup_$(date +%Y%m%d).sql.gz
恢复数据库
# 恢复 SQL 备份
psql -U odoo -h localhost -d my_database < backup_20240101.sql
# 恢复压缩备份
gunzip < backup_20240101.sql.gz | psql -U odoo -h localhost -d my_database
5. 启动服务
5.1 开发环境启动
基本启动
# 激活虚拟环境(如使用)
source venv/bin/activate # Linux/macOS
# 或
venv\Scripts\activate # Windows
# 启动 Odoo(使用配置文件)
./odoo-bin -c odoo.conf
# 或直接启动(使用默认配置)
./odoo-bin
# Windows 使用
python odoo-bin -c odoo.conf
开发模式启动
# 开发模式(自动重载、调试信息等)
./odoo-bin -c odoo.conf --dev=all
# 或使用命令行参数
./odoo-bin -d my_database --dev=reload,qweb,werkzeug,xml
5.2 生产环境启动
使用 systemd(Linux)
-
创建 systemd 服务文件
/etc/systemd/system/odoo.service:[Unit]
Description=Odoo
After=network.target postgresql.service
Wants=postgresql.service[Service]
Type=simple
SyslogIdentifier=odoo
PermissionsStartOnly=true
User=odoo
Group=odoo
ExecStart=/opt/odoo/venv/bin/odoo-bin -c /etc/odoo/odoo.conf
StandardOutput=journal+console
KillMode=mixed
KillSignal=SIGINT
Restart=always
RestartSec=5[Install]
WantedBy=multi-user.target -
创建 Odoo 用户和目录:
sudo useradd -r -s /bin/bash -d /opt/odoo -m odoo
sudo mkdir -p /var/log/odoo /var/lib/odoo /var/run/odoo
sudo chown -R odoo:odoo /var/log/odoo /var/lib/odoo /var/run/odoo /opt/odoo -
启动服务:
重新加载 systemd 配置
sudo systemctl daemon-reload
启用服务(开机自启)
sudo systemctl enable odoo
启动服务
sudo systemctl start odoo
查看状态
sudo systemctl status odoo
查看日志
sudo journalctl -u odoo -f
使用 Supervisor(推荐用于生产环境)
-
安装 Supervisor:
sudo apt install supervisor # Ubuntu/Debian
sudo yum install supervisor # CentOS/RHEL -
创建配置文件
/etc/supervisor/conf.d/odoo.conf:[program:odoo]
command=/opt/odoo/venv/bin/odoo-bin -c /etc/odoo/odoo.conf
user=odoo
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/var/log/odoo/odoo.log
stderr_logfile=/var/log/odoo/odoo_error.log -
启动服务:
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start odoo
Windows 服务
使用 NSSM(Non-Sucking Service Manager)将 Odoo 注册为 Windows 服务:
-
下载 NSSM:https://nssm.cc/download
-
安装服务:
nssm install Odoo
-
在 NSSM GUI 中配置:
- Path:
C:\Python311\python.exe - Startup directory:
C:\odoo - Arguments:
odoo-bin -c odoo.conf
- Path:
-
启动服务:
nssm start Odoo
5.3 验证服务运行
-
检查进程:
ps aux | grep odoo-bin
-
检查端口:
netstat -tlnp | grep 8069
或
ss -tlnp | grep 8069
-
访问 Web 界面:
打开浏览器访问 http://localhost:8069,应该看到 Odoo 登录页面或数据库选择页面。
6. 生产环境部署
6.1 反向代理配置(Nginx)
安装 Nginx
sudo apt install nginx # Ubuntu/Debian
sudo yum install nginx # CentOS/RHEL
配置 Nginx
创建配置文件 /etc/nginx/sites-available/odoo:
# 上游服务器(Odoo)
upstream odoo {
server 127.0.0.1:8069;
}
upstream odoochat {
server 127.0.0.1:8072;
}
# HTTP 服务器(重定向到 HTTPS)
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
# 重定向所有 HTTP 请求到 HTTPS
return 301 https://$server_name$request_uri;
}
# HTTPS 服务器
server {
listen 443 ssl http2;
server_name yourdomain.com www.yourdomain.com;
# SSL 证书配置
ssl_certificate /etc/ssl/certs/yourdomain.crt;
ssl_certificate_key /etc/ssl/private/yourdomain.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
# 日志
access_log /var/log/nginx/odoo-access.log;
error_log /var/log/nginx/odoo-error.log;
# 增加代理缓冲区大小
proxy_buffers 16 64k;
proxy_buffer_size 128k;
proxy_read_timeout 900s;
proxy_connect_timeout 900s;
proxy_send_timeout 900s;
# 静态文件缓存(重要:提高性能)
location ~* /web/static/ {
proxy_cache_valid 200 90m;
proxy_buffering on;
expires 864000;
proxy_pass http://odoo;
add_header Cache-Control "public, immutable";
}
# Longpolling(用于实时更新)
location /longpolling {
proxy_pass http://odoochat;
}
# 主应用
location / {
proxy_pass http://odoo;
proxy_redirect off;
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;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port $server_port;
}
# 压缩
gzip on;
gzip_min_length 1000;
gzip_types text/css text/less text/plain text/xml application/xml application/json application/javascript;
}
启用配置:
sudo ln -s /etc/nginx/sites-available/odoo /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
6.2 配置 Odoo 使用反向代理
在 odoo.conf 中启用代理模式:
[options]
proxy_mode = True
http_interface = 127.0.0.1 # 只监听本地
6.3 SSL 证书配置
使用 Let's Encrypt(免费)
# 安装 Certbot
sudo apt install certbot python3-certbot-nginx # Ubuntu/Debian
sudo yum install certbot python3-certbot-nginx # CentOS/RHEL
# 获取证书
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
# 自动续期(已自动配置)
sudo certbot renew --dry-run
6.4 防火墙配置
# Ubuntu/Debian (UFW)
sudo ufw allow 22/tcp # SSH
sudo ufw allow 80/tcp # HTTP
sudo ufw allow 443/tcp # HTTPS
sudo ufw enable
# CentOS/RHEL (firewalld)
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --reload
6.5 性能优化
Worker 进程数配置
根据 CPU 核心数和内存配置 workers:
# 推荐公式:workers = (CPU核心数 * 2) + 1
# 例如:4核CPU = 9 workers
workers = 9
max_cron_threads = 2
数据库连接池
db_maxconn = 64
内存限制
limit_memory_soft = 2147483648 # 2GB
limit_memory_hard = 2684354560 # 2.5GB
6.6 安全建议
-
数据库安全:
- 不要使用
postgres用户 - 使用强密码
- 限制数据库访问(
pg_hba.conf) - 启用 SSL 连接
- 不要使用
-
Odoo 安全:
- 设置强
admin_passwd - 使用
dbfilter限制可访问的数据库 - 生产环境设置
list_db = False - 启用
proxy_mode
- 设置强
-
系统安全:
- 定期更新系统补丁
- 配置防火墙
- 使用 SSH 密钥认证
- 禁用 root 登录
-
备份策略:
- 每日自动备份数据库
- 定期备份文件存储(
data_dir) - 测试备份恢复流程
- 异地备份
7. 使用 1Panel 部署
1Panel 是一个开源的 Linux 服务器运维管理面板,提供了图形化界面来管理服务器和应用。通过 1Panel 可以更便捷地部署和管理 Odoo。
7.1 安装 1Panel
快速安装
curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sudo bash quick_start.sh
安装完成后,访问 http://服务器IP:端口(默认端口随机生成,安装完成后会显示),使用安装时设置的用户名和密码登录。
手动安装
详细安装步骤请参考 1Panel 官方文档。
7.2 安装 Docker 和 Docker Compose
1Panel 通常会自动安装 Docker,如果没有,可以在 1Panel 中:
- 进入 容器 → Docker
- 点击 安装 Docker 按钮
或在服务器终端执行:
# 1Panel 通常已安装,如果需要手动安装
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo systemctl enable docker
sudo systemctl start docker
7.3 创建项目目录
在 1Panel 中创建项目目录,或通过终端:
# 在服务器上创建目录
mkdir -p /opt/odoo18/{config,addons,filestore}
cd /opt/odoo18
7.4 创建配置文件
创建 Odoo 配置文件 config/odoo.conf:
[options]
; 插件路径
addons_path = /mnt/extra-addons,/usr/lib/python3/dist-packages/odoo/addons
; 数据目录
data_dir = /var/lib/odoo
; 数据库配置
db_host = db
db_port = 5432
db_user = odoo
db_password = odoo_secure_password_123
; HTTP 配置
http_port = 8069
http_interface = 0.0.0.0
; 管理密码(用于数据库管理)
admin_passwd = admin_secure_password_123
; 日志配置
log_level = info
log_handler = :INFO
; 性能配置
workers = 4
max_cron_threads = 2
limit_memory_soft = 2147483648
limit_memory_hard = 2684354560
limit_time_cpu = 600
limit_time_real = 1200
; 安全配置
list_db = False
proxy_mode = True
7.5 创建 Docker Compose 文件
创建 docker-compose.yml 文件:
version: '3.8'
services:
# PostgreSQL 数据库服务
db:
image: postgres:15
container_name: odoo18-db
environment:
- POSTGRES_DB=postgres
- POSTGRES_USER=odoo
- POSTGRES_PASSWORD=odoo_secure_password_123
- PGDATA=/var/lib/postgresql/data/pgdata
volumes:
- postgresql_data:/var/lib/postgresql/data
restart: unless-stopped
networks:
- odoo-network
healthcheck:
test: ["CMD-SHELL", "pg_isready -U odoo"]
interval: 10s
timeout: 5s
retries: 5
# Odoo 应用服务
web:
image: odoo:18.0
container_name: odoo18-web
depends_on:
db:
condition: service_healthy
ports:
- "8069:8069"
volumes:
- ./config/odoo.conf:/etc/odoo/odoo.conf:ro
- ./addons:/mnt/extra-addons
- filestore_data:/var/lib/odoo
environment:
- HOST=db
- USER=odoo
- PASSWORD=odoo_secure_password_123
restart: unless-stopped
networks:
- odoo-network
command: ["odoo", "-c", "/etc/odoo/odoo.conf"]
volumes:
postgresql_data:
driver: local
filestore_data:
driver: local
networks:
odoo-network:
driver: bridge
7.6 通过 1Panel 部署
方式一:使用 1Panel 的 Docker Compose 功能
-
登录 1Panel 管理界面
-
进入容器管理:
- 导航到 容器 → Docker Compose
-
创建 Compose 项目:
- 点击 创建 或 新建项目
- 项目名称:
odoo18 - 项目路径:
/opt/odoo18 - 点击 确定
-
上传或创建 Compose 文件:
- 在项目详情页,点击 Compose 文件
- 将上面的
docker-compose.yml内容粘贴进去 - 点击 保存
-
启动服务:
- 在 Compose 项目页面,找到
odoo18项目 - 点击 启动 按钮
- 等待容器启动完成
- 在 Compose 项目页面,找到
方式二:通过 1Panel 终端部署
-
打开 1Panel 终端:
- 导航到 主机 → 终端
-
进入项目目录:
cd /opt/odoo18 -
启动服务:
docker-compose up -d -
查看日志:
docker-compose logs -f
7.7 配置反向代理(可选)
如果需要通过域名访问,可以在 1Panel 中配置反向代理:
-
进入网站管理:
- 导航到 网站 → 网站
-
创建新网站:
- 点击 创建网站
- 选择 反向代理
- 域名:
yourdomain.com - 目标地址:
http://127.0.0.1:8069 - 点击 提交
-
配置 SSL 证书(推荐):
- 在网站详情页,点击 设置
- 选择 SSL 标签
- 点击 申请证书(使用 Let's Encrypt)
- 或上传已有证书
7.8 访问 Odoo
部署完成后,通过以下方式访问:
- 直接访问 :
http://服务器IP:8069 - 通过域名 :
http://yourdomain.com(如果配置了反向代理)
首次访问会进入数据库创建页面,按照提示创建数据库即可。
7.9 管理 Odoo 容器
在 1Panel 中管理容器:
-
查看容器状态:
- 容器 → 容器 → 查看
odoo18-web和odoo18-db状态
- 容器 → 容器 → 查看
-
查看日志:
- 点击容器名称 → 日志 标签
-
重启服务:
- 在容器列表,点击 重启 按钮
-
停止/启动服务:
# 停止 docker-compose stop # 启动 docker-compose start # 重启 docker-compose restart
7.10 备份与恢复
数据库备份
在 1Panel 中配置定时备份:
-
进入备份管理:
- 备份 → 数据库备份
-
创建备份计划:
- 选择 PostgreSQL 数据库
- 配置备份时间(建议每日凌晨)
- 设置保留天数
或使用命令行:
# 备份数据库
docker exec odoo18-db pg_dump -U odoo postgres > backup_$(date +%Y%m%d).sql
# 备份文件存储
docker cp odoo18-web:/var/lib/odoo ./backup/filestore_$(date +%Y%m%d)
数据恢复
# 恢复数据库
cat backup_20240101.sql | docker exec -i odoo18-db psql -U odoo postgres
# 恢复文件存储
docker cp ./backup/filestore_20240101/. odoo18-web:/var/lib/odoo/
7.11 更新 Odoo 版本
cd /opt/odoo18
# 停止服务
docker-compose down
# 拉取新镜像
docker-compose pull
# 启动服务
docker-compose up -d
# 更新数据库(在容器内执行)
docker exec -it odoo18-web odoo -u all -d your_database --stop-after-init
7.12 常见问题
问题:容器无法启动
检查日志:
docker-compose logs web
docker-compose logs db
检查配置文件:
docker exec odoo18-web cat /etc/odoo/odoo.conf
问题:无法连接数据库
检查数据库容器:
docker exec odoo18-db psql -U odoo -d postgres -c "SELECT version();"
检查网络连接:
docker exec odoo18-web ping db
8. 使用 Docker 部署
Docker 容器化部署是部署 Odoo 的推荐方式之一,具有环境隔离、易于管理和扩展的优点。
8.1 安装 Docker 和 Docker Compose
Ubuntu/Debian
# 更新系统
sudo apt update
# 安装必要的工具
sudo apt install ca-certificates curl gnupg lsb-release -y
# 添加 Docker 官方 GPG 密钥
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# 添加 Docker 仓库
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 安装 Docker
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
# 启动 Docker
sudo systemctl enable docker
sudo systemctl start docker
# 将当前用户添加到 docker 组(可选,避免每次使用 sudo)
sudo usermod -aG docker $USER
newgrp docker # 或重新登录
CentOS/RHEL
# 安装必要工具
sudo yum install -y yum-utils
# 添加 Docker 仓库
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 安装 Docker
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
# 启动 Docker
sudo systemctl enable docker
sudo systemctl start docker
验证安装
# 检查 Docker 版本
docker --version
docker compose version
# 测试运行
docker run hello-world
8.2 快速部署(使用官方镜像)
创建项目目录
mkdir -p ~/odoo18/{config,addons,filestore}
cd ~/odoo18
创建 Docker Compose 文件
创建 docker-compose.yml:
version: '3.8'
services:
# PostgreSQL 数据库
db:
image: postgres:15
container_name: odoo18-db
user: "1000:1000" # 根据实际情况调整
environment:
- POSTGRES_DB=postgres
- POSTGRES_USER=odoo
- POSTGRES_PASSWORD=odoo_password
- PGDATA=/var/lib/postgresql/data/pgdata
volumes:
- postgresql_data:/var/lib/postgresql/data
restart: unless-stopped
networks:
- odoo-network
healthcheck:
test: ["CMD-SHELL", "pg_isready -U odoo"]
interval: 10s
timeout: 5s
retries: 5
# Odoo 应用
web:
image: odoo:18.0
container_name: odoo18-web
depends_on:
db:
condition: service_healthy
ports:
- "8069:8069"
volumes:
- ./config/odoo.conf:/etc/odoo/odoo.conf:ro
- ./addons:/mnt/extra-addons
- filestore_data:/var/lib/odoo
environment:
- HOST=db
- USER=odoo
- PASSWORD=odoo_password
restart: unless-stopped
networks:
- odoo-network
volumes:
postgresql_data:
filestore_data:
networks:
odoo-network:
driver: bridge
创建配置文件
创建 config/odoo.conf:
[options]
addons_path = /mnt/extra-addons,/usr/lib/python3/dist-packages/odoo/addons
data_dir = /var/lib/odoo
db_host = db
db_port = 5432
db_user = odoo
db_password = odoo_password
http_port = 8069
admin_passwd = admin_password
log_level = info
workers = 4
启动服务
# 启动所有服务
docker compose up -d
# 查看日志
docker compose logs -f
# 查看容器状态
docker compose ps
8.3 单容器部署(仅 Odoo)
如果已有外部 PostgreSQL 数据库,可以只部署 Odoo 容器:
docker run -d \
--name odoo18 \
-p 8069:8069 \
-e HOST=your_postgres_host \
-e USER=odoo \
-e PASSWORD=your_password \
-v $(pwd)/config/odoo.conf:/etc/odoo/odoo.conf:ro \
-v $(pwd)/addons:/mnt/extra-addons \
-v odoo_data:/var/lib/odoo \
--restart unless-stopped \
odoo:18.0
8.4 自定义 Docker 镜像
如果需要自定义配置或添加自定义模块,可以创建自定义镜像:
创建 Dockerfile
创建 Dockerfile:
FROM odoo:18.0
# 安装系统依赖
USER root
RUN apt-get update && apt-get install -y \
vim \
&& rm -rf /var/lib/apt/lists/*
# 安装 Python 依赖
RUN pip3 install --upgrade pip
RUN pip3 install some-package
# 复制自定义模块
COPY ./custom-addons /mnt/extra-addons
# 复制配置文件
COPY ./config/odoo.conf /etc/odoo/odoo.conf
# 切换回 odoo 用户
USER odoo
构建镜像
docker build -t my-odoo:18.0 .
使用自定义镜像
修改 docker-compose.yml:
services:
web:
image: my-odoo:18.0 # 使用自定义镜像
# ... 其他配置
8.5 数据持久化
卷(Volumes)管理
Docker Compose 会自动创建命名卷,查看和管理:
# 查看所有卷
docker volume ls
# 查看卷详情
docker volume inspect odoo18_postgresql_data
# 备份卷数据
docker run --rm \
-v odoo18_postgresql_data:/data \
-v $(pwd)/backup:/backup \
alpine tar czf /backup/postgresql_backup.tar.gz -C /data .
# 恢复卷数据
docker run --rm \
-v odoo18_postgresql_data:/data \
-v $(pwd)/backup:/backup \
alpine tar xzf /backup/postgresql_backup.tar.gz -C /data
绑定挂载(Bind Mounts)
使用本地目录挂载,数据存储在主机文件系统:
services:
db:
volumes:
- ./postgresql-data:/var/lib/postgresql/data # 使用本地目录
web:
volumes:
- ./filestore:/var/lib/odoo # 使用本地目录
8.6 生产环境配置
完整的生产环境 Docker Compose
创建 docker-compose.prod.yml:
version: '3.8'
services:
db:
image: postgres:15
container_name: odoo18-db-prod
environment:
- POSTGRES_DB=postgres
- POSTGRES_USER=odoo
- POSTGRES_PASSWORD=${DB_PASSWORD}
- PGDATA=/var/lib/postgresql/data/pgdata
volumes:
- postgresql_data:/var/lib/postgresql/data
restart: always
networks:
- odoo-network
healthcheck:
test: ["CMD-SHELL", "pg_isready -U odoo"]
interval: 10s
timeout: 5s
retries: 5
# 资源限制
deploy:
resources:
limits:
cpus: '2'
memory: 2G
reservations:
cpus: '1'
memory: 1G
web:
image: odoo:18.0
container_name: odoo18-web-prod
depends_on:
db:
condition: service_healthy
# 不直接暴露端口,通过反向代理访问
expose:
- "8069"
volumes:
- ./config/odoo.conf:/etc/odoo/odoo.conf:ro
- ./addons:/mnt/extra-addons
- filestore_data:/var/lib/odoo
environment:
- HOST=db
- USER=odoo
- PASSWORD=${DB_PASSWORD}
restart: always
networks:
- odoo-network
# 资源限制
deploy:
resources:
limits:
cpus: '4'
memory: 4G
reservations:
cpus: '2'
memory: 2G
volumes:
postgresql_data:
driver: local
filestore_data:
driver: local
networks:
odoo-network:
driver: bridge
环境变量文件
创建 .env 文件(不要提交到版本控制):
DB_PASSWORD=your_secure_password_here
ADMIN_PASSWORD=your_admin_password_here
生产环境配置文件
config/odoo.prod.conf:
[options]
addons_path = /mnt/extra-addons,/usr/lib/python3/dist-packages/odoo/addons
data_dir = /var/lib/odoo
db_host = db
db_port = 5432
db_user = odoo
db_password = ${DB_PASSWORD}
http_interface = 0.0.0.0
http_port = 8069
admin_passwd = ${ADMIN_PASSWORD}
# 性能配置
workers = 8
max_cron_threads = 2
limit_memory_soft = 2147483648
limit_memory_hard = 2684354560
limit_time_cpu = 600
limit_time_real = 1200
# 安全配置
list_db = False
proxy_mode = True
dbfilter = ^%d$
# 日志配置
log_level = info
logfile = /var/log/odoo/odoo.log
启动生产环境
# 使用生产配置
docker compose -f docker-compose.prod.yml --env-file .env up -d
# 查看日志
docker compose -f docker-compose.prod.yml logs -f
8.7 使用 Docker 网络
连接外部数据库
如果使用外部 PostgreSQL:
services:
web:
environment:
- HOST=external-db.example.com # 外部数据库地址
- PORT=5432
- USER=odoo
- PASSWORD=password
networks:
- default
- external-network # 如果需要连接到其他网络
连接到现有网络
# 创建网络
docker network create odoo-network
# 将容器连接到网络
docker network connect odoo-network odoo18-web
docker network connect odoo-network odoo18-db
8.8 备份与恢复
数据库备份脚本
创建 backup.sh:
#!/bin/bash
BACKUP_DIR="./backups"
DATE=$(date +%Y%m%d_%H%M%S)
CONTAINER_DB="odoo18-db"
CONTAINER_WEB="odoo18-web"
DB_NAME="your_database_name"
# 创建备份目录
mkdir -p $BACKUP_DIR
# 备份数据库
docker exec $CONTAINER_DB pg_dump -U odoo $DB_NAME | gzip > $BACKUP_DIR/db_$DATE.sql.gz
# 备份文件存储
docker exec $CONTAINER_WEB tar czf - /var/lib/odoo | gzip > $BACKUP_DIR/filestore_$DATE.tar.gz
# 删除 30 天前的备份
find $BACKUP_DIR -name "*.gz" -mtime +30 -delete
echo "备份完成: $DATE"
恢复脚本
创建 restore.sh:
#!/bin/bash
BACKUP_FILE=$1
CONTAINER_DB="odoo18-db"
CONTAINER_WEB="odoo18-web"
DB_NAME="your_database_name"
if [ -z "$BACKUP_FILE" ]; then
echo "用法: ./restore.sh backup_file.sql.gz"
exit 1
fi
# 停止 Odoo
docker compose stop web
# 恢复数据库
gunzip < $BACKUP_FILE | docker exec -i $CONTAINER_DB psql -U odoo $DB_NAME
# 启动 Odoo
docker compose start web
echo "恢复完成"
8.9 监控与日志
查看日志
# 查看所有服务日志
docker compose logs -f
# 查看特定服务日志
docker compose logs -f web
docker compose logs -f db
# 查看最近 100 行日志
docker compose logs --tail=100 web
# 查看带时间戳的日志
docker compose logs -f -t web
容器监控
# 查看容器资源使用
docker stats
# 查看特定容器
docker stats odoo18-web odoo18-db
# 查看容器详细信息
docker inspect odoo18-web
# 查看容器进程
docker top odoo18-web
8.10 常见问题
问题:容器无法连接到数据库
解决方法:
-
检查数据库容器是否运行:
docker compose ps db -
检查网络连接:
docker exec odoo18-web ping db -
检查环境变量:
docker exec odoo18-web env | grep -E 'HOST|USER|PASSWORD'
问题:权限错误
解决方法:
# 检查文件权限
ls -la ./config/odoo.conf
# 修复权限
chmod 644 ./config/odoo.conf
chown 101:101 ./config/odoo.conf # Odoo 容器默认用户 UID:GID
问题:端口冲突
解决方法:
修改 docker-compose.yml 中的端口映射:
services:
web:
ports:
- "8070:8069" # 将主机端口改为 8070
问题:内存不足
解决方法:
-
增加 Docker 内存限制(Docker Desktop)
-
减少 workers 数量
-
添加资源限制:
services:
web:
deploy:
resources:
limits:
memory: 2G
8.11 性能优化
使用多阶段构建
FROM odoo:18.0 as builder
# 编译阶段
FROM odoo:18.0
COPY --from=builder /path/to/compiled /path/to/dest
使用缓存卷
services:
web:
volumes:
- pip_cache:/root/.cache/pip # 缓存 pip 包
volumes:
pip_cache:
优化镜像大小
# 使用 alpine 基础镜像(如果支持)
FROM odoo:18.0-alpine
# 清理缓存
RUN apt-get clean && rm -rf /var/lib/apt/lists/*
9. 常见问题与故障排除
9.1 启动问题
问题:端口被占用
错误信息:
ERROR ? odoo.service.server: HTTP service (werkzeug) running on 0.0.0.0:8069
OSError: [Errno 98] Address already in use
解决方法:
# 查找占用端口的进程
sudo lsof -i :8069
# 或
sudo netstat -tlnp | grep 8069
# 杀死进程
sudo kill -9 <PID>
# 或更改端口
# 在 odoo.conf 中设置 http_port = 8070
问题:数据库连接失败
错误信息:
FATAL: password authentication failed for user "odoo"
解决方法:
- 检查数据库用户和密码是否正确
- 检查 PostgreSQL 的
pg_hba.conf配置 - 使用
.pgpass文件存储密码
问题:权限不足
错误信息:
Permission denied: '/var/log/odoo/odoo.log'
解决方法:
# 创建目录并设置权限
sudo mkdir -p /var/log/odoo /var/lib/odoo /var/run/odoo
sudo chown -R odoo:odoo /var/log/odoo /var/lib/odoo /var/run/odoo
9.2 模块问题
问题:模块安装失败
检查方法:
# 查看详细日志
./odoo-bin -d my_database -i module_name --log-level=debug
# 检查模块依赖
./odoo-bin -d my_database -i module_name --stop-after-init
问题:模块更新失败
解决方法:
# 更新单个模块
./odoo-bin -d my_database -u module_name --stop-after-init
# 如果失败,尝试先卸载再安装
# 在 Odoo 界面中:应用 -> 找到模块 -> 卸载
# 然后重新安装
9.3 性能问题
问题:响应缓慢
优化方法:
- 增加 workers 数量
- 配置静态文件缓存(Nginx)
- 优化数据库查询(添加索引)
- 使用数据库连接池
- 启用
x_sendfile(如果使用 Nginx)
问题:内存不足
解决方法:
# 调整内存限制
limit_memory_soft = 1073741824 # 1GB
limit_memory_hard = 1610612736 # 1.5GB
# 减少 workers 数量
workers = 4
9.4 日志查看
查看 Odoo 日志
# 如果使用 systemd
sudo journalctl -u odoo -f
# 如果使用 Supervisor
sudo supervisorctl tail -f odoo
# 如果配置了日志文件
tail -f /var/log/odoo/odoo.log
查看 PostgreSQL 日志
# Ubuntu/Debian
sudo tail -f /var/log/postgresql/postgresql-*.log
# CentOS/RHEL
sudo tail -f /var/lib/pgsql/data/log/postgresql-*.log
9.5 数据库问题
问题:数据库锁定
解决方法:
-- 连接到数据库
psql -U odoo -d my_database
-- 查看活动连接
SELECT * FROM pg_stat_activity WHERE datname = 'my_database';
-- 终止特定连接
SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'my_database' AND pid <> pg_backend_pid();
问题:数据库损坏
解决方法:
# 使用 pg_dump 备份数据
pg_dump -U odoo my_database > backup.sql
# 重建数据库
dropdb -U odoo my_database
createdb -U odoo my_database
# 恢复数据
psql -U odoo my_database < backup.sql
9.6 升级问题
升级 Odoo 版本
-
备份数据:
pg_dump -U odoo my_database > backup_$(date +%Y%m%d).sql
-
升级代码:
git pull origin 18.0
pip install -e . --upgrade -
更新模块:
./odoo-bin -d my_database -u all --stop-after-init
9.7 常用诊断命令
# 检查 Python 版本
python3 --version
# 检查 PostgreSQL 版本
psql --version
# 检查 Odoo 版本
./odoo-bin --version
# 测试数据库连接
psql -U odoo -h localhost -d my_database -c "SELECT version();"
# 检查配置文件语法
./odoo-bin -c odoo.conf --test-enable --stop-after-init
# 查看所有配置
./odoo-bin -c odoo.conf --help | less
附录
A. 快速参考命令
# 创建数据库并安装基础模块
./odoo-bin -d mydb -i base --stop-after-init
# 安装模块
./odoo-bin -d mydb -i sale --stop-after-init
# 更新模块
./odoo-bin -d mydb -u sale --stop-after-init
# 启动服务器(开发模式)
./odoo-bin -d mydb --dev=all
# 启动服务器(生产模式)
./odoo-bin -c odoo.conf
# 备份数据库
pg_dump -U odoo mydb > backup.sql
# 恢复数据库
psql -U odoo mydb < backup.sql
B. 重要文件路径
- 配置文件:
~/.odoorc或./odoo.conf - 日志文件:
/var/log/odoo/odoo.log - 数据目录:
~/.local/share/Odoo或/var/lib/odoo - PID 文件:
/var/run/odoo/odoo.pid
C. 有用的链接
- Odoo 官方文档:https://www.odoo.com/documentation/18.0/
- Odoo GitHub:https://github.com/odoo/odoo
- PostgreSQL 文档:https://www.postgresql.org/docs/
文档版本 : 2.0
最后更新 : 2028-12-20
适用于: Odoo 18