Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?


Failed to load latest commit information.
Latest commit message
Commit time

PNGR Stack 🏓


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

Only implements users, sessions, password_resets, and a toy post type to demonstrate basic CRUD. PNGR is not a CMS.

Features and Stack

  • Hot-reload, front and back, including a test-runner for golang changes



Other goodies

Feature development is up to you!


Install docker && docker-compose

Quick Start

# clone the repo
git clone my_project_name

# copy the .env template for your local version
cp .env.example .env

# build and start the containers
docker-compose up
  1. Visit http://localhost:4500
  2. Make changes to go, sql, or react code, and enjoy hot-reload goodness!

Database Helpers


Migrations are created and run using simple wrappers around go-migrate.

# create files for a new migration
postgres/new my_migration_name

# execute any new migrations (this is also run automatically the container is created)
postgres/migrate up

# go down 1 migration
postgres/migrate down 1

# goto a migration by index
postgres/migrate goto 3

Open a psql client

# remember to use \q to exit

Rebuild everything, including database(!), from scratch

Maybe your postgres went sideways from a wonky migration and it's easier to restart from scratch.

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

Run in Production

Warning: Run in production at your own risk! is designed for a setup where postgresql is not dockerized.

Don't forget to copy .env.example -> .env and setup your secrets/passwords for the new environment! At minimum, you'll need to change ENV, APP_ROOT, and TOKEN_SECRET!

# build production images, and run them in a detached state
docker-compose -f up --build -d

Note: using your production server as your build server is a bad idea, so you should consider using a registry...

Using CI

You can modify the github action to push built containers to a container registry. The containers are tagged with the commit SHA by default.

You will also need to update to point to your container registry.

# pull containers from a registry using a tag, then run them in a detached state
SHA=2c25e862e0f36e0fc17c1703e4f319f0d9d04520 docker-compose -f up -d