From c386f12613bc90e87e5e563f2b5bdd091bc6db98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gr=C3=A9goire=20Delattre?= Date: Thu, 2 Feb 2017 14:39:48 +0100 Subject: [PATCH 1/3] Add target in the Makefile to build the docker image --- Makefile | 10 +++++++++- docker/Dockerfile-production | 6 ++++++ webpack.config.js | 4 ++++ 3 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 docker/Dockerfile-production diff --git a/Makefile b/Makefile index 1c1038f..f4b945e 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,14 @@ docker: $(DOCKER_COMPOSE) up -d sleep 8 +build_docker_image: + rm -rf canapeapp + mkdir canapeapp + yarn build + CGO_ENABLED=0 go build -v -o canapeapp/app src/main.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..2ae1a63 --- /dev/null +++ b/docker/Dockerfile-production @@ -0,0 +1,6 @@ +FROM alpine:3.5 + +COPY canapeapp /opt/canapeapp +WORKDIR /opt/canapeapp +RUN chmod +x /opt/canapeapp +CMD ["/opt/canapeapp"] 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 = { From d57f119c7a64c20fc26518e72b913b52aa6b6e36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gr=C3=A9goire=20Delattre?= Date: Thu, 2 Feb 2017 16:26:58 +0100 Subject: [PATCH 2/3] Add docker-compose for production use --- Makefile | 5 ++++- docker/Dockerfile-production | 5 ++--- docker/docker-compose-prod.yml | 40 ++++++++++++++++++++++++++++++++++ docker/run.sh | 10 +++++++++ 4 files changed, 56 insertions(+), 4 deletions(-) create mode 100644 docker/docker-compose-prod.yml create mode 100755 docker/run.sh diff --git a/Makefile b/Makefile index f4b945e..4f1f55f 100644 --- a/Makefile +++ b/Makefile @@ -27,8 +27,11 @@ docker: 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 - CGO_ENABLED=0 go build -v -o canapeapp/app src/main.go + go build -v -o canapeapp/app src/main.go docker build --tag canapeapp:latest --file docker/Dockerfile-production . rm -rf canapeapp diff --git a/docker/Dockerfile-production b/docker/Dockerfile-production index 2ae1a63..ff9c91b 100644 --- a/docker/Dockerfile-production +++ b/docker/Dockerfile-production @@ -1,6 +1,5 @@ -FROM alpine:3.5 +FROM debian:8.7 COPY canapeapp /opt/canapeapp WORKDIR /opt/canapeapp -RUN chmod +x /opt/canapeapp -CMD ["/opt/canapeapp"] +CMD ["/opt/canapeapp/run.sh"] diff --git a/docker/docker-compose-prod.yml b/docker/docker-compose-prod.yml new file mode 100644 index 0000000..ad9754c --- /dev/null +++ b/docker/docker-compose-prod.yml @@ -0,0 +1,40 @@ +version: "3" + +networks: + canapeapp: + external: false + +services: + database: + image: postgres:9.5 + container_name: canapeapp_database + restart: always + environment: + - POSTGRES_PASSWORD=test + - POSTGRES_USER=test + - POSTGRES_DB=production + networks: + - canapeapp + # volumes: + # - .:/docker-entrypoint-initdb.d/ + ports: + - 5432 + app: + image: canapeapp:latest + container_name: canapeapp + restart: always + depends_on: + - database + environment: + - CONFIG_FILE=/etc/canapeapp.yml + - DB_USER=test + - DB_PASS=test + - DB_ENV=production + networks: + - canapeapp + ports: + - 127.0.0.1:6666:3000 + volumes: + - ../config-prod.yml:/etc/canapeapp.yml:ro + links: + - database 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 From cbc3f0fe1fb26768ec49e5ba2197af8ef96366d3 Mon Sep 17 00:00:00 2001 From: Lucas BEE Date: Tue, 4 Apr 2017 10:55:17 +0000 Subject: [PATCH 3/3] Small changes for a better docker-compose --- .gitignore | 2 + Makefile | 2 +- docker/Dockerfile-production | 1 + docker/app.env.example | 4 ++ docker/db.env.example | 4 ++ docker/docker-compose-prod.yml | 71 +++++++++++++++++----------------- 6 files changed, 48 insertions(+), 36 deletions(-) create mode 100644 docker/app.env.example create mode 100644 docker/db.env.example 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 4f1f55f..88e0986 100644 --- a/Makefile +++ b/Makefile @@ -31,7 +31,7 @@ build_docker_image: cp -R sql/migration canapeapp/migrations cp $$GOPATH/bin/migrate canapeapp/migrate yarn build - go build -v -o canapeapp/app src/main.go + go build -v -o canapeapp/app src/*.go docker build --tag canapeapp:latest --file docker/Dockerfile-production . rm -rf canapeapp diff --git a/docker/Dockerfile-production b/docker/Dockerfile-production index ff9c91b..fbd2bc3 100644 --- a/docker/Dockerfile-production +++ b/docker/Dockerfile-production @@ -1,4 +1,5 @@ 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 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 index ad9754c..b705ebe 100644 --- a/docker/docker-compose-prod.yml +++ b/docker/docker-compose-prod.yml @@ -1,40 +1,41 @@ version: "3" networks: - canapeapp: - external: false + canapeapp: + external: false services: - database: - image: postgres:9.5 - container_name: canapeapp_database - restart: always - environment: - - POSTGRES_PASSWORD=test - - POSTGRES_USER=test - - POSTGRES_DB=production - networks: - - canapeapp - # volumes: - # - .:/docker-entrypoint-initdb.d/ - ports: - - 5432 - app: - image: canapeapp:latest - container_name: canapeapp - restart: always - depends_on: - - database - environment: - - CONFIG_FILE=/etc/canapeapp.yml - - DB_USER=test - - DB_PASS=test - - DB_ENV=production - networks: - - canapeapp - ports: - - 127.0.0.1:6666:3000 - volumes: - - ../config-prod.yml:/etc/canapeapp.yml:ro - links: - - database + 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: