Skip to content

CloudMeet: 自托管的Calendly替代方案,免费开源的会议调度工具

Published:

原文链接


CloudMeet

A simple, self-hosted meeting scheduler built on Cloudflare. Open-source Calendly alternative with Google Calendar and Outlook Calendar integration.

CloudMeet Booking Page

Live Demo

Features

Quick Start

1. Create Cloudflare API Token

  1. Go to Cloudflare API Tokens
  2. Click Create Token
  3. Select Edit Cloudflare Workers template
  4. Under Account Resources, select your account
  5. Click + Add more and add: Account → D1 → Edit
  6. Click Continue to summaryCreate Token
  7. Copy the token for step 4

2. Setup Google OAuth

  1. Go to Google Cloud Console

  2. Create a new project

  3. Go to APIs & Services > Library > Enable Google Calendar API

  4. Go to APIs & Services > Credentials

  5. Click Create Credentials > OAuth 2.0 Client ID

  6. Application type: Web application

  7. Add authorized redirect URI: https://YOUR-PROJECT.pages.dev/auth/callback

    • Replace YOUR-PROJECT with your Cloudflare Pages project name (you’ll get this URL after first deploy, or use your custom domain if you already have one)
    • You can add multiple redirect URIs, so add both the default and custom domain if needed
  8. Save your Client ID and Client Secret for step 4

3. Create your repository

Click Use this template > Create a new repository.

4. Add Repository Secrets

Go to your new repo’s Settings > Secrets and variables > Actions > New repository secret.

Add these secrets (click “New repository secret” for each one):

SecretRequiredDescription
CLOUDFLARE_API_TOKENYesYour Cloudflare API token from step 1
CLOUDFLARE_ACCOUNT_IDYesYour Cloudflare Account ID (right sidebar)
ADMIN_EMAILYesYour Google email (only this account can login)
JWT_SECRETYesRandom string for session tokens (generate one)
APP_URLYesYour app URL (e.g., https://YOUR-PROJECT.pages.dev or your custom domain)
GOOGLE_CLIENT_IDYesFrom step 2 (ends with .apps.googleusercontent.com)
GOOGLE_CLIENT_SECRETYesFrom step 2
EMAILIT_API_KEYNoEmailit API key for booking emails
EMAIL_FROMNoFrom address (e.g., [email protected])
CRON_SECRETNoSecures reminder endpoint (generate one)
MICROSOFT_CLIENT_IDNoFor Outlook Calendar integration (see below)
MICROSOFT_CLIENT_SECRETNoFor Outlook Calendar integration (see below)

5. Deploy

Go to Actions > Deploy to Cloudflare Pages > Run workflow > Run workflow.

Your app will be live at https://YOUR-PROJECT.pages.dev.

Custom Domain (Optional)

  1. Go to Cloudflare Dashboard > Pages > cloudmeet > Custom domains
  2. Add your domain
  3. Update APP_URL secret to your new domain
  4. Update redirect URI in Google Cloud Console to https://yourdomain.com/auth/callback
  5. Re-run the deploy workflow

Updating

To get the latest updates from the template and deploy:

  1. Go to Actions > Sync and Deploy > Run workflow > Run workflow

This will sync with the upstream CloudMeet template and automatically deploy to Cloudflare.

Alternatively, you can run Upstream Sync and Deploy to Cloudflare Pages separately.

If sync fails with a permissions error, create a personal access token with Contents and Workflows permissions, and paste it in the token field when running the workflow.

Email Reminders

Email reminders are automatically enabled when you deploy. A Cloudflare Worker runs every 5 minutes to check for and send scheduled reminders (24h, 1h before meetings).

Note: The CRON_SECRET is optional but recommended. Without it, the reminder endpoint is publicly accessible (anyone could trigger reminder sends). With it, only the cron worker can trigger reminders.

To add the secret:

  1. Add a CRON_SECRET to your GitHub secrets (any random string)
  2. Re-deploy via Actions > Deploy to Cloudflare Pages

The cron worker is deployed automatically alongside the main app.

Outlook Calendar Integration (Optional)

CloudMeet supports Microsoft Outlook Calendar in addition to Google Calendar. You can use Google alone, Outlook alone, or both together. When both are connected, availability is checked across both calendars.

Setup Microsoft OAuth

  1. Go to Azure Portal > App registrations > New registration

  2. Name: CloudMeet (or your preferred name)

  3. Supported account types: Accounts in any organizational directory (Any Microsoft Entra ID tenant - Multitenant) and personal Microsoft accounts (e.g. Skype, Xbox)

  4. Redirect URI: Web > https://YOUR-DOMAIN/auth/outlook/callback

  5. Click Register

  6. Copy the Application (client) ID - this is your MICROSOFT_CLIENT_ID

  7. Go to Certificates & secrets > New client secret

  8. Copy the secret value - this is your MICROSOFT_CLIENT_SECRET

  9. Go to API permissions > Add a permission > Microsoft Graph > Delegated permissions

  10. Add these permissions:

    • Calendars.ReadWrite
    • User.Read
    • OnlineMeetings.ReadWrite (for Teams meeting links)
  11. Click Grant admin consent (if you have admin access, otherwise users consent on first login)

Add Secrets

Add MICROSOFT_CLIENT_ID and MICROSOFT_CLIENT_SECRET to your GitHub secrets and re-deploy.

Usage

Once configured, users can connect their Outlook calendar from the dashboard:

Local Development

cp .env.example .dev.vars  # Add your credentials
npm install
npm run db:init
npm run dev

License

MIT


Previous Post
Mac上的Office安装和激活指南:官方下载链接和工具
Next Post
WXPush:一个极简且免费的微信消息推送API服务