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 安装向导,按以下步骤操作:
- 选择语言为「简体中文」,点击下一步。
- 在数据库配置页面,填写与
docker-compose.yml中一致的信息:- 数据库主机:
db - 数据库端口:
3306 - 数据库名:
dolibarr - 数据库用户:
dolibarr - 数据库密码:
dolibarr_password
- 数据库主机:
- 设置管理员账号与密码。
- 完成安装后,删除安装目录以提升安全性。
注意:安装向导中的数据库主机必须填写服务名
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 系统真正服务于业务。