Skip to content

Instantly share code, notes, and snippets.

@aurelioluiz
Last active December 12, 2019 15:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save aurelioluiz/f5b8d8bff356a1fadd4c697c705f0ea1 to your computer and use it in GitHub Desktop.
Save aurelioluiz/f5b8d8bff356a1fadd4c697c705f0ea1 to your computer and use it in GitHub Desktop.
Aplicação Rails com Dokku na DigitalOcean

Aplicação Rails com Dokku na DigitalOcean

Etapas para configuração de uma aplicação em Rails na DigitalOcean usando o Dokku para deploy. A documentação completa está disponível em http://dokku.viewdocs.io/dokku/getting-started/installation

Requisitos

  • DigitalOcean droplet Ubuntu 18.04
  • Dokku 1-click installation
  • Aplicação Rails no GitHub

Criando usuário deploy

Acesse o droplet como root

# local
$ ssh root@1.2.3.4

Crie o usuário e adicione ao grupo sudo

# droplet
$ adduser deploy
$ adduser deploy sudo
$ exit

Configure o acesso SSH via chave privada [opcional]

# local
$ ssh-copy-id root@1.2.3.4
$ ssh-copy-id deploy@1.2.3.4

Timezone

# droplet
sudo dpkg-reconfigure tzdata

Configurando o Docker

Por padrão o Docker não limita o tamanho dos arquivos de log que serão gerados nos containes, então vamos limitar em 100MB para evitar ocupar todo o disco. Edite o arquivo /etc/docker/daemon.json com o seguinte conteúdo:

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
  }
}

Veja mais sobre arquivos de log no Docker em https://docs.docker.com/config/containers/logging/json-file/

Configurando o Dokku

Acesse o IP do droplet no navegador para configurar o acesso do usuário dokku

  • Public SSH Keys: chave pública da máquina local
  • Hostname: IP ou domínio global da aplicação

Criando a aplicação

# droplet
$ dokku apps:create <app-name>
$ dokku domains:set <app-name> <app-domain.com>

Deploy

Por padrão o Dokku faz o deploy no branch master.

# local
git remote add dokku dokku@<droplet-ip>:<app-name>
git push dokku master 

# para fazer o deploy a partir de outro branch
git push dokku <branch>:master 

Configurando serviços

# droplet

# postgres
$ sudo dokku plugin:install https://github.com/dokku/dokku-postgres.git
$ dokku postgres:create <db-name>
$ dokku postgres:link <db-name> <app-name>

# mysql
$ sudo dokku plugin:install https://github.com/dokku/dokku-mysql.git
$ dokku mysql:create <db-name>
$ dokku mysql:link <db-name> <app-name>

# redis
$ sudo dokku plugin:install https://github.com/dokku/dokku-redis.git
$ dokku redis:create <app-name-redis>
$ dokku redis:link <app-name-redis> <app-name>

# let's encrypt
$ sudo dokku plugin:install https://github.com/dokku/dokku-letsencrypt.git
$ dokku config:set --no-restart <app-name> DOKKU_LETSENCRYPT_EMAIL=<your-email>
$ dokku letsencrypt <app-name>
$ dokku letsencrypt:auto-renew <app-name>
$ dokku letsencrypt:cron-job --add <app-name>

Sidekiq

Para habilitar o Sidekiq crie um arquivo Procfile na raiz do repositório e informe os processos ativos no servidor.

# Procfile
rake: bundle exec rake
console: bin/rails console
web: bin/rails server -p $PORT -e $RAILS_ENV
worker: bundle exec sidekiq -C config/sidekiq.yml
# droplet
$ dokku ps:scale <app-name> web=1 worker=1

Migrate e Seed

Após definir a conexão inicialize o banco de dados.

# droplet
$ dokku run <app-name> rails db:migrate
$ dokku run <app-name> rails db:seed

Logs

Para monitorar os logs da aplicação.

# droplet
$ dokku logs <app-name> -t

Storage

Para adicionar pastas que serão mantidas entre as releases.

# droplet
$ dokku storage:mount <app-name> /var/lib/dokku/data/storage/<app-name>/<folder>:/app/<folder>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment