ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

在 Azure 上使用 Hasura GraphQL Engine:Azure Container Instances 与 Azure Database for PostgreSQL 一键部署指南

在 Azure 上使用 Hasura GraphQL Engine:Azure Container Instances 与 Azure Database for PostgreSQL 一键部署指南 在 Azure 上使用 Hasura GraphQL EngineAzure Container Instances 与 Azure Database for PostgreSQL 一键部署指南【免费下载链接】graphql-engineBlazing fast, instant realtime GraphQL APIs on all your data with fine grained access control, also trigger webhooks on database events.项目地址: https://gitcode.com/gh_mirrors/gr/graphql-engine本篇技术指南围绕仓库中 install-manifests/azure-container-with-pg 部署清单展开讲解如何借助 Azure 资源管理器ARM模板在 Azure Container InstancesACI上运行 Hasura GraphQL Engine并由 Azure Database for PostgreSQL 提供数据库支撑。读完本文你将掌握带全新 Postgres 数据库的完整部署的 ARM 模板结构、每个部署参数的取值规则与底层映射以及从门户一键部署到获取 FQDN、打开 Console 的完整操作流程。一、这个部署清单解决什么问题在 Hasura GraphQL Engine 仓库的install-manifests目录下Azure 部署方案分为两类install-manifests/azure-container面向已有现成 Postgres 数据库的场景只部署 Hasura 容器数据库由用户自行提供例如既有的 Azure Database for PostgreSQL 实例需要手动填写 Postgres 主机名、端口、账号等连接信息。install-manifests/azure-container-with-pg即本文主题一个清单同时新创建Azure Database for PostgreSQL 服务器与 Hasura GraphQL Engine 容器适合从零开始、希望一条链路完成环境搭建的开发者。两者的差别用一句话概括azure-container-with-pg是Hasura 新数据库全量供应azure-container是仅 Hasura、复用现有数据库。本文聚焦前者。该清单的交付物是三个文件文件作用README.md部署说明与操作指引azuredeploy.jsonARM 模板主体定义参数、变量、Postgres 服务器、防火墙规则、数据库与容器组资源azuredeploy.parameters.json参数文件示例默认仅占位name字段二、部署前置条件开始部署前只需确认一点一个有效的 Azure 订阅没有订阅的用户可以先注册 Azure 免费试用账户。与azure-container清单不同本清单不需要用户预先准备任何数据库——Postgres 服务器会由模板自动创建因此前置条件被精简到仅剩订阅这一项。三、一键部署从按钮到 Azure 门户清单提供了Deploy to Azure一键部署按钮其底层跳转链接将模板 URI 指向仓库内的azuredeploy.json即https://raw.githubusercontent.com/hasura/graphql-engine/master/install-manifests/azure-container-with-pg/azuredeploy.json并通过 Azure 门户的模板部署页完成资源创建。点击按钮后若尚未登录Azure 门户会先提示登录进入自定义部署Custom deployment界面加载 ARM 模板的所有参数。提示按钮会在当前浏览器标签页打开 Azure 门户如需保留当前页面可按住CtrlmacOS 为Cmd点击使其在新标签页打开。四、部署参数详解每个字段的取值规则这是整份清单中最需要仔细填写的部分。结合 azuredeploy.json 中的参数定义parameters段逐一说明如下参数门户字段说明模板中的约束与默认值Subscription选择 Azure 订阅—Resource Group选择已有资源组或新建一个—Location资源组所在区域注意 ACI 与 Database for PostgreSQL 并非在所有区域都可用部署前应核对区域可用性资源将部署在资源组所在位置Name部署的唯一名称会被用于生成容器 DNS 标签因此必须全局唯一string类型minLength: 5maxLength: 63Postgres VersionPostgreSQL 服务器版本allowedValues:11、10、9.6、9.5默认11Postgres Pricing TierPostgreSQL 服务 SKU 定价层allowedValues:Basic、GeneralPurpose、MemoryOptimized默认GeneralPurposePostgres CPU Cores数据库核心数SKU capacityintallowedValues:2、4、8、16、32默认2Postgres Disk Size in MB数据库存储容量SKU Storage SizeintminValue: 5120maxValue: 4194304默认10240即 10 GBPostgres Admin UsernamePostgres 管理员用户名stringminLength: 4maxLength: 128默认hasuraPostgres Admin Password数据库管理员密码securestring保证部署参数不回显minLength: 8maxLength: 128且必须包含大写字母、小写字母、数字三类字符中的至少三类含!、$、#、%等非字母数字字符Postgres Database Name要创建的数据库名称stringminLength: 4maxLength: 128默认hasura其中有两处值得特别留意Name 的全局唯一性模板将name直接用作 ACI 的dnsNameLabel见ipAddress.dnsNameLabelAzure 的 DNS 标签是全局命名空间因此同名会冲突这也是参数说明中强调globally unique的原因。密码强度规则模板描述明确要求密码至少 8 位且字符需来自大写字母、小写字母、数字、非字母数字四类中的三类这符合 Azure Database for PostgreSQL 的强制密码策略。五、模板背后ARM 模板如何编排资源理解参数之后再看 azuredeploy.json 的资源编排逻辑可以更清楚地知道点一次 Purchase 到底创建了什么。模板的resources段包含两个相互依赖的资源1. PostgreSQL 服务器Microsoft.DBforPostgreSQL/servers服务器命名规则为{name}-pg-server变量serverName通过administratorLogin/administratorLoginPassword注入管理员凭据SKU 名称由定价层推导Basic→B、GeneralPurpose→GP、MemoryOptimized→MO拼接为{前缀}_Gen5_{核数}即B_Gen5_2、GP_Gen5_4这类格式服务器下嵌套两个子资源数据库默认charset: UTF8、collation: English_United States.1252防火墙规则命名为allow-all-azure-firewall-rulestartIpAddress/endIpAddress均为0.0.0.0。注意这条规则开放的是 Azure 服务内部访问等效于门户中允许 Azure 服务访问并非暴露给公网任意 IP。2. Hasura 容器组Microsoft.ContainerInstance/containerGroups容器组命名规则为{name}-container-group容器名为hasura-graphql-engine镜像固定为hasura/graphql-engine:v2.50.1变量containerImage与仓库其他清单如 install-manifests/docker-run/docker-run.sh、install-manifests/docker-compose/docker-compose.yaml保持一致资源请求memoryInGB: 1、cpu: 1暴露 TCP 80 端口osType: LinuxrestartPolicy: Always通过command段直接以 CLI 参数形式把数据库连接信息传给graphql-engine可执行文件graphql-engine --host Postgres 服务器 FQDN来自模板引用 reference(...).fullyQualifiedDomainName --port 5432 --user adminUserserverName # Azure Postgres 的登录名格式 --password postgresAdminPassword --dbname postgresDatabaseName serve --server-port 80 --enable-console --dev-mode这里出现的连接参数与serve子命令选项在源码中有明确的对应实现--host/--port/--user/--password/--dbname由 server/src-lib/Hasura/Server/Init/Arg.hs 中的parseRawConnDetails解析可视为--database-url环境变量HASURA_GRAPHQL_DATABASE_URL的拆分形式最终组合成 PostgreSQL 连接串--server-port、--enable-console、--dev-mode定义于 server/src-lib/Hasura/Server/Init/Arg/Command/Serve.hs分别对应环境变量HASURA_GRAPHQL_ENABLE_CONSOLE与HASURA_GRAPHQL_DEV_MODE。也就是说这份 ARM 模板通过命令行参数完成了与docker run环境变量如HASURA_GRAPHQL_DATABASE_URLpostgres://username:passwordhostname:port/dbname等价的工作同时在serve阶段显式开启了 Console 与开发模式方便部署后立即在浏览器中使用。3. 部署输出Outputs模板在部署完成后输出两个字段供用户直接使用输出来源fqdn容器组ipAddress.fqdn即 Console 的访问地址ipaddress容器组ipAddress.ip容器组的公网 IP六、完整部署步骤点击 Deploy to Azure 按钮进入 Azure 门户自定义部署页面按第四节表格逐一填写参数Subscription、Resource Group、Location、Name 及各 Postgres 项勾选同意条款后点击Purchase按钮部署随即开始点击门户顶栏的通知铃铛图标再点击 Deployment in Progress 链接即可查看各步骤Postgres 服务器、数据库、防火墙规则、容器组的实时进度所有步骤完成后点击侧边栏的Outputs链接页面会展示FQDN与IP address复制 FQDN 粘贴到浏览器例如http://hasura-graphql-engine.centralindia.azurecontainer.io浏览器将打开 Hasura GraphQL Engine Console 界面GraphiQL 控制台此时 GraphQL API 已经就绪。七、部署后可以做些什么容器以--dev-mode与--enable-console启动因此拿到 FQDN 后即可直接进入 Console 开始使用。后续的典型工作方向包括构建 Schema在 Console 中为 Postgres 数据库建表Hasura 会自动为表生成对应的 GraphQL 类型与增删改查接口GraphQL Queries / Mutations / Subscriptions体验基于数据库表的实时 GraphQL 查询、变更与订阅能力Event Triggers在数据库事件插入/更新/删除上挂载 WebhookAuthentication / Access control配置管理密钥Admin Secret与细粒度行级/列级权限Database Migrations通过 Hasura 的迁移机制管理 Schema 演进。生产环境提示清单默认开启--dev-mode且未设置管理密钥。上线前应参照仓库中 install-manifests/docker-compose/docker-compose.yaml 的做法通过环境变量设置HASURA_GRAPHQL_ADMIN_SECRET并关闭HASURA_GRAPHQL_DEV_MODE以保护 GraphQL 端点。八、小结本文完整梳理了 install-manifests/azure-container-with-pg 清单的使用方式与底层实现它一次性创建Azure Database for PostgreSQL 服务器 数据库 防火墙规则 ACI 容器组适合Hasura 新数据库的全新环境每个门户参数都对应 azuredeploy.json 中定义明确的 ARM 参数含取值范围与默认值密码、名称等字段存在硬性约束容器通过graphql-engine ... serve命令行参数注入数据库连接并开启 Console与 server/src-lib/Hasura/Server/Init/Arg.hs 中的参数解析实现一一对应部署完成后通过 Outputs 中的 FQDN 即可访问 Console立即开始构建 Schema 与 GraphQL API。如果你的场景是已有现成数据库只想部署 Hasura 容器则参考同目录下的 install-manifests/azure-container 清单即可。【免费下载链接】graphql-engineBlazing fast, instant realtime GraphQL APIs on all your data with fine grained access control, also trigger webhooks on database events.项目地址: https://gitcode.com/gh_mirrors/gr/graphql-engine创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表