Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Enhance the docker-compose/makefile setup for running/reverting migrations #361

Merged
merged 3 commits into from
Jun 14, 2021
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
65 changes: 57 additions & 8 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
export $(shell sed 's/=.*//' .env)

.DEFAULT : help
.PHONY : setup close clean build run run-debug build-backend run-backend run-backend-debug build-web run-web run-web-debug build-ionic run-ionic run-ionic-debug database app api install test lint lint-fix format help
.PHONY : setup close clean build run run-debug build-backend run-backend run-backend-debug build-web run-web run-web-debug build-ionic run-ionic run-ionic-debug database app api db-setup db-migrate db-rollback install test lint lint-fix format help

## ------------------------------------------------------------------------------
## Alias Commands
Expand All @@ -36,6 +36,10 @@ web-debug: | close build-web run-web-debug ## Performs all commands necessary to
ionic: | close build-ionic run-ionic ## Performs all commands necessary to run all backend+ionic projects in docker
ionic-debug: | close build-ionic run-ionic-debug ## Performs all commands necessary to run all backend+ionic projects in docker in debug mode

db-setup: | build-db-setup run-db-setup ## Performs all commands necessary to run the database migrations and seeding
db-migrate: | build-db-migrate run-db-migrate ## Performs all commands necessary to run the database migrations
db-rollback: | build-db-rollback run-db-rollback ## Performs all commands necessary to rollback the latest database migrations

## ------------------------------------------------------------------------------
## Setup/Cleanup Commands
## ------------------------------------------------------------------------------
Expand Down Expand Up @@ -81,7 +85,6 @@ run-debug: ## Runs all project containers in debug mode, where all container out
@echo "==============================================="
@docker-compose -f docker-compose.yml up


## ------------------------------------------------------------------------------
## Build/Run Backend Commands
## - Builds all of the biohub backend projects (db, db_setup, api, nginx)
Expand All @@ -91,19 +94,22 @@ build-backend: ## Builds all backend containers
@echo "==============================================="
@echo "Make: build-backend - building backend images"
@echo "==============================================="
@docker-compose -f docker-compose.yml build db db_setup api nginx clamav
@docker-compose -f docker-compose.yml build db db_setup api nginx
## @docker-compose -f docker-compose.yml build db db_setup api nginx clamav
sdevalapurkar marked this conversation as resolved.
Show resolved Hide resolved

run-backend: ## Runs all backend containers
@echo "==============================================="
@echo "Make: run-backend - running backend images"
@echo "==============================================="
@docker-compose -f docker-compose.yml up -d db db_setup api nginx clamav
@docker-compose -f docker-compose.yml up -d db db_setup api nginx
## @docker-compose -f docker-compose.yml up -d db db_setup api nginx clamav

run-backend-debug: ## Runs all backend containers in debug mode, where all container output is printed to the console
@echo "==============================================="
@echo "Make: run-backend-debug - running backend images in debug mode"
@echo "==============================================="
@docker-compose -f docker-compose.yml up db db_setup api nginx clamav
@docker-compose -f docker-compose.yml up db db_setup api nginx
## @docker-compose -f docker-compose.yml up db db_setup api nginx clamav

## ------------------------------------------------------------------------------
## Build/Run Backend+Web Commands (backend + web frontend)
Expand All @@ -114,19 +120,22 @@ build-web: ## Builds all backend+web containers
@echo "==============================================="
@echo "Make: build-web - building web images"
@echo "==============================================="
@docker-compose -f docker-compose.yml build db db_setup api nginx app clamav
@docker-compose -f docker-compose.yml build db db_setup api nginx app
## @docker-compose -f docker-compose.yml build db db_setup api nginx app clamav

run-web: ## Runs all backend+web containers
@echo "==============================================="
@echo "Make: run-web - running web images"
@echo "==============================================="
@docker-compose -f docker-compose.yml up -d db db_setup api nginx app clamav
@docker-compose -f docker-compose.yml up -d db db_setup api nginx app
## @docker-compose -f docker-compose.yml up -d db db_setup api nginx app clamav

run-web-debug: ## Runs all backend+web containers in debug mode, where all container output is printed to the console
@echo "==============================================="
@echo "Make: run-web-debug - running web images in debug mode"
@echo "==============================================="
@docker-compose -f docker-compose.yml up db db_setup api nginx app clamav
@docker-compose -f docker-compose.yml up db db_setup api nginx app
## @docker-compose -f docker-compose.yml up db db_setup api nginx app clamav

## ------------------------------------------------------------------------------
## Build/Run Backend+Ionic Commands (backend + ionic frontend)
Expand Down Expand Up @@ -174,6 +183,46 @@ api: ## Executes into the workspace container.
@echo "==============================================="
@docker-compose exec api bash

## ------------------------------------------------------------------------------
## Database migration commands
## ------------------------------------------------------------------------------

build-db-setup: ## Build the db knex setup (migrations + seeding) image
@echo "==============================================="
@echo "Make: knex-rollback - building db knex setup image"
@echo "==============================================="
@docker-compose -f docker-compose.yml build db_setup

