Cal.diy 在 Vercel Pro 上的手动部署:环境变量、构建命令与 Prisma 数据库初始化
【免费下载链接】cal.diyScheduling infrastructure for absolutely everyone.项目地址: https://gitcode.com/GitHub_Trending/ca/cal.diy
如果你要把 Cal.diy(Cal.com 的社区开源 fork)部署到 Vercel 上,且不想用一键按钮,而是自己掌控仓库与配置,那么完整路径是:在本地准备好环境变量并用 Prisma 初始化 Postgres 数据库、创建一个第一个用户,然后在 Vercel 上新建项目、指定根目录与构建命令后部署。这条路径有一个硬性前提:官方文档明确说明,由于免费版对 serverless 函数数量有限制,使用 Vercel 部署该应用需要Vercel Pro Plan;另外你还需要一个托管在别处的 Postgres 数据库(文档以 Supabase 的免费选项和 Heroku 的低成本选项为例)。本文依据 Vercel 部署文档 与 README.md 中的手动配置说明。
准备条件
按 README.md 的 Prerequisites,运行 Cal.diy 需要:
- Node.js(版本 >= 18.x,安装文档 建议用 Node 18 以获得最佳稳定性)
- PostgreSQL(版本 >= 13.x)
- Yarn(推荐)
数据库连接串按 README 的格式准备,将<user>、<pass>、<db-host>、<db-port>替换为你的实际值:
DATABASE_URL='postgresql://<user>:<pass>@<db-host>:<db-port>'本地设置与 Prisma 数据库初始化
1. Fork 并克隆仓库
git clone https://github.com/<<your-fork>>/cal.diy.git<<your-fork>>需要替换为你自己 fork 的仓库地址(源文档给出的模板值)。
2. 设置环境变量
Vercel 手动部署文档说明:复制.env.example文件并重命名为.env,填入你的配置。注意一个文档间的不一致:vercel.mdx 说该文件在apps/web下,而当前仓库中.env.example位于项目根目录(README 的手动设置一节也指向根目录的.env.example)。以仓库实际位置为准。
需要重点配置的环境变量:
| 变量 | 说明 |
|---|---|
DATABASE_URL | 数据库连接串,格式见上 |
NEXTAUTH_SECRET | Cookie 加密密钥,用openssl rand -base64 32生成 |
CALENDSO_ENCRYPTION_KEY | 认证加密密钥,用openssl rand -base64 24生成 |
NEXT_PUBLIC_WEBAPP_URL | 站点基础 URL |
NEXTAUTH_URL | .env.example中的注释要求:在 Vercel 托管时,将其设置为与NEXT_PUBLIC_WEBAPP_URL相等 |
CRON_API_KEY | Vercel 部署按钮预置的必需变量之一(README 中 Vercel 一键部署链接列出了DATABASE_URL、NEXT_PUBLIC_WEBAPP_URL、NEXTAUTH_URL、NEXTAUTH_SECRET、CRON_API_KEY、CALENDSO_ENCRYPTION_KEY) |
生成密钥的两条命令:
openssl rand -base64 32 # 生成 NEXTAUTH_SECRET openssl rand -base64 24 # 生成 CALENDSO_ENCRYPTION_KEY另外 安装文档 补充:对于Vercel 的 preview 部署,请保持NEXTAUTH_URL、NEXT_PUBLIC_WEBSITE_URL、NEXT_PUBLIC_WEBAPP_URL三个变量为空。
3. 安装依赖
yarn install4. 用 Prisma 初始化数据库
Prisma schema 位于packages/prisma/schema.prisma,其中数据源通过DATABASE_URL与DATABASE_DIRECT_URL两个环境变量读取。在生产环境执行:
yarn workspace @calcom/prisma db-deploy该命令在 packages/prisma/package.json 中对应prisma migrate deploy。
Windows/PowerShell 用户注意 README 给出的已知问题:如果部署脚本报Environment variable not found: DATABASE_DIRECT_URL,是 Turbo 未能注入根.env变量,可以在 prisma 包目录内直接执行命令绕过:
cd packages/prisma $env:DATABASE_URL="postgresql://postgres:YOUR_PASSWORD@localhost:5432/postgres"; $env:DATABASE_DIRECT_URL="postgresql://postgres:YOUR_PASSWORD@localhost:5432/postgres" npx prisma db push cd ../..5. 通过 Prisma Studio 创建第一个用户并验证
yarn db-studio在 Prisma Studio 中:
- 点击
User模型添加一条新用户记录; - 填写
email、username、password,并把metadata设为空对象{}——密码需先用 BCrypt 加密后再填入(README 提示某些版本在metadata为空字符串时会报Invalid 'prisma.user.create()',用{}可解决); - 点击
Save 1 Record保存。README 提示新用户的默认 plan 是TRIAL,如有需要可在 schema 中调整; - 打开浏览器访问本地 3000 端口,用刚创建的用户登录,确认账户可用。
这是文档给出的验证方式:能登录即说明数据库初始化与首个用户创建都成功了。
在 Vercel 上创建项目并部署
- 在 Vercel 上新建项目;
- 从你 fork 的仓库导入;
- 设置环境变量(与本地
.env中一致的那一组); - 将 root directory 设置为
apps/web; - 覆盖构建命令(Override the build command)为:
cd ../.. && yarn build --include-dependencies --no-deps- 点击 Deploy。
如果yarn install在 Vercel 部署期间失败,源文档给出的替代安装命令是:
YARN_ENABLE_IMMUTABLE_INSTALLS=false yarn install把 Vercel 的 install command 换成它即可。
Cron 任务不需要在 Vercel 上手工配置:apps/web/vercel.json 已经声明了crons列表,包括/api/cron/calendar-subscriptions(每 5 分钟)、/api/cron/calendar-subscriptions-cleanup、/api/cron/queuedFormResponseCleanup、/api/tasks/cron、/api/tasks/cleanup、/api/cron/credentials、/api/cron/selected-calendars等定时任务,部署后随项目一起生效。
结果验证与限制
- 数据库侧:
yarn db-studio能看到你创建的用户记录,且能在 3000 端口(本地)用该用户登录成功,说明 Prisma 初始化与首个用户创建完成。 - 部署侧:Vercel 项目使用
apps/web作为根目录、覆盖后的构建命令执行成功并进入部署流程,即为手动部署完成。 - 限制:Vercel 免费版的 serverless 函数数量不够用,Pro Plan 是文档明确的硬性要求;Postgres 数据库必须托管在别处,数据库连接串通过
DATABASE_URL提供。 - 如果部署后想接入 Google Calendar 等集成,README 的 "Obtaining the Google API Credentials" 一节给出了获取
GOOGLE_API_CREDENTIALS的完整步骤,属于部署完成后的后续配置。
【免费下载链接】cal.diyScheduling infrastructure for absolutely everyone.项目地址: https://gitcode.com/GitHub_Trending/ca/cal.diy
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考