From 4c7a2d9d87086389519b7fea7b80175befd5a505 Mon Sep 17 00:00:00 2001 From: beekley Date: Fri, 21 Feb 2020 08:06:42 -0800 Subject: [PATCH 1/7] Initial docker setup --- Dockerfile | 15 +++++++++++++++ docker-compose.yml | 26 +++++++++++++++++++++++++- entrypoint.sh | 7 +++++++ index.js | 2 +- 4 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 Dockerfile create mode 100755 entrypoint.sh diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..08568c0 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,15 @@ +FROM node:10-slim + +# From: https://stackoverflow.com/a/52092711 +# Create and define the node_modules's cache directory. +RUN mkdir /usr/src/cache +WORKDIR /usr/src/cache + +# Install the application's dependencies into the node_modules's cache directory. +COPY package.json ./ +COPY package-lock.json ./ +RUN npm install + +# Create and define the application's working directory. +RUN mkdir /usr/src/app +WORKDIR /usr/src/app diff --git a/docker-compose.yml b/docker-compose.yml index ceee4f9..f6eb530 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,6 +1,21 @@ -version: '2' +# version: '2' +# Define Docker Compose version. +version: "3" +# Define all the containers. services: + # Webapp-dev Container. + webapp-dev: + build: ./ + volumes: + - ./:/usr/src/app + ports: + - 8080:8080 + environment: + NODE_ENV: development + command: /usr/src/app/entrypoint.sh + +# services: mongo: image: mongo ports: @@ -9,3 +24,12 @@ services: - MONGO_INITDB_DATABASE=hellogov volumes: - ./data/db:/data/db + # webapp-dev: + # build: . + # ports: + # - "8080:8081" + # # working_dir: /src/webapp + # volumes: + # - .:/src/webapp + # # - ./node_modules:/src/webapp/node_modules + # command: npm run start-dev diff --git a/entrypoint.sh b/entrypoint.sh new file mode 100755 index 0000000..518a8f9 --- /dev/null +++ b/entrypoint.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +# Copy container-built node_modules. +# From: https://stackoverflow.com/a/52092711 + +cp -r /usr/src/cache/node_modules/. /usr/src/app/node_modules/ +exec npm run start-dev diff --git a/index.js b/index.js index ac54100..f62d1c5 100644 --- a/index.js +++ b/index.js @@ -24,7 +24,7 @@ var routes = require('./app/routes'); var app = express(); const currentEnv = app.get('env'); -const localMongoUri = `mongodb://localhost:27017/hellogov`; +const localMongoUri = `mongodb://mongo:27017/hellogov`; const mongoUri = `mongodb://${config.dbUser}:${config.dbPassword}@${config.db}-shard-00-00-5sypa.mongodb.net:27017,${config.db}-shard-00-01-5sypa.mongodb.net:27017,${config.db}-shard-00-02-5sypa.mongodb.net:27017/${config.db}-${config.dbStage}?ssl=true&replicaSet=helloGov-shard-0&authSource=admin&retryWrites=true`; if (currentEnv === 'development') { From bc3ded16e4bfdb849f3d02c547a4da26152d0427 Mon Sep 17 00:00:00 2001 From: beekley Date: Fri, 21 Feb 2020 18:53:57 -0800 Subject: [PATCH 2/7] Reorganize config to support docker --- conf/config.js | 24 ++++++++++++------------ conf/envs/dev-docker.js | 8 ++++++++ conf/envs/development.js | 4 +++- entrypoint.sh | 2 +- index.js | 25 +++++-------------------- package.json | 1 + 6 files changed, 30 insertions(+), 34 deletions(-) create mode 100644 conf/envs/dev-docker.js diff --git a/conf/config.js b/conf/config.js index b647663..ebecb17 100644 --- a/conf/config.js +++ b/conf/config.js @@ -1,18 +1,6 @@ require('dotenv').config(); const currentEnv = process.env.NODE_ENV; -let config = { - marketingSiteUrl: 'http://hellogov.squarespace.com', - marketingPages: ['/request-beta-access', '/faq'], - dbIP: "127.0.0.1", - dbPort: '27017', - fbCallbackUrl: 'http://localhost:8080/auth/facebook/callback', - appPort: '8080', - hellogovDomain: `http://localhost:8080`, - supportEmail: 'hellogovapp@gmail.com', - noReplyEmail: 'no-reply@hellogov.app' -}; - let secrets = { dbLocalUser: `${process.env.LOCAL_DB_USER}`, dbLocalPassword: `${process.env.LOCAL_DB_PASSWORD}`, @@ -30,6 +18,18 @@ let secrets = { googleCivicInfoApiKey: `${process.env.GOOGLE_CIVIC_INFO_API_KEY}` }; +let config = { + marketingSiteUrl: 'http://hellogov.squarespace.com', + marketingPages: ['/request-beta-access', '/faq'], + mongoUri: `mongodb://${secrets.dbUser}:${secrets.dbPassword}@${secrets.db}-shard-00-00-5sypa.mongodb.net:27017,${secrets.db}-shard-00-01-5sypa.mongodb.net:27017,${secrets.db}-shard-00-02-5sypa.mongodb.net:27017/${secrets.db}-${secrets.dbStage}?ssl=true&replicaSet=helloGov-shard-0&authSource=admin&retryWrites=true`, + mongoOptions: { useNewUrlParser: true }, + fbCallbackUrl: 'http://localhost:8080/auth/facebook/callback', + appPort: '8080', + hellogovDomain: `http://localhost:8080`, + supportEmail: 'hellogovapp@gmail.com', + noReplyEmail: 'no-reply@hellogov.app' +}; + const getEnvConfig = function() { return require(`./envs/${currentEnv}`); }; diff --git a/conf/envs/dev-docker.js b/conf/envs/dev-docker.js new file mode 100644 index 0000000..9b153ee --- /dev/null +++ b/conf/envs/dev-docker.js @@ -0,0 +1,8 @@ +let config = { + protocol: 'http', + hostname: `localhost:8080`, + mongoUri: 'mongodb://mongo:27017/hellogov', + mongoOptions: {} +}; + +module.exports = config; diff --git a/conf/envs/development.js b/conf/envs/development.js index cb6317f..e5ddcbc 100644 --- a/conf/envs/development.js +++ b/conf/envs/development.js @@ -1,6 +1,8 @@ let config = { protocol: 'http', - hostname: `localhost:8080` + hostname: 'localhost:8080', + mongoUri: 'mongodb://localhost:27017/hellogov', + mongoOptions: {} }; module.exports = config; diff --git a/entrypoint.sh b/entrypoint.sh index 518a8f9..bcfc6d4 100755 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -4,4 +4,4 @@ # From: https://stackoverflow.com/a/52092711 cp -r /usr/src/cache/node_modules/. /usr/src/app/node_modules/ -exec npm run start-dev +exec npm run start-docker diff --git a/index.js b/index.js index f62d1c5..d80d612 100644 --- a/index.js +++ b/index.js @@ -23,15 +23,7 @@ var routes = require('./app/routes'); var app = express(); -const currentEnv = app.get('env'); -const localMongoUri = `mongodb://mongo:27017/hellogov`; -const mongoUri = `mongodb://${config.dbUser}:${config.dbPassword}@${config.db}-shard-00-00-5sypa.mongodb.net:27017,${config.db}-shard-00-01-5sypa.mongodb.net:27017,${config.db}-shard-00-02-5sypa.mongodb.net:27017/${config.db}-${config.dbStage}?ssl=true&replicaSet=helloGov-shard-0&authSource=admin&retryWrites=true`; - -if (currentEnv === 'development') { - mongoose.connect(localMongoUri); -} else { - mongoose.connect(mongoUri, { useNewUrlParser: true }); -} +mongoose.connect(config.mongoUri, config.mongoOptions); mongoose.connection.on('error', function (err) { console.log('Mongo connection error', err.message); }); @@ -39,17 +31,10 @@ mongoose.connection.once('open', function callback() { console.log('Connected to MongoDB'); }); -if (currentEnv === 'production') { - var sessionStore = new MongoStore({ - url: `${mongoUri}`, - touchAfter: 0 - }); -} else { - var sessionStore = new MongoStore({ - url: localMongoUri, - touchAfter: 0 - }); -} +var sessionStore = new MongoStore({ + url: config.mongoUri, + touchAfter: 0 +}); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: true })); diff --git a/package.json b/package.json index ef2ed2f..50a3cde 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ "seed": "mongoimport -c users --uri mongodb://localhost:27017/hellogov --drop --file conf/seeds.json", "start": "NODE_ENV=production node index.js", "start-dev": "NODE_ENV=development nodemon index.js", + "start-docker": "NODE_ENV=dev-docker nodemon index.js", "stop-db": "pgrep mongod | xargs kill -2", "start-db": "mongod --port 27017 --dbpath /data/db --fork --logpath /usr/local/var/log/mongodb/mongod.log", "restart-db": "npm run stop-db && npm run start-db", From 333e213310518c77669d46bff0a661c5dc70054c Mon Sep 17 00:00:00 2001 From: beekley Date: Fri, 21 Feb 2020 19:01:38 -0800 Subject: [PATCH 3/7] Update readme to use docker --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index dca80e7..1a37a65 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # HelloGOV -[HelloGOV](https://www.hellogov.app/) is a project of [Hack for LA](http://hackforla.org/), a Code for America brigade. This project seeks to make it easy to add a call-to-rep tool to social posts, including state senates and assemblies, and federal legislators. +[HelloGOV](https://www.hellogov.app/) is a project of [Hack for LA](http://hackforla.org/), a Code for America brigade. This project seeks to make it easy to add a call-to-rep tool to social posts, including state senates and assemblies, and federal legislators. Our primary users are small grassroots organizations who run their own state legislature-level campaigns to advocate on issues most important to their work. Know an org that might be interested in testing? Get in touch with us on the Hack For LA Slack. @@ -64,7 +64,7 @@ You only have to do this once. ``` - start the application ``` - $ npm run start-dev + $ docker-compose up webapp-dev ``` ### Populate the seed data From dca316bb408d176004b80435b52a1aed544f33dc Mon Sep 17 00:00:00 2001 From: beekley Date: Mon, 24 Feb 2020 07:48:00 -0800 Subject: [PATCH 4/7] Clean up docker config to make it one command to start --- README.md | 2 +- docker-compose.yml | 33 ++++++++++++--------------------- entrypoint.sh | 1 + 3 files changed, 14 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index 1a37a65..47f060e 100644 --- a/README.md +++ b/README.md @@ -64,7 +64,7 @@ You only have to do this once. ``` - start the application ``` - $ docker-compose up webapp-dev + $ docker-compose up app-dev ``` ### Populate the seed data diff --git a/docker-compose.yml b/docker-compose.yml index f6eb530..a1b80a7 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,11 +1,21 @@ -# version: '2' # Define Docker Compose version. version: "3" # Define all the containers. services: + mongo: + image: mongo + ports: + - "27017:27017" + environment: + - MONGO_INITDB_DATABASE=hellogov + volumes: + - ./data/db:/data/db + # Webapp-dev Container. - webapp-dev: + app-dev: + depends_on: + - mongo build: ./ volumes: - ./:/usr/src/app @@ -14,22 +24,3 @@ services: environment: NODE_ENV: development command: /usr/src/app/entrypoint.sh - -# services: - mongo: - image: mongo - ports: - - "27017:27017" - environment: - - MONGO_INITDB_DATABASE=hellogov - volumes: - - ./data/db:/data/db - # webapp-dev: - # build: . - # ports: - # - "8080:8081" - # # working_dir: /src/webapp - # volumes: - # - .:/src/webapp - # # - ./node_modules:/src/webapp/node_modules - # command: npm run start-dev diff --git a/entrypoint.sh b/entrypoint.sh index bcfc6d4..1b1aa89 100755 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -4,4 +4,5 @@ # From: https://stackoverflow.com/a/52092711 cp -r /usr/src/cache/node_modules/. /usr/src/app/node_modules/ +# exec npm run build exec npm run start-docker From 2228ac794ba78096ef13abb15933a02418c7fc44 Mon Sep 17 00:00:00 2001 From: beekley Date: Mon, 9 Mar 2020 19:31:08 -0700 Subject: [PATCH 5/7] Remove logs from git --- .gitignore | 5 ++++- e2e/Dockerfile | 4 ++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index a05a4d3..4aededf 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,9 @@ public/build/** !.gitkeep .tern-project +# Logs +logs + # Mounted MongoDB data data @@ -21,4 +24,4 @@ data # testing assets *.mp4 -screenshots/**/*.png \ No newline at end of file +screenshots/**/*.png diff --git a/e2e/Dockerfile b/e2e/Dockerfile index cd85edd..24dba74 100644 --- a/e2e/Dockerfile +++ b/e2e/Dockerfile @@ -1,8 +1,8 @@ FROM cypress/base:10 -# Optionally pass proxy information to get internet connectivity within npm ci +# Optionally pass proxy information to get internet connectivity within npm ci # postinstall hooks when running behind corparate proxies. -ARG http_proxy +ARG http_proxy ARG https_proxy ARG no_proxy From 16cc5d8e81b6d712e8fb5cafadb4f83ecae10905 Mon Sep 17 00:00:00 2001 From: beekley Date: Mon, 9 Mar 2020 19:31:58 -0700 Subject: [PATCH 6/7] Remove logs --- logs/2020-2-24.log | 4 ---- logs/2020-2-24_error.log | 8 -------- logs/combined.log | 4 ---- logs/error.log | 2 -- 4 files changed, 18 deletions(-) delete mode 100644 logs/2020-2-24.log delete mode 100644 logs/2020-2-24_error.log delete mode 100644 logs/combined.log delete mode 100644 logs/error.log diff --git a/logs/2020-2-24.log b/logs/2020-2-24.log deleted file mode 100644 index 58fce9f..0000000 --- a/logs/2020-2-24.log +++ /dev/null @@ -1,4 +0,0 @@ -{"message":"test info log!","level":"error","service":"user-service"} -{"message":"test info log!","level":"error","service":"user-service"} -{"message":"test info log!","level":"error","service":"user-service"} -{"message":"test info log!","level":"error","service":"user-service"} diff --git a/logs/2020-2-24_error.log b/logs/2020-2-24_error.log deleted file mode 100644 index db513e6..0000000 --- a/logs/2020-2-24_error.log +++ /dev/null @@ -1,8 +0,0 @@ -{"message":"test info log!","level":"info","service":"user-service"} -{"message":"test info log!","level":"error","service":"user-service"} -{"message":"test info log!","level":"info","service":"user-service"} -{"message":"test info log!","level":"error","service":"user-service"} -{"message":"test info log!","level":"info","service":"user-service"} -{"message":"test info log!","level":"error","service":"user-service"} -{"message":"test info log!","level":"info","service":"user-service"} -{"message":"test info log!","level":"error","service":"user-service"} diff --git a/logs/combined.log b/logs/combined.log deleted file mode 100644 index 04bbc66..0000000 --- a/logs/combined.log +++ /dev/null @@ -1,4 +0,0 @@ -{"message":"test info log!","level":"info","service":"user-service"} -{"message":"test info log!","level":"error","service":"user-service"} -{"message":"test info log!","level":"info","service":"user-service"} -{"message":"test info log!","level":"error","service":"user-service"} diff --git a/logs/error.log b/logs/error.log deleted file mode 100644 index a07ecc7..0000000 --- a/logs/error.log +++ /dev/null @@ -1,2 +0,0 @@ -{"message":"test info log!","level":"error","service":"user-service"} -{"message":"test info log!","level":"error","service":"user-service"} From ff98f6a76f192af6cd5ee0753a5c0aefbfd4a918 Mon Sep 17 00:00:00 2001 From: beekley Date: Mon, 9 Mar 2020 19:36:36 -0700 Subject: [PATCH 7/7] Fix service name --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 489ae9e..ebf10e1 100644 --- a/README.md +++ b/README.md @@ -65,7 +65,7 @@ You only have to do this once. ``` - start the application ``` - $ docker-compose up app-dev + $ docker-compose up webapp ``` ### Populate the seed data