日程安排工具Cal.com的安装

什么是 Cal.com (原 Calendso) ?

Cal.com 是一个现代化、灵活且功能强大的开源日程管理平台,旨在为用户提供全面的控制权和定制能力,是适合每个人的活动日程安排程序,被誉为 Calendly 的继任者。它的最大特点是完全开源,用户可以完全掌控自己的数据、工作流程和外观设计。

Cal.com 就是三年前老苏介绍过的 Calendso。之所以重新写,是因为有网友反馈折腾不成功。老苏抽空看了一下,确实变化有点大。很有必要更新下文档,来适应现在的镜像

文章传送门:日程安排工具Calendso

准备工作

因为要和第三方应用集成,比如老苏选择了 Outlook Calendar,其中的回调地址,必须是可公网访问的 https 协议地址,所以我们第一步需要通过反代处理,实现 https 协议,第二步是获取到Microsoft Graph 客户端 ID 和密钥。

当然你只打算局域网随便用用,这一步可能是非必须的,但老苏没测试过,行不行你得自己试试才知道

反向代理

准备好两个子域名。

不能用 tailscale + npm 方案,因为 tailscale 是私有地址

域名 局域网地址 备注
cal.laosu.tech http://192.168.0.197:5554 Cal.com 的访问地址
api.laosu.tech http://192.168.0.197:5555 API 的访问地址

没有什么特殊设置,所以就不放图了

集成 Outlook Calendar

可以参考 Calendso集成 Outlook 日历章节,这里就不赘述了

也可以参考官方文档:https://github.com/calcom/cal.com#obtaining-microsoft-graph-client-id-and-secret

官方的文档的集成(Integrations)比较全,如果你要集成其他的应用,例如 Google,也可以参考

安装

在群晖上以 Docker 方式安装。

env.txt

env.txt 中是 Cal.com 的环境变量文件,包含了需要的设置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# Set this value to 'agree' to accept our license:
# LICENSE: https://github.com/calendso/calendso/blob/main/LICENSE
#
# Summary of terms:
# - The codebase has to stay open source, whether it was modified or not
# - You can not repackage or sell the codebase
# - Acquire a commercial license to remove these terms by emailing: license@cal.com
NEXT_PUBLIC_LICENSE_CONSENT=
LICENSE=

# BASE_URL and NEXT_PUBLIC_APP_URL are both deprecated. Both are replaced with one variable, NEXT_PUBLIC_WEBAPP_URL
# BASE_URL=http://localhost:3000
# NEXT_PUBLIC_APP_URL=http://localhost:3000

NEXT_PUBLIC_WEBAPP_URL=https://cal.laosu.tech
NEXT_PUBLIC_API_V2_URL=https://api.laosu.tech/api/v2

# Configure NEXTAUTH_URL manually if needed, otherwise it will resolve to {NEXT_PUBLIC_WEBAPP_URL}/api/auth
# NEXTAUTH_URL=http://localhost:3000/api/auth

# It is highly recommended that the NEXTAUTH_SECRET must be overridden and very unique
# Use `openssl rand -base64 32` to generate a key
NEXTAUTH_SECRET=K/63DVPNhaFDT2U//fhOoPE1HeygLPzTOiRkCYNphmw=

# Encryption key that will be used to encrypt CalDAV credentials, choose a random string, for example with `dd if=/dev/urandom bs=1K count=1 | md5sum`
CALENDSO_ENCRYPTION_KEY=deLkL83PbUARmr76

# Deprecation note: JWT_SECRET is no longer used
# JWT_SECRET=secret

POSTGRES_USER=calendso
POSTGRES_PASSWORD=CYSCJe7kh*!gkdTB
POSTGRES_DB=calendso
DATABASE_HOST=database:5432
DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${DATABASE_HOST}/${POSTGRES_DB}
# Needed to run migrations while using a connection pooler like PgBouncer
# Use the same one as DATABASE_URL if you're not using a connection pooler
DATABASE_DIRECT_URL=${DATABASE_URL}
GOOGLE_API_CREDENTIALS={}

# Set this to '1' if you don't want Cal to collect anonymous usage
CALCOM_TELEMETRY_DISABLED=

# Used for the Office 365 / Outlook.com Calendar integration
MS_GRAPH_CLIENT_ID=
MS_GRAPH_CLIENT_SECRET=

# Used for the Zoom integration
ZOOM_CLIENT_ID=
ZOOM_CLIENT_SECRET=

# E-mail settings
# Configures the global From: header whilst sending emails.
EMAIL_FROM=wbsu2003@88.com

# Configure SMTP settings (@see https://nodemailer.com/smtp/).
EMAIL_SERVER_HOST=smtp.88.com
EMAIL_SERVER_PORT=465
EMAIL_SERVER_USER=wbsu2003@88.com
EMAIL_SERVER_PASSWORD=

