These are some scripts that I've built up while using Docker and Google Cloud. Others may find them helpful.
./scripts/build # will build the Dockerfile in the current directory named by name/version from package.json
./scripts/start # will start the image with the current name/version from package.json
./scripts/run-local # this runs your project without creating a container
./scripts/push # the image is prefixed with your current GCE project - this will deploy it to GCE
./scripts/restart # restart the image
./scripts/stop # stop the image
./scripts/manual # will start the image with a bash terminalCreate a tmp/ENV file with the following format:
PORT=4200
NODE_ENV=developmentThis will be used in scripts/start and scripts/run-local.
You should have the gcloud cli already installed, authenticated, and pointed at a project. gcloud will be called by these scripts to determine naming and to run the deploy.
The scripts use the version number from package.json in your home directory. So run NPM init to get one.
npm initYou can clone the scripts:
git clone https://github.com/TorchlightSoftware/docker-gce-build.git scriptsOr add them as a submodule to your project:
git submodule add https://github.com/TorchlightSoftware/docker-gce-build.git scriptsYou'll probably end up making project specific changes to the start and manual scripts. I don't have a good solution for that. These scripts should probably be turned into some kind of build tool with a config file. This is just a quick and dirty implementation that works for me.
Feel free to throw out a pull request or issue if you can think of a better way.
Here is a suggestion for how to load the ENV file into a test environment for Node.js/mocha.
Put this in test/mocha.opts:
-r test/helpers/loadEnv.jsPut this in test/helpers/loadEnv.js:
const fs = require('fs')
const {join} = require('path')
const env = fs.readFileSync(join(__dirname, '../../tmp/ENV'), 'utf8')
console.log(env)
env.split('\n')
.map((a) => a.split('='))
.map(([name, value]) => (name && value) ? process.env[name] = value : null)
// override with test env settings
process.env.NODE_ENV = 'test'
process.env.PORT = 3010