在Ubuntu 18.04/CentOS 7上安装Hasura GraphQL引擎
本指南将在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.sh
bash脚本:
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_URL
env变量值,以便可以连接到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查询或者设置第一个事件触发器了。从Hasura GraphQL Engine文档中了解更多信息。