--- 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. ![image](https://hackmd.io/_uploads/S1b3ZtT2gg.png) Podemos acessar, no navegador, a página do Dokku através do IP que fixamos na VM (192.168.121.5): ![image](https://hackmd.io/_uploads/r1Nabt6hxg.png) 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 ``` ![image](https://hackmd.io/_uploads/ByFAWt6hex.png) E no navegador: ![image](https://hackmd.io/_uploads/rJPJfF62xx.png) 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.