Skip to content
Open
Show file tree
Hide file tree
Changes from all 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
130 changes: 57 additions & 73 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,82 +1,66 @@
ARG RUBY_PATH=/usr/local/
ARG RUBY_VERSION=2.7.2

FROM ubuntu:16.04 AS rubybuild
ARG RUBY_PATH
ARG RUBY_VERSION

RUN apt-get update && \
apt-get install -y \
build-essential \
zlib1g \
zlib1g-dev \
libpq-dev \
libssl-dev \
libyaml-dev \
libxml2-dev \
libxslt1-dev \
libc6-dev \
libncurses5-dev \
libreadline-dev \
libtool \
make \
automake \
autoconf \
libffi-dev \
unzip \
imagemagick \
sed \
mawk \
curl \
openssl \
apt-transport-https \
ca-certificates \
musl-dev \
postgresql-client \
gnupg2 \
git

RUN curl -sL https://deb.nodesource.com/setup_lts.x | bash -
RUN apt-get install -y nodejs

RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
RUN echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list

RUN apt-get update && apt-get install -y yarn

RUN git clone git://github.com/rbenv/ruby-build.git $RUBY_PATH/plugins/ruby-build \
&& $RUBY_PATH/plugins/ruby-build/install.sh && \
ruby-build $RUBY_VERSION $RUBY_PATH

###############

FROM rubybuild
ARG RUBY_PATH
ENV PATH $RUBY_PATH/bin:$PATH

ENV APP_HOME /app
WORKDIR $APP_HOME

COPY --from=rubybuild $RUBY_PATH $RUBY_PATH
# --- ESTÁGIO 1: BUILDER ---
# Usa a imagem com Ruby 2.7.8 e Debian Bullseye (versão 11).
FROM ruby:2.7.8-bullseye AS builder

