Alpine Linux на VPS: минимальная система и её подводные камни
Alpine Linux — дистрибутив, который после установки занимает около сотни мегабайт диска и в простое расходует несколько десятков мегабайт памяти. Это достигается тремя решениями: библиотека musl вместо glibc, набор утилит BusyBox вместо полноценных GNU-программ и система инициализации OpenRC вместо systemd. На сервере это означает быструю загрузку, мало лишних служб и небольшую поверхность атаки, но и ряд отличий, о которых стоит знать заранее: многие инструкции из интернета написаны под Debian или Ubuntu и на Alpine работают не дословно.
Для каких задач Alpine подходит
- Самые маленькие тарифы с 256–512 МБ памяти: там, где Ubuntu уже тесно, Alpine оставляет почти всю память приложению.
- Хост для контейнеров. Docker и containerd ставятся из официального репозитория, система почти не мешает контейнерам. Требования к железу описаны на странице VPS для Docker.
- Обратный прокси, DNS-сервер, узел частной сети на WireGuard — службы, которым нужны сеть и пара конфигов, а не большой стек библиотек.
- Сервер-«одноразка» для тестов и CI: образ разворачивается за секунды и легко пересобирается с нуля.
Хуже Alpine подходит для сайтов под панелью управления, проприетарного софта, который распространяется только в виде пакетов для glibc, и проектов, где администратор не готов разбираться в отличиях от привычных дистрибутивов. В таких случаях спокойнее взять Debian: он тоже экономен, но совместим со всем.
Чем Alpine отличается от привычного Linux
- Пакеты ставятся через apk:
apk update,apk add пакет,apk upgrade. Репозиторий community по умолчанию может быть выключен — раскомментируйте его в/etc/apk/repositories. - Службы управляются через OpenRC:
rc-service nginx startиrc-update add nginxдля автозапуска. Юнит-файлы systemd здесь не работают, для своих программ пишут короткие init-скрипты. - musl вместо glibc. Готовые бинарники, собранные под glibc, не запускаются или падают. Слой совместимости gcompat помогает не всегда. Для Python часть пакетов не имеет готовых сборок под musl и компилируется при установке, что долго и требует компилятора на сервере.
- Нет bash по умолчанию: командная оболочка — ash из BusyBox. Скрипты с bash-синтаксисом либо переписывают, либо доставляют bash отдельным пакетом.
- Логи пишет syslog из BusyBox в
/var/log/messages, journalctl здесь нет.
Установка и обновления
Готовый шаблон Alpine есть не у каждого хостера, а там, где он есть, бывает собран из старой версии. Надёжнее поставить систему с официального образа virt — он сделан как раз для виртуальных машин. Для этого нужен VPS на KVM с загрузкой своего образа и VNC-консолью: загрузитесь с ISO, войдите под root без пароля и запустите setup-alpine. Скрипт спросит раскладку, сеть, часовой пояс, SSH-сервер и диск; для сервера выбирайте режим установки sys — обычную установку на диск. Список подходящих тарифов — на странице VPS со своим ISO.
Если хостер выдаёт адрес не по DHCP, сеть придётся описать вручную в /etc/network/interfaces; особенно это касается IPv6. Проверьте сеть в консоли до перезагрузки, чтобы не остаться без доступа.
Сразу после установки задайте пароль root, создайте обычного пользователя и добавьте ему SSH-ключ. Вместо sudo в Alpine часто используют doas — он меньше и проще в настройке. Файрвола по умолчанию нет: поставьте nftables или iptables с awall и откройте только SSH и нужные службы. Отдельно проверьте время: без chrony или ntpd часы виртуальной машины постепенно уходят, а от точного времени зависят проверка TLS-сертификатов и порядок записей в журналах.
Стабильные версии Alpine выходят два раза в год, основной репозиторий каждой поддерживается около двух лет. Обновление внутри версии — apk upgrade. Для перехода на новую замените номер версии в /etc/apk/repositories и выполните apk upgrade --available, затем перезагрузитесь. Ветку edge на сервер не ставьте: это разработческая версия. Автоматических обновлений в Alpine нет — поставьте задачу в cron или подпишитесь на рассылку о выпусках.
Что учесть при выборе тарифа
Памяти Alpine нужно так мало, что на тарифе решает не она, а диск и сеть. Даже на 512 МБ остаётся место для nginx, небольшой базы и пары контейнеров, но не экономьте на диске, если планируете Docker: образы и слои быстро занимают гигабайты. На контейнерной виртуализации Alpine тоже работает, но там вы не выбираете ядро, и модули вроде WireGuard зависят от настроек хостера. Если на сервере будет что-то тяжелее пары служб, сразу берите хотя бы 1 ГБ памяти и swap-файл.