Docker 部署 Dolibarr:从零开始的完整指南

1. 引言

Dolibarr 是一款开源的企业资源计划(ERP)与客户关系管理(CRM)系统,功能涵盖销售、采购、库存、财务、人力资源等多个模块,非常适合中小型企业使用。通过 Docker 部署 Dolibarr,可以大幅简化安装与升级流程,让环境一致性得到保障。

本文将带你从零开始,使用 Docker 与 Docker Compose 完成 Dolibarr 的部署,并配置 MySQL 数据库与反向代理,实现一个生产可用的部署方案。

2. 环境准备

在开始之前,请确保你的服务器或本机满足以下条件:

  • 已安装 Docker(建议 20.10 及以上版本)
  • 已安装 Docker Compose 插件(或 docker-compose 独立命令)
  • 操作系统:Linux(Ubuntu/Debian/CentOS)、macOS 或 Windows(WSL2)
  • 至少 2 GB 可用内存,10 GB 可用磁盘空间

可以通过以下命令验证环境:

bash 复制代码
docker --version
docker compose version

如果尚未安装,请参考 Docker 官方文档完成安装。

3. 目录结构与配置文件

我们推荐使用 Docker Compose 来编排 Dolibarr 与数据库服务。首先创建项目目录:

bash 复制代码
mkdir -p dolibarr-deploy && cd dolibarr-deploy

在该目录下创建 docker-compose.yml 文件,内容如下:

yaml 复制代码
version: "3.8"

services:
  db:
    image: mariadb:10.11
    container_name: dolibarr_db
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: root_password
      MYSQL_DATABASE: dolibarr
      MYSQL_USER: dolibarr
      MYSQL_PASSWORD: dolibarr_password
    volumes:
      - db_data:/var/lib/mysql
    healthcheck:
      test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
      interval: 10s
      timeout: 5s
      retries: 5

  app:
    image: dolibarr/dolibarr:18.0
    container_name: dolibarr_app
    restart: unless-stopped
    depends_on:
      db:
        condition: service_healthy
    ports:
      - "8080:80"
    environment:
      DOLI_DB_HOST: db
      DOLI_DB_NAME: dolibarr
      DOLI_DB_USER: dolibarr
      DOLI_DB_PASSWORD: dolibarr_password
      DOLI_DB_PORT: 3306
      DOLI_URL_ROOT: http://localhost:8080
    volumes:
      - app_documents:/var/www/documents
      - app_custom:/var/www/html/custom

volumes:
  db_data:
  app_documents:
  app_custom:

4. 启动服务

配置文件就绪后,执行以下命令启动服务:

bash 复制代码
docker compose up -d

首次启动会拉取镜像,可能需要几分钟。启动完成后,查看容器状态:

bash 复制代码
docker compose ps

当 db 与 app 两个服务都处于 running 状态时,即可通过浏览器访问:

复制代码
http://localhost:8080

5. 初始化安装

打开浏览器访问上述地址后,Dolibarr 会进入 Web 安装向导,按以下步骤操作:

  1. 选择语言为「简体中文」,点击下一步。
  2. 在数据库配置页面,填写与 docker-compose.yml 中一致的信息:
    • 数据库主机:db
    • 数据库端口:3306
    • 数据库名:dolibarr
    • 数据库用户:dolibarr
    • 数据库密码:dolibarr_password
  3. 设置管理员账号与密码。
  4. 完成安装后,删除安装目录以提升安全性。

注意:安装向导中的数据库主机必须填写服务名 db,而不是 localhost,因为应用与数据库运行在不同的容器中。

6. 配置反向代理(可选)

如果希望使用域名并通过 80/443 端口访问,可以增加 Nginx 反向代理。创建 nginx.conf:

nginx 复制代码
server {
    listen 80;
    server_name dolibarr.example.com;

    location / {
        proxy_pass http://app:80;
        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;
    }
}

然后在 docker-compose.yml 中新增 Nginx 服务:

yaml 复制代码
  nginx:
    image: nginx:1.25
    container_name: dolibarr_nginx
    restart: unless-stopped
    depends_on:
      - app
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro

重新加载配置:

bash 复制代码
docker compose up -d

7. 数据备份与恢复

备份数据库

bash 复制代码
docker exec dolibarr_db mysqldump -u dolibarr -pdolibarr_password dolibarr > backup_$(date +%F).sql

备份文档目录

bash 复制代码
docker run --rm -v dolibarr-deploy_app_documents:/data -v $(pwd):/backup alpine tar czf /backup/documents_$(date +%F).tar.gz -C /data .

恢复数据库

bash 复制代码
docker exec -i dolibarr_db mysql -u dolibarr -pdolibarr_password dolibarr < backup_2026-10-10.sql

8. 升级 Dolibarr

升级时只需修改 docker-compose.yml 中的镜像版本号,然后执行:

bash 复制代码
docker compose pull app
docker compose up -d

升级前务必先备份数据库与文档目录,避免数据丢失。

9. 常见问题排查

应用无法连接数据库

检查数据库容器是否健康:

bash 复制代码
docker compose ps
docker logs dolibarr_db

确认 DOLI_DB_HOST 指向服务名 db,且密码与数据库初始化环境变量一致。

端口冲突

如果 8080 端口被占用,修改 docker-compose.yml 中 ports 的宿主机端口,例如 "8081:80"。

权限问题导致上传失败

确保 app_documents 卷中的文件属主为容器内运行用户,必要时进入容器修正权限:

bash 复制代码
docker exec -it dolibarr_app chown -R www-data:www-data /var/www/documents

10. 总结

通过 Docker Compose,我们快速完成了 Dolibarr 的部署,并实现了数据库持久化、反向代理、备份恢复与平滑升级。这套方案具备良好的可移植性,可以轻松迁移到任何支持 Docker 的服务器上。

后续你可以进一步探索 Dolibarr 的模块配置、多语言支持以及与其他系统的集成,让这套 ERP/CRM 系统真正服务于业务。

相关推荐
KING-WU5121 小时前
Linux GDB 调试实战指南:从编译到断点调试
linux·运维·服务器
傲世仙尊1 小时前
类和对象中-构造函数与析构函数把初始化清理自动化
java·运维·自动化
七月吃橘子2 小时前
WSL2+Docker+Ollama,本地部署大模型实践(Qwen1.8b)
运维·docker·容器
影视飓风TIM2 小时前
Linux 进程信号原理与剖析
linux·运维·服务器
缘友一世2 小时前
开源 Linux截图工具闪构(SnapForge)
linux·运维·ubuntu·开源·截图
iCxhust2 小时前
先想好如何测试:让测试驱动你的程序设计
运维·服务器·软件工程·编程的艺术
Nontee2 小时前
K3s vs K8s:差的不是功能,是交付方式
云原生·容器·kubernetes
Philtell2 小时前
突然连接不上内网服务器的问题
运维·服务器
做运维的阿瑞3 小时前
Docker常见故障全方位排查指南
运维·docker·云原生·容器