Deploying with Docker
This guide assumes that you already have Postgres running and helps you set up the prestd using Docker and connect it to your Postgres database.
In case you’d like to run prestd with a fresh Postgres database, follow this guide to deploy the prestd along with a Postgres instance using Docker Compose.
Prerequisites
Docker (version 20.10.7 or later)
Docker-Compose (version 1.29.2 or later)
Create an installation folder called prestd where you would like your prestd installation and data storage.
cd (open/join) into the installation folder.
Quick Start
We will use docker to run pREST and connect to an existing database. To simplify the example we leave the authentication module off and enable debug mode (which disables JWT enforcement).
docker run -d -p 3000:3000 \
-e PREST_VERSION=2 \
-e PREST_PG_URL=postgres://username:password@hostname:port/dbname \
-e PREST_DEBUG=true \
prest/prest:v2.0.0v2 JWT requirement: when
PREST_DEBUGis not set andjwt.defaultis enabled, configurePREST_JWT_KEY(orPREST_JWT_JWKS/PREST_JWT_WELLKNOWNURL) explicitly. In v2.0.0, missing verification material auto-disables JWT with a warning — the server still starts. The v2.0.0-rc6 tagged binary refuses to start in that case. See Configuring pREST.
Docker images: v2 images are built via GoReleaser. Pin to a specific tag like
v2.0.0rather than usinglatestin production.
Edit the PREST_PG_URL env var value, so that you can connect to your Postgres instance.
Examples of PREST_PG_URL:
postgres://admin:password@localhost:5432/my-db
postgres://admin:@localhost:5432/my-db (if there is no password)
If your password contains special characters (e.g. #, %, $, @, etc.), you need to URL encode them in the
PREST_PG_URLenv var (e.g. %40 for @). You can check the logs to see if the database credentials are proper and if pREST is able to connect to the database. pREST needs access permissions to your Postgres database as described in permissions page.
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.
Add the --net=host flag to access the host’s Postgres service.
This is what your command should look like:
if you are using another operating system we recommend reading the docker network documentation, on macOS and Windows it is different.
With Docker Compose
Compose is a tool for defining and running multi-container Docker applications. With Compose, you use a YAML file to configure your application’s services. Then, with a single command, you create and start all the services from your configuration. To learn more about all the features of Compose, see the list of features.
{{< emgithub "https://github.com/prest/prest/blob/main/docker-compose-prod.yml" >}}
Download docker compose file
Up (run) PostgreSQL and prestd
Run data migration to create user structure for access (JWT)
Create user and password for API access (via JWT)
user: prest
pass: prest
Check if the user was created successfully (by doing a select on the table)
First call on API
Example using curl:
Additionally you can:
Kubernetes readiness probe
For multi-database or production deployments, use GET /_ready as the readiness probe. It pings the default database and every registered alias (#973).
See the Kubernetes deployment manifest in the prest repo for a multi-secret example.
Last updated