当我们创建应用程序时,将花费大量时间来创建身份验证功能。如果您添加更多登录功能,例如 OAuth、SAML 等,则会增加更多的工作量和成本。 Auth0、Okta、OneLogin、AWS Cognito 或其他类似服务是解决此问题的快速解决方案。但是,如果您对隐私有偏执,您肯定会更喜欢使用本地服务。

目前,有几种身份验证应用程序可供免费使用,其中一些是开源的。 Keycloack、FusionAuth、Gluu 和 Ory 就是一些例子。根据我尝试这些产品的经验,它们拥有完整的文档,但安装和部署过程并不像弹指一样简单。

几周前,当我浏览 Product Hunt 时,有一个名为 Authorizer 的新产品。然后我很想试试这个。官方文档提供了在 Heroku、Render 和 Railway 等各种服务上安装或部署 Authorizer 的说明。我想尝试将它部署到Fly.io,不幸的是,我找不到文档,我仍然没有找到有关此的教程。所以,我做了一个小实验,结果如下。

有关授权者的更多信息,请访问authorizer.dev有关Fly.io的更多信息,请访问fly.io/docs

先决条件

  • PC 或笔记本电脑(绝对)

  • 你最喜欢的终端

  • 一杯咖啡或你最喜欢的饮料

  • AFly.io账号

我使用的是 macOS,您需要根据您使用的操作系统调整一些命令。

第 1 步:安装Fly.ioCLI

macOS

brew install flyctl

Linux

curl -L https://fly.io/install.sh | sh

窗户

iwr https://fly.io/install.ps1 -useb | iex

第二步:登录Fly.io

确保您已经有一个Fly.io帐户。

flyctl auth login

第 3 步:为 Authorizer 创建Fly.io应用程序

为工作区创建一个目录并移动到您创建的目录。

flyctl launch --org personal --name authorizer --region lax --no-deploy

注意:在此示例中,我在lax区域和personal组织中创建了一个名为authorizer的应用程序。有关Fly.io区域的更多信息,请阅读本文档。

第四步:配置fly.toml文件

你会发现一个新文件fly.toml。这个文件是Fly.io的部署配置文件。

将此部分添加到fly.toml文件中:

[build]
image = "lakhansamani/authorizer:latest"

[experimental]
private_network = true
cmd = ["./build/server", "--database_type=postgres"]
allowed_public_ports = []
auto_rollback = true

[env]
  PORT = "8080"
  FLY_REGION = "sin"

然后在[[services]]部分内将internal_port更改为8080,如下所示:

[[services]]
  internal_port = 8080
  processes = ["app"]
  protocol = "tcp"
  script_checks = []

完整的fly.toml文件会变成这样:

app = "authorizer"
kill_signal = "SIGINT"
kill_timeout = 5
processes = []

[build]
image = "lakhansamani/authorizer:latest"

[experimental]
private_network = true
cmd = ["./build/server", "--database_type=postgres"]
auto_rollback = true

[env]
  PORT = "8080"
  FLY_REGION = "sin"

[[services]]
  internal_port = 8080
  processes = ["app"]
  protocol = "tcp"
  script_checks = []

  [services.concurrency]
    type = "connections"
    hard_limit = 25
    soft_limit = 20

  [[services.ports]]
    force_https = true
    handlers = ["http"]
    port = 80

  [[services.ports]]
    handlers = ["tls", "http"]
    port = 443

  [[services.tcp_checks]]
    grace_period = "1s"
    interval = "15s"
    restart_limit = 0
    timeout = "2s"

第 5 步:准备数据库

我们将使用 Postgres 作为数据库。运行以下命令在Fly.io创建一个 Postgres 实例:

flyctl postgres create \
  --organization personal \
  --name authorizer-db \
  --initial-cluster-size 1 \
  --password $(openssl rand -hex 8) \
  --region lax \
  --vm-size shared-cpu-1x \
  --volume-size 3

要连接 Postgres 数据库,我们需要使用以下命令附加:

flyctl postgres attach --postgres-app authorizer-db

此命令将添加一个环境变量DATABASE_URL。您无需删除或更改变量名称,因为此变量名称与所需的 Authorizer envar 相同。

第 6 步:部署

在我们部署应用程序之前,我们需要更改一些配置。幸运的是,Authorizer 通过使用 envar 使这变得容易。然后,我们需要为ADMIN_SECRET生成一个随机字符串。此密钥用于对管理控制台进行身份验证。

您可以使用openssl,例如:

openssl rand -base64 500 | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1

在我们的Fly.io应用中添加一些环境变量:

flyctl secrets set \
    ENV="production" \
    ADMIN_SECRET=CHANGE_THIS_BY_WHATEVER_YOU_WANT \
    DATABASE_TYPE="postgres" \
    SENDER_EMAIL=CHANGE_THIS \
    SMTP_HOST=CHANGE_THIS \
    SMTP_PASSWORD=CHANGE_THIS \
    SMTP_PORT=587 \
    SMTP_USERNAME=CHANGE_THIS \
    ORGANIZATION_NAME="Feelantera" \
    URL="https://authorizer.fly.dev"

在此处](https://docs.authorizer.dev/core/env)了解有关环境变量[的更多信息。

最后,通过执行以下命令部署应用程序:

flyctl deploy

部署过程完成后,检查应用程序日志:

flyctl logs

请记住:每次您对 envars 进行更改时,Fly.io都会重新部署您的应用程序。

恭喜,您的应用程序具有身份验证服务!打开https://authorizer.fly.dev,使用ADMIN_SECRET作为认证密码。

Logo

ModelScope旨在打造下一代开源的模型即服务共享平台,为泛AI开发者提供灵活、易用、低成本的一站式模型服务产品,让模型应用更简单!

更多推荐