Skip to content

Producters/docker-node-react-starter

Repository files navigation

docker-node-react-starter

This is a starter project for a node + react app that uses docker for dev enironment.
Docker and docker-compose is all you need to develop, build & deploy, run development or production mode with a single command.

stack

  • stylus
  • react
  • redux
  • sequelize

get started

Get latest docker (1.11+) & docker-compose (1.7+):
https://www.docker.com/
https://docs.docker.com/compose/

Pull seed to your project:

git init git remote add starter git@github.com:Producters/docker-node-react-starter.git git pull starter master

Start dev server:

./bin/develop.sh

Wait for docker to set up dev env, then open http://localhost:8000

production mode

# build production images, create db backup & start ./bin/deploy.sh # stop server ./bin/stop_production.sh # start srever ./bin/start_production.sh

In prod mode sources are added to docker image rather than mounted from host. Nginx serves static files, proxy pass to node for app. Logs in logs dir.

enable ssl

Copy your .key and .crt files to nginx/ssl and run ./bin/deploy.sh.

install dependencies

# frontend ./bin/npm_frontend.sh install [package] --save-dev # backend ./bin/npm_backend.sh install [package] --save

database management

# open psql session ./bin/psql.sh # create a backup in backups dir ./bin/backup.sh # restore from a backup in backups dir (server must be stopped) ./bin/restore.sh backups/somebackup.bak

layout

bin/ - various utility scripts docker-compose.yml - base docker compose config docker-compose.overrides.yml - development docker compose config docker-compose.production.yml - production docker compose config frontend/ - frontend stuff frontend/package.json - npm package file with frotnend dependencies frontend/src/js/ - javascript code frontend/src/js/index.js - js entry point. include other js deps here frontend/src/style/ - stylesheets frontend/src/style/index.styl - stylesheet entry point. include other styl files here backend/ - backend stuff backend/lib/ - node app backend/lib/index.js - entry point backend/lib/models/ - sequelize model definitions backend/lib/migrations/ - sequelize migrations backend/config/ - config backend/config/default.json - config defaults backend/views/ - pug templates backend/Dockerfile - production build dockerfile backend/media/ - user uploads @TODO backend/package.json - npm pacakge file with backend & test depos backend/nightwatch.json - nigthwatch config backend/tests/specs/* - nightwatch test specs logs/ - in prod mode app, nginx logs go here nginx/ - nginx stuff for prod mode nginx/ssl/ - put key & cert here if you use ssl nginx/nginx_nossl.conf - nginx conf if no ssl is used nginx/nginx_ssl.conf - nginx conf for deploy with ssl 

config

Config files for backend are located at config/*.json.
If config/[NODE_ENV].json exists, values are loaded from it first. Then defaults are filled in from config/default.json;

logging

Winston is used for logging. Loggers and transport are configured via config files, see config/default.json.

import logger, {getLogger} from 'winston'; //default logger logger.info('logging to default'); logger.error('bad thing happened'); //custom logger, define transports in config let netlogger = getLogger('network'); netlogger.info('network stuff');

migrations

# create new migration ./bin/sequelize.sh migration:create --name some_migration # run migrations ./bin/sequelize.sh db:migrate

tests

e2e tests are implemented using nightwatch.js. Test specs are located at backend/tests/specs/

#run tests ./bin/test.sh # skip frontend build (eg, running tests repeatedly) ./bin/test.sh --skipbuild # keep selenium, vnc server & database running after tests end  # for fast next run & to keep vnc from disconnecting if debuggin ./bin/test.sh --dontstop # run a particular test file only ./bin/test.sh -- --test tests/specs/auth.js # run particular test case only ./bin/test.sh -- --test tests/specs/auth.js --testcase 'User can login via auth0' 

To debug tests it's possible to vnc into selenium container while its running at localhost:5900 and view the browser. Password is secret.

sudo apt-get install vinagre # vnc client vinagre localhost:5900

About

starter project for node + react apps

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published