Openship
Self-hosted платформа-как-сервис: разворачиваете приложения из Git на своем сервере с автосборкой, своими доменами и TLS, как в Vercel или Heroku, но код и данные остаются у вас. Подняли стек 0.6.6 на VM в РФ, прошли онбординг, замерили ресурсы и проверили вход по валидному HTTPS.
Вердикт
- команде, которой нужен свой Heroku/Vercel без вендор-локина
- кто деплоит Docker- и Compose-приложения из Git с автосборкой
- кому важно держать код и данные приложений на своем сервере
- для одного статичного сайта - проще поставить Caddy напрямую
- кто не готов администрировать Docker-хост
- кому нужен managed-PaaS с готовым SLA
Что это и какую задачу решает
Openship - открытая платформа-как-сервис (PaaS) для своего сервера. Ставится одним стеком, вы подключаете сервер для деплоя, а дальше публикуете приложения из Git: платформа сама собирает образ, поднимает контейнер, вешает ваш домен и выпускает Let's Encrypt. По модели это self-hosted аналог Vercel и Heroku - тот же сценарий «запушил - задеплоилось», но без ежемесячной оплаты за место и без передачи кода стороннему облаку.
Закрывает боль связки «облачный PaaS + ручной обратный прокси + ручной certbot»: вместо трех систем и оплаты за seat вы получаете один дашборд, где живут проекты, деплои, домены, бэкапы и логи. Подходит командам и разработчикам, которым нужен контроль над инфраструктурой и данными. Управление - через веб-дашборд с разделами Projects, Apps, Deployments, Servers, Domains, Backups.
Чем отличается от Vercel и Heroku
Сравнение по тому, что влияет на выбор между своим PaaS и облачным.
| Параметр | Openship (self-hosted) | Vercel / Heroku |
|---|---|---|
| Модель цены | фикс за один сервер, приложений сколько влезет | за место/seat и за использование, растет с масштабом |
| Где данные и код | на вашем сервере | в облаке вендора |
| Vendor lock-in | нет, обычные Docker-приложения | привязка к платформе и ее сборке |
| Лимиты | ресурсы вашей VM | тарифные квоты на билды и трафик |
| Данные в РФ | да, сервер в нужной юрисдикции | инфраструктура вендора вне РФ |
Тех-стек и архитектура
Openship ставится как стек Docker Compose из пяти контейнеров: api (ядро на Node.js), dashboard (веб-интерфейс на Next.js), postgres (postgres:16-alpine, состояние платформы), redis (redis:7-alpine, очереди и кеш) и edge (OpenResty - обратный прокси, который держит :80/:443 и выпускает Let's Encrypt для ваших приложений). Образы api/dashboard/edge берутся из ghcr.io/oblien, базовые postgres/redis - с Docker Hub.
Управление вынесено в CLI openship (самодостаточный, со своим Node) и в дашборд. Control-plane (api + dashboard) и ingress (edge) разделены: платформа рулит проектами и деплоями, а edge отдельно маршрутизирует трафик приложений по их доменам.
Минимальная конфигурация
Реальные требования против официального минимума.
| Реально в простое (весь стек) | ~0.9 GB RAM |
| Контейнеры платформы | ~294 MB (api 186, dashboard 70, postgres 34, redis 4.5) |
| Образы на диске | ~6.6 GB |
| Рекомендуем тариф | CPU2-RAM4-DISK50 |
| Тариф Fatmetal | CPU2-RAM4-DISK50 |
Важно: сам control-plane легкий (меньше гигабайта в простое), но сборка ваших приложений идет на этом же сервере и в пике ест CPU и RAM. Под реальные билды закладывайте запас - 2 vCPU / 4 GB это комфортный минимум под платформу плюс легкие приложения.
В маркетплейсе Fatmetal
Не хотите ставить руками?
Openship есть в маркетплейсе Fatmetal - не нужно повторять установку из этого разбора вручную. Заказываете сервер, за ~13 минут получаете готовый PaaS-дашборд на своем домене с валидным TLS, вход системным паролем сервера. Дальше подключаете сервер деплоя и публикуете приложения.
Рекомендуемая конфигурация:
2 vCPU · 4 ГБ RAM · 50 ГБ NVMe от 450 ₽/мес
Развертывание на Fatmetal
Самый простой путь - готовая карта Openship в маркетплейсе: cloud-init сам ставит Docker, поднимает стек, заводит администратора и вешает TLS.
Создать сервер из карты
В маркетплейсе выбрать карту Openship, тариф CPU2-RAM4-DISK50, создать сервер. Cloud-init сделает все сам.
Дождаться установки
Около 13 минут: ставится Docker, тянется стек, поднимается платформа, выпускается сертификат. Домен вида
1-2-3-4.fatmetal.netзаводится автоматически из IP.Войти в дашборд
https://<ip>.fatmetal.net логин: admin@<ip>.fatmetal.net пароль: пароль вашего сервера (тот же, что для SSH)Логин и пароль продублированы в файле
/root/openship-credentials.txtи в MOTD при входе по SSH. Дальше - подключить сервер деплоя и публиковать приложения.
Что измерили после запуска
Цифры со свежей установки, без нагрузки. Только реальные замеры.
| Установка с нуля (cloud-init) | ~13 мин (с ретраями на образах) |
| RAM в простое (весь сервер) | ~0.9 GB |
| Контейнеры платформы | ~294 MB суммарно |
| Образы на диске | ~6.6 GB |
| TLS дашборда | валидный Let's Encrypt |
| Вход администратора | работает системным паролем по HTTPS |
Главное: платформа в простое легкая - меньше гигабайта памяти, львиную долю ест api. Основная нагрузка приходит на сборку ваших приложений, ее и надо закладывать в тариф.
Проверено на версии v0.6.6, август 2026. На новых версиях результаты могут отличаться.
Где может сломаться
Реальные грабли, на которые наткнулись при запуске.
Камень 1. Удаленный вход в дашборд закрыт по умолчанию. Из коробки Openship работает в режиме zero-auth и пускает в дашборд только с самой машины (localhost). Облачный сервер при этом отдает «сессию создать негде». Лечится переменной OPENSHIP_AUTH_MODE=local в окружении стека и перезапуском - тогда включается вход по логину и паролю. В карте маркетплейса это уже прошито.
Камень 2. Первого администратора через форму не завести. Онбординг браузер-first, а публичная регистрация отключена (SIGNUP_DISABLED) - форма /register в дашборде обманчива. Первый админ заводится служебным вызовом (bootstrap) с внутренним токеном стека. В карте это делает cloud-init, логин - admin@<домен>, пароль - пароль сервера.
Камень 3. TLS для самого дашборда - не автомат. Встроенный edge выпускает Let's Encrypt для ваших приложений, но не для домена самого дашборда. В карте дашборд подается через отдельную надстройку Caddy с авто-TLS, а edge остается для клиентских приложений.
Причина. Команда openship up тянет базовые образы postgres и redis с Docker Hub, а из РФ-сети Docker Hub периодически отваливается по таймауту. Один сорвавшийся слой роняет весь запуск стека - образы api/dashboard/edge с ghcr при этом качаются нормально.
Решение. Пред-качать базовые образы с ретраями и повторять запуск, каждый повтор докачивает с кеша: for i in 1 2 3 4 5; do docker pull postgres:16-alpine && break; sleep 8; done, затем openship up в цикле. В карте маркетплейса эта логика уже зашита в cloud-init.
Безопасность и обновления
Релизы и исходники - на GitHub (oblien/openship). Вход в дашборд закрыт логином и паролем (better-auth, email плюс пароль), первый администратор заводится при установке. Обновление платформы - штатной командой CLI:
openship update
Бэкап состояния платформы - дамп PostgreSQL из контейнера:
docker exec openship-postgres-1 pg_dump -U postgres openship > backup.sql
Связь с другими стеками
- Обратный прокси дашборда - Caddy с авто-TLS (в карте уже стоит перед дашбордом).
- Бэкапы - pg_dump PostgreSQL плюс выгрузка в S3.
- Мониторинг - Grafana плюс Prometheus поверх Docker-хоста.
Когда это НЕ ваш выбор
Нужен один статичный сайт
Под лендинг или блог PaaS избыточен - поставьте Caddy или Nginx напрямую, это проще и легче.
Нужен managed-PaaS с SLA
Openship - это ваш сервер и ваша ответственность за обновления, бэкапы и аптайм. Если нужен готовый SLA без администрирования - берите облачный сервис.
Частые вопросы
Можно поставить без Docker?
Нет, стек контейнерный (Docker Compose из пяти сервисов) и деплой приложений тоже идет через Docker - без него никак.
Хватит ли 2 GB RAM?
Сам control-plane в простое занимает меньше гигабайта и в 2 GB влезет, но сборка приложений идет на этом же сервере и в пике съест больше. Рабочий минимум под платформу и легкие приложения - 4 GB.
Можно в продакшен?
Да, но закройте три вещи: включите вход по паролю (auth-mode local), подайте дашборд по валидному TLS и настройте бэкапы PostgreSQL. В карте маркетплейса первые два пункта уже сделаны.
Как обновлять?
Командой CLI openship update - она обновляет и клиент, и серверную часть.
Как делать бэкап?
Дампом PostgreSQL из контейнера: pg_dump базы openship. Это состояние платформы - проекты, домены, пользователи.
Нужна ли авторизация?
Да, вход закрыт логином и паролем (better-auth). Первый администратор заводится при установке, логин admin на домене сервера, пароль - пароль самого сервера.
Как приложения получают HTTPS?
Встроенный edge (OpenResty) выпускает Let's Encrypt для доменов ваших приложений - наводите домен на сервер и добавляете его в дашборде.
Итог
Openship дает свой Heroku/Vercel на вашем сервере: деплой приложений из Git с автосборкой, свои домены и Let's Encrypt, все под одним дашбордом. Платформа в простое занимает меньше гигабайта, спокойно живет на CPU2-RAM4-DISK50, а данные и код остаются у вас. Из оговорок для облака - включить вход по паролю и подать дашборд по TLS; в готовой карте маркетплейса это уже сделано, вход по системному паролю сервера.
Рекомендуемая конфигурация для установки:
2 vCPU · 4 ГБ RAM · 50 ГБ NVMe
Не хотите устанавливать вручную?
Запустите Openship на этой конфигурации автоматически - от 450 ₽/мес.
Этот стек у нас запущен на тарифе CPU2-RAM4-DISK50. Нашли баг в гайде - напишите, поправим в течение дня.