Odoo 18企业版源码 包含 部署教程

本文档详细说明如何部署 Odoo 18 服务器,包括开发环境和生产环境的完整配置步骤。


目录

  1. 环境准备
  2. 安装步骤
  3. 配置文件设置
  4. 数据库配置
  5. 启动服务
  6. 生产环境部署
  7. 使用 1Panel 部署
  8. 使用 Docker 部署
  9. 常见问题与故障排除

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 按以下顺序查找配置文件:

  1. 命令行参数 -c--config 指定的文件
  2. 环境变量 ODOO_RCOPENERP_SERVER 指定的文件
  3. 当前目录下的 odoo.conf
  4. ~/.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 界面创建
  1. 启动 Odoo 服务器(确保 list_db = True
  2. 访问 http://localhost:8069
  3. 点击 "Create Database"
  4. 填写数据库信息:
    • Master Password: 配置文件中的 admin_passwd
    • Database Name: 数据库名称
    • Email: 管理员邮箱
    • Password: 管理员密码
    • Language: 选择语言
    • Country: 选择国家
    • Demo data: 是否加载演示数据

4.2 初始化数据库

首次创建数据库后,Odoo 会自动:

  1. 创建数据库结构
  2. 安装 base 模块
  3. 创建管理员用户(默认登录名:admin)
  4. 初始化基础数据

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)
  1. 创建 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

  2. 创建 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

  3. 启动服务:

    重新加载 systemd 配置

    sudo systemctl daemon-reload

    启用服务(开机自启)

    sudo systemctl enable odoo

    启动服务

    sudo systemctl start odoo

    查看状态

    sudo systemctl status odoo

    查看日志

    sudo journalctl -u odoo -f

使用 Supervisor(推荐用于生产环境)
  1. 安装 Supervisor:

    sudo apt install supervisor # Ubuntu/Debian
    sudo yum install supervisor # CentOS/RHEL

  2. 创建配置文件 /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

  3. 启动服务:

    sudo supervisorctl reread
    sudo supervisorctl update
    sudo supervisorctl start odoo

Windows 服务

使用 NSSM(Non-Sucking Service Manager)将 Odoo 注册为 Windows 服务:

  1. 下载 NSSM:https://nssm.cc/download

  2. 安装服务:

    nssm install Odoo

  3. 在 NSSM GUI 中配置:

    • Path: C:\Python311\python.exe
    • Startup directory: C:\odoo
    • Arguments: odoo-bin -c odoo.conf
  4. 启动服务:

    nssm start Odoo

