Calendly 和其他日程安排工具很棒。它使我们的生活变得更加轻松。我们将它用于商务会议、辅助项目和其他任何需要灵活协调的地方。然而,大多数工具在控制、定制、数据保护方面都非常有限,最重要的是——它们不是免费的!这就是 Calendso & Synpse 的用武之地。自托管,您的所有数据都位于您自己的机器上。 API 驱动并准备好部署在您自己的域上。完全控制您的事件和数据。

在本教程中,我们将部署一个位于您自己的 DNS 域下的自托管 Calendso 实例。您将能够与您的同事、客户和朋友共享会议链接,例如https://calendar.synpse.net/karolis/quick-chat:

[calendso-karolis](https://res.cloudinary.com/practicaldev/image/fetch/s--izAcsMpn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to -uploads.s3.amazonaws.com/uploads/articles/g6myuf6j24ngkxg7qv7z.png)

您还可以:

  • 将其与您的 Google 日历集成

  • 为您的组织创建多个用户

  • 创建团队

设置

部署将通过 Synpse 以声明方式处理。传入流量将由Caddy服务器处理,该服务器将终止 HTTPS(它还会自动为您检索 TLS 证书)并将流量路由到Calendso。

您还可以在本地访问Prisma Studio以创建您和您团队的用户。

先决条件

  • Synpse 帐户- 部署

  • Cloudflare 帐户- DNS(或任何其他 DNS 提供商)

如果您没有自己的 DNS 域,只需跳入我们的 Discord 频道,我会为您提供一些替代方案(您可以使用 Webhook Relay 的子域或使用 DuckDNS 等服务)。

配置DNS

如果您使用 Cloudflare,创建 A 记录如下所示:

[a-record](https://res.cloudinary.com/practicaldev/image/fetch/s--FjlYnQNI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to -uploads.s3.amazonaws.com/uploads/articles/qxq5di9bxi85vrb3e43h.png)

您可以查阅您的 DNS 提供商关于管理 A 记录的文档。

在路由器上配置端口转发(可选)

如果您设置它的服务器位于本地网络中,则需要将其公开到 Internet。简单的方法就是使用您自己的路由器转发端口:

[端口转发](https://res.cloudinary.com/practicaldev/image/fetch/s--7Ajd6pzR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to -uploads.s3.amazonaws.com/uploads/articles/19mbva0jr22ss7wope8b.png)

如果您没有静态 IP 或您的网络位于 CGNAT 后面,您可以使用https://webhookrelay.com代替。我们还将提供有关该设置的教程。

与谷歌日历集成

预订很棒,但每天检查您的 Calendso 实例会很乏味。为了允许 Calendso 读取和写入我们的 Google 日历,我们需要创建 API 凭据并将它们提供给 Calendso。

启用API

为此,请前往 Google API 控制台并创建一个新项目。 Google 可能需要一点时间来设置您的项目,但一旦完成,请前往该项目并单击启用 API 和服务按钮。

单击按钮后,您将被带到 API 库。在搜索框中,查找日历并选择 Google Calendar API 结果,然后启用它。

检索凭证

接下来,让我们前往 Google API 控制台中的凭证页面,以便我们可以创建 Calendso OAuth ID 并添加我们的生产源和重定向 URI。

[gcp-creds](https://res.cloudinary.com/practicaldev/image/fetch/s--77sRjGWY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to -uploads.s3.amazonaws.com/uploads/articles/7jmjgjwhet5u7f1t3aoz.png)

您的密钥将被创建,您将被重定向回凭据页面,您将在其中看到新生成的 OAuth 2.0 客户端 ID。选择下载选项并将此文件保存到您的计算机。复制文件的所有内容并将其添加为 GOOGLE_API_CREDENTIALS 环境变量的值:

[gcp-creds-secret](https://res.cloudinary.com/practicaldev/image/fetch/s--GLZr0Kez--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev -to-uploads.s3.amazonaws.com/uploads/articles/9nnbov8g9lkka5xa649y.png)

通过 Synapse 部署

借助 Synpse,我们将部署多个容器,为我们提供管理功能、数据库、隧道(将其公开到互联网)和 Calendso 本身。

准备秘密

首先,转到您的秘密页面并创建:

  • calendsoPostgres 使用您的数据库密码

  • calendsoPostgresConnStringpostgresql://calendso:PASSWORD@postgres:5432/calendso(只需将 PASSWORD 替换为您的数据库密码)

  • calendsoEncKey 使用您自己生成的随机密钥。您可以使用命令openssl rand -base64 32在终端中生成一个

[秘密](https://res.cloudinary.com/practicaldev/image/fetch/s--Eoxn9Vqc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads .s3.amazonaws.com/uploads/articles/ipy3qvmnyw8iyjemtnf7.png)

创建应用程序

完整的规范如下所示:

# Name of your app
name: synpse-calendso
scheduling:
  type: Conditional
  # Need to match your labels
  # Ref: https://docs.synpse.net/synpse-core/applications/scheduling
  selectors:
    type: controller
spec:
  containers:
    - name: calendso
      image: ctadeu/calendso:0.0.17-1
      env:
        - name: BASE_URL
          value: https://calendar.synpse.net
        - name: NEXTAUTH_URL
          value: https://calendar.synpse.net
        - name: DATABASE_URL
          fromSecret: calendsoPostgresConnString
        - name: CALENDSO_ENCRYPTION_KEY
          fromSecret: calendsoEncKey
        - name: GOOGLE_API_CREDENTIALS
          fromSecret: calendsoGoogleApiCredentials
      restartPolicy: {}
    - name: prisma
      image: codejamninja/prisma-studio:latest
      ports:
        - 5555:5555
      env:
        - name: POSTGRES_URL
          fromSecret: calendsoPostgresConnString
      restartPolicy: {}
    - name: postgres
      image: postgres:latest
      volumes:
        - /data/calendso-postgres:/var/lib/postgresql/data
      env:
        - name: PGDATA
          value: /var/lib/postgresql/data/pgdata
        - name: POSTGRES_USER
          value: calendso
        - name: POSTGRES_DB
          value: calendso
        - name: POSTGRES_PASSWORD
          fromSecret: calendsoPostgres
      restartPolicy: {}
    # Caddy provides HTTPS
    - name: caddy
      image: caddy:latest
      args:
        - caddy
        - reverse-proxy
        - --from
        - calendar.synpse.net:7300 # This should be your domain and port, same as in your router
        - --to
        - calendso:3000
      ports:
        - 7300:7300
      volumes:
        - /data/calendso-caddy:/data
        - /data/calendso-caddy-cfg:/config
      restartPolicy: {}

进入全屏模式 退出全屏模式

现在,如果您单击 Allocations,您应该会看到所有容器正在运行,并且在设备详细信息中您可以看到端口:

[synpse-device](https://res.cloudinary.com/practicaldev/image/fetch/s--POdo92ea--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to -uploads.s3.amazonaws.com/uploads/articles/5goljuhlg5vkjaztjuxn.png)

如果您单击 Prisma 并且您的设备在本地可访问,您将能够访问管理仪表板。

请注意,如果您的设备暴露在互联网上,您不应让 Prisma 容器暴露端口。

进入 Prisma 后,请遵循自托管部分的官方指南,并:

  1. 单击用户模型以添加新的用户记录。

  2. 填写字段(记得用BCrypt加密您的密码)并单击 Save 1 Record 创建您的第一个用户。

登录后,转到集成部分并将其与 Google 的日历连接。

参考文献

  • Calendso 文档:https://docs.cal.com/

  • Synpse 文档:https://docs.synpse.net

  • Abhuk 中继文档:https://docs.abhukrelay.com

  • Cloudflare:https://cloudflare.com

原文发表于https://synpse.net/blog/self-hosting-calendso-caddy/

Logo

CI/CD社区为您提供最前沿的新闻资讯和知识内容

更多推荐