From 587abb9b49937d7d19df363e4fdababb14032ced Mon Sep 17 00:00:00 2001 From: Jon Jaques <637410+jonjaques@users.noreply.github.com> Date: Tue, 22 Dec 2020 13:14:21 -0600 Subject: [PATCH] Fixes docker-compose & pg initialization (#10) * Fixes docker-compose & pg initialization - ./scripts/init_db.sh is not executable (/bin/bash: bad interpreter: Permission denied) - same script fails because user is already created, only table creation is necessary. * Actually fix docker-compose development workflow * Incorporate PR feedback * Remove credentials.json --- Dockerfile | 6 ++++-- credentials.js | 7 +++++++ credentials.json | 7 ------- docker-compose.yml | 15 ++++++++------- scripts/init_db.sh | 20 ++++++++------------ scripts/seed.js | 2 +- server/api.server.js | 2 +- src/db.server.js | 2 +- 8 files changed, 30 insertions(+), 31 deletions(-) create mode 100644 credentials.js delete mode 100644 credentials.json mode change 100644 => 100755 scripts/init_db.sh diff --git a/Dockerfile b/Dockerfile index d1702b1..e66e3aa 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,10 +1,12 @@ FROM node:14.15.3 -RUN mkdir -p /opt/notes-app WORKDIR /opt/notes-app COPY package.json package-lock.json ./ RUN npm install -CMD ["npm", "run", "start"] +COPY . . + +ENTRYPOINT [ "npm", "run" ] +CMD [ "start" ] diff --git a/credentials.js b/credentials.js new file mode 100644 index 0000000..edc6d3d --- /dev/null +++ b/credentials.js @@ -0,0 +1,7 @@ +module.exports = { + host: process.env.DB_HOST || 'localhost', + database: 'notesapi', + user: 'notesadmin', + password: 'password', + port: '5432', +}; diff --git a/credentials.json b/credentials.json deleted file mode 100644 index ce1b82d..0000000 --- a/credentials.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "host": "localhost", - "database": "notesapi", - "user": "notesadmin", - "password": "password", - "port": "5432" -} diff --git a/docker-compose.yml b/docker-compose.yml index de0f1d9..97261e5 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -19,14 +19,15 @@ services: - postgres ports: - '4000:4000' - network_mode: host + environment: + DB_HOST: postgres volumes: - - ./notes:/opt/notes-app/notes - - ./public:/opt/notes-app/public - - ./scripts:/opt/notes-app/scripts - - ./server:/opt/notes-app/server - - ./src:/opt/notes-app/src - - ./credentials.json:/opt/notes-app/credentials.json + - ./notes:/opt/notes-app/notes + - ./public:/opt/notes-app/public + - ./scripts:/opt/notes-app/scripts + - ./server:/opt/notes-app/server + - ./src:/opt/notes-app/src + - ./credentials.js:/opt/notes-app/credentials.js volumes: db: diff --git a/scripts/init_db.sh b/scripts/init_db.sh old mode 100644 new mode 100755 index 1357f82..b6e1a2f --- a/scripts/init_db.sh +++ b/scripts/init_db.sh @@ -2,16 +2,12 @@ set -e psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL - CREATE ROLE notesadmin WITH LOGIN PASSWORD 'password'; - ALTER ROLE notesadmin WITH SUPERUSER; - ALTER DATABASE notesapi OWNER TO notesadmin; - - DROP TABLE IF EXISTS notes; - CREATE TABLE notes ( - id SERIAL PRIMARY KEY, - created_at TIMESTAMP NOT NULL, - updated_at TIMESTAMP NOT NULL, - title TEXT, - body TEXT - ); + DROP TABLE IF EXISTS notes; + CREATE TABLE notes ( + id SERIAL PRIMARY KEY, + created_at TIMESTAMP NOT NULL, + updated_at TIMESTAMP NOT NULL, + title TEXT, + body TEXT + ); EOSQL diff --git a/scripts/seed.js b/scripts/seed.js index b868431..cf8462f 100644 --- a/scripts/seed.js +++ b/scripts/seed.js @@ -13,7 +13,7 @@ const path = require('path'); const {Pool} = require('pg'); const {readdir, unlink, writeFile} = require('fs/promises'); const startOfYear = require('date-fns/startOfYear'); -const credentials = require('../credentials.json'); +const credentials = require('../credentials'); const NOTES_PATH = './notes'; const pool = new Pool(credentials); diff --git a/server/api.server.js b/server/api.server.js index 7e86ed2..40d178f 100644 --- a/server/api.server.js +++ b/server/api.server.js @@ -29,7 +29,7 @@ const React = require('react'); const ReactApp = require('../src/App.server').default; // Don't keep credentials in the source tree in a real app! -const pool = new Pool(require('../credentials.json')); +const pool = new Pool(require('../credentials')); const PORT = 4000; const app = express(); diff --git a/src/db.server.js b/src/db.server.js index 8019b80..45aedab 100644 --- a/src/db.server.js +++ b/src/db.server.js @@ -7,7 +7,7 @@ */ import {Pool} from 'react-pg'; -import credentials from '../credentials.json'; +import credentials from '../credentials'; // Don't keep credentials in the source tree in a real app! export const db = new Pool(credentials);