Run Hasura GraphQL Engine using Docker ====================================== .. contents:: Table of contents :backlinks: none :depth: 1 :local: This guide assumes that you already have Postgres running and helps you set up the Hasura GraphQL engine using Docker and connect it to your Postgres database. Prerequisites ------------- - `Docker `_ Step 1: Get the **docker-run.sh** bash script --------------------------------------------- The `hasura/graphql-engine/install-manifests `_ repo contains all installation manifests required to deploy Hasura anywhere. Get the docker run bash script from there: .. code-block:: bash $ wget https://raw.githubusercontent.com/hasura/graphql-engine/master/install-manifests/docker-run/docker-run.sh Step 2: Configure the **docker-run.sh** script ---------------------------------------------- The ``docker-run.sh`` script has a sample docker run command in it. The following changes have to be made to the command: - Database URL - Network config Database URL ^^^^^^^^^^^^ Edit the ``HASURA_GRAPHQL_DATABASE_URL`` env var value, so that you can connect to your Postgres instance. .. code-block:: bash :emphasize-lines: 3 #! /bin/bash docker run -d -p 8080:8080 \ -e HASURA_GRAPHQL_DATABASE_URL=postgres://username:password@hostname:port/dbname \ -e HASURA_GRAPHQL_ENABLE_CONSOLE=true \ hasura/graphql-engine:latest Examples of ``HASURA_GRAPHQL_DATABASE_URL``: - ``postgres://admin:password@localhost:5432/my-db`` - ``postgres://admin:@localhost:5432/my-db`` *(if there is no password)* .. note:: - If your **password contains special characters** (e.g. #, %, $, @, etc.), you need to URL encode them in the ``HASURA_GRAPHQL_DATABASE_URL`` env var (e.g. %40 for @). You can check the :doc:`logs ` to see if the database credentials are proper and if Hasura is able to connect to the database. - Hasura GraphQL engine needs access permissions to your Postgres database as described in :doc:`Postgres permissions <../postgres-permissions>` Network config ^^^^^^^^^^^^^^ If your Postgres instance is running on ``localhost`` the following changes will be needed to the ``docker run`` command to allow the Docker container to access the host's network: .. rst-class:: api_tabs .. tabs:: .. tab:: Linux Add the ``--net=host`` flag to access the host's Postgres service. This is what your command should look like: .. code-block:: bash :emphasize-lines: 1 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 .. tab:: Docker for Mac Use ``host.docker.internal`` as hostname to access the host's Postgres service. This is what your command should look like: .. code-block:: bash :emphasize-lines: 2 docker run -d -p 8080:8080 \ -e HASURA_GRAPHQL_DATABASE_URL=postgres://username:password@host.docker.internal:port/dbname \ -e HASURA_GRAPHQL_ENABLE_CONSOLE=true \ hasura/graphql-engine:latest .. tab:: Docker for Windows Use ``docker.for.win.localhost`` as hostname to access the host's Postgres service. This is what your command should look like: .. code-block:: bash :emphasize-lines: 2 docker run -d -p 8080:8080 \ -e HASURA_GRAPHQL_DATABASE_URL=postgres://username:password@docker.for.win.localhost:port/dbname \ -e HASURA_GRAPHQL_ENABLE_CONSOLE=true \ hasura/graphql-engine:latest Step 3: Run the Hasura docker container --------------------------------------- Execute ``docker-run.sh`` & check if everything is running well: .. code-block:: bash $ ./docker-run.sh $ docker ps CONTAINER ID IMAGE ... CREATED STATUS PORTS ... 097f58433a2b hasura/graphql-engine.. ... 1m ago Up 1m 8080->8080/tcp ... Step 4: Open the Hasura console ------------------------------- Head to http://localhost:8080/console to open the Hasura console. Step 5: Track existing tables and relationships ----------------------------------------------- See :doc:`../../schema/using-existing-database` to enable GraphQL over the database. Advanced -------- - :doc:`Securing your GraphQL endpoint ` - :doc:`GraphQL engine server logs ` - :doc:`Updating GraphQL engine ` - :doc:`Setting up migrations <../../migrations/index>` .. toctree:: :titlesonly: :hidden: Securing your GraphQL endpoint GraphQL engine server logs Updating GraphQL engine