From 5148562eb7c44e30d06c67b09c30202cd21e3156 Mon Sep 17 00:00:00 2001 From: Rodrigo Date: Fri, 18 Aug 2017 10:28:50 -0300 Subject: [PATCH 1/4] scripts to create database and server --- package.json | 2 ++ server/config/index.js | 2 +- .../{postgres => connection}/knexfile.js | 0 server/datastore/create/knexfile.js | 16 ++++++++++++++++ server/datastore/create/seeds/01.db.js | 3 +++ server/datastore/create/seeds/02.user.js | 3 +++ server/datastore/create/seeds/03.grant.js | 3 +++ server/datastore/server/docker-compose.yml | 14 ++++++++++++++ server/datastore/stores/base.store.js | 2 +- server/package.json | 12 +++++++----- 10 files changed, 50 insertions(+), 7 deletions(-) rename server/datastore/{postgres => connection}/knexfile.js (100%) create mode 100644 server/datastore/create/knexfile.js create mode 100644 server/datastore/create/seeds/01.db.js create mode 100644 server/datastore/create/seeds/02.user.js create mode 100644 server/datastore/create/seeds/03.grant.js create mode 100644 server/datastore/server/docker-compose.yml diff --git a/package.json b/package.json index b684487..c04e696 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,8 @@ "coveralls": "npm run test:coverage && cat ./client/coverage/lcov.info | coveralls", "tdd": "cd client && npm run tdd", "serve": "npm run build && http-server build/ -p 8081", + "database:docker-server": "cd server && npm run database:docker-server", + "database:create": "cd server && npm run database:create", "migrate:make": "cd server && npm run migrate:make", "migrate:latest": "cd server && npm run migrate:latest", "migrate:rollback": "cd server && npm run migrate:rollback", diff --git a/server/config/index.js b/server/config/index.js index dfb650c..e4928c2 100644 --- a/server/config/index.js +++ b/server/config/index.js @@ -1,6 +1,6 @@ const commonConfig = { database: { - connectionString: process.env.DATABASE_URL || 'postgres://postgres:Password.01@localhost:5432/reactseeddb' + connectionString: process.env.DATABASE_URL || 'postgres://pg:pg@localhost:5432/reactseeddb' }, port: 3000, sslPort: 4443 diff --git a/server/datastore/postgres/knexfile.js b/server/datastore/connection/knexfile.js similarity index 100% rename from server/datastore/postgres/knexfile.js rename to server/datastore/connection/knexfile.js diff --git a/server/datastore/create/knexfile.js b/server/datastore/create/knexfile.js new file mode 100644 index 0000000..cf28509 --- /dev/null +++ b/server/datastore/create/knexfile.js @@ -0,0 +1,16 @@ +const path = require('path'); + +const connection = { + client: 'postgresql', + connection: { + host: 'localhost', + user: 'postgres', + password: 'sa.pg.01', + database: 'postgres' + }, + seeds: { + directory: path.resolve(__dirname, './seeds') + } +}; + +module.exports = connection; diff --git a/server/datastore/create/seeds/01.db.js b/server/datastore/create/seeds/01.db.js new file mode 100644 index 0000000..d7e7b7a --- /dev/null +++ b/server/datastore/create/seeds/01.db.js @@ -0,0 +1,3 @@ +exports.seed = function(knex) { + return knex.raw('CREATE DATABASE reactseeddb'); +}; diff --git a/server/datastore/create/seeds/02.user.js b/server/datastore/create/seeds/02.user.js new file mode 100644 index 0000000..b43d9a8 --- /dev/null +++ b/server/datastore/create/seeds/02.user.js @@ -0,0 +1,3 @@ +exports.seed = function(knex) { + return knex.raw('CREATE USER pg WITH PASSWORD \'pg\''); +}; diff --git a/server/datastore/create/seeds/03.grant.js b/server/datastore/create/seeds/03.grant.js new file mode 100644 index 0000000..d3572f6 --- /dev/null +++ b/server/datastore/create/seeds/03.grant.js @@ -0,0 +1,3 @@ +exports.seed = function(knex) { + return knex.raw('GRANT ALL ON DATABASE reactseeddb TO pg'); +}; diff --git a/server/datastore/server/docker-compose.yml b/server/datastore/server/docker-compose.yml new file mode 100644 index 0000000..d981bed --- /dev/null +++ b/server/datastore/server/docker-compose.yml @@ -0,0 +1,14 @@ +version: '2' + +services: + postgres: + image: postgres + environment: + - POSTGRES_PASSWORD=sa.pg.01 + volumes: + - data:/var/lib/postgresql/data + ports: + - "5432:5432" + +volumes: + data: diff --git a/server/datastore/stores/base.store.js b/server/datastore/stores/base.store.js index 5e09194..3e80103 100644 --- a/server/datastore/stores/base.store.js +++ b/server/datastore/stores/base.store.js @@ -1,4 +1,4 @@ -const knexfile = require('../postgres/knexfile'); +const knexfile = require('../connection/knexfile'); const Knex = require('knex')(knexfile); const PostgresErrors = require('../constants/postgres-errors'); diff --git a/server/package.json b/server/package.json index 03ea7b3..7409c51 100644 --- a/server/package.json +++ b/server/package.json @@ -9,11 +9,13 @@ "scripts": { "start": "node index.js", "dev": "nodemon app.dev.js", - "migrate:make": "knex migrate:make --knexfile ./datastore/postgres/knexfile.js", - "migrate:latest": "knex migrate:latest --knexfile ./datastore/postgres/knexfile.js", - "migrate:rollback": "knex migrate:rollback --knexfile ./datastore/postgres/knexfile.js", - "seed:make": "knex seed:make --knexfile ./datastore/postgres/knexfile.js", - "seed:run": "knex seed:run --knexfile ./datastore/postgres/knexfile.js", + "database:docker-server": "docker-compose --file datastore/server/docker-compose.yml up -d", + "database:create": "knex seed:run --knexfile ./datastore/create/knexfile.js", + "migrate:make": "knex migrate:make --knexfile ./datastore/connection/knexfile.js", + "migrate:latest": "knex migrate:latest --knexfile ./datastore/connection/knexfile.js", + "migrate:rollback": "knex migrate:rollback --knexfile ./datastore/connection/knexfile.js", + "seed:make": "knex seed:make --knexfile ./datastore/connection/knexfile.js", + "seed:run": "knex seed:run --knexfile ./datastore/connection/knexfile.js", "test": "tape tests/*.js | tap-spec" }, "dependencies": { From 69670acd595598fc4d52831157620d849ba495b8 Mon Sep 17 00:00:00 2001 From: Rodrigo Date: Fri, 18 Aug 2017 10:29:23 -0300 Subject: [PATCH 2/4] readme to create database & server --- docs/setup.md | 18 ++++++++++++------ server/README.md | 5 ----- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/docs/setup.md b/docs/setup.md index 18d12c3..3b47ea0 100644 --- a/docs/setup.md +++ b/docs/setup.md @@ -9,16 +9,22 @@ $ yarn # or (yarn install) ``` ## Database - +You can install Postgres or run your server in a Docker container +### Postgres * Install [postgres](https://www.postgresql.org/) and [pgAdmin](https://www.pgadmin.org/) -* Create new database called *reactseeddb*. Use following credentials: - * user: `postgres` - * password: `Password.01` +* Update the `postgres` password in the `server/datastore/create/knexfile.js` * For more information about setting up the server see [official docs](https://wiki.postgresql.org/wiki/First_steps) +### Docker +* Install [Docker](https://docs.docker.com/engine/installation/) and [docker-compose](https://docs.docker.com/compose/install/) +* Run `yarn database:docker-server` to create the docker container for the SQL Server (volume to persist data will be mounted) + +Once you have configured your SQL Server, run the following commands: +* Create the `reactseeddb` database, `pg` user and grant access to database: + * `yarn database:create` * Create tables running migrations: - * `yarn run migrate:latest` + * `yarn migrate:latest` * Populate database running the seeds: - * `yarn run seed:run` + * `yarn seed:run` ## Start the app diff --git a/server/README.md b/server/README.md index cedc4d5..f42f2f5 100644 --- a/server/README.md +++ b/server/README.md @@ -39,9 +39,4 @@ yarn run seed:make yarn run seed:run ``` -## Tools and Config. - -* [PostgreSQL](https://www.postgresql.org/) -* [pgAdmin](https://www.pgadmin.org/) - ### [Setup info here](../docs/setup.md) From 6d2390919f43f372eb10eb765a3df5dc1708efab Mon Sep 17 00:00:00 2001 From: Rodrigo Date: Fri, 18 Aug 2017 11:20:45 -0300 Subject: [PATCH 3/4] clarify postgres user setup --- docs/setup.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/docs/setup.md b/docs/setup.md index 3b47ea0..017c464 100644 --- a/docs/setup.md +++ b/docs/setup.md @@ -9,16 +9,15 @@ $ yarn # or (yarn install) ``` ## Database -You can install Postgres or run your server in a Docker container +You can install Postgres or run your server in a Docker container. ### Postgres -* Install [postgres](https://www.postgresql.org/) and [pgAdmin](https://www.pgadmin.org/) -* Update the `postgres` password in the `server/datastore/create/knexfile.js` +* Install [postgres](https://www.postgresql.org/). When prompted to enter the `postgres` user password, use `sa.pg.01` or one of your choice. Make sure to update the password in `server/datastore/create/knexfile.js` if you picked a different password. * For more information about setting up the server see [official docs](https://wiki.postgresql.org/wiki/First_steps) ### Docker * Install [Docker](https://docs.docker.com/engine/installation/) and [docker-compose](https://docs.docker.com/compose/install/) * Run `yarn database:docker-server` to create the docker container for the SQL Server (volume to persist data will be mounted) -Once you have configured your SQL Server, run the following commands: +Once you have configured your Postgres server, run the following commands: * Create the `reactseeddb` database, `pg` user and grant access to database: * `yarn database:create` * Create tables running migrations: From f33720b56a03bdbdf89ae4fb73f49b6450bde12e Mon Sep 17 00:00:00 2001 From: Rodrigo Date: Fri, 18 Aug 2017 11:28:58 -0300 Subject: [PATCH 4/4] collapse database create scripts into one seed --- server/datastore/create/seeds/01.db.js | 3 --- server/datastore/create/seeds/02.user.js | 3 --- server/datastore/create/seeds/03.grant.js | 3 --- server/datastore/create/seeds/create.js | 11 +++++++++++ 4 files changed, 11 insertions(+), 9 deletions(-) delete mode 100644 server/datastore/create/seeds/01.db.js delete mode 100644 server/datastore/create/seeds/02.user.js delete mode 100644 server/datastore/create/seeds/03.grant.js create mode 100644 server/datastore/create/seeds/create.js diff --git a/server/datastore/create/seeds/01.db.js b/server/datastore/create/seeds/01.db.js deleted file mode 100644 index d7e7b7a..0000000 --- a/server/datastore/create/seeds/01.db.js +++ /dev/null @@ -1,3 +0,0 @@ -exports.seed = function(knex) { - return knex.raw('CREATE DATABASE reactseeddb'); -}; diff --git a/server/datastore/create/seeds/02.user.js b/server/datastore/create/seeds/02.user.js deleted file mode 100644 index b43d9a8..0000000 --- a/server/datastore/create/seeds/02.user.js +++ /dev/null @@ -1,3 +0,0 @@ -exports.seed = function(knex) { - return knex.raw('CREATE USER pg WITH PASSWORD \'pg\''); -}; diff --git a/server/datastore/create/seeds/03.grant.js b/server/datastore/create/seeds/03.grant.js deleted file mode 100644 index d3572f6..0000000 --- a/server/datastore/create/seeds/03.grant.js +++ /dev/null @@ -1,3 +0,0 @@ -exports.seed = function(knex) { - return knex.raw('GRANT ALL ON DATABASE reactseeddb TO pg'); -}; diff --git a/server/datastore/create/seeds/create.js b/server/datastore/create/seeds/create.js new file mode 100644 index 0000000..1d074f0 --- /dev/null +++ b/server/datastore/create/seeds/create.js @@ -0,0 +1,11 @@ +exports.seed = function(knex) { + const db = 'reactseeddb'; + const user = 'pg'; + const pass = 'pg'; + + const createDb = () => knex.raw(`CREATE DATABASE ${db}`); + const createUser = () => knex.raw(`CREATE USER ${user} WITH PASSWORD '${pass}'`); + const grantUserToDb = () => knex.raw(`GRANT ALL ON DATABASE ${db} TO ${user}`); + + return createDb().then(createUser).then(grantUserToDb); +};