run-db-setup: ## Run the database migrations and seeding
@echo "==============================================="
@echo "Make: knex-rollback - running database migrations and seeding"
@echo "==============================================="
@docker-compose -f docker-compose.yml up db_setup

build-db-migrate: ## Build the db knex migrations image
@echo "==============================================="
@echo "Make: knex-rollback - bnuilding db knex migrate image"
@echo "==============================================="
@docker-compose -f docker-compose.yml build db_migrate

run-db-migrate: ## Run the database migrations
@echo "==============================================="
@echo "Make: knex-rollback - running database migrations"
@echo "==============================================="
@docker-compose -f docker-compose.yml up db_migrate

build-db-rollback: ## Build the db knex rollback image
@echo "==============================================="
@echo "Make: knex-rollback - building db knex rollback image"
@echo "==============================================="
@docker-compose -f docker-compose.yml build db_rollback

run-db-rollback: ## Rollback the latest database migrations
@echo "==============================================="
@echo "Make: knex-rollback - rolling back the latest database migrations"
@echo "==============================================="
@docker-compose -f docker-compose.yml up db_rollback

## ------------------------------------------------------------------------------
## Run `npm` commands for all projects
## ------------------------------------------------------------------------------
Expand Down
24 changes: 24 additions & 0 deletions database/.docker/db/Dockerfile.rollback
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
FROM node:10

# RUN apt-get -qq update
# RUN npm install -g npm

# set variables
ENV HOME_ROOT=/opt/app-root
ENV HOME=/opt/app-root/src

RUN mkdir -p $HOME

WORKDIR $HOME_ROOT

WORKDIR $HOME

COPY . .

# If you are building your code for production
# RUN npm install --only=production
# RUN npm set progress=false
RUN npm install

# rollback the database migrations
CMD [ "npm", "run", "migrate:rollback" ]
6 changes: 5 additions & 1 deletion database/src/migrations/20210225205948_biohub_release.ts
Original file line number Diff line number Diff line change
Expand Up @@ -150,5 +150,9 @@ export async function up(knex: Knex): Promise<void> {
}

export async function down(knex: Knex): Promise<void> {
await knex.raw(``);
await knex.raw(`
DROP SCHEMA IF EXISTS biohub CASCADE;
DROP SCHEMA IF EXISTS biohub_dapi_v1 CASCADE;
DROP USER IF EXISTS ${DB_USER_API};
`);
}
54 changes: 54 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,60 @@ services:
condition: service_healthy
command: ["npm", "run", "setup"]

## Run the database migrations
db_migrate:
image: ${DOCKER_PROJECT_NAME}-db-${DOCKER_NAMESPACE}-migrate-img
container_name: ${DOCKER_PROJECT_NAME}-db-${DOCKER_NAMESPACE}-migrate-container
build:
context: ./database
dockerfile: ./.docker/db/Dockerfile.migrate
environment:
- NODE_ENV=${NODE_ENV}
- DB_HOST=${DB_HOST}
- DB_ADMIN=${DB_ADMIN}
- DB_ADMIN_PASS=${DB_ADMIN_PASS}
- DB_PORT=${DB_PORT}
- DB_DATABASE=${DB_DATABASE}
- DB_SCHEMA=${DB_SCHEMA}
- DB_USER_API=${DB_USER_API}
- DB_USER_API_PASS=${DB_USER_API_PASS}
- DB_SCHEMA_DAPI_V1=${DB_SCHEMA_DAPI_V1}
volumes:
- /opt/app-root/src/node_modules # prevents local node_modules overriding container node_modules
networks:
- local-network
depends_on:
db:
condition: service_healthy
command: ["npm", "run", "migrate:latest"]

## Rollback the latest database migrations
db_rollback:
image: ${DOCKER_PROJECT_NAME}-db-${DOCKER_NAMESPACE}-rollback-img
container_name: ${DOCKER_PROJECT_NAME}-db-${DOCKER_NAMESPACE}-rollback-container
build:
context: ./database
dockerfile: ./.docker/db/Dockerfile.rollback
environment:
- NODE_ENV=${NODE_ENV}
- DB_HOST=${DB_HOST}
- DB_ADMIN=${DB_ADMIN}
- DB_ADMIN_PASS=${DB_ADMIN_PASS}
- DB_PORT=${DB_PORT}
- DB_DATABASE=${DB_DATABASE}
- DB_SCHEMA=${DB_SCHEMA}
- DB_USER_API=${DB_USER_API}
- DB_USER_API_PASS=${DB_USER_API_PASS}
- DB_SCHEMA_DAPI_V1=${DB_SCHEMA_DAPI_V1}
volumes:
- /opt/app-root/src/node_modules # prevents local node_modules overriding container node_modules
networks:
- local-network
depends_on:
db:
condition: service_healthy
command: ["npm", "run", "migrate:rollback"]

networks:
local-network:
driver: bridge
Expand Down