From 5f59baaa1bb1795e716059e165037c7541912aa3 Mon Sep 17 00:00:00 2001 From: Paula Tatyene Date: Mon, 1 Sep 2025 13:40:09 -0300 Subject: [PATCH 1/3] =?UTF-8?q?Atualiza=20configura=C3=A7=C3=A3o=20do=20am?= =?UTF-8?q?biente=20com=20docker?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/README.md | 15 +++++++++++++++ config/_database-docker.yml | 29 +++++++++++++++++++++++++++++ docker-compose.yml | 1 + 3 files changed, 45 insertions(+) create mode 100644 config/_database-docker.yml diff --git a/config/README.md b/config/README.md index 9b3d3f1f7..9cd324fb0 100644 --- a/config/README.md +++ b/config/README.md @@ -31,6 +31,21 @@ Fluxo alternativo: iniciar o ambiente no próprio Docker Desktop. + ### 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. diff --git a/config/_database-docker.yml b/config/_database-docker.yml new file mode 100644 index 000000000..434ba2108 --- /dev/null +++ b/config/_database-docker.yml @@ -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 \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 6cb3585cf..2b84ddc8f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -20,6 +20,7 @@ services: environment: RAILS_ENV: development DB_REDIS: redis + POSTGRES_HOST: database database: image: postgres:14 From c491006cb7ccf77ab1a3fdb080dca1f9850303f8 Mon Sep 17 00:00:00 2001 From: Paula Tatyene Date: Thu, 11 Sep 2025 17:28:02 -0300 Subject: [PATCH 2/3] Configura ambiente para usar terminal interativo para debbug --- app/controllers/.pryrc | 1 + docker-compose.yml | 2 ++ 2 files changed, 3 insertions(+) create mode 100644 app/controllers/.pryrc diff --git a/app/controllers/.pryrc b/app/controllers/.pryrc new file mode 100644 index 000000000..4c3d07dda --- /dev/null +++ b/app/controllers/.pryrc @@ -0,0 +1 @@ +Pry.config.pager = false \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 2b84ddc8f..ba31af271 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -9,6 +9,8 @@ services: depends_on: - database - redis + tty: true + stdin_open: true ports: - "3000:3000" volumes: From c83a4862887acb7bc8b4e1114f830db411057176 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Neilson?= Date: Wed, 5 Nov 2025 11:20:22 -0300 Subject: [PATCH 3/3] =?UTF-8?q?atualiza=20as=20modifica=C3=A7=C3=B5es=20do?= =?UTF-8?q?=20docker=20sobreescritas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 130 +++++++++++++++------------------ Gemfile | 2 + config/README.md | 26 ++++++- config/initializers/sidekiq.rb | 9 +++ config/sidekiq.yml | 7 ++ docker-compose.yml | 54 +++++++++++--- entrypoints/app-entrypoint.sh | 3 +- 7 files changed, 144 insertions(+), 87 deletions(-) create mode 100644 config/initializers/sidekiq.rb create mode 100644 config/sidekiq.yml diff --git a/Dockerfile b/Dockerfile index 83929fe22..1bf778d38 100644 --- a/Dockerfile +++ b/Dockerfile @@ -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/ \ No newline at end of file +# --- 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"] diff --git a/Gemfile b/Gemfile index 7c2898a62..b1aec185b 100644 --- a/Gemfile +++ b/Gemfile @@ -1,6 +1,7 @@ source "http://rubygems.org" ruby "2.7.2" +# ruby '2.7.8' #gem "rails", "~> 3.2.16" gem "rails", "5.1.7" @@ -8,6 +9,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 diff --git a/config/README.md b/config/README.md index a4d991e02..9cd324fb0 100644 --- a/config/README.md +++ b/config/README.md @@ -1,10 +1,27 @@ # 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. @@ -35,3 +52,8 @@ Gerar uma chave e usar __deploy keys__. Em qualquer lugar do terminal + > docker exec -it solar-app-1 /bin/bash + + OU no diretório do projeto + + > docker compose exec app bash \ No newline at end of file diff --git a/config/initializers/sidekiq.rb b/config/initializers/sidekiq.rb new file mode 100644 index 000000000..f81c27a1b --- /dev/null +++ b/config/initializers/sidekiq.rb @@ -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 \ No newline at end of file diff --git a/config/sidekiq.yml b/config/sidekiq.yml new file mode 100644 index 000000000..d6e42efa3 --- /dev/null +++ b/config/sidekiq.yml @@ -0,0 +1,7 @@ +# config/sidekiq.yml + +:concurrency: 5 +:queues: + - default + - mailers + - critical \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index b0435c883..2b84ddc8f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,22 +1,21 @@ -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 - tty: true - stdin_open: true 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 @@ -24,21 +23,47 @@ services: 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: @@ -54,4 +79,11 @@ services: # - node_modules:/app/node_modules # env_file: .env # environment: - # RAILS_ENV: developm \ No newline at end of file + # RAILS_ENV: development + # entrypoint: ./entrypoints/sidekiq-entrypoint.sh + +volumes: + gem_cache: + db_data: + node_modules: + redis_data: {} \ No newline at end of file diff --git a/entrypoints/app-entrypoint.sh b/entrypoints/app-entrypoint.sh index f56722bd4..564b4168c 100755 --- a/entrypoints/app-entrypoint.sh +++ b/entrypoints/app-entrypoint.sh @@ -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/