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
- DigitalOcean droplet Ubuntu 18.04
- Dokku 1-click installation
- Aplicação Rails no GitHub
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
# droplet
sudo dpkg-reconfigure tzdata
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/
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
# droplet
$ dokku apps:create <app-name>
$ dokku domains:set <app-name> <app-domain.com>
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
# 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>
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
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
Para monitorar os logs da aplicação.
# droplet
$ dokku logs <app-name> -t
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>