# 1. Instala as dependências do sistema.
RUN apt-get update -qq && \
apt-get install -y --no-install-recommends curl gnupg ca-certificates && \
# Adiciona o repositório do Debian Buster temporariamente
# para instalar o pacote de compatibilidade 'libffi6'.
echo "deb http://archive.debian.org/debian/ buster main" > /etc/apt/sources.list.d/buster.list && \
# Adiciona o repositório do PostgreSQL.
curl -sSL https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor -o /usr/share/keyrings/postgresql-archive-keyring.gpg && \
echo "deb [signed-by=/usr/share/keyrings/postgresql-archive-keyring.gpg] http://apt.postgresql.org/pub/repos/apt/ bullseye-pgdg main" > /etc/apt/sources.list.d/pgdg.list && \
# Adiciona repositórios do Node e Yarn.
curl -sL https://deb.nodesource.com/setup_lts.x | bash - && \
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor -o /usr/share/keyrings/yarn-archive-keyring.gpg && \
echo "deb [signed-by=/usr/share/keyrings/yarn-archive-keyring.gpg] https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \
# Atualiza e instala os pacotes, incluindo o 'libffi6' do repo antigo.
apt-get update -qq && \
apt-get install -y --no-install-recommends nodejs yarn postgresql-client-14 shared-mime-info libffi6 file && \
# Remove o repositório antigo para manter o sistema limpo.
rm /etc/apt/sources.list.d/buster.list && \
rm -rf /var/lib/apt/lists/*

# 2. Configura o diretório e instala as dependências da aplicação.
WORKDIR /app

COPY Gemfile Gemfile.lock ./

RUN gem install bundler -v 2.0.2 && \
bundle config build.nokogiri --use-system-libraries && \
bundle check || bundle install
bundle install --jobs $(nproc) --retry 3

COPY package.json yarn.lock ./

RUN yarn install --check-files

COPY . $APP_HOME

# CMD ["bundle", "exec", "rails s -b 0.0.0.0"]

# ENTRYPOINT ["./entrypoints/docker-entrypoint.sh"]

# docker-compose up --build
# docker-compose exec app bundle exec rake db:setup
# docker-compose exec app bundle exec rake db:setup db:migrate

# https://ledermann.dev/blog/2018/04/19/dockerize-rails-the-lean-way/
# --- ESTÁGIO 2: FINAL ---
# Usa a imagem 'slim' correspondente com Bullseye.
FROM ruby:2.7.8-slim-bullseye

# 1. Instala apenas as dependências de RUNTIME.
RUN apt-get update -qq && \
apt-get install -y --no-install-recommends curl gnupg ca-certificates && \
# Aplica a mesma correção aqui.
echo "deb http://archive.debian.org/debian/ buster main" > /etc/apt/sources.list.d/buster.list && \
curl -sSL https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor -o /usr/share/keyrings/postgresql-archive-keyring.gpg && \
echo "deb [signed-by=/usr/share/keyrings/postgresql-archive-keyring.gpg] http://apt.postgresql.org/pub/repos/apt/ bullseye-pgdg main" > /etc/apt/sources.list.d/pgdg.list && \
apt-get update -qq && \
apt-get install -y --no-install-recommends nodejs yarn postgresql-client-14 shared-mime-info libffi6 file && \
rm /etc/apt/sources.list.d/buster.list && \
rm -rf /var/lib/apt/lists/*

# 2. Configura o diretório de trabalho.
WORKDIR /app

# 3. Copia as dependências e o código-fonte.
COPY --from=builder /usr/local/bundle/ /usr/local/bundle/
COPY --from=builder /app/node_modules ./node_modules
COPY . .

# 4. Expõe a porta e define o ponto de entrada.
EXPOSE 3000
ENTRYPOINT ["./entrypoints/app-entrypoint.sh"]

# Adicione esta linha para definir o comando padrão na porta 3000
CMD ["bundle", "exec", "rails", "s", "-b", "0.0.0.0", "-p", "3000"]
2 changes: 2 additions & 0 deletions Gemfile
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
source "http://rubygems.org"

ruby "2.7.2"
# ruby '2.7.8'

#gem "rails", "~> 3.2.16"
gem "rails", "5.1.7"
gem "rack", "~> 2.0.9"
gem "rake", "~> 13.0.3"
gem "pg", "~> 1.2.3"
#gem "foreigner", "~> 1.4.0"
gem 'sidekiq'

# gem "koala", "1.2.0" # facebook

Expand Down
1 change: 1 addition & 0 deletions app/controllers/.pryrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Pry.config.pager = false
55 changes: 52 additions & 3 deletions config/README.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,59 @@
# Arquivos de configuração do SOLAR 2.0

Devem ser __linkados__ em cada servidor depois do __cap production deploy:check__ inicial.
Devem ser __linkados__ em cada servidor depois do __cap production deploy:check__ inicial.

# Clonar no servidor

Gerar uma chave e usar __deploy keys__.
Gerar uma chave e usar __deploy keys__.

https://www.ssh.com/ssh/keygen/


# Configuração do ambiente com Docker

Observação: Para os usuários do Windows, faz-se necessário ter o ['Docker Desktop'](https://docs.docker.com/desktop/setup/install/windows-install/)

### Configurar ambiente

Este cenário é para a construção do ambiente pela primeira vez, onde serão construídas as imagens e subido o containers.

Na pasta do projeto executar:

> docker-compose up --build

### Subir containers

Pré-requisito: ambiente construído.

> docker compose up

Comando usado no dia a dia para subir o ambiente.

Fluxo alternativo: iniciar o ambiente no próprio Docker Desktop.

https://www.ssh.com/ssh/keygen/
### Configuração do banco

1. Dentro de .../solar/config/, criar uma cópia do arquivo '_database-docker' ou usar como exemplo para o seu arquivo 'database';
2. Colocar as variáveis de ambiente no .env de acordo com seus dados de acesso criados no docker-compose, por exemplo:

POSTGRES_DB=solar
POSTGRES_USER=solar
POSTGRES_PASSWORD=123456

Por fim, criar as tabelas e rodar as migrations:

1. rake db:create;
2. rake db:migrate;
3. rake db:seed

### Acessar o container no terminal

Pré-requisito: ambiente rodando.

Em qualquer lugar do terminal

> docker exec -it solar-app-1 /bin/bash

OU no diretório do projeto

> docker compose exec app bash
29 changes: 29 additions & 0 deletions config/_database-docker.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# 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
# The server defaults to notice.
#min_messages: warning

common: &common

host: database

adapter: postgresql
database: <%= ENV['POSTGRES_DB'] %>
password: <%= ENV['POSTGRES_PASSWORD'] %>
username: <%= ENV['POSTGRES_USER'] %>

development:
<<: *common
database: solar_development

test:
<<: *common
database: solar_test

production:
<<: *common
database: solar_production
9 changes: 9 additions & 0 deletions config/initializers/sidekiq.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# config/initializers/sidekiq.rb

Sidekiq.configure_server do |config|
config.redis = { url: 'redis://redis:6379/0' }
end

Sidekiq.configure_client do |config|
config.redis = { url: 'redis://redis:6379/0' }
end
7 changes: 7 additions & 0 deletions config/sidekiq.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# config/sidekiq.yml

:concurrency: 5
:queues:
- default
- mailers
- critical
55 changes: 46 additions & 9 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -1,39 +1,69 @@
version: '3.4'
# version: '3.4'

services:
app:
build:
context: .
dockerfile: Dockerfile
entrypoint: ./entrypoints/app-entrypoint.sh
# entrypoint: ./entrypoints/app-entrypoint.sh
depends_on:
- database
- redis
ports:
- "8080:8080"
- "3000:3000"
volumes:
- .:/app
- gem_cache:/usr/local/bundle/gems
- gem_cache:/usr/local/bundle
- node_modules:/app/node_modules
# - gem_cache:/usr/local/bundle/gems
env_file: .env
environment:
RAILS_ENV: development
DB_REDIS: redis
POSTGRES_HOST: database

database:
image: postgres:9.5
image: postgres:14
# image: postgres:9.5
volumes:
- db_data:/var/lib/postgresql/data
- ./init.sql:/docker-entrypoint-initdb.d/init.sql
environment:
POSTGRES_DB: "solar"
POSTGRES_HOST_AUTH_METHOD: "trust"
POSTGRES_USER: solar
POSTGRES_PASSWORD: 123456 # Exemplo de senha
# POSTGRES_HOST_AUTH_METHOD: "trust"
ports:
- "5433:5432"

mailcatcher:
image: yappabe/mailcatcher
ports:
- "1025:1025"
- "1080:1080"
- "1025:1025"
- "1080:1080"

redis:
image: redis:alpine
volumes:
- redis_data:/data
ports:
- "6379:6379"

sidekiq:
build:
context: .
dockerfile: Dockerfile
command: bundle exec sidekiq -C config/sidekiq.yml
volumes:
- .:/app
- gem_cache:/usr/local/bundle
- node_modules:/app/node_modules
environment:
RAILS_ENV: development
depends_on:
- app
- database
- redis

# sidekiq:
# build:
Expand All @@ -49,4 +79,11 @@ services:
# - node_modules:/app/node_modules
# env_file: .env
# environment:
# RAILS_ENV: developm
# RAILS_ENV: development
# entrypoint: ./entrypoints/sidekiq-entrypoint.sh

volumes:
gem_cache:
db_data:
node_modules:
redis_data: {}
3 changes: 2 additions & 1 deletion entrypoints/app-entrypoint.sh
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@ bundle exec rails db:migrate 2>/dev/null || bundle exec rails db:create db:migra
echo "Database created & migrated!"

# Run the Rails server
bundle exec rails server -b 0.0.0.0 -p 8080
# bundle exec rails server -b 0.0.0.0 -p 8080
# bundle exec foreman s
exec "$@"

# http://equinox.one/blog/2016/04/20/Docker-with-Ruby-on-Rails-in-development-and-production/