架构设计: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