On Azure Postgres FelxibleServer​

In this guide we show how to deploy EdgeDB on Azure using Postgres FelxibleServer as the backend.

Prerequisites​

  • Valid Azure Subscription with billing enabled or credits (free trial).
  • Azure CLI (install).

Provision an EdgeDB instance​

Login to your azure account.


1. az login

Create a new resource group.


1. GROUP=my-group-name


1. az group create --name $GROUP --location westus

Provision a PostgreSQL server.

If you already have a database provisioned you can skip this step.

If you get an error saying Specified server name is already used. change the server name and rerun the command.


1. PG_SERVER_NAME=postgres-for-edgedb


1. read -rsp "Password: " PASSWORD


1. az postgres flexible-server create \
2. --resource-group $GROUP \
3. --name $PG_SERVER_NAME \
4. --location westus \
5. --admin-user edgedb \
6. --admin-password $PASSWORD \
7. --sku-name Standard_D2s_v3 \
8. --version 12 \
9. --yes

Allow other azure services access to the postgres instance.


1. az postgres flexible-server firewall-rule create \
2. --resource-group $GROUP \
3. --name $PG_SERVER_NAME \
4. --rule-name allow-azure-internal \
5. --start-ip-address 0.0.0.0 \
6. --end-ip-address 0.0.0.0

Start an EdgeDB container.


1. PG_HOST=$(
2. az postgres flexible-server list \
3. --resource-group $GROUP \
4. --query "[?name=='$PG_SERVER_NAME'].fullyQualifiedDomainName | [0]" \
5. --output tsv
6. )


1. DSN="postgresql://edgedb:$PASSWORD@$PG_HOST/postgres?sslmode=require"


1. az container create \
2. --resource-group $GROUP \
3. --name edgedb-container-group \
4. --image edgedb/edgedb:nightly \
5. --dns-name-label edgedb \
6. --ports 5656 \
7. --secure-environment-variables \
8. "EDGEDB_SERVER_PASSWORD=$PASSWORD" \
9. "EDGEDB_SERVER_BACKEND_DSN=$DSN" \
10. --environment-variables \
11. EDGEDB_SERVER_TLS_CERT_MODE=generate_self_signed \

Persist the SSL certificate. We have configured EdgeDB to generate a self signed SSL certificate when it starts. However, if the container is restarted a new certificate would be generated. To preserve the certificate across failures or reboots copy the certificate files and use their contents in the EDGEDB_SERVER_TLS_KEY and EDGEDB_SERVER_TLS_CERT environment variables.


1. key="$( az container exec \
2. --resource-group $GROUP \
3. --name edgedb-container-group \
4. --exec-command "cat /etc/ssl/edgedb/edbprivkey.pem" \
5. | tr -d "\r" )"


1. cert="$( az container exec \
2. --resource-group $GROUP \
3. --name edgedb-container-group \
4. --exec-command "cat /etc/ssl/edgedb/edbtlscert.pem" \
5. | tr -d "\r" )"


1. az container delete \
2. --resource-group $GROUP \
3. --name edgedb-container-group \
4. --yes


1. az container create \
2. --resource-group $GROUP \
3. --name edgedb-container-group \
4. --image edgedb/edgedb:nightly \
5. --dns-name-label edgedb \
6. --ports 5656 \
7. --secure-environment-variables \
8. "EDGEDB_SERVER_BACKEND_DSN=$DSN" \
9. "EDGEDB_SERVER_TLS_KEY=$key" \
10. --environment-variables \
11. "EDGEDB_SERVER_TLS_CERT=$cert"

To access the EdgeDB instance you’ve just provisioned on Azure from your local machine link the instance.


1. printf $PASSWORD | edgedb instance link \
2. --password-from-stdin \
3. --non-interactive \
4. --trust-tls-cert \
5. --host $( \
6. az container list \
7. --resource-group $GROUP \
8. --query "[?name=='edgedb-container-group'].ipAddress.fqdn | [0]" \
9. --output tsv ) \
10. azure

You can now connect to your instance.


1. edgedb -I azure