5.3 验证服务运行

  1. 检查进程:

    ps aux | grep odoo-bin

  2. 检查端口:

    netstat -tlnp | grep 8069

    ss -tlnp | grep 8069

  3. 访问 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 安全建议

  1. 数据库安全

    • 不要使用 postgres 用户
    • 使用强密码
    • 限制数据库访问(pg_hba.conf
    • 启用 SSL 连接
  2. Odoo 安全

    • 设置强 admin_passwd
    • 使用 dbfilter 限制可访问的数据库
    • 生产环境设置 list_db = False
    • 启用 proxy_mode
  3. 系统安全

    • 定期更新系统补丁
    • 配置防火墙
    • 使用 SSH 密钥认证
    • 禁用 root 登录
  4. 备份策略

    • 每日自动备份数据库
    • 定期备份文件存储(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 中:

  1. 进入 容器Docker
  2. 点击 安装 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 功能
  1. 登录 1Panel 管理界面

  2. 进入容器管理

    • 导航到 容器Docker Compose
  3. 创建 Compose 项目

    • 点击 创建新建项目
    • 项目名称:odoo18
    • 项目路径:/opt/odoo18
    • 点击 确定
  4. 上传或创建 Compose 文件

    • 在项目详情页,点击 Compose 文件
    • 将上面的 docker-compose.yml 内容粘贴进去
    • 点击 保存
  5. 启动服务

    • 在 Compose 项目页面,找到 odoo18 项目
    • 点击 启动 按钮
    • 等待容器启动完成
方式二:通过 1Panel 终端部署
  1. 打开 1Panel 终端

    • 导航到 主机终端
  2. 进入项目目录

    复制代码
    cd /opt/odoo18
  3. 启动服务

    复制代码
    docker-compose up -d
  4. 查看日志

    复制代码
    docker-compose logs -f

7.7 配置反向代理(可选)

如果需要通过域名访问,可以在 1Panel 中配置反向代理:

  1. 进入网站管理

    • 导航到 网站网站
  2. 创建新网站

    • 点击 创建网站
    • 选择 反向代理
    • 域名:yourdomain.com
    • 目标地址:http://127.0.0.1:8069
    • 点击 提交
  3. 配置 SSL 证书(推荐):

    • 在网站详情页,点击 设置
    • 选择 SSL 标签
    • 点击 申请证书(使用 Let's Encrypt)
    • 或上传已有证书

7.8 访问 Odoo

部署完成后,通过以下方式访问:

  • 直接访问http://服务器IP:8069
  • 通过域名http://yourdomain.com(如果配置了反向代理)

首次访问会进入数据库创建页面,按照提示创建数据库即可。

7.9 管理 Odoo 容器

在 1Panel 中管理容器:

  1. 查看容器状态

    • 容器容器 → 查看 odoo18-webodoo18-db 状态
  2. 查看日志

    • 点击容器名称 → 日志 标签
  3. 重启服务

    • 在容器列表,点击 重启 按钮
  4. 停止/启动服务

    复制代码
    # 停止
    docker-compose stop
    
    # 启动
    docker-compose start
    
    # 重启
    docker-compose restart

7.10 备份与恢复

数据库备份

在 1Panel 中配置定时备份:

  1. 进入备份管理

    • 备份数据库备份
  2. 创建备份计划

    • 选择 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 常见问题

问题:容器无法连接到数据库

解决方法

  1. 检查数据库容器是否运行:

    复制代码
    docker compose ps db
  2. 检查网络连接:

    复制代码
    docker exec odoo18-web ping db
  3. 检查环境变量:

    复制代码
    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
问题:内存不足

解决方法

  1. 增加 Docker 内存限制(Docker Desktop)

  2. 减少 workers 数量

  3. 添加资源限制:

    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"

解决方法

  1. 检查数据库用户和密码是否正确
  2. 检查 PostgreSQL 的 pg_hba.conf 配置
  3. 使用 .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 性能问题

问题:响应缓慢

优化方法

  1. 增加 workers 数量
  2. 配置静态文件缓存(Nginx)
  3. 优化数据库查询(添加索引)
  4. 使用数据库连接池
  5. 启用 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 版本
  1. 备份数据

    pg_dump -U odoo my_database > backup_$(date +%Y%m%d).sql

  2. 升级代码

    git pull origin 18.0
    pip install -e . --upgrade

  3. 更新模块

    ./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. 有用的链接


ODOO18企业版源码

文档版本 : 2.0
最后更新 : 2028-12-20
适用于: Odoo 18

相关推荐
守城小轩2 小时前
基于Chrome140的Quora账号自动化(关键词浏览)——运行脚本(三)
运维·自动化·chrome devtools·指纹浏览器·浏览器开发
未来之窗软件服务2 小时前
幽冥大陆(五十五)ASR SetThreadInformation C语言识别到自动化软件
运维·自动化·asr·东方仙盟·操作系统级别错误
开开心心就好2 小时前
免费卸载工具,可清理残留批量管理启动项
linux·运维·服务器·windows·随机森林·pdf·1024程序员节
Lbwnb丶3 小时前
检测服务器是否是虚拟化,如KVM,VM等
linux·运维·服务器
老猿讲编程3 小时前
【车载信息安全系列4】基于Linux中UIO的HSE应用实现
linux·运维·服务器
鸡吃丸子3 小时前
初识Docker
运维·前端·docker·容器
wanhengidc3 小时前
巨椰 云手机 云游戏稳定运行
运维·服务器·arm开发·游戏·云计算
林义满3 小时前
大促零宕机背后的运维升级:长三角中小跨境电商的架构优化实践
大数据·运维·架构
linweidong4 小时前
顺丰运维面试题及参考答案
运维·nginx·容器·ansible·运维开发·防火墙·python面试