Установка
Запустите Skitflow на вашем сервере за несколько минут с помощью этого простого руководства по установке.
Выполните следующие шаги для установки Skitflow на ваш сервер и развёртывания первого приложения:
Требования
- Linux-сервер (VPS или выделенный) с root-доступом.
- 4 ГБ RAM минимум (8 ГБ рекомендуется для сборок).
- 30 ГБ дискового пространства минимум.
- Публичный IP-адрес и доменное имя, указывающее на него (для HTTPS).
Протестированные дистрибутивы Linux
- Ubuntu 24.04 LTS
- Ubuntu 22.04 LTS
- Ubuntu 20.04 LTS
- Debian 12
- Debian 11
- Fedora 40
Скрипт установки требует root и использует синтаксис Bash.
Всегда передавайте через bash, а не sh — в Ubuntu и Debian sh по
умолчанию использует dash, который не поддерживает Bash-массивы.
Установка Skitflow
1. Направьте домен на сервер
Перед установкой направьте DNS-запись A (или CNAME) на публичный IP
сервера. Skitflow рассчитан на работу через Traefik с настоящим доменом и TLS:
домен — это ваш основной адрес, а IP:3000 — только bootstrap-шаг.
Если планируете сертификаты Let's Encrypt, также задайте ACME email до запуска установщика (иначе сертификаты не будут выданы):
export ACME_EMAIL=[email protected]2. Запустите установщик
curl -sSL https://skitflow.cloud/install.sh | sudo bashСкрипт установит Docker (если отсутствует), настроит PostgreSQL, Redis, Traefik и управляющий контур Skitflow.
В конце вывода установщик печатает одноразовый SETUP TOKEN (зелёная строка после «SETUP TOKEN:»). Он понадобится на следующем шаге — сохраните вывод терминала.
По умолчанию установщик разворачивает канал canary, который получает частые обновления и может быть менее стабилен. Для production используйте стабильный канал:
curl -sSL https://skitflow.cloud/install.sh | sudo bash -s -- --channel stable3. Создайте администратора (bootstrap через IP:3000)
Сразу после установки Skitflow временно доступен по адресу
http://IP-вашего-сервера:3000. Откройте его в браузере — попадёте на
страницу первичной настройки. Кроме имени, email и пароля форма запросит
Токен установки — вставьте SETUP TOKEN из вывода установщика.
Токен установки — намеренная защита: без него любой, кто сканирует интернет
на открытые IP:3000, мог бы зарегистрироваться первым и захватить
инстанс в промежутке между установкой и вашим первым заходом. Токен
печатается только в терминале сервера — не передавайте его никому.
Доступ по IP:3000 временный и ОБЯЗАТЕЛЬНО должен быть закрыт. Панель
на голом HTTP без TLS не защищена Traefik и открыта всему интернету. После
выполнения шага 4 (домен + HTTPS) порт 3000 нужно закрыть — см. шаг 6.
Создание первого администратора на свежей установке автоматически запускает 30-дневный Enterprise-триал: включены все enterprise-функции (SSO, SCIM, пользовательские роли, журналы аудита, white-labeling, реплицируемое хранилище) и до 3 подключаемых серверов (сам хост платформы не считается). По окончании триала инстанс продолжает работать без enterprise-функций; лицензионный ключ открывает их насовсем.
4. Настройте домен и HTTPS через Traefik
В панели управления настройте домен (тот, что направлен на сервер в шаге 1),
чтобы Traefik выпустил сертификат Let's Encrypt и открывал Skitflow по
https://ваш-домен.ru. Убедитесь, что HTTPS работает в браузере, прежде
чем продолжать — если закрыть порт 3000 раньше, вы потеряете доступ.
5. SMTP и прочие настройки
Настройте SMTP для email-уведомлений и приглашений, а также остальные параметры (удалённые серверы, AI gateway, OAuth) по необходимости.
6. Закройте порт 3000 — обязательно, не опционально
Как только домен с HTTPS заработал, закройте прямой доступ к панели по
IP:3000 и переключите auth origin на домен одним шагом (иначе
приглашения участников продолжат указывать на закрытый IP:3000):
docker service update \
--publish-rm "published=3000,target=3000,mode=host" \
--env-add BETTER_AUTH_URL=https://ваш-домен.ru skitflowЭто обязательный шаг безопасности, а не рекомендация: пока порт 3000 открыт, панель управления остаётся доступной по незашифрованному HTTP в обход Traefik и TLS.
Временно вернуть доступ (например, для восстановления при сломанном домене):
docker service update --publish-add "published=3000,target=3000,mode=host" skitflowПеред закрытием порта 3000 убедитесь, что https://ваш-домен.ru открывает
панель. Если домен или сертификат настроены неверно, вы потеряете доступ к
инстансу, пока порт не будет возвращён с серверной консоли.
Телеметрия счётчика установок
Skitflow публикует на skitflow.cloud два числа: сколько раз был скачан скрипт установки и сколько установок сообщили, что поднялись. Второе число отправляет установщик — ниже точно то, что он отправляет, когда и как это отключить.
Что отправляется
Один HTTP POST на https://skitflow.cloud/api/telemetry/install, и тело
запроса целиком такое:
{ "event": "install_succeeded", "version": "0.32.3" }version — тег установленного образа. Это весь payload. Установщик не читает,
не вычисляет и не отправляет ваш IP-адрес, имя хоста, домен, email, machine id,
server id, лицензионный ключ, setup token, строку подключения к базе, переменные
окружения и пути к файлам, а принимающий endpoint ничего из этого и не хранит:
он хранит целочисленные счётчики и отметку времени, поэтому две установки
оставляют совершенно одинаковый след.
Когда отправляется
Только после того, как установщик сам убедился, что установка поднялась: сервис
skitflow должен выйти на заданное число реплик и ответить на своём
health-эндпоинте. Пока оба условия не выполнены, не отправляется ничего.
Ничего не отправляется для:
- запуска скрипта
- установки, которая упала или была прервана
- установки, где сервис так и не сошёлся
install.sh update,remove,ssh-identityиpin-platform-services
Дедупликации нет: она требовала бы идентификатора хоста, а установщик намеренно его не отправляет. Поэтому публичное число считает события успешных установок, а не уникальные хосты и не работающие инстансы — повторная установка на том же сервере считается дважды. Это число ещё и самодекларируемое: endpoint не может аутентифицировать установщики, работающие на чужих серверах.
Как отключить
Задайте любую из двух переменных перед запуском установщика — событие не будет отправлено вовсе:
export SKITFLOW_TELEMETRY=0
# или общепринятое межпроектное соглашение, которое учитывается так же:
export DO_NOT_TRACK=1
curl -sSL https://skitflow.cloud/install.sh | sudo -E bashsudo -E сохраняет переменную при переходе через sudo. Без -E задайте её
внутри привилегированной оболочки: sudo SKITFLOW_TELEMETRY=0 bash install.sh.
Каждый запуск печатает это раскрытие и способ отказа до того, как что-либо
создаётся, — установка, которая собирается отправить событие, сначала об этом
сообщает. Запуск с отключённой телеметрией печатает Telemetry: OFF.
Весь этот путь — best-effort: недоступный счётчик, firewall или прокси на пути дают напечатанную строку и никогда не меняют результат установки.
Обновление
Чтобы обновить Skitflow до последней версии:
curl -sSL https://skitflow.cloud/install.sh | sudo bash -s -- update