version: '3.8'
services:
postgres:
image: postgres:15-alpine
container_name: calcom-postgres
restart: unless-stopped
environment:
POSTGRES_DB: calcom
POSTGRES_USER: calcom
POSTGRES_PASSWORD: aaaa(自己写一个强密码)
PGDATA: /var/lib/postgresql/data/pgdata # 隔离新版数据目录
volumes:
- /share/ContainerData/calendso/postgres-data(自己写一个存储位置):/var/lib/postgresql
ports:
- "5432:5432" # 可选,方便管理
networks:
- calcom-network
healthcheck:
test: ["CMD", "pg_isready", "-U", "calcom", "-d", "calcom", "-h", "localhost"]
interval: 30s
timeout: 10s
retries: 5
start_period: 30s
app:
image: calcom/cal.com:latest
container_name: calcom-app
restart: unless-stopped
depends_on:
postgres:
condition: service_healthy
environment:
# 数据库连接
DATABASE_URL: postgresql://calcom:aaaaa(前面写的密码)@postgres:5432/calcom
DATABASE_DIRECT_URL: postgresql://calcom:aaaaa(前面写的密码)@postgres:5432/calcom
# 🔑 加密密钥 - 同时设置新旧两个变量(必须)
CALENDSO_ENCRYPTION_KEY: (长密码,比如)q1w2e3r4t5y6u7i8o9p0a1s2d3f4g5h6j7k8l9m0n1o2p1q4r5t6u7v8w9x0y1z2==
CALCOM_ENCRYPTION_KEY: (长密码,比如)q1w2e3r4t5y6u7i8o9p0a1s2d3f4g5h6j7k8l9m0n1o2p1q4r5t6u7v8w9x0y1z2==
# 认证配置
NEXTAUTH_URL: https://aaa.com(外网访问网址)
NEXTAUTH_SECRET: (长密码,比如)q1w2e3r4t5y6u7i8o9p0a1s2d3f4g5h6j7k8l9m0n1o2p1q4r5t6u7v8w9x0y1z2==
# 邮件配置(163)
EMAIL_FROM: 邮箱地址
EMAIL_SERVER_HOST: 发件服务器
EMAIL_SERVER_PORT: 端口
EMAIL_SERVER_USER: 邮箱地址
EMAIL_SERVER_PASSWORD: 服务器密码
EMAIL_SERVER_SECURE: true
# 时区 & 公共URL
TZ: Asia/Shanghai
NEXT_PUBLIC_WEBAPP_URL: https://aaa.com(外网地址)
# 其他优化
NODE_ENV: production
NEXT_PUBLIC_IS_E2E: "false"
volumes:
- /share/ContainerData/calendso/uploads(自己写一个存储位置):/usr/src/app/public/uploads
ports:
- "8877(自己写一个端口号):3000"
networks:
- calcom-network
# ✅ 启动命令:迁移 + 启动(完全正确)
command: >
sh -c "
echo '等待数据库就绪并执行迁移...' &&
until npx prisma migrate deploy; do
echo '数据库未就绪或迁移失败,2秒后重试...' &&
sleep 2;
done &&
echo '✅ 数据库迁移成功,启动 Cal.com...' &&
yarn start
"
networks:
calcom-network:
driver: bridge
安装成功了,但发发现一个问题,在建立用户时,会自动把localhost:3000变成前缀,怀疑最新版本中是DOCKER镜像中把NEXT_PUBLIC_WEBAPP_URL预构建了,这个暂时没法手工改了。
deepseek建议:
如果您希望彻底解决,并且愿意花 10 分钟构建自己的镜像,可以这样做:
1️⃣ 创建 Dockerfile.custom
dockerfile
FROM calcom/cal.com:latest AS base
# 重新构建前端,注入正确的环境变量
FROM node:18-alpine AS builder
WORKDIR /app
COPY --from=base /usr/src/app /app
ARG NEXT_PUBLIC_WEBAPP_URL
ARG NEXTAUTH_URL
ENV NEXT_PUBLIC_WEBAPP_URL=$NEXT_PUBLIC_WEBAPP_URL \
NEXTAUTH_URL=$NEXTAUTH_URL
RUN yarn build
FROM node:18-alpine
WORKDIR /app
COPY --from=builder /app /app
EXPOSE 3000
CMD ["yarn", "start"]
2️⃣ 修改 docker-compose.yml
yaml
services:
app:
build:
context: .
dockerfile: Dockerfile.custom
args:
NEXT_PUBLIC_WEBAPP_URL: http://192.168.1.100:8877 # 改为您的实际地址
NEXTAUTH_URL: http://192.168.1.100:8877
# 移除 image: calcom/cal.com:latest
# 其他环境变量可保留,但构建参数已传入
3️⃣ 重新构建并启动
bash
docker-compose down
docker-compose up -d --build