From fc8d7dacd8147fc5b54e358bf6972756c7417e31 Mon Sep 17 00:00:00 2001 From: samuelssantos Date: Thu, 17 Oct 2019 01:12:13 +0100 Subject: [PATCH 1/5] Include configs for execution in Docker --- Dockerfile | 23 +++++++++++++ README.md | 5 +++ config/database.yml | 78 ++++----------------------------------------- config/secret.yml | 2 ++ docker-compose.yml | 33 +++++++++++++++++++ entrypoint.sh | 8 +++++ 6 files changed, 77 insertions(+), 72 deletions(-) create mode 100644 Dockerfile create mode 100644 config/secret.yml create mode 100644 docker-compose.yml create mode 100644 entrypoint.sh diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..1c03d47 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,23 @@ +FROM ruby:2.5.5 +RUN apt-get update -qq && apt-get install -y postgresql-client + +RUN mkdir /LifeToRemind +WORKDIR /LifeToRemind +COPY Gemfile /LifeToRemind/Gemfile +COPY Gemfile.lock /LifeToRemind/Gemfile.lock +RUN bundle install +COPY . /LifeToRemind + +# enviroments +ENV DB_HOST db_ltr +ENV LTR_DATABASE_PASSWORD postgres + + +# Add a script to be executed every time the container starts. +COPY entrypoint.sh /usr/bin/ +RUN chmod +x /usr/bin/entrypoint.sh +ENTRYPOINT ["entrypoint.sh"] +EXPOSE 3000 + +# Start the main process. +CMD ["rails", "server", "-b", "0.0.0.0"] \ No newline at end of file diff --git a/README.md b/README.md index 24f8a09..f3e6854 100644 --- a/README.md +++ b/README.md @@ -65,6 +65,11 @@ To run the application tests. rspec ``` +## Execution with **DOCKER** +```console +docker-compose up -d +``` + ## Become a Life to Remind Developer To contribute to the project check the open issues. If what you want to improve or the problem you found is not already listed, create a new issue with a description of the problem. To contribute to the project send a Pull Request to the repository, it will be evaluated later. diff --git a/config/database.yml b/config/database.yml index b0c5fd8..b7d455c 100644 --- a/config/database.yml +++ b/config/database.yml @@ -1,85 +1,19 @@ -# PostgreSQL. Versions 9.1 and up are supported. -# -# Install the pg driver: -# gem install pg -# On OS X with Homebrew: -# gem install pg -- --with-pg-config=/usr/local/bin/pg_config -# On OS X with MacPorts: -# gem install pg -- --with-pg-config=/opt/local/lib/postgresql84/bin/pg_config -# On Windows: -# gem install pg -# Choose the win32 build. -# Install PostgreSQL and put its /bin directory on your path. -# -# Configure Using Gemfile -# gem 'pg' -# default: &default adapter: postgresql encoding: unicode - # For details on connection pooling, see Rails configuration guide - # http://guides.rubyonrails.org/configuring.html#database-pooling + timeout: 5000 + port: 5432 + database: ltr + host: <%= ENV.fetch("DB_HOST") { localhost } %> + username: <%= ENV.fetch("DB_USER") { postgres } %> + password: <%= ENV.fetch("LTR_DATABASE_PASSWORD") { postgres } %> pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> development: <<: *default - database: ltr_development - # The specified database role being used to connect to postgres. - # To create additional roles in postgres see `$ createuser --help`. - # When left blank, postgres will use the default role. This is - # the same name as the operating system user that initialized the database. - #username: ltr - - # The password associated with the postgres role (username). - #password: - - # Connect on a TCP socket. Omitted by default since the client uses a - # domain socket that doesn't need configuration. Windows does not have - # domain sockets, so uncomment these lines. - #host: localhost - - # The TCP port the server listens on. Defaults to 5432. - # If your server runs on a different port number, change accordingly. - #port: 5432 - - # Schema search path. The server defaults to $user,public - #schema_search_path: myapp,sharedapp,public - - # Minimum log levels, in increasing order: - # debug5, debug4, debug3, debug2, debug1, - # log, notice, warning, error, fatal, and panic - # Defaults to warning. - #min_messages: notice - -# Warning: The database defined as "test" will be erased and -# re-generated from your development database when you run "rake". -# Do not set this db to the same as development or production. test: <<: *default - database: ltr_test -# As with config/secrets.yml, you never want to store sensitive information, -# like your database password, in your source code. If your source code is -# ever seen by anyone, they now have access to your database. -# -# Instead, provide the password as a unix environment variable when you boot -# the app. Read http://guides.rubyonrails.org/configuring.html#configuring-a-database -# for a full rundown on how to provide these environment variables in a -# production deployment. -# -# On Heroku and other platform providers, you may have a full connection URL -# available as an environment variable. For example: -# -# DATABASE_URL="postgres://myuser:mypass@localhost/somedatabase" -# -# You can use this database configuration with: -# -# production: -# url: <%= ENV['DATABASE_URL'] %> -# production: <<: *default - database: ltr_production - username: ltr - password: <%= ENV['LTR_DATABASE_PASSWORD'] %> diff --git a/config/secret.yml b/config/secret.yml new file mode 100644 index 0000000..1110964 --- /dev/null +++ b/config/secret.yml @@ -0,0 +1,2 @@ +production: + secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..d79e236 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,33 @@ +version: '2.1' +services: + db_ltr: + container_name: db_ltr + image: postgres:9.5 + volumes: + - ./tmp/db:/var/lib/postgresql/data + ports: + - '5432:5432' + healthcheck: + test: ["CMD-SHELL", "pg_isready -U ${DB_USER:-postgres}"] + timeout: 45s + interval: 10s + retries: 10 + env_file: + - ./.env + web: + container_name: life-to-remind + build: . + command: > + bash -c "bundle exec rails db:reset db:setup db:migrate RAILS_ENV=${RAILS_ENV:-development} + && rm -f tmp/pids/server.pid + && bundle exec rails s -p 3000 -b '0.0.0.0'" + volumes: + - .:/LifeToRemind + ports: + - '3000:3000' + depends_on: + db_ltr: + condition: service_healthy + restart: on-failure + env_file: + - ./.env diff --git a/entrypoint.sh b/entrypoint.sh new file mode 100644 index 0000000..b2a44e4 --- /dev/null +++ b/entrypoint.sh @@ -0,0 +1,8 @@ +#!/bin/bash +set -e + +# Remove a potentially pre-existing server.pid for Rails. +rm -f /LifeToRemind/tmp/pids/server.pid + +# Then exec the container's main process (what's set as CMD in the Dockerfile). +exec "$@" \ No newline at end of file From 7afe954cdb831673bfcfc07b4b15b5d75132cc38 Mon Sep 17 00:00:00 2001 From: samuelssantos Date: Fri, 18 Oct 2019 00:27:18 +0100 Subject: [PATCH 2/5] Add enviroment Docker file --- docker-compose.yml | 10 +++++----- ltr.env | 4 ++++ 2 files changed, 9 insertions(+), 5 deletions(-) create mode 100644 ltr.env diff --git a/docker-compose.yml b/docker-compose.yml index d79e236..8871281 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -8,12 +8,12 @@ services: ports: - '5432:5432' healthcheck: - test: ["CMD-SHELL", "pg_isready -U ${DB_USER:-postgres}"] + test: ['CMD-SHELL', 'pg_isready -U ${DB_USER:-postgres}'] timeout: 45s interval: 10s retries: 10 - env_file: - - ./.env + env_file: + - ./ltr.env web: container_name: life-to-remind build: . @@ -29,5 +29,5 @@ services: db_ltr: condition: service_healthy restart: on-failure - env_file: - - ./.env + env_file: + - ./ltr.env diff --git a/ltr.env b/ltr.env new file mode 100644 index 0000000..43c73b3 --- /dev/null +++ b/ltr.env @@ -0,0 +1,4 @@ +RAILS_ENV=test +DB_USER=postgres +## The same name defined on docker-compose.yml +DB_HOST=db_ltr \ No newline at end of file From 2250fd001c80a3a68b0bc00e9e2b79130150ff44 Mon Sep 17 00:00:00 2001 From: samuelssantos Date: Sat, 19 Oct 2019 03:21:06 +0100 Subject: [PATCH 3/5] Update docker files --- .gitignore | 2 ++ Dockerfile | 31 ++++++++++++++++--------------- README.md | 22 ++++++++++++++++++++++ config/database.yml | 10 ++++++---- docker-compose.yml | 12 ++++++------ entrypoint.sh | 8 -------- env_file.env | 8 ++++++++ ltr.env | 4 ---- 8 files changed, 60 insertions(+), 37 deletions(-) delete mode 100644 entrypoint.sh create mode 100644 env_file.env delete mode 100644 ltr.env diff --git a/.gitignore b/.gitignore index 44e23f1..3faedcc 100644 --- a/.gitignore +++ b/.gitignore @@ -37,6 +37,8 @@ config/master.key /.bundle /vendor/bundle +*/tmp/** + # these should all be checked in to normalize the environment: # Gemfile.lock, .ruby-version, .ruby-gemset diff --git a/Dockerfile b/Dockerfile index 1c03d47..9424fac 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,23 +1,24 @@ FROM ruby:2.5.5 -RUN apt-get update -qq && apt-get install -y postgresql-client -RUN mkdir /LifeToRemind -WORKDIR /LifeToRemind -COPY Gemfile /LifeToRemind/Gemfile -COPY Gemfile.lock /LifeToRemind/Gemfile.lock -RUN bundle install -COPY . /LifeToRemind +RUN apt-get update -qq && apt-get install -y build-essential + +# for postgres +RUN apt-get install -y libpq-dev + # enviroments ENV DB_HOST db_ltr -ENV LTR_DATABASE_PASSWORD postgres +ENV DB_PASSWORD postgres +ENV DB_USER ltr +ENV APP_NAME LifeToRemind +ENV APP_HOME /$APP_NAME +RUN mkdir $APP_HOME +WORKDIR $APP_HOME + +ADD Gemfile* $APP_HOME/ +RUN bundle install -# Add a script to be executed every time the container starts. -COPY entrypoint.sh /usr/bin/ -RUN chmod +x /usr/bin/entrypoint.sh -ENTRYPOINT ["entrypoint.sh"] -EXPOSE 3000 -# Start the main process. -CMD ["rails", "server", "-b", "0.0.0.0"] \ No newline at end of file +ADD . $APP_HOME +RUN rm -f tmp/pids/server.pid \ No newline at end of file diff --git a/README.md b/README.md index f3e6854..fcc95d4 100644 --- a/README.md +++ b/README.md @@ -66,7 +66,29 @@ rspec ``` ## Execution with **DOCKER** + +Define variables values on: ./env_file.env + ```console +DB_USER=postgres + +# Note: "The value must be defined on ./docker-compose.yml" +DB_HOST=db_ltr +DB_PORT=5432 +RAILS_MAX_THREADS=5 + +# Note: "The value must be defined on ./config/database.yml" +RAILS_ENV=development + +# Note: "if RAILS_ENV == production then define SECRET_KEY_BASE!!!" +# SECRET_KEY_BASE= ????? +``` + +```console +# build +docker-compose build + +# run docker-compose up -d ``` diff --git a/config/database.yml b/config/database.yml index b7d455c..2690642 100644 --- a/config/database.yml +++ b/config/database.yml @@ -2,18 +2,20 @@ default: &default adapter: postgresql encoding: unicode timeout: 5000 - port: 5432 - database: ltr + port: <%= ENV.fetch("DB_PORT") { 5432 } %> host: <%= ENV.fetch("DB_HOST") { localhost } %> - username: <%= ENV.fetch("DB_USER") { postgres } %> - password: <%= ENV.fetch("LTR_DATABASE_PASSWORD") { postgres } %> + username: postgres + password: <%= ENV.fetch("DB_PASSWORD") { postgres } %> pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> development: <<: *default + database: ltr_development test: <<: *default + database: ltr_test production: <<: *default + database: ltr_production diff --git a/docker-compose.yml b/docker-compose.yml index 8871281..f2e1b89 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -8,18 +8,18 @@ services: ports: - '5432:5432' healthcheck: - test: ['CMD-SHELL', 'pg_isready -U ${DB_USER:-postgres}'] + test: ['CMD-SHELL', 'pg_isready -U postgres'] timeout: 45s interval: 10s retries: 10 env_file: - - ./ltr.env + - ./env_file.env web: container_name: life-to-remind build: . command: > - bash -c "bundle exec rails db:reset db:setup db:migrate RAILS_ENV=${RAILS_ENV:-development} - && rm -f tmp/pids/server.pid + bash -c "rm -f tmp/pids/server.pid + && rake db:create db:setup && bundle exec rails s -p 3000 -b '0.0.0.0'" volumes: - .:/LifeToRemind @@ -28,6 +28,6 @@ services: depends_on: db_ltr: condition: service_healthy - restart: on-failure + #restart: on-failure env_file: - - ./ltr.env + - ./env_file.env diff --git a/entrypoint.sh b/entrypoint.sh deleted file mode 100644 index b2a44e4..0000000 --- a/entrypoint.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash -set -e - -# Remove a potentially pre-existing server.pid for Rails. -rm -f /LifeToRemind/tmp/pids/server.pid - -# Then exec the container's main process (what's set as CMD in the Dockerfile). -exec "$@" \ No newline at end of file diff --git a/env_file.env b/env_file.env new file mode 100644 index 0000000..4c9d0fa --- /dev/null +++ b/env_file.env @@ -0,0 +1,8 @@ +DB_USER=postgres +## The same name defined on docker-compose.yml +DB_HOST=db_ltr +DB_PORT=5432 +RAILS_MAX_THREADS=5 +RAILS_ENV=development +# if RAILS_ENV == production then define!!! +# SECRET_KEY_BASE= ????? \ No newline at end of file diff --git a/ltr.env b/ltr.env deleted file mode 100644 index 43c73b3..0000000 --- a/ltr.env +++ /dev/null @@ -1,4 +0,0 @@ -RAILS_ENV=test -DB_USER=postgres -## The same name defined on docker-compose.yml -DB_HOST=db_ltr \ No newline at end of file From e91a1943f6d6856b63a8b16d2b8f93fddc6a7691 Mon Sep 17 00:00:00 2001 From: samuelssantos Date: Wed, 23 Oct 2019 00:21:33 +0100 Subject: [PATCH 4/5] Update configs docker --- .dockerignore | 1 + README.md | 53 +++++++++++++++++++++++++++++++++++---------- config/database.yml | 8 +++---- docker-compose.yml | 2 ++ env_file.env | 6 ++++- 5 files changed, 53 insertions(+), 17 deletions(-) create mode 100644 .dockerignore diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..cad2309 --- /dev/null +++ b/.dockerignore @@ -0,0 +1 @@ +/tmp \ No newline at end of file diff --git a/README.md b/README.md index fcc95d4..df69b41 100644 --- a/README.md +++ b/README.md @@ -67,29 +67,58 @@ rspec ## Execution with **DOCKER** -Define variables values on: ./env_file.env +### Install Docker -```console -DB_USER=postgres +- [Docker CE](https://docs.docker.com/v17.09/engine/installation/linux/docker-ce/ubuntu/) + +- [Docker Compose](https://docs.docker.com/compose/install/) + +### Define variables + +Define on: ./env_file.env -# Note: "The value must be defined on ./docker-compose.yml" +```env +DB_USER=postgres +## The same name defined on docker-compose.yml DB_HOST=db_ltr +## If you change default port 5432 you need to change in database.yml as well as execute a "docker-compose --build". DB_PORT=5432 RAILS_MAX_THREADS=5 - -# Note: "The value must be defined on ./config/database.yml" RAILS_ENV=development - -# Note: "if RAILS_ENV == production then define SECRET_KEY_BASE!!!" -# SECRET_KEY_BASE= ????? ``` -```console -# build +### Usefull Commands + +```bash +## build docker-compose.yml docker-compose build -# run +## run deatached docker-compose up -d + +## list containers +docker ps -a + +## join in the bash container +docker exec -it bash + +## stop container +docker stop + +## remove container +docker rm -f + +## stop all containers from docker-compose +docker-compose down + +## inspect container +docker inspect + +## show container logs +docker logs + +## follow container logs +docker logs -f ``` ## Become a Life to Remind Developer diff --git a/config/database.yml b/config/database.yml index 2690642..fca26ef 100644 --- a/config/database.yml +++ b/config/database.yml @@ -2,11 +2,11 @@ default: &default adapter: postgresql encoding: unicode timeout: 5000 - port: <%= ENV.fetch("DB_PORT") { 5432 } %> - host: <%= ENV.fetch("DB_HOST") { localhost } %> + port: 5432 + host: <%= ENV.fetch("DB_HOST") || localhost %> username: postgres - password: <%= ENV.fetch("DB_PASSWORD") { postgres } %> - pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> + password: <%= ENV.fetch("DB_PASSWORD") || postgres %> + pool: <%= ENV.fetch("RAILS_MAX_THREADS") || 5 %> development: <<: *default diff --git a/docker-compose.yml b/docker-compose.yml index f2e1b89..381869d 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -25,6 +25,8 @@ services: - .:/LifeToRemind ports: - '3000:3000' + links: + - db_ltr depends_on: db_ltr: condition: service_healthy diff --git a/env_file.env b/env_file.env index 4c9d0fa..f00551c 100644 --- a/env_file.env +++ b/env_file.env @@ -1,8 +1,12 @@ DB_USER=postgres ## The same name defined on docker-compose.yml DB_HOST=db_ltr +## If you change default port 5432 you need to change in database.yml as well and execute a "docker-compose build". DB_PORT=5432 RAILS_MAX_THREADS=5 RAILS_ENV=development # if RAILS_ENV == production then define!!! -# SECRET_KEY_BASE= ????? \ No newline at end of file +SECRET_KEY_BASE=ABC +#If you are sure you want to continue, run the same command with the environment variable: +DISABLE_DATABASE_ENVIRONMENT_CHECK=1 +#DB_PWD \ No newline at end of file From dfa4d9f923fa89a4a94e3e6a2580d2b26d46e1cd Mon Sep 17 00:00:00 2001 From: samuelssantos Date: Wed, 23 Oct 2019 18:41:44 +0100 Subject: [PATCH 5/5] Execution Tests with DOCKER --- README.md | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/README.md b/README.md index df69b41..7463443 100644 --- a/README.md +++ b/README.md @@ -121,6 +121,34 @@ docker logs docker logs -f ``` +## Execution Tests with **DOCKER** + +### Change enviroments + +Change de value of key RAILS_ENV to test in ./env_file.env + +```env +RAILS_ENV=test +``` + +### Run compose + +```bash +docker-compose up -d +``` + +### List containers and get "web" containerid + +```bash +docker ps -a +``` + +### Run tests + +```bash +docker exec -it bash -c "bundle exec rspec" +``` + ## Become a Life to Remind Developer To contribute to the project check the open issues. If what you want to improve or the problem you found is not already listed, create a new issue with a description of the problem. To contribute to the project send a Pull Request to the repository, it will be evaluated later.