NODE_ENV=production

源文件在:https://github.com/calcom/docker/blob/main/.env.example

这里老苏只简单介绍几个改了的参数

  • NEXT_PUBLIC_WEBAPP_URL:用我们前面反代的 Cal.com 的访问地址;
  • NEXT_PUBLIC_API_V2_URL:在我们设置的 API 访问地址后面还有加上 /api/v2
  • NEXTAUTH_SECRET:密钥,可以用 openssl rand -base64 32 来生成;
  • CALENDSO_ENCRYPTION_KEY:用于加密 CalDAV 凭据的加密密钥;
  • POSTGRES_DATABASE:为数据库设置;
    • POSTGRES_USER:数据库用户;
    • POSTGRES_PASSWORD:数据库用户对应的密码;
    • POSTGRES_DB:数据库库名;
    • DATABASE_HOST:包含主机和端口;
    • DATABASE_URL:数据库访问地址;
  • MS_GRAPH_CLIENT_ID:填入你的 Microsoft Graph 客户端 ID
  • MS_GRAPH_CLIENT_SECRET:填入你的 Microsoft Graph 密钥;
  • EMAIL_FROM:邮件发送用户;
  • EMAIL_SERVER_:邮件相关设置,还是以 88 邮箱为例
    • EMAIL_SERVER_HOSTSMTP 服务器地址;
    • EMAIL_SERVER_PORTSMTP 服务器端口;
    • EMAIL_SERVER_USER:邮件发送用户;
    • EMAIL_SERVER_PASSWORD:邮件中设置的第三方客户端密码;

docker-compose.yml

源文件在:https://github.com/calcom/docker/blob/main/docker-compose.yaml

老苏做了必要的微调,请将下面的内容保存为 docker-compose.yml 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# Use postgres/example user/password credentials
version: '3.8'

services:
database:
image: postgres
container_name: cal-database
restart: always
volumes:
- ./data:/var/lib/postgresql/data/
env_file: env.txt

calcom:
image: calcom/cal.com
container_name: cal-web
restart: always
ports:
- 5554:3000
env_file: env.txt
environment:
- DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${DATABASE_HOST}/${POSTGRES_DB}
- DATABASE_DIRECT_URL=${DATABASE_URL}
depends_on:
- database

# Optional use of Prisma Studio. In production, comment out or remove the section below to prevent unwanted access to your database.
studio:
image: calcom/cal.com
container_name: cal-prisma
restart: always
ports:
- 5555:5555
env_file: env.txt
environment:
- DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${DATABASE_HOST}/${POSTGRES_DB}
- DATABASE_DIRECT_URL=${DATABASE_URL}
depends_on:
- database
command:
- npx
- prisma
- studio
# END SECTION: Optional use of Prisma Studio.

然后执行下面的命令

1
2
3
4
5
6
7
8
9
10
# 新建文件夹 calcom 和 子目录
mkdir -p /volume1/docker/calcom/data

# 进入 calcom 目录
cd /volume1/docker/calcom

# 将 docker-compose.yml 和 env.txt 放入当前目录

# 一键启动
docker-compose --env-file env.txt up -d

运行

在浏览器中输入 https://cal.laosu.tech ,开始刷总是错误

老苏用的 cloudflared + npm,所以错误界面和局域网访问不一样

从日志看,启动时间

到出现向导界面

差不多用了半小时,首先要设置管理员用户

个人用的话,AGPLv3 License 是免费的

选择与 Cal.com 集成的应用程序,不知道怎么设的话,保持默认就可以

进入主界面

第一次还需要设置一些基本信息

选择集成的日历

根据我们的设置,选择了 Outlook Calendar,会需要登录认证

认证成功后

选择视频应用,老苏没有,直接选 Set up later 跳过了

设置你的可预约时间

默认是周一到周五,每天早上 9 点到下午 5

最后是个人简介,照片

终于完成了

进入左下角的 Setting –> General –> Language,下拉找到中文

Update 之后,界面就是中文了

根据我们的设置,访客可以看到的界面是下面👇这样的

可以根据我们开放的时间段进行预约

参考文档

calcom/cal.com: Scheduling infrastructure for absolutely everyone.
地址:https://github.com/calcom/cal.com

calcom/docker: The Docker configuration for Cal.com is an effort powered by people within the community. Cal.com, Inc. does not provide official support for Docker, but we will accept fixes and documentation. Use at your own risk.
地址:https://github.com/calcom/docker

Cal.com | Open Scheduling Infrastructure
地址:https://cal.com/zh-CN

calcom/cal.com - Docker Image | Docker Hub
地址:https://hub.docker.com/r/calcom/cal.com

Introduction - Cal.com Docs
地址:https://cal.com/docs/developing/introduction

Welcome | Design
地址:https://design.cal.com/