Домашний сервер редко остаётся полигоном для одного контейнера. Сначала появляется облачное хранилище, потом база для заметок, затем пара внутренних сервисов, и вот уже на хосте лежат десяток compose-файлов, самодельные скрипты обновления и сертификаты, которые продлеваются вручную. Coolify закрывает эту прослойку: панель собирает приложения из Git, выдаёт им домены и TLS, поднимает базы и хранит переменные окружения. Разберём установку и повседневную работу, а также места, где панель ломается предсказуемо.

Что даёт Coolify

Coolify — открытый self-hosted PaaS. Он работает поверх Docker и умеет три вещи: собирать образ из репозитория, запускать его рядом с базой и публиковать наружу по домену с сертификатом. Сборка идёт через Nixpacks (автоопределение языка), Dockerfile или готовый docker-compose. Базы Postgres, MySQL, MariaDB, Redis, MongoDB и ClickHouse ставятся в один клик и получают внутренние учётные данные.

Границы стоит понимать сразу. Это не Kubernetes: оркестрации между десятками машин, автоскейлинга и сложных политик здесь нет. Панель не чинит приложение: упавший контейнер придётся разбирать по логам. Зато для одного-двух серверов и небольшой команды Coolify снимает рутину, которая обычно держится на bash-скриптах.

Подготовка сервера

Минимум — два ядра и два гигабайта памяти, но с базами и сборкой образов комфортнее начинать с четырёх. Подойдёт Debian 12/13 или Ubuntu 22.04/24.04 с чистым Docker. Ставьте панель на отдельный хост: она управляет Docker, и соседство с чужими контейнерами усложняет разбор конфликтов.

Сначала базовая гигиена: обновления, отдельный пользователь, ключи вместо пароля и межсетевой экран.

sudo apt update && sudo apt full-upgrade -y
sudo adduser deploy
sudo usermod -aG sudo deploy
sudo ufw allow 22/tcp && sudo ufw allow 80,443/tcp
sudo ufw enable

Домен панели и приложений должен указывать A-записью на внешний адрес. Если адрес динамический, понадобится DDNS-имя и короткий TTL. Для Let’s Encrypt нужен доступ по порту 80: проверка домена идёт через HTTP, и закрытый порт превращается в повторяющиеся ошибки выпуска сертификата.

Установка

Официальный установщик поднимает Docker, если его нет, создаёт тома и запускает контейнеры панели. Скрипт стоит скачать и прочитать: он выполняется от root и меняет систему.

curl -fsSL https://cdn.coollabs.io/coolify/install.sh -o install.sh
less install.sh
sudo bash install.sh
docker ps --format 'table {{.Names}}\t{{.Status}}'

После установки панель доступна по адресу http://IP:8000. Первый вход создаёт администратора. Сразу после входа задайте домен в настройках экземпляра и включите HTTPS — панель сама запросит сертификат.

Порт 8000 после этого лучше закрыть снаружи: он остаётся техническим входом и не должен светиться в интернете.

sudo ufw delete allow 8000/tcp
sudo ss -tulpn | grep -E ':(80|443|8000|6001|6002)'
docker ps --format 'table {{.Names}}\t{{.Status}}'

Порты 6001 и 6002 нужны терминалу и realtime-соединениям. Если панель стоит за другим прокси, их придётся прокидывать отдельно, иначе терминал в браузере не откроется.

Первый деплой из Git

Дальше создаётся проект и окружение, например production. Источник — публичный репозиторий, GitHub App или приватный ключ. Для большинства проектов хватает Nixpacks: он находит package.json, requirements.txt или go.mod и собирает образ без Dockerfile. Если сборка нестандартная, укажите свой Dockerfile или compose-файл.

В настройках приложения задаются домен, внутренний порт, переменные окружения и healthcheck. Порт важен: панель публикует контейнер через прокси и должна знать, куда отправлять трафик. Ошибка «502 Bad Gateway» почти всегда означает расхождение между портом в приложении и портом в настройках.

git add . && git commit -m "deploy: env and healthcheck"
git push origin main
docker logs -f --tail 100 $(docker ps -qf name=app)
docker inspect --format '{{.State.Health.Status}}' $(docker ps -qf name=app)

Автодеплой работает по вебхуку: push в ветку запускает сборку. Полезно включить уведомления в Telegram или почту — иначе упавшая сборка обнаружится через сутки, когда пользователи напишут о недоступности.

Базы данных и тома

Базу удобнее создавать в том же окружении: панель выдаст внутренний хост, порт, логин и пароль и подставит их в переменные приложения. Наружу порт базы открывать не нужно — доступ идёт по внутренней сети Docker.

Отдельная тема — бэкапы. У Coolify есть расписание и выгрузка в S3-совместимое хранилище, но проверять восстановление всё равно обязан человек. Раз в месяц разворачивайте дамп на тестовой базе: непроверенная копия — это не бэкап, а надежда.

docker exec -t coolify-db pg_dump -U coolify coolify > coolify-$(date +%F).sql
docker exec -t coolify-db psql -U coolify -c '\l'
du -sh /var/lib/docker/volumes/* | sort -h | tail -10

Типичные сбои и диагностика

Сборка падает по памяти. Nixpacks с npm или pip на двух гигабайтах легко уходит в OOM. Решение — добавить swap, ограничить параллельные сборки или собирать образ в CI, а в Coolify указывать готовый registry-образ.

Контейнер работает, но сайт отдаёт 502. Проверьте healthcheck, порт и логи приложения. Часто сервис слушает 127.0.0.1 внутри контейнера вместо 0.0.0.0, и прокси до него не доходит.

Сертификат не выпускается. Причины по порядку вероятности: неверная A-запись, лишняя AAAA-запись на несуществующий IPv6, закрытый порт 80, исчерпан лимит Let’s Encrypt на повторные запросы.

dig +short app.example.com A
dig +short app.example.com AAAA
curl -I http://app.example.com/.well-known/acme-challenge/test
journalctl -u docker --since "1 hour ago" | tail -50

Старые образы и логи съедают десятки гигабайт: настройте ротацию логов Docker и следите за docker system df.

docker system df
docker image prune -a --filter "until=168h"
df -h /var/lib/docker

Обновления

Панель обновляется из интерфейса, но перед крупным обновлением сделайте снимок виртуальной машины или бэкап тома с базой Coolify. После обновления проверьте базовые сценарии:

  • вход в панель и выпуск сертификата;
  • деплой тестового приложения из Git;
  • восстановление дампа базы на тестовом стенде;
  • свободное место на диске и ротацию логов Docker после сборки.

Откат без бэкапа превращается в ручную сборку заново.

Итог

Coolify занимает нишу между ручным compose и Kubernetes и хорошо работает на одном сервере с десятком сервисов. Начните с отдельного хоста, домена и закрытых технических портов, включите бэкапы баз и уведомления о сборках. Тогда панель экономит время, а не создаёт новую точку отказа, о которой вы узнаете в самый неудобный момент.

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 0 / 5. Количество оценок: 0

Оценок пока нет. Поставьте оценку первым.

Поделиться: Telegram ВКонтакте