diff --git a/.gitignore b/.gitignore index b2decc3..e625da5 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,5 @@ node_modules build config.yml *.log +docker/app.env +docker/db.env diff --git a/Makefile b/Makefile index 1c1038f..88e0986 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -.PHONY: docker migration dev clean test +.PHONY: docker migration dev clean test build_docker_image DB_USER=test DB_PASS=test @@ -24,6 +24,17 @@ docker: $(DOCKER_COMPOSE) up -d sleep 8 +build_docker_image: + rm -rf canapeapp + mkdir canapeapp + cp -R docker/run.sh canapeapp/run.sh + cp -R sql/migration canapeapp/migrations + cp $$GOPATH/bin/migrate canapeapp/migrate + yarn build + go build -v -o canapeapp/app src/*.go + docker build --tag canapeapp:latest --file docker/Dockerfile-production . + rm -rf canapeapp + migration-schema: docker $(MIGRATION) -path $(MIGRATION_SCHEMA) up diff --git a/docker/Dockerfile-production b/docker/Dockerfile-production new file mode 100644 index 0000000..fbd2bc3 --- /dev/null +++ b/docker/Dockerfile-production @@ -0,0 +1,6 @@ +FROM debian:8.7 +RUN apt update && apt upgrade -y && apt install -y ca-certificates && rm -rf /var/lib/apt/lists/* + +COPY canapeapp /opt/canapeapp +WORKDIR /opt/canapeapp +CMD ["/opt/canapeapp/run.sh"] diff --git a/docker/app.env.example b/docker/app.env.example new file mode 100644 index 0000000..eaa051d --- /dev/null +++ b/docker/app.env.example @@ -0,0 +1,4 @@ +CONFIG_FILE=/etc/canapeapp.yml +DB_USER=w000t +DB_PASS=bob +DB_ENV=production diff --git a/docker/db.env.example b/docker/db.env.example new file mode 100644 index 0000000..cae8509 --- /dev/null +++ b/docker/db.env.example @@ -0,0 +1,4 @@ +POSTGRES_PASSWORD=bob +POSTGRES_USER=w000t +POSTGRES_DB=production +PGDATA=/var/lib/postgresql/data/pgdata diff --git a/docker/docker-compose-prod.yml b/docker/docker-compose-prod.yml new file mode 100644 index 0000000..b705ebe --- /dev/null +++ b/docker/docker-compose-prod.yml @@ -0,0 +1,41 @@ +version: "3" + +networks: + canapeapp: + external: false + +services: + database: + image: postgres:9.5 + container_name: canapeapp_database + restart: always + networks: + - canapeapp + volumes: + - db-volume:/var/lib/postgresql/data/pgdata + ports: + - 127.0.0.1:5432:5432 + env_file: + - ./db.env + + app: + image: canapeapp:latest + container_name: canapeapp + restart: always + depends_on: + - database + networks: + - canapeapp + ports: + - 127.0.0.1:3000:3000 + volumes: + - ../config.yml:/etc/canapeapp.yml:ro + - img-volume:/home/img + links: + - database + env_file: + - ./app.env + +volumes: + img-volume: + db-volume: diff --git a/docker/run.sh b/docker/run.sh new file mode 100755 index 0000000..af000c9 --- /dev/null +++ b/docker/run.sh @@ -0,0 +1,10 @@ +#!/bin/sh + +echo "Running migrations..." +/opt/canapeapp/migrate \ + -url postgres://${DB_USER}:${DB_PASS}@database:5432/${DB_ENV}?sslmode=disable \ + -path /opt/canapeapp/migrations \ + up +echo "Migrations done" + +exec /opt/canapeapp/app diff --git a/webpack.config.js b/webpack.config.js index 0b62a0f..2671987 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -2,6 +2,10 @@ var webpack = require("webpack"); var path = require("path"); var BUILD_DIR = path.resolve(__dirname, 'build/public/'); +if (process.env.NODE_ENV === 'production') { + BUILD_DIR = path.resolve(__dirname, 'canapeapp/public/'); +} + var SRC_DIR = path.resolve(__dirname, 'src/public/js'); const config = {