🐘
pREST
  • pRESTd
    • Who uses pREST
    • pRESTd Key Features
    • Contributing to pRESTd
    • pREST in the Media
    • Code of Conduct
    • Code of Ethics
  • Get pREST
    • Development Guide
    • Start with Docker
    • Start with Golang
    • Start with Homebrew
  • Get Started
    • Configuring pREST
    • CORS Support
    • Cache
    • Migrating
    • Permissions
  • API Reference
    • Custom Queries
    • Auth
    • Parameters
    • Advanced Queries
  • Deployment
    • Deploying with Docker
    • Deploy in Heroku
  • Plugins
    • Middleware Plugin
    • Endpoint Plugin
  • Integrations
    • Amazon Redshift
    • TimescaleDB
    • YugabyteDB
Powered by GitBook
On this page
  • Prerequisites
  • Quick Start
  • With Docker Compose
  • First call on API

Was this helpful?

Edit on GitHub
  1. Deployment

Deploying with Docker

PreviousDeploymentNextDeploy in Heroku

Last updated 1 year ago

Was this helpful?

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

  • (version 20.10.7 or later)

  • (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

docker run -d -p 3000:3000 \
    -e PREST_PG_URL=postgres://username:password@hostname:port/dbname \
    -e PREST_DEBUG=true \
    prest/prest:v1

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_URL env 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:

docker run -d --net=host -p 3000:3000 \
    -e PREST_PG_URL=...

With Docker Compose

{{< emgithub "https://github.com/prest/prest/blob/main/docker-compose-prod.yml" >}}

Download docker compose file

wget https://raw.githubusercontent.com/prest/prest/main/docker-compose-prod.yml -O docker-compose.yml

Up (run) PostgreSQL and prestd

docker-compose up

Run data migration to create user structure for access (JWT)

docker-compose exec prest prestd migrate up auth

Create user and password for API access (via JWT)

  • user: prest

  • pass: prest

docker-compose exec postgres psql -d prest -U prest -c "INSERT INTO prest_users (name, username, password) VALUES ('pREST Full Name', 'prest', MD5('prest'))"

Check if the user was created successfully (by doing a select on the table)

docker-compose exec postgres psql -d prest -U prest -c "select * from prest_users"

First call on API

Example using curl:

curl -i -X GET http://127.0.0.1:3000/databases -H "Content-Type: application/json"

Additionally you can:

# Generate JWT Token with user and password created
curl -i -X POST http://127.0.0.1:3000/auth -H "Content-Type: application/json" -d '{"username": "prest", "password": "prest"}'
# Access endpoint using JWT Token
curl -i -X GET http://127.0.0.1:3000/prest/public/prest_users -H "Accept: application/json" -H "Authorization: Bearer {TOKEN}"

if you are using another operating system we recommend reading the , on macOS and Windows it is different.

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 .

Docker
Docker-Compose
docker network documentation
list of features