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/.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 new file mode 100644 index 0000000..9424fac --- /dev/null +++ b/Dockerfile @@ -0,0 +1,24 @@ +FROM ruby:2.5.5 + +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 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 . $APP_HOME +RUN rm -f tmp/pids/server.pid \ No newline at end of file diff --git a/README.md b/README.md index 84fc51c..7999d0f 100644 --- a/README.md +++ b/README.md @@ -65,6 +65,90 @@ To run the application tests: rspec ``` +## Execution with **DOCKER** + +### Install Docker + +- [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 + +```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 +RAILS_ENV=development +``` + +### Usefull Commands + +```bash +## build docker-compose.yml +docker-compose build + +## 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 +``` + +## 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. diff --git a/config/database.yml b/config/database.yml index b0c5fd8..fca26ef 100644 --- a/config/database.yml +++ b/config/database.yml @@ -1,85 +1,21 @@ -# 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 - pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> + timeout: 5000 + port: 5432 + host: <%= ENV.fetch("DB_HOST") || localhost %> + username: postgres + password: <%= ENV.fetch("DB_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..381869d --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,35 @@ +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 postgres'] + timeout: 45s + interval: 10s + retries: 10 + env_file: + - ./env_file.env + web: + container_name: life-to-remind + build: . + command: > + 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 + ports: + - '3000:3000' + links: + - db_ltr + depends_on: + db_ltr: + condition: service_healthy + #restart: on-failure + env_file: + - ./env_file.env diff --git a/env_file.env b/env_file.env new file mode 100644 index 0000000..f00551c --- /dev/null +++ b/env_file.env @@ -0,0 +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=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