Ruby

24 de Fevereiro de 2024 - @Walmir Neto


Tudo que eu venho escrevendo nos último dias, foi para servi de setup para essa anotações. Desde do Setup de máquina até o [Usando Ansible para instalar dependências no seu server](https://walmir.notion.site/Usando-Ansible-para-instalar-depend-ncias-no-seu-server-98c77645352e42e188b23bdb4517d008) e Automatizando Rails com Ansible para instalar as dependências do docker lá na AWS. Tudo para não precisar acessar a maquina ssh [email protected] e rodar os seguintes comandos:

sudo apt update
sudo apt upgrade -y
sudo apt install -y docker.io curl git
sudo usermod -a -G docker ubuntu

Mas vamos lá

Vamos adicionar a gem (Esse passo é opcional, mas gosto de deixar aqui)

# Gemfile
group :development do
   # <https://github.com/railsjazz/rails_live_reload#usage>
   gem "rails_live_reload", "~> 0.3.5"
+  # <https://kamal-deploy.org/docs/commands>
+  gem "kamal", "~> 1.3"
 end

Depois disso precisamos rodar kamal init isso vai gerar alguns arquivos na pasta .kamal e o arquivo config/deploy.yml que é o que nos interessa por agora que você pode baixar aqui

config/deploy.yml

Mas vou deixar só o que vamos precisar

service: rails-demo

image: owalmirneto/rails-demo

servers:
  - 54.145.164.68

registry:
  server: registry.gitlab.com
  username:
    - GITLAB_REGISTRY_USERNAME
  password:
    - GITLAB_REGISTRY_PASSWORD

env:
  secret:
    - RAILS_MASTER_KEY
    - RAILS_DEMO_DATABASE_URL

ssh:
  user: ubuntu

Para o GITLAB_REGISTRY_PASSWORD você precisa de um access token com as permissões de api, read_repository, write_repository, read_registry e write_registry. Para criar acesse https://gitlab.com/-/user_settings/personal_access_tokens

Automatizando o config/deploy.yml

Para isso vamos precisar adicar o deploy.yml no .gitignore

  /ansible/hosts

+ # Kamal
+ #
+ config/deploy.yml

Agora vamos renomear o config/deploy.yml para tofu/templates/config/deploy.tftpl e alterar para

image: owalmirneto/rails-demo

servers:
-   - 54.145.164.68
+ %{ for server in servers ~}
+   - ${server}
+ %{ endfor ~}

No tofu/local_files.tf precisamos adicionar

      webservers = [aws_instance.demo_instance.public_ip]
    })
  }

+ resource "local_file" "kamal_config" {
+   filename = "../config/deploy.yml"
+   content = templatefile("templates/config/deploy.tftpl", {
+     servers = [aws_instance.demo_instance.public_ip]
+   })
+ }