Coolify на Ubuntu 24.04: пошаговая установка
Coolify обещает «свой Heroku за пять минут», и на чистой Ubuntu 24.04 это почти правда: установка действительно сводится к одной команде. Проблемы начинаются дальше — панель не видит собственный сервер, сертификат не выпускается, а первая же сборка падает с кодом 137. Ниже — установка Coolify на Ubuntu 24.04 по шагам с командами, а рядом честный разбор мест, где обычно застревают.
Содержание
- Что такое Coolify и почему его ставят на свой сервер
- Требования и подготовка Ubuntu 24.04
- Установка одной командой и что на самом деле делает скрипт
- Первый вход, админ и сервер localhost
- Домен, HTTPS и фаервол без иллюзий
- Первый деплой и грабли, специфичные для 24.04
- Какой сервер брать в MAATRIX под Coolify
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Что такое Coolify и почему его ставят на свой сервер
Coolify — открытая self-hosted PaaS-платформа: вы отдаёте ей сервер, а она разворачивает на нём приложения из Git, базы данных, готовые сервисы и обратный прокси с автоматическим HTTPS. По сути это слой управления поверх Docker: вместо ручных docker compose up, конфигов Nginx и cron-задач под certbot вы нажимаете «Deploy» в веб-интерфейсе.
Актуальная ветка — четвёртая (v4): Laravel, всё в контейнерах, по умолчанию Traefik v3 как обратный прокси (в настройках переключается на Caddy или отключается, если у вас свой Nginx). Управлять Coolify умеет не только своим хостом, но и удалёнными машинами по SSH. Экономика простая: один VPS на 4 ГБ RAM держит десяток небольших приложений, и платите вы за сервер, а не за каждый инстанс.
Честный минус: Coolify развивается быстро, релизы выходят часто, и обновления иногда ломают рабочие вещи — гарантий обратной совместимости уровня Kubernetes здесь нет. Если проект критичен, держите бэкап /data/coolify и дампы Postgres.
Требования и подготовка Ubuntu 24.04
Берите чистый образ Ubuntu 24.04 LTS: если на сервере уже стоит Nginx, Apache, ISPmanager, aaPanel или другой Docker-стек, конфликт по портам 80 и 443 гарантирован.
Ресурсы. Официальный минимум — 2 CPU и 2 ГБ RAM, диск от 30 ГБ. Сам Coolify в простое съедает 500–700 МБ: контейнер приложения 300–400 МБ, coolify-db (Postgres) ~60 МБ, coolify-redis ~15 МБ, coolify-realtime ~40 МБ, Traefik ~30 МБ. Остальное — ваши приложения и, что важнее, сборки, которые едят память рывками.
Начните с обновления. На 24.04 обязательно отключите интерактивный needrestart, иначе apt upgrade зависнет на синем диалоге «Which services should be restarted?»:
export NEEDRESTART_MODE=a
apt update && apt -y full-upgrade
apt -y install curl wget git jq ca-certificates
Задайте имя хоста и проверьте часы — расхождение времени ломает выпуск Let's Encrypt-сертификатов: hostnamectl set-hostname coolify.example.com, затем timedatectl set-ntp true && timedatectl status | grep synchronized.
Если взяли 2 ГБ RAM, сразу добавьте swap — он спасёт первые сборки:
fallocate -l 4G /swapfile && chmod 600 /swapfile
mkswap /swapfile && swapon /swapfile
echo '/swapfile none swap sw 0 0' >> /etc/fstab
И поднимите лимиты inotify: по умолчанию fs.inotify.max_user_instances равен 128, а каждый контейнер с файловым вотчером их тратит — на двух десятках контейнеров упрётесь в потолок. Лечится строкой echo 'fs.inotify.max_user_instances = 1024' > /etc/sysctl.d/99-coolify.conf && sysctl --system.
Развернуть за пару минут
Готовый образ на VPS MAATRIX: NVMe, AMD EPYC, root-доступ. Локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Развернуть CoolifyУстановка одной командой и что на самом деле делает скрипт
Установщик запускается от root одной строкой:
curl -fsSL https://cdn.coollabs.io/coolify/install.sh | bash
На 2 vCPU это 3–6 минут, большая часть — скачивание Docker и образов (около 2,5 ГБ). Запускайте в screen, чтобы обрыв SSH не оставил систему в половинчатом состоянии.
Что скрипт делает под капотом:
- Ставит Docker через
get.docker.com. Это принципиально: пакетdocker.ioиз репозитория Ubuntu слишком старый, а Coolify требует Docker 26 и новее — на древнем установка прервётся с сообщением про неподдерживаемую версию. - Правит
/etc/docker/daemon.json: ротация логов и пул адресов для docker-сетей. Загляните туда после установки —cat /etc/docker/daemon.json. Если пул пересекается с вашей корпоративной сетью или WireGuard-туннелем на10.x.x.x, вы потеряете доступ к тем адресам изнутри контейнеров. Пул меняется в том же файле, дальшеsystemctl restart docker. - Создаёт
/data/coolifyс подкаталогамиsource,ssh,applications,databases,backups,services,proxy. Всё состояние живёт здесь, это и есть объект бэкапа. - Генерирует SSH-ключ и кладёт публичную часть в
~/.ssh/authorized_keysroot-а — через него панель управляет собственным хостом. - Поднимает контейнеры из
/data/coolify/source/docker-compose.ymlвместе сdocker-compose.prod.yml.
Проверьте результат:
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
Должны быть подняты coolify, coolify-db, coolify-redis и coolify-realtime. Если какой-то в статусе Restarting — docker logs coolify --tail 100. И честное ограничение: под обычным пользователем без sudo Coolify не развернуть, панель управляет Docker и SSH-доступом хоста.
Первый вход, админ и сервер localhost
Панель слушает порт 8000. Откройте http://IP_СЕРВЕРА:8000 — там форма регистрации. Первый зарегистрированный пользователь становится администратором, после чего открытая регистрация закрывается. Не тяните: сервер с открытым 8000 и без админа — приглашение занять вашу панель.
Дальше мастер предложит настроить сервер localhost. Здесь возникает самая частая ошибка:
Server is not reachable. Please validate your configuration and connection.
Панель ходит на собственный хост по SSH от имени root — и упирается в запрет root-логина: в большинстве облачных образов 24.04 в /etc/ssh/sshd_config стоит PermitRootLogin no. Разрешаем вход по ключу, но не по паролю:
sed -i 's/^#\?PermitRootLogin.*/PermitRootLogin prohibit-password/' /etc/ssh/sshd_config
systemctl restart ssh
Проверьте вручную ключом, который сгенерировал установщик:
ls /data/coolify/ssh/keys/
ssh -i /data/coolify/ssh/keys/id.root@host.docker.internal root@localhost 'docker info --format {{.ServerVersion}}'
Вернулась версия Docker — жмите Validate Server, статус станет зелёным. Получили Permission denied (publickey) — проверьте права: chmod 600 на ключ и chmod 700 на ~/.ssh root-а.
Вторая мелочь — «висящий» интерфейс: страница загрузилась, но данные не обновляются, а в консоли браузера ошибка соединения с WebSocket. Coolify использует realtime-канал на порту 6001 (и 6002 для встроенного терминала). Если между вами и сервером фаервол, эти порты нужно открыть — иначе панель выглядит живой, но ничего не показывает.
Домен, HTTPS и фаервол без иллюзий
Работать по голому IP неудобно и небезопасно. Заведите поддомен и wildcard — тогда каждый новый сервис получит адрес автоматически:
coolify.example.com. A 203.0.113.10
*.apps.example.com. A 203.0.113.10
Затем в панели: Settings → Instance Domain → впишите https://coolify.example.com. Coolify перевесит дашборд на Traefik и сам закажет сертификат Let's Encrypt. Убедитесь, что записи разъехались по DNS, прежде чем сохранять: dig +short coolify.example.com. Если Let's Encrypt не достучится до домена, в логах прокси (docker logs coolify-proxy --tail 200 | grep -i acme) будет строка вида acme: error: 403 :: urn:ietf:params:acme:error:unauthorized, а браузер покажет самоподписанный TRAEFIK DEFAULT CERT. Вторая причина той же ошибки — занятый 80-й порт: если остался Apache или Nginx, прокси не стартует. Проверьте ss -tlnp | grep -E ':80|:443'.
Теперь фаервол. Открыть надо:
ufw allow 22/tcp && ufw allow 80/tcp && ufw allow 443/tcp
ufw allow 6001/tcp && ufw allow 6002/tcp
ufw --force enable
Порт 8000 сюда специально не входит: после привязки домена дашборд доступен по HTTPS. Но вот подвох, о котором молчит половина мануалов: UFW не защищает опубликованные Docker-порты. Docker пишет правила в цепочку DOCKER-USER и в nat/PREROUTING раньше, чем трафик доходит до UFW, поэтому ufw deny 8000 не сработает. Убедиться легко: curl -m 5 -o /dev/null -w '%{http_code}\n' http://IP_СЕРВЕРА:8000 вернёт 200 даже при включённом запрете. Вариантов два: закрыть 8000 на фаерволе провайдера (уровень сети, до сервера) или добавить правило в DOCKER-USER:
iptables -I DOCKER-USER -p tcp --dport 8000 ! -s 127.0.0.1 -j DROP
Правило не переживёт перезагрузку — сохраните его через netfilter-persistent save. На Ubuntu 24.04 iptables работает через nft-бэкенд, но синтаксис остаётся прежним.
Первый деплой и грабли, специфичные для 24.04
Создайте проект, добавьте приложение через + New → Public Repository, укажите ветку и Build Pack. Nixpacks определит стек сам, но для прода лучше Dockerfile: Nixpacks иногда молча меняет версию рантайма между релизами.
Первая сборка на сервере с 2 ГБ RAM почти наверняка упрётся в память и оборвётся строкой exit code: 137. 137 — это 128 + 9, то есть процесс убит сигналом SIGKILL, и убил его OOM-killer ядра; подтверждает dmesg -T | grep -i 'killed process'. Сборка Next.js или Nuxt легко просит 2–3 ГБ на этапе бандлинга. Лечится по возрастанию правильности: swap (см. выше), NODE_OPTIONS=--max-old-space-size=1536 для сборщика, либо сборка образа на машине помощнее. На 4 ГБ RAM большинство фронтенд-сборок проходит спокойно.
Вторая грабля именно 24.04 — ужесточённый AppArmor: sysctl kernel.apparmor_restrict_unprivileged_userns возвращает 1, то есть непривилегированные user namespaces запрещены. На это натыкаются контейнеры со своей песочницей: Puppeteer и Playwright с headless Chrome, сборщики на базе bubblewrap. Симптом — падение с Failed to move to new namespace или мгновенный крэш браузера. Лечится так:
echo 'kernel.apparmor_restrict_unprivileged_userns = 0' > /etc/sysctl.d/99-userns.conf
sysctl --system
Честно: это ослабление защиты ядра, введённой не просто так. Отключайте, только если приложение без этого не работает, и не там, где крутится чужой код.
Обновляется Coolify из панели (Settings → Upgrade) или командой curl -fsSL https://cdn.coollabs.io/coolify/upgrade.sh | bash. Перед этим — бэкап:
docker exec coolify-db pg_dumpall -U coolify > /root/coolify-$(date +%F).sql
tar czf /root/coolify-data-$(date +%F).tar.gz /data/coolify
И про доступность из России: сервер должен свободно ходить на cdn.coollabs.io, ghcr.io, Docker Hub, npm и GitHub. Изнутри РФ эти адреса отдают curl: (28) Connection timed out after 5000 milliseconds, причём падать будет не установка, а случайные сборки — что противнее в отладке.
Какой сервер брать в MAATRIX под Coolify
Начнём с локации. Для Coolify рекомендуем UK (Лондон): чистый выход к ghcr.io, Docker Hub, npm и GitHub без региональных фильтров, а пинг до Москвы и Петербурга — 40–60 мс, панель отзывчивая, встроенный терминал не лагает. Плюс GDPR-соседство, если клиенты в ЕС. Франция даёт ту же картину и меньший пинг до континентальной Европы. Российскую локацию берут по одной причине — 152-ФЗ; тогда закладывайте зеркала реестров для сборок.
Теперь конфигурация, без округления вверх.
| Сценарий | CPU | RAM | Диск | Что реально получится |
|---|---|---|---|---|
| Минимум | 2 vCPU | 2 ГБ | 40 ГБ NVMe | Панель работает, 1–2 лёгких приложения. Фронтенд-сборки падают без swap |
| Рабочий вариант | 2–4 vCPU | 4 ГБ | 60–80 ГБ NVMe | 5–8 приложений, база, сборки проходят без плясок |
| Комфорт | 4–8 vCPU | 8–16 ГБ | 160 ГБ NVMe | Десятки сервисов, Postgres с нагрузкой, параллельные сборки |
Логика такая. 2 ГБ — не «для теста», а про то, что Coolify занимает треть памяти ещё до вашего первого приложения. Остатка хватит на пару статичных сайтов или лёгкий API, но сборка на Node прожуёт его и получит тот самый код 137. Жёсткий бюджет — берите 2 ГБ и обязательно ставьте 4 ГБ swap: решение рабочее, просто сборки идут медленнее. 4 ГБ — точка, с которой о памяти перестаёшь думать; её и советуем как стартовую.
По диску не экономьте: Docker копит слои образов и билд-кэш, 20 ГБ кончаются за месяц активных деплоев. 60 ГБ NVMe — разумный старт плюс еженедельный docker system prune -af (флаг --volumes добавляйте осознанно, он сносит неиспользуемые тома с данными).
Оплата — картами российских банков, по СБП, криптовалютой или токеном MAAT; иностранная карта для британской площадки не нужна. Сервер выдаётся с чистым образом Ubuntu 24.04 LTS и root-доступом, так что установщик Coolify запускается сразу после первого входа по SSH. Не уверены с объёмом памяти под свой стек — напишите, что планируете деплоить, поможем не переплатить.
Развернуть за пару минут
Готовый образ на VPS MAATRIX: NVMe, AMD EPYC, root-доступ. Локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Развернуть CoolifyОбсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Частые вопросы
Хватит ли 2 ГБ RAM для Coolify на Ubuntu 24.04?
Для самой панели — да, она занимает 500–700 МБ. Но сборки фронтенда на 2 ГБ падают с exit code: 137 (OOM). Либо добавляйте 4 ГБ swap, либо берите 4 ГБ RAM.
Почему панель пишет «Server is not reachable» сразу после установки?
Coolify подключается к собственному хосту по SSH от root, а в образах Ubuntu 24.04 root-логин обычно запрещён. Поставьте PermitRootLogin prohibit-password в /etc/ssh/sshd_config, перезапустите ssh и нажмите Validate Server.
Можно ли закрыть порт 8000 через ufw?
Нет: Docker публикует порты в обход UFW через цепочку DOCKER-USER. Закрывайте порт на фаерволе провайдера или правилом в DOCKER-USER, а дашборд выносите на домен с HTTPS.
Нужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.