Skip to content
dockerized (postgres + nginx + golang + react)
Go JavaScript Shell Dockerfile HTML TSQL CSS
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.

PNGR Stack

Dockerized (postgres + nginx + golang + react) starter kit

Only implements basic user signup, session management, and a toy post type to demonstrate basic CRUD. PNGR is not a CMS.


  • Hot-reload, front and back, including a test-runner for golang changes
  • JSON Web-Token cookies with automatic refresh: ready for horizontal scaling
  • Uses multi-stage builds for small production images
  • Feature development is up to you!


  • Install docker && docker-compose

Quick Start

  1. docker-compose up
  2. Visit https://localhost (note https)
  3. Approve the self-signed cert
  4. Make changes to either golang or react code, and enjoy hot-reload goodness!

Preview of the app:

Screenshot of the app

Rebuilding your dev environment

Maybe your postgres went sideways from a wonky migration and you don't want to muck with fixing it.

docker-compose down -v && docker-compose up --build --force-recreate

Deploying to Production

Warning: Run in production at your own risk - this code is not security hardened!

You should install postgresql on the host. Then you can use to build lean images to use in production. Don't forget to copy .env.example -> .env and setup your secrets/passwords.


Some tips for working with your postgres docker instance

Creating and running migrations

Migrations are run using go-migrate.

I put together little bash scripts to help you get stuff done.

  • postgres/ my_migration_name will create a template for the next migration
  • postgres/ will execute any new migrations (this is used when the container is created)
  • postgres/ makes it easy to run arbitrary go-migrate commands (e.g. postgres/ down 1)

You can do more advanced migrate commands

Opening a psql client

docker-compose exec postgres psql -U postgres Remember to use \q to exit.


Nginx is simply used to route requests to the front-end and back-end based on path. It also terminates SSL so that we don't have to deal with certs in our app layer.


Almost-vanilla golang api:

  • Makes use of go modules for dependencies
  • jwt-go for JSON Web Tokens
  • sqlx for better postgres interface


The basic building blocks of the front-end are:

You can’t perform that action at this time.