Dockerized (postgres nginx golang react) starter kit
Only implements basic user signup, session management, and a toypost
type to demonstrate basic CRUD. PNGR isnota CMS.
Features
- Hot-reload, front and back, including a test-runner for golang changes
- JSON Web-Token cookies with automatic refresh: ready for horizontal scaling
- Uses
alpine
images for small footprint - Feature development is up to you!
Requirements
- Install docker && docker-compose
Quick Start
sudo docker-compose up
- Visit
https: // localhost
( (note) https) - Approve the self-signed cert
- Make changes to either golang or react code, and enjoy hot-reload goodness!
Preview 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.
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.
- NLook at
nginx / nginx.prod.conf
for ideas on what a production configuration might look like. - GUse
golang / Dockerfile.prod
- RUse
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 hithttp: // localhost
in your browser
- e.g. From project root you can run
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
will create a template for the next migration.sudo postgres / run-migrations.sh
will execute any new Migrations
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-gpfor JSON Web Tokens
- (sqlx) for better postgres interface
React
The basic building blocks of the front-end are:
- Create React App(unejected!)
- React Router
- (Unstated) for state management
- Semantic UI Reactfor component library
GIPHY App Key not set. Please check settings