Глава 1 · 1.9
Собствен cloud-init: автоматично настройване на Вашия VPS при първото стартиране
С cloud-init при инсталирането можете да подадете файл, който Вашият VPS изпълнява сам при първото стартиране. Така сървърът веднага инсталира Вашите постоянни пакети, създава Вашия собствен потребител и изпълнява Вашите команди. Това е удобно, ако често инсталирате повторно или искате винаги да започвате от една и съща основа. Не Ви е нужен API или терминал.
Къде се попълва?
- Отворете екрана на VPS чрез Моите продукти.
- Нов VPS: виждате блока Инсталирайте своя VPS (вижте Инсталиране на Вашия VPS: операционна система, парола и SSH ключ). Повторно инсталиране: изберете раздела Разширени и при Повторно инсталиране щракнете върху Инсталирайте повторно... (вижте Повторно инсталиране или свързване на ISO).
- Изберете операционната система и въведете root паролата и по желание Вашия SSH ключ, както винаги.
- Под SSH ключа щракнете върху Собствен cloud-init. Полето се разгъва.
- Поставете Вашия файл в полето.
- Щракнете върху бутона за инсталиране, например Инсталирайте Debian 13, а при повторно инсталиране върху Изтрийте всичко и инсталирайте повторно.
Root паролата или SSH ключът остават необходими, дори със собствен cloud-init. С тях винаги можете да влезете, включително чрез конзолата (вижте Конзолата: Вашият VPS в браузъра).
Какво може да съдържа файлът?
Полето приема user-data, файла, който cloud-init чете при първото стартиране. Първият ред определя какво представлява той:
| Първи ред | Какво е това? |
|---|---|
#cloud-config | Настройки в YAML: пакети, потребители, файлове, команди. Това използвате най-често. |
#!, например #!/bin/bash | Скрипт. Изпълнява се веднъж като root, в края на първото стартиране. |
#cloud-boothook | Скрипт, който се изпълнява много рано при стартиране, отново при всяко стартиране. Само за напреднали. |
## template: jinja | Шаблон с променливи на cloud-init. На следващия ред тогава стои #cloud-config или #!. |
- Максимум 256 KB и само текст (UTF-8).
- В YAML отстъпите се правят с интервали, никога с табулации.
- Мрежата (IPv4 и IPv6) се управлява от WebOké. Собствен network-config не се използва, затова не поставяйте мрежови настройки във файла.
Пример
Този файл обновява всички пакети, инсталира htop и fail2ban, създава потребителя anna с Вашия SSH ключ и sudo, дава на сървъра собствено име и задава правилната часова зона:
#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
Заменете ключа с Вашия собствен публичен ключ (вижте Създаване на SSH ключ в Windows, Mac и Linux). Редът - default запазва стандартния потребител, така че root паролата и SSH ключът от формуляра продължават да работят. След първото стартиране влизате с ssh anna@203.0.113.10. Как след това да изключите влизането като root и да настроите fail2ban, ще прочетете в Изключване на влизането с парола и като root и fail2ban срещу опити за отгатване на пароли.
Съвет: Примерът е за Debian и Ubuntu. При AlmaLinux и Rocky Linux htop и fail2ban се намират в допълнителния източник EPEL. Там пропуснете packages и под runcmd поставете първо dnf install -y epel-release, а след това dnf install -y htop fail2ban.
Какво подава самият WebOké?
WebOké винаги подава името на хоста, root паролата (само като хеш) и Вашия SSH ключ. Вашият файл се обединява с тях. Ако сами зададете users, password, chpasswd или ssh_authorized_keys, Вашите стойности имат предимство пред подаденото от WebOké.
Внимание: Ако сами зададете ssh_authorized_keys или password на най-горното ниво на файла, те заменят ключа и паролата от формуляра. В такъв случай сами поставете ключа, с който искате да влизате, иначе ще можете да влезете само чрез конзолата.
Успешно ли е?
cloud-init се изпълнява веднъж, при първото стартиране след инсталирането. Понякога това отнема няколко минути повече от самата инсталация, особено ако се инсталират пакети. Влезте и проверете:
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 --longпоказваstatus: done, когато всичко е готово,running, когато още работи, иerror, когато нещо се е объркало, заедно с грешката. Сcloud-init status --waitизчаквате, докато приключи.- В
/var/log/cloud-init-output.logе изходът от Вашите пакети, команди и скриптове. Повече подробности има в/var/log/cloud-init.log. cloud-init schema --systemпроверява файла Ви за грешки. Ако YAML не е правилен, cloud-init пропуска частите, които не разбира, без инсталацията да се провали.
Нещо се е объркало? Поправете го ръчно на сървъра или коригирайте файла си и инсталирайте повторно. Имайте предвид, че повторното инсталиране изтрива всичко на Вашия VPS.
Полезно е да знаете
- Работи за всички операционни системи в списъка: Ubuntu 24.04 и 26.04, Debian 12 и 13, AlmaLinux 9 и 10 и Rocky Linux 9 и 10.
- Файлът Ви се предава криптиран и не се съхранява в историята на задачите на Вашия VPS. Въпреки това не поставяйте в него пароли или други тайни, които не са Ви нужни.
- Всички възможности са описани в документацията на cloud-init на docs.cloud-init.io.
Внимание: Съдържанието на Вашия cloud-init е Ваша отговорност. Поддръжката не преглежда файла Ви и не помага при писането или подобряването му.
