O cloud-init é uma ferramenta de configuração de servidores em nuvem que permite passar parâmetros do usuário ao inicializar uma máquina virtual.
O cloud-init permite passar parâmetros do usuário (user-data) durante a inicialização de uma máquina virtual, acelerando e automatizando o processo de configuração do servidor.
Com o cloud-init, você pode personalizar a configuração do servidor, instalar softwares, criar diretórios e usuários, gerenciar acessos e muito mais.
Você pode enviar scripts de cloud-init como arquivos de texto #cloud-config ou como scripts shell #!/bin/sh.
Ao usar scripts shell, tenha em mente:
O script shell será automaticamente convertido em cloud-config usando a diretiva runcmd.
runcmd é executado apenas uma vez. Se você editar o script e reiniciar o servidor, ele não será executado novamente.
Se você precisar executar o script a cada boot, use scripts cloud-config com a diretiva bootcmd.
Os scripts são executados como root, portanto não é necessário adicionar sudo aos comandos.
Todos os arquivos e diretórios criados pertencerão ao usuário root. Se você quiser que outro usuário tenha acesso, defina as permissões apropriadas no script.
O script é executado automaticamente, portanto não é possível usar comandos que exigem interação do usuário. Para comandos que pedem confirmação, utilize a flag -y (por exemplo, apt upgrade -y).
O log de execução do script é gravado no arquivo /var/log/cloud-init-output.log.
Ao usar imagens de servidor de terceiros, o cloud-init pode não funcionar corretamente.
No Ubuntu, o cloud-init cria o usuário ubuntu por padrão se não houver a diretiva users. Para evitar isso, use a diretiva: users: [].
Você pode enviar o script de cloud-init:
Ao criar um novo servidor. Os parâmetros de cloud-config serão aplicados durante a instalação.

Ao reinstalar o servidor. Os parâmetros serão aplicados durante a instalação.
No reboot. Nesse caso, você pode enviar o script na seção Plano e depois reiniciar o servidor. Para que os parâmetros sejam aplicados, é necessário reiniciar o sistema com o comando: cloud-init clean --reboot.
Você pode modificar o script de cloud-init já enviado nas configurações do servidor.
Para que os parâmetros atualizados sejam aplicados no próximo reboot, é necessário reiniciar o sistema com o comando:
cloud-init clean --reboot
Passos:
Vá até a aba Plano.
Clique em Editar no bloco Cloud-init.
Faça as alterações e salve.
O script será aplicado na próxima reinicialização do servidor.
O arquivo deve começar com #cloud-config na primeira linha.
#cloud-config
package_update: true
packages:
- apache2
- mariadb-server
- mariadb-client
#cloud-config
users:
- name: username
- name: new_username
#cloud-config
ssh_authorized_keys:
- ssh-rsa PUBLIC_KEY username@server
Você pode adicionar várias chaves de uma vez:
#cloud-config
ssh_authorized_keys:
- ssh-rsa PUBLIC_KEY username@server
- ssh-rsa PUBLIC_KEY_2 username2@desktop
#cloud-config
users:
- name: username
groups: sudo
shell: /bin/bash
sudo: ['ALL=(ALL) NOPASSWD:ALL']
ssh-authorized-keys:
- PUBLIC_KEY username@server
- PUBLIC_KEY_2 username2@desktop
#cloud-config
package_update: true
packages:
- apache2
- php-mysql
- mysql-server
- libapache2-mod-php
- php-gd
- php-curl
runcmd:
- [ find, /var/www, -type, d, -exec, chmod, 2775, {}, \; ]
- [ find, /var/www, -type, f, -exec, chmod, 0664, {}, \; ]
write_files:
- path: /var/www/html/phpinfo.php
owner: www-data:www-data
content: |
""
Após a conclusão da configuração, o link http://server_ip/phpinfo.php exibirá uma página com os parâmetros do PHP.
Mais exemplos podem ser encontrados na documentação do cloud-init.
O script deve começar com #!/bin/sh na primeira linha.
#!/bin/sh
apt -y update
apt -y install fail2ban
#!/bin/sh
##Installing PHP 7.2
yum -y install epel-release
yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install https://rpms.remirepo.net/enterprise/remi-release-7.rpm
yum-config-manager --enable remi-php72
yum update -y
yum install -y php php-mcrypt php-cli php-gd php-curl php-mysql php-ldap php-zip php-process php-ldap php-mbstring
##Installing MariaDB 11.02
wget https://downloads.mariadb.com/MariaDB/mariadb_repo_setup
chmod +x mariadb_repo_setup
bash mariadb_repo_setup
yum install -y httpd mariadb-server
##Enabling the services
systemctl start mariadb
systemctl enable mariadb
systemctl start httpd
systemctl enable httpd
##Setting permissions
chmod 2775 /var/www
find /var/www -type d -exec chmod 2775 {} \;
find /var/www -type f -exec chmod 0664 {} \;
## Outputting phpinfo
echo "" > /var/www/html/phpinfo.php
## Opening the port
iptables -t filter -I INPUT -p tcp --dport 80 -j ACCEPT