cloud-init на VPS: автоматизация первого запуска сервера
cloud-init на VPS: user-data, SSH-ключи, пакеты, скрипты при создании. Воспроизводимая настройка без ручных шагов.
Краткий ответ: cloud-init выполняет скрипты и конфиги при первом boot VPS. Передайте user-data при создании сервера — получите готовый сервер с пользователем, SSH-ключами и пакетами без ручной первой настройки.
Создаёте 5 одинаковых VPS? cloud-init экономит часы повторяющихся команд.
Что делает cloud-init
- Создаёт пользователей и SSH-ключи
- Устанавливает пакеты
- Запускает runcmd (shell-скрипты)
- Настраивает hostname, timezone
- Пишет лог в /var/log/cloud-init.log
Пример user-data (YAML)
#cloud-config
users:
- name: deploy
groups: sudo
shell: /bin/bash
sudo: ALL=(ALL) NOPASSWD:ALL
ssh_authorized_keys:
- ssh-ed25519 AAAA... your-key
package_update: true
packages:
- nginx
- ufw
- fail2ban
runcmd:
- ufw allow OpenSSH
- ufw allow 80/tcp
- ufw allow 443/tcp
- ufw --force enable
- systemctl enable nginx
Провайдер передаёт user-data при создании VPS (metadata service или панель).
Проверка
cloud-init status
sudo cat /var/log/cloud-init-output.log
Ошибки — в journalctl.
cloud-init + Ansible
cloud-init — bootstrap при создании. Ansible — полная конфигурация после boot. Связка:
- cloud-init: user, SSH, базовые пакеты
- Ansible: приложение, Nginx, SSL
Terraform создаёт VPS + передаёт user-data.
Секреты в user-data
Не кладите пароли в открытый user-data. Используйте:
- SSH-ключи только
- Секреты через vault после boot — Restic / env из CI
- WireGuard keys — генерируйте на сервере
Типичные runcmd
runcmd:
- curl -fsSL https://get.docker.com | sh
- usermod -aG docker deploy
- timedatectl set-timezone Europe/Moscow
Для Docker Compose стеков — отдельный скрипт в runcmd.
Итог
cloud-init превращает «голый VPS» в «готовый к деплою» за минуты. Обязателен при масштабировании и IaC.
VPS с cloud-init — StormNet Cloud. Ручной чек-лист — Ubuntu 24.04.
Рекомендуем прочитать
Частые вопросы
Поддерживает ли VPS cloud-init?
Большинство Ubuntu/Debian образов на VPS провайдерах включают cloud-init. Проверьте: cloud-init status после первого boot.
cloud-init или Ansible?
cloud-init — при создании сервера (bootstrap). Ansible — полная конфигурация после. Часто используют вместе.






