44

PNGR – Docker-compose for a Postgres-Nginx-Golang-React stack

 4 years ago
source link: https://github.com/karlkeefer/pngr
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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.

Features

alpine

Requirements

  • Install docker && docker-compose

Quick Start

  1. sudo 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:

rI3mEjY.png!web

Rebuilding your dev environment

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

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

Deploying to Production

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

Everyone's production deployment will look different, but some thoughts:

  • P Consider running an actual postgres instance. Running a production database in docker makes me sweat.
  • N Look at nginx/nginx.prod.conf for ideas on what a production configuration might look like.
  • G Use golang/Dockerfile.prod
  • R Use react/Dockerfile.prod
    • e.g. From project root you can run sudo docker build -t react-prod -f react/Dockerfile.prod react
    • Test it out with sudo docker run --net=host react-prod then hit http://localhost in your browser

Postgres

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.

sudo postgres/new-migration.sh my_migration_name
sudo postgres/run-migrations.sh

You can do more advanced migrate commands

Opening a psql client

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

Nginx

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.

Golang

Almost-vanilla golang api:

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

React

The basic building blocks of the front-end are:


Recommend

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK