在 Ubuntu 18.04/CentOS 7 上安装 Hasura GraphQL 引擎
本指南将帮助您在 Ubuntu 18.04/CentOS 7 上设置 Hasura GraphQL 引擎和 Postgres 数据库。Hasura GraphQL 引擎是一个高性能 GraphQL 服务器,使您能够立即在 Postgres 数据库上设置 GraphQL 服务器和事件触发器。 GraphQL Engine 将自动生成 GraphQL 模式并处理 GraphQL 查询、订阅和变更。
使用 Hasura GraphQL Engine,构建 GraphQL 应用程序或将现有应用程序迁移到 Postgres 支持的 GraphQL 将变得非常容易。您将通过 Postgres 获得即时的实时 GraphQL API。
第1步:安装PostgreSQL数据库服务器
使用 Hasura GraphQL 引擎时,您有两种运行 PostgreSQL 数据库服务器的选项。
- 在虚拟机/物理主机上运行
- 在容器内运行它
如果您不熟悉 Docker 容器管理,我建议您在主机系统中运行数据库服务器。请按照下面的指南在 Ubuntu 18.04/CentOS 7 上安装 Postgres。
如何在 CentOS 7 上安装 PostgreSQL
在 Ubuntu 18.04/Ubuntu 16.04 上安装 PostgreSQL
步骤2:在Ubuntu 18.04/CentOS 7上安装Docker
Hasura GraphQL Engine 将在 Docker 容器中运行。这意味着您需要在主机系统上安装 Docker 引擎。以下指南将会有所帮助。
如何在 Ubuntu/Debian/Fedora/Arch/CentOS 上安装 Docker CE
安装 Docker 后,继续执行步骤 3。
步骤3:在Ubuntu 18.04/CentOS 7上部署Hasura GraphQL引擎
下载 docker-run.sh bash 脚本:
wget https://raw.githubusercontent.com/hasura/graphql-engine/master/install-manifests/docker-run/docker-run.sh
docker-run.sh
脚本中有一个示例 docker run 命令。必须对该命令进行以下更改:
- 数据库网址
- 网络配置
数据库网址
编辑 HASURA_GRAPHQL_DATABASE_URL
env 变量值,以便您可以连接到 Postgres 实例。请参阅下面的示例:
postgres://admin:password@localhost:5432/my-db
postgres://admin:@localhost:5432/my-db (if there is no password)
HASURA_GRAPHQL_DATABASE_URL
示例:
postgres://admin:password@localhost:5432/my-db
postgres://admin:@localhost:5432/my-db
(如果没有密码)网络配置
如果您的 Postgres 实例在 localhost
上运行,则需要对 dockerrun
命令进行以下更改,以允许 Docker 容器访问主机的网络:
添加 --net=host
标志以访问主机的 Postgres 服务。
您的命令应如下所示:
docker run -d --net=host \
-e HASURA_GRAPHQL_DATABASE_URL=postgres://username:password@hostname:port/dbname \
-e HASURA_GRAPHQL_ENABLE_CONSOLE=true \
hasura/graphql-engine:latest
要检查容器是否已启动并正在运行,请运行 docker ps 命令。
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5fa940fa91ad hasura/graphql-engine:v1.0.0-alpha40 "graphql-engine serve" 9 seconds ago Up 8 seconds nostalgic_hypatia
该服务应绑定到端口 8080
上的主机网络。
~# ss -tunelp | grep 8080
tcp LISTEN 0 128 0.0.0.0:8080 0.0.0.0:* users:(("graphql-engine",pid=12999,fd=17)) ino:83522 sk:a <->
通过服务器 IP 和端口 8080 访问 GraphQL 控制台。
保护 GraphQL 端点的安全
默认情况下,GraphQL 控制台可公开访问。为了保护 GraphQL 端点和 Hasura 控制台,您需要配置管理密钥。您的 docker run 命令将如下所示。
docker run -d -p 8080:8080 \
-e HASURA_GRAPHQL_DATABASE_URL=postgres://username:password@hostname:port/dbname \
-e HASURA_GRAPHQL_ENABLE_CONSOLE=true \
-e HASURA_GRAPHQL_ADMIN_SECRET=myadminsecretkey \
hasura/graphql-engine:latest
访问 GraphQL 控制台时,系统会要求您提供管理员密码。
在 Docker 中运行 Hasura GraphQL 引擎和 Postgres
如果您需要简单快速地设置 GraphQL 环境,可以在 docker 中运行 Postgres 和 GraphQL。
第 1 步:安装 Docker Compose
下载之前,请在官方 Compose 版本页面上查看 Docker Compose 的最新版本。截至撰写本文时,最新版本为“1.23.2 ”。
export VER="1.23.2"
下载保存到变量 VER
的最新稳定版本。
sudo curl -L "https://github.com/docker/compose/releases/download/${VER}/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
上面的命令会将文件保存到 /usr/local/bin/docker-compose
。对二进制文件应用可执行权限:
sudo chmod +x /usr/local/bin/docker-compose
显示 Docker compose 版本。
$ docker-compose --version
docker-compose version 1.23.2, build 1110ad01
设置配置撰写命令行完成
Compose 具有 bash 和 zsh shell 的命令完成功能。
对于 Bash 用户
将完成脚本放入 /etc/bash_completion.d
/ 中。
sudo curl -L https://raw.githubusercontent.com/docker/compose/${VER}/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-compose
获取文件或重新登录以享受完成功能。
source /etc/bash_completion.d/docker-compose
对于 Zsh 用户
在 ~/.zsh/completion/
中下载完成脚本
mkdir -p ~/.zsh/completion
curl -L https://raw.githubusercontent.com/docker/compose/${VER}/contrib/completion/zsh/_docker-compose > ~/.zsh/completion/_docker-compose
通过添加 ~/.zshrc
将该目录包含在您的 $fpath
中:
fpath=(~/.zsh/completion $fpath)
确保 compinit
已加载,或者通过添加 ~/.zshrc
来完成:
autoload -Uz compinit && compinit -i
然后重新加载你的外壳:
exec $SHELL -l
第2步:下载docker-compose文件
运行以下命令下载 Hasura 的 docker compose 文件。
mkdir graphql
cd graphql
wget https://raw.githubusercontent.com/hasura/graphql-engine/master/install-manifests/docker-compose/docker-compose.yaml
您可以编辑环境部分以添加管理员密码。
version: '3.6'
services:
postgres:
image: postgres
restart: always
volumes:
- db_data:/var/lib/postgresql/data
graphql-engine:
image: hasura/graphql-engine:v1.0.0-alpha40
ports:
- "8080:8080"
depends_on:
- "postgres"
restart: always
environment:
HASURA_GRAPHQL_DATABASE_URL: postgres://postgres:@postgres:5432/postgres
HASURA_GRAPHQL_ENABLE_CONSOLE: "true" # set to "false" to disable console
ASURA_GRAPHQL_ADMIN_SECRET: myadminsecretkey
volumes:
db_data:
第 3 步:运行 Hasura GraphQL 引擎和 Postgres
开始使用:
$ docker-compose up -d
.....
Creating graphql_postgres_1 … done
Creating graphql_graphql-engine_1 … done
检查容器是否正在运行:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ac0063626d8a hasura/graphql-engine:v1.0.0-alpha40 "graphql-engine serve" 3 minutes ago Up 3 minutes 0.0.0.0:8080->8080/tcp graphql_graphql-engine_1
2928f0f1537e postgres "docker-entrypoint.s…" 3 minutes ago Up 3 minutes 5432/tcp graphql_postgres_1
对 docker-compose 文件进行更改后,重新启动容器。
$ docker-compose restart
Restarting graphql_graphql-engine_1 … done
Restarting graphql_postgres_1 … done
第4步:访问Hasura控制台
打开Hasura控制台服务器IP端口8080。
您现在已准备好进行第一个 graphql 查询或设置第一个事件触发器。从 Hasura GraphQL Engine 文档了解更多信息。