Capítulo 1 · 1.9
cloud-init próprio: configurar o seu VPS automaticamente no primeiro arranque
Com o cloud-init, fornece durante a instalação um ficheiro que o seu VPS executa por si próprio no primeiro arranque. Assim, o servidor instala de imediato os seus pacotes habituais, cria o seu próprio utilizador e executa os seus comandos. É prático se reinstala com frequência ou se pretende começar sempre com a mesma base. Não precisa de API nem de terminal para isso.
Onde se preenche?
- Abra o ecrã do VPS através de Os meus produtos.
- VPS novo: verá o bloco Instale o seu VPS (consulte Instalar o seu VPS: sistema operativo, palavra-passe e chave SSH). Reinstalação: escolha o separador Avançado e, em Reinstalação, clique em Reinstalar... (consulte Reinstalar ou montar uma ISO).
- Escolha o sistema operativo e introduza a palavra-passe de root e, se pretender, a sua chave SSH, como habitualmente.
- Por baixo da chave SSH, clique em cloud-init próprio. O campo abre-se.
- Cole o seu ficheiro no campo.
- Clique no botão de instalação, por exemplo Instalar Debian 13, ou, no caso de uma reinstalação, em Apagar tudo e reinstalar.
A palavra-passe de root ou a chave SSH continua a ser necessária, mesmo com um cloud-init próprio. Com elas consegue sempre entrar, também através da consola (consulte A consola: o seu VPS no navegador).
O que pode conter o ficheiro?
O campo aceita user-data, o ficheiro que o cloud-init lê no primeiro arranque. A primeira linha determina o tipo de ficheiro:
| Primeira linha | O que é? |
|---|---|
#cloud-config | Definições em YAML: pacotes, utilizadores, ficheiros, comandos. É o que normalmente utilizará. |
#!, por exemplo #!/bin/bash | Um script. É executado uma única vez como root, no final do primeiro arranque. |
#cloud-boothook | Um script executado muito cedo no arranque, novamente em cada arranque. Apenas para utilizadores avançados. |
## template: jinja | Um modelo com variáveis do cloud-init. Na linha seguinte figura então #cloud-config ou #!. |
- No máximo 256 KB e apenas texto (UTF-8).
- Em YAML, a indentação faz-se com espaços, nunca com tabulações.
- A rede (IPv4 e IPv6) é gerida pela WebOké. Uma network-config própria não é utilizada; por isso, não inclua definições de rede.
Um exemplo
Este ficheiro atualiza todos os pacotes, instala o htop e o fail2ban, cria o utilizador anna com a sua chave SSH e sudo, atribui ao servidor um nome próprio e acerta o fuso horário:
#cloud-config
hostname: web1
fqdn: web1.example.com
package_update: true
package_upgrade: true
packages:
- htop
- fail2ban
users:
- default
- name: anna
shell: /bin/bash
sudo: "ALL=(ALL) NOPASSWD:ALL"
ssh_authorized_keys:
- ssh-ed25519 AAAAC3Nza... anna@laptop
runcmd:
- timedatectl set-timezone Europe/Amsterdam
Substitua a chave pela sua própria chave pública (consulte Criar uma chave SSH no Windows, Mac e Linux). A linha - default mantém o utilizador predefinido, para que a palavra-passe de root e a chave SSH do formulário continuem a funcionar normalmente. Após o primeiro arranque, inicie sessão com ssh anna@203.0.113.10. Como desativar depois o início de sessão como root e configurar o fail2ban, pode ler em Desativar o início de sessão com palavra-passe e como root e fail2ban contra tentativas de adivinhação.
Dica: O exemplo destina-se a Debian e Ubuntu. Em AlmaLinux e Rocky Linux, o htop e o fail2ban encontram-se na fonte adicional EPEL. Aí, omita packages e coloque em runcmd primeiro dnf install -y epel-release e depois dnf install -y htop fail2ban.
O que fornece a própria WebOké?
A WebOké fornece sempre o nome do anfitrião, a palavra-passe de root (apenas como hash) e a sua chave SSH. O seu ficheiro é combinado com estes dados. Se definir users, password, chpasswd ou ssh_authorized_keys, os seus valores prevalecem sobre os fornecidos pela WebOké.
Atenção: Se definir ssh_authorized_keys ou password no nível superior do seu ficheiro, estes substituem a chave e a palavra-passe do formulário. Nesse caso, inclua a chave com a qual pretende iniciar sessão; caso contrário, só conseguirá entrar através da consola.
Correu bem?
O cloud-init é executado uma única vez, no primeiro arranque após a instalação. Isso pode demorar alguns minutos mais do que a própria instalação, sobretudo se forem instalados pacotes. Inicie sessão e verifique:
anna@web1:~$ cloud-init status --long
anna@web1:~$ sudo tail -n 30 /var/log/cloud-init-output.log
anna@web1:~$ sudo cloud-init schema --system
cloud-init status --longmostrastatus: donequando tudo estiver concluído,runningse ainda estiver em curso eerrorse algo correu mal, juntamente com o erro. Comcloud-init status --waitaguarda até estar concluído.- Em
/var/log/cloud-init-output.logencontra o resultado dos seus pacotes, comandos e scripts. Mais pormenores encontram-se em/var/log/cloud-init.log. cloud-init schema --systemverifica o seu ficheiro quanto a erros. Se o YAML não estiver correto, o cloud-init ignora as partes que não compreende, sem que a instalação falhe.
Algo correu mal? Corrija manualmente no servidor, ou ajuste o seu ficheiro e reinstale. Tenha em conta que a reinstalação apaga tudo o que está no seu VPS.
Bom saber
- Funciona com todos os sistemas operativos da lista: Ubuntu 24.04 e 26.04, Debian 12 e 13, AlmaLinux 9 e 10 e Rocky Linux 9 e 10.
- O seu ficheiro é transmitido de forma encriptada e não fica guardado no histórico de tarefas do seu VPS. Ainda assim, não inclua palavras-passe nem outros segredos de que não precise.
- Todas as possibilidades estão descritas na documentação do cloud-init em docs.cloud-init.io.
Atenção: O conteúdo do seu cloud-init é da sua responsabilidade. O suporte não analisa o seu ficheiro nem ajuda a escrevê-lo ou a melhorá-lo.
