docker-compose build
docker-compose up -d
以下のサービスが起動する。
- Neo4j: 7474, 7687 (ホスト側ポートは動的に決定される)
- GraphQL API: 4000
- Elasticsearch: 9200, 9100(管理ツール)
- Https-portal: 80, 443
docker-compose down && docker-compose build && docker-compose up -d && docker-compose logs -f
たとえばGraphQLのschemaを書き換えた際には、Docker コンテナを作り直す必要があります。その際、以下のコマンドを実行すると便利です。
docker-compose build api && docker-compose up --no-deps -d api
docker-compose up -d neo4j api https-portal
Dockerでの実行時にマウントしているフォルダ es/esdata
のオーナーを変更すると、
エラーが発生せずに実行できる場合があります(参考)。
sudo chown -R 1000:1000 es/esdata
./api/src/schema.graphql
にて定義されているGraphQL schemaでは、@deprecated
や@relation
といったディレクティブを使うことができます。
ここで利用できるディレクティブは、以下の2種類です。
- GraphQLのデフォルトのdirectives
- GRANDstack固有のdirectives
下記のGraphQLクエリをGraphQL Playgroundから実行すれば、使用可能なディレクティブの一覧を取得できます。
{
__schema{
directives {
name
description
}
}
}
politylink-backendのGraphQLサーバは、外部から勝手にデータを更新されてしまうことを防ぐために、 Mutationを発行する際に、HTTPリクエストのヘッダに認証キーを設定することを要求しています。
例えばGraphQL PlaygroundからMutationを発行する場合は、
画面左下の HTTP HEADERS
という文字をクリックするとテキストボックスが表示されるので、
{
"Authorization": "Bearer $GRAPHQL_TOKEN"
}
という文字列を入力してからクエリを実行する必要があります。
この認証キーは、GraphQLサーバ上にある秘密鍵(JWT_SECRET
)を使って生成されたJSON Web Tokensであり、以下の手順で生成できます。
JWT_SECRET
を決め、api/.env
のJWT_SECRET
に設定し、コンテナをリビルドする。- https://jwt.io/ にアクセスし、VERIFY SIGNATUREのところに、
JWT_SECRET
を入力する。 - PAYLOAD に、この認証キーに許可するMutationの一覧を記述する。例えば、あらゆるMutationを認める場合、以下のようになる。
{
"scopes": ["Read", "Merge", "Update", "Insert", "Delete", "Create"]
}
- (オプショナル)生成した認証キーを
api/.env
のGRAPHQL_TOKEN
に設定し、コンテナをリビルドする。このステップはseedデータをGraphQLに登録する時に必要。
GraphQLサーバーは、HTTPヘッダから認証キーを取得した際に、api/.env
に記載されているJWT_SECRET
を用いてデコードし、
その認証キーに許可されているGraphQLの操作のみが実行できるように制御しています。
api/src/seed
に、GraphQLサーバが正常に動作しているか確認するためのモックデータが定義されています。
このデータをバックエンドのデータベースにロードするためには、api/.env
に環境変数(JWT_SECRET
とGRAPHQL_TOKEN
)を設定した上で
下記のコマンドを実行します。
docker-compose exec api npm run seedDb
なお、politylink-crawlerを使えば クローラーから取得した実データをGraphQLに保存することも可能です。