---
tags: vagrant, tutorial, dokku, provisionamento
---
# Provisionamento de VM com Dokku
É apenas um _Vagrantfile_ básico para subir uma VM com Debian 12, com Docker e Dokku instalados.
## Pacotes necessários no Debian
```bash=
# Instalação dos pacotes
sudo apt install \
vagrant-libvirt \
libvirt-daemon-system
# O usuário precisa estar no grupo libvirt
sudo adduser $USER libvirt
# Carregar o novo grupo na sessão atual
# Se fizer logout/login, o newgrp não é necessário
newgrp libvirt
```
## Vagrantfile
Crie um arquivo `Vagrantfile` em alguma pasta de trabalho, com o conteúdo:
```ruby=
Vagrant.configure("2") do |config|
config.vm.box = "debian/bookworm64"
# Especificar provider libvirt
config.vm.provider :libvirt do |libvirt|
libvirt.driver = "kvm"
libvirt.memory = 1600
libvirt.cpus = 1
libvirt.cpu_mode = "host-passthrough"
libvirt.nested = true
libvirt.disk_bus = "virtio"
libvirt.nic_model_type = "virtio"
end
# Configurações da VM
config.vm.hostname = "debian12-vm"
config.vm.synced_folder ".", "/vagrant", type: "rsync"
# Redirecionamento de portas (opcional)
# config.vm.network "forwarded_port", guest: 80, host: 8080
# config.vm.network "forwarded_port", guest: 22, host: 2222
# Rede privada (opcional)
# config.vm.network "private_network", type: "dhcp"
config.vm.network "private_network", ip: "192.168.121.5"
# Provisionamento (opcional)
config.vm.provision "shell", inline: <<-SHELL
apt-get update
apt-get install -y curl wget vim htop
# Instalação do Docker e do Dokku
wget -NP . https://dokku.com/install/v0.36.7/bootstrap.sh
sudo DOKKU_TAG=v0.36.7 bash bootstrap.sh
# Colocar o usuário vagrant no grupo docker
adduser vagrant docker
SHELL
end
```
## Provisionar a VM
Suba a VM com:
```bash=
vagrant up
```
Entre no bash da VM com:
```bash=
vagrant ssh
```
O usuário vagrant já pode lidar com o Docker, e também é _sudoer_, não terá problemas para lidar com o Dokku.

Podemos acessar, no navegador, a página do Dokku através do IP que fixamos na VM (192.168.121.5):

Se precisar alterar o Vagrantfile com novas configurações:
```bash=
vagrant reload
```
Se precisar mudar a parte do provisionamento (aquela em que instalamos o Dokku):
```bash=
vagrant provision
```
[Referência completa dos comandos do Vagrant](https://developer.hashicorp.com/vagrant/docs/cli).
## DNS local para acessar os domínios dos apps
Quando criamos um app Dokku, configuramos um domínio. Para acessar através do domínio do app, podemos colocar o domínio no arquivo `/etc/hosts` da máquina host:
```bash=
# Arquivo /etc/hosts
192.168.121.5 meuapp.leandroramos.me
```

E no navegador:

Ao usar o domínio, a mesma página inicial do Dokku foi carregada porque eu ainda não criei nenhum app na nova VM.