qnap NAS下安装cal.com的YAML

复制代码
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
相关推荐
闲云自留地33 分钟前
告别敲命令!DockerUI 与 Portainer 可视化容器管理实战
docker·容器
wdfk_prog1 小时前
ROS教程10:从 gtest 到 rostest——Unit Test、Node 集成测试、rosbag 与 rqt 验证闭环
运维·缓存·docker·容器·ros
cnkeysky3 小时前
docker 运行 nacos
docker·nacos
itCatface4 小时前
Linux离线部署Dify+Vllm(Qwen2.5-7b)
docker·ai·dify
是店小二呀5 小时前
鸿蒙PC开源移植:Docker桌面工作台与Linux运行时桥接
docker·鸿蒙pc
是店小二呀6 小时前
MySQL 监控总在重复配置?用 Shell 自动部署 mysqld_exporter,再让 Prometheus 远程抓取
docker
凤城老人6 小时前
从零手写开源私有云盘|Flask+Vue3+Electron全栈网盘,单容器一键部署
python·docker·electron·vue
Dovis(誓平步青云)6 小时前
突破 32 位瓶颈:64 位 XID 如何化解事务号回卷危机
运维·服务器·人工智能·docker·容器
是店小二呀7 小时前
开源鸿蒙PC原生适配:Node版本管理器命令行移植
docker·鸿蒙pc
为你学会写情书7 小时前
Docker 从入门到实战:容器化全栈项目,再顺手编排一个 Milvus 向量数据库
docker