cloud-init на VPS: автоматизация первого запуска сервера — иллюстрация к статье Storm Cloud Blog, категория Linux
cloud-init на VPS: автоматизация первого запуска сервера — иллюстрация к статье Storm Cloud Blog, категория Linux
Linux·2 мин··

cloud-init на VPS: автоматизация первого запуска сервера

cloud-init на VPS: user-data, SSH-ключи, пакеты, скрипты при создании. Воспроизводимая настройка без ручных шагов.

Краткий ответ: cloud-init выполняет скрипты и конфиги при первом boot VPS. Передайте user-data при создании сервера — получите готовый сервер с пользователем, SSH-ключами и пакетами без ручной первой настройки.

Создаёте 5 одинаковых VPS? cloud-init экономит часы повторяющихся команд.


Что делает cloud-init

  1. Создаёт пользователей и SSH-ключи
  2. Устанавливает пакеты
  3. Запускает runcmd (shell-скрипты)
  4. Настраивает hostname, timezone
  5. Пишет лог в /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. Связка:

  1. cloud-init: user, SSH, базовые пакеты
  2. 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 — полная конфигурация после. Часто используют вместе.