Skip to content

Document How to Run in Azure VM #241

@davihar

Description

@davihar

Feature description

Document how to run in Azure on a VM.

Motivating example

I wanted to host in Azure and followed the steps below.


Steps that enabled me to host in an Azure VM:

Using Graphile over PostgreSQL 12

Created Ubuntu 20.04 Gen1 VM in Azure using static IP address

Connect using OSX Terminal SSH command

Launchpad
Terminal

ssh {vm_username}@{ip_address}

Create database user

sudo adduser {database_username}

Install PostgreSQL

sudo apt-get update
sudo apt-get install postgresql-12
CREATE ROLE {datebase_username} WITH LOGIN CREATEDB ENCRYPTED PASSWORD '{database_user_password}';
CREATE DATABASE {database_name};
GRANT ALL PRIVILEGES ON DATABASE {database_name} to {database_username};
\q
su {database_username}
psql -d {database_name}
CREATE TABLE testtable(
  ID INT PRIMARY KEY NOT NULL,
  NAME TEXT NOT NULL
);
\d

psql "postgres://{database_username}:{database_user_password}@localhost/{database_name}"

Note: connection strings require URL encoding.

Steps above were adapted from https://tecadmin.net/install-postgresql-server-on-ubuntu/

PostgreSQL Adding GUID (UUID) Support:

sudo su postgres
psql {database_name}
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
SELECT uuid_generate_v4();

Steps above were adapted from https://www.postgresqltutorial.com/postgresql-uuid/#:~:text=The%20Basics%20Of%20PostgreSQL%20UUID,table%20with%20UUID%20column.

Install NPM

sudo apt install npm

Install Yarn

curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt update && sudo apt install yarn

Install PostGraphile

yarn add postgraphile

Install Optional Plugins

yarn add @graphile-contrib/pg-simplify-inflector

Start Graphile with:

npx postgraphile \
  --subscriptions \
  --watch \
  --dynamic-json \
  --no-setof-functions-contain-nulls \
  --no-ignore-rbac \
  --no-ignore-indexes \
  --show-error-stack=json \
  --extended-errors hint,detail,errcode \
  --append-plugins @graphile-contrib/pg-simplify-inflector \
  --export-schema-graphql schema.graphql \
  --graphiql "/graphiql" \
  --enhance-graphiql \
  --allow-explain \
  --enable-query-batching \
  --legacy-relations omit \
  --connection postgres://{database_username}:{database_user_password}@localhost/{database_name} \
  --owner-connection postgres://postgres:{postgress_password}@localhost/{database_name} \
  --schema public \
  --host 0.0.0.0

Documentation: CLI Usage: https://www.graphile.org/postgraphile/usage-cli/

Note: By default only localhost works but the --host 0.0.0.0 argument enables access from outside the server.

Note: sudo tcpdump port 5000 can be used to debug network issues to determine if traffic is hitting the server.

Verify Server is Working:

curl http://{vm_ip_address}:5000/graphiql

Disconnect Graphile execution from SSH window:

# Press <ctrl+z>
bg
disown -h

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions