在Ubuntu 18.04/CentOS 7上安装Hasura GraphQL引擎

时间:2020-02-23 14:32:17  来源:igfitidea点击:

本教程将在Ubuntu 18.04/CentOS 7上设置Hasura GraphQL引擎和Postgres数据库。Hasura GraphQL Engine是一种高性能GraphQL服务器,使我们可以立即在Postgres数据库上设置GraphQL服务器和事件触发器。 GraphQL Engine将自动生成GraphQL模式并处理GraphQL查询,订阅和变异。

使用Hasura GraphQL Engine,构建GraphQL应用程序或者将现有应用程序迁移到由Postgres支持的GraphQL变得很容易。通过Postgres,我们将获得nstant实时GraphQL API。

安装PostgreSQL数据库服务器

使用Hasura GraphQL引擎时,有两种运行PostgreSQL数据库服务器的选项。

在虚拟机/物理主机上运行它在容器内运行

如果我们不熟悉Docker容器管理,建议我们在主机系统中运行数据库服务器。请按照下面的教程在Ubuntu 18.04/CentOS 7上有效安装Postgres。

如何在CentOS 7上安装PostgreSQL

在Ubuntu 18.04/Ubuntu 16.04上安装PostgreSQL

在Ubuntu 18.04/CentOS 7上安装Docker

Hasura GraphQL Engine将在Docker容器中运行。这意味着我们需要在主机系统上安装Docker Engine。以下教程会有所帮助。

如何在Ubuntu/Debian/Fedora/Arch/CentOS上安装Docker CE

安装Docker后,继续执行。

在Ubuntu 18.04/CentOS 7上部署Hasura GraphQL引擎

下载docker-run.shbash脚本:

wget https://raw.githubusercontent.com/hasura/graphql-engine/master/install-manifests/docker-run/docker-run.sh

docker-run.sh脚本中包含一个示例docker run命令。必须对命令进行以下更改:数据库URL网络配置

数据库URL

编辑HASURA_GRAPHQL_DATABASE_URLenv变量值,以便可以连接到Postgres实例。请参阅以下示例:

postgres://admin:theitroad@localhost:5432/my-db
postgres://admin:@localhost:5432/my-db (if there is no password)

HASURA_GRAPHQL_DATABASE_URL的示例:postgres://admin:theitroad @ 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:theitroad@localhost: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:theitroad@localhost:port/dbname \
  -e HASURA_GRAPHQL_ENABLE_CONSOLE=true \
  -e HASURA_GRAPHQL_ADMIN_SECRET=myadminsecretkey \
  hasura/graphql-engine:latest

在访问GraphQL控制台时,将要求我们提供Admin secret。

在Docker中运行Hasura GraphQL引擎和Postgres

如果我们需要简单快速地设置GraphQL环境,则可以在docker中运行Postgres和GraphQL。

安装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撰写版本。

$docker-compose --version
docker-compose version 1.23.2, build 1110ad01

设置配置撰写命令行完成

为bash和zsh shell编写hascommand完成。

对于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

然后重新加载shell:

exec $SHELL -l

下载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:

运行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

访问Hasura控制台

打开Hasura控制台服务器IP端口8080。

现在,我们可以进行第一个graphql查询或者设置第一个事件触发器了。