diff --git a/docs/setup.md b/docs/setup.md index 18d12c3..017c464 100644 --- a/docs/setup.md +++ b/docs/setup.md @@ -9,16 +9,21 @@ $ yarn # or (yarn install) ``` ## Database - -* 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` +You can install Postgres or run your server in a Docker container. +### Postgres +* 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 Postgres 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/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/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) 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/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); +}; 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": {