部署与运维 · 更新于 2026-10-27

Docker 单容器部署指南

使用官方 All-in-One Docker 镜像在 30 秒内完成 CatCRM 生产级私有化部署与自建镜像打包。

架构设计:All-in-One 单容器

CatCRM 官方 Docker 镜像内置了 Nginx、Spring Boot 后端应用、PostgreSQL 18 和 Redis 8 四大组件,一个容器即可完整运行整套系统:

  • 容器对外仅暴露 Nginx 的 8080 端口:前端页面由 Nginx 直接高效响应,/api 请求在容器内部转发至 127.0.0.1:18080 的后端服务。
  • 高安全性隔离:PostgreSQL 18 与 Redis 8 仅监听容器内部回环地址(127.0.0.1),不对外网暴露端口,彻底杜绝外部扫段与弱口令爆破风险。

快速运行(推荐)

数据默认统一挂载在宿主机的 ~/catcrm 目录下。请先手工创建宿主机目录,避免 Docker 自动以 root 权限创建空目录:

mkdir -p $HOME/catcrm/{postgres,redis,upload,logs}

docker run -d --name catcrm --restart unless-stopped \
  --stop-timeout 30 \
  -p 8080:8080 \
  -e DB_PASSWORD='123456' \
  -e REDIS_PASSWORD='123456' \
  -v $HOME/catcrm/postgres:/data/postgres \
  -v $HOME/catcrm/redis:/data/redis \
  -v $HOME/catcrm/upload:/app/upload \
  -v $HOME/catcrm/logs:/app/logs \
  makunet/catcrm:0.1.0

启动后在浏览器访问 http://<host>:8080。首次启动会自动初始化数据库并执行 Flyway 建表脚本,约需几十秒,期间容器健康检查状态显示为 starting。可通过以下命令实时查看启动日志:

docker logs -f catcrm

环境变量与目录挂载说明

环境变量表

变量名是否必填默认值说明
DB_PASSWORD是无PostgreSQL 数据库密码(缺失时容器立即退出并提示)
REDIS_PASSWORD是无Redis 认证密码(缺失时容器立即退出并提示)
DB_NAME否catcrm数据库名(仅允许小写字母、数字、下划线)
DB_USER否catcrm数据库用户名(仅允许小写字母、数字、下划线)

持久化数据目录映射

宿主机目录(默认)容器内路径是否必须挂载用途说明
~/catcrm/postgres/data/postgres必须挂载PostgreSQL 18 数据文件(未挂载时容器拒绝启动,防止数据丢失)
~/catcrm/redis/data/redis强烈建议Redis 8 AOF / RDB 持久化数据
~/catcrm/upload/app/upload强烈建议上传的客户附件、合同扫描件与图片
~/catcrm/logs/app/logs建议挂载Spring Boot 与系统运行日志

从源码自建 Docker 镜像

如果您购买了企业版源码或需要自行定制打包,项目在 deploy/ 目录下提供了完整的自动化构建脚本。前端与后端在宿主机完成打包,Dockerfile 仅负责拷贝产物,一条命令即可完成:

# 本地打包并构建当前机器架构镜像 makunet/catcrm:0.1.0
./deploy/docker-build.sh 0.1.0

# 构建 linux/amd64 + linux/arm64 多架构镜像并推送至 Docker Hub
./deploy/docker-push.sh 0.1.0

常用打包命令与参数

# 仅在宿主机打包前后端产物到 deploy/dist,不构建 Docker 镜像
./deploy/package.sh

# 企业版源码开发:跳过 Allatori 字节码混淆加密,直接纯净打包
./deploy/package.sh --no-obfuscate

# 使用国内镜像源加速前端依赖安装并构建镜像
NPM_REGISTRY=https://registry.npmmirror.com ./deploy/docker-build.sh 0.1.0

# 仅修改了 Dockerfile / nginx.conf / entrypoint 时,跳过编译直接复用 dist 产物构建
SKIP_PACKAGE=1 ./deploy/docker-build.sh