Openship: self-hosted деплой с CI/CD и SSL

Быстрый старт

Для начала нужно принять одно решение: как именно запускать сам Openship (управляющий уровень, control plane). Всё остальное после этого одинаково.

Если вы… Запустите Openship как Где будут работать ваши приложения

Один, одна машина, без администрирования

Настольное приложение (desktop app)

Сервер, подключённый по SSH, или Openship Cloud

Команда — или нужен push-to-deploy / хостинг приложений на своём сервере

Self-hosted сервер (openship up)

На этом сервере (режим Compose) — или на другом сервере / Cloud (bare-режим)

Не хочу ничего запускать самостоятельно

Openship Cloud

Управляемые песочницы, никакой настройки

Совет

Работаете в одиночку? Используйте настольное приложение. Оно запускает управляющий уровень Openship на вашем компьютере только пока приложение открыто — никаких постоянно работающих процессов на сервере, никаких публичных точек доступа. Постоянно работающий сервер нужен лишь тогда, когда вам требуется push-to-deploy (CI/CD), командный доступ или хостинг приложений прямо на этом сервере — то есть всё то, что требует публичного и постоянно доступного эндпоинта.

Одиночная работа — настольное приложение

Управляющий уровень работает локально и управляет серверами через SSH. Никакого входа, никакого терминала, никакой публичной поверхности — скачайте, откройте, готово:

Платформа Скачать

macOS (Apple Silicon)

Openship-arm64.dmg

macOS (Intel)

Openship-x64.dmg

Windows

Openship-win32-x64.zip

Linux

Openship.AppImage

Linux: chmod +x Openship.AppImage && ./Openship.AppImage. Если CLI уже установлен — openship install скачает и запустит приложение. Ссылки всегда указывают на последний релиз.

Из настольного приложения вы подключаете сервер (по SSH) или Openship Cloud и деплоите туда — само приложение не публикует ваши сервисы на ноутбуке.

Команда / постоянный сервер — self-hosted установка

Установите CLI (он включает API и дашборд), затем запустите openship — интерактивный мастер создаст первого администратора, настроит домен и зарегистрирует Openship как системную службу. Запустите снова в любое время для управления инстансом.

curl -fsSL https://get.openship.io | sh          # установить  (или: npm i -g openship — требуется Node 22+)
openship                                          # пошаговая настройка, затем панель управления

Скрипт установки принесёт собственный Node, если версия на вашей системе ниже 22; установка через пакетный менеджер использует уже имеющийся Node.

Для CI и безголовых машин можно пропустить мастер и работать напрямую с openship up:

openship up                                       # установить + запустить как фоновую службу (стартует и перезапускается автоматически)
openship up --public-url https://openship.example.com   # + опубликовать дашборд на вашем домене (edge + TLS настраиваются автоматически)

openship up сам определяет режим запуска:

  • Linux с Docker → режим Compose (по умолчанию). Поднимает полный стек — Postgres, Redis, API, дашборд и контейнеризованный OpenResty edge на :80/:443 — из опубликованных образов. Именно этот режим размещает ваши приложения на том же сервере с автоматическими доменами и Let’s Encrypt TLS. Принудительно включить: --compose.

  • Везде в остальных случаях → bare-режим (macOS, Windows или Linux без Docker). Единственный лёгкий процесс со встроенной базой данных — постоянно работающий управляющий уровень, который деплоит приложения на удалённый сервер (SSH) или Cloud, как настольное приложение, но всегда доступен и требует авторизации. Принудительно включить: --bare.

Self-hosted инстанс всегда требует авторизации (администратор, созданный при настройке). openship open открывает дашборд · openship stop останавливает службу · openship update обновляет · openship up --foreground запускает в прикреплённом режиме.

Примечание

Предварительные сборки (dev). Чтобы запустить CLI, собранный прямо из исходников — из ветки, тега или main опережающего следующий релиз — установите сборку из исходников:

curl -fsSL https://get.openship.io/dev | sh                  # main (по умолчанию)
curl -fsSL https://get.openship.io/dev | OPENSHIP_REF=dev sh  # конкретная ветка/тег (переменная передаётся в sh, не в curl)
openship-dev                                     # тот же CLI, но собранный из исходников
openship-dev update                              # получить последние исходники + пересобрать (без ожидания релиза)

Устанавливается как отдельная команда openship-dev с собственным изолированным домашним каталогом (~/.openship-dev) и системной службой, поэтому ваш рабочий openship и его данные никогда не затрагиваются. Требует Bun и git; это непроверенная dev-сборка (компиляция дашборда требует реальных RAM и CPU) — не для продакшена.

Задеплоить проект:

cd your-project
openship init            # связать текущую директорию с проектом
openship deploy

Полное руководство по серверу и справочник CLI: openship.io/docs.

Автодополнение в командной оболочке (bash/zsh/fish)

Есть два способа включить автодополнение по Tab для openship:

Настройка Компромисс

Статический файл (рекомендуется)

openship completion <shell> > <path>

Мгновенный старт оболочки. Нужно пересоздать файл после обновления, чтобы подхватить новые команды.

Динамическая подгрузка

добавить source <(openship completion <shell>) в конфиг оболочки

Всегда отражает текущую установленную версию. Добавляет небольшую задержку при каждом запуске нового сеанса.

Статический файл:

openship completion bash > /etc/bash_completion.d/openship
openship completion zsh  > ~/.zsh/completions/_openship
openship completion fish > ~/.config/fish/completions/openship.fish

Откройте новый терминал — готово.

Динамическая подгрузка (пример для zsh):

echo 'source <(openship completion zsh)' >> ~/.zshrc
Self-host через Docker Compose напрямую (без CLI)

Self-hosted стек находится в docker/docker-compose.yml и скачивает опубликованные образы из GitHub Container Registry (ghcr.io/oblien/*) — никаких инструментов сборки, никакой компиляции монорепозитория. Запускается из корня репозитория:

git clone https://github.com/oblien/openship.git && cd openship
cp .env.example .env          # затем отредактировать
docker compose --env-file .env -f docker/docker-compose.yml up -d

Стек состоит из postgres + redis + api + dashboard + edge. edge — это OpenResty на :80/:443 как контейнер (network_mode: host) — маршрутизация и Let’s Encrypt, без установки на хост. Только Linux (хостовая сеть); на macOS/Windows используйте openship up (bare-режим). Контейнер api монтирует Docker-сокет хоста, чтобы управляющий уровень мог собирать и запускать ваши приложения как контейнеры хоста — через сокет он имеет привилегированный доступ к хосту, поэтому запускайте это только на доверенных машинах.

Обновление: зафиксируйте OPENSHIP_VERSION в .env для воспроизводимых загрузок, затем выполните docker compose --env-file .env -f docker/docker-compose.yml pull && … up -d. openship update работает только со стеком, установленным CLI, а openship up усвоит этот стек — не используйте ни то ни другое здесь. Сборка из исходников вместо этого: добавьте -f docker/docker-compose.build.yml … up -d --build.

Операции с хостом (захват :80/:443, почтовый движок, терминал хоста / сканирование портов) требуют SSH-канала контейнер→хост, который openship up настраивает автоматически, а этот путь — нет. Пять ручных шагов описаны в .env.example в разделе Host operations from the container, а ошибка, которую это вызывает, — в Troubleshooting → Host control channel. Всё остальное, включая деплои, работает и без этого.

Примечание
Корневой docker-compose.yml — это другой файл: он предназначен для SaaS / сборки из исходников управляющего уровня (собирает из исходников, публикует маркетинговый сайт, без edge/сокета). Он не размещает ваши приложения — используйте для этого docker/docker-compose.yml или openship up.

Как это работает

Укажите Openship источник — репозиторий GitHub, локальную папку или готовый артефакт — и он выполнит весь пайплайн от начала до конца:

  1. Определение стека. Читает package.json, конфиги фреймворков, lockfile-файлы, а также docker-compose.yml / openship.json, чтобы определить стек, пакетный менеджер, команды сборки/запуска и порт. Конфигурационные файлы не обязательны; openship.json переопределяет автоматические догадки, если вам нужен контроль.

  2. Сборка. На целевом сервере или локально на оркестраторе — в Docker-образ или голый релиз (bare release). Разрешённая конфигурация фиксируется в снимок состояния, поэтому повторные деплои и откаты воспроизводят ровно то, что было отправлено.

  3. Запуск. В виде контейнера (публикуется только на loopback — никаких публичных портов) или как управляемый процесс хоста.

  4. Маршрутизация и защита. Edge на OpenResty создаёт конфиг reverse-proxy для вашего домена и получает сертификат Let’s Encrypt (HTTP-01). Поскольку маршрутизация и TLS настраиваются уже после того, как приложение запущено, проблема с DNS или сертификатом отображается как «требуется действие» — она никогда не прерывает деплой и не роняет работающее приложение.

  5. Push-to-deploy. Вебхук GitHub перезапускает пайплайн при каждом push в отслеживаемую ветку — пересобирает только те сервисы монорепозитория, которых затронул конкретный push.

Базами данных, доменами, SSL, CDN, почтой и резервными копиями управляете из одного места. (Push-to-deploy и публичные домены требуют постоянно работающего сервера или Cloud — у настольного/loopback-инстанса нет публичного эндпоинта для приёма вебхуков.)

Интерфейсы

Три способа работы с одним и тем же бэкендом:

  • Настольное приложение (desktop app) — полноценный GUI, логи в реальном времени, всё в один клик. Оптимально для одиночной работы.

  • Веб-дашборд (web dashboard) — тот же интерфейс в браузере, рассчитанный на команды.

  • CLI — удобен для скриптов и CI; также используется для установки и управления self-hosted инстансом.

MCP-эндпоинт (для AI-агентов) и REST API дополняют набор инструментов для автоматизации. В качестве MCP-инструментов экспонируются только маршруты, явно выбравшие это поведение; каждый вызов заново проверяет ваши права, а маршруты с учётными данными и токенами никогда не становятся инструментами. Полная документация на openship.io/docs.

Примечание

Документация активно пополняется. Если чего-то не хватает или что-то неясно, вклад в развитие будет очень кстати.

Возможности

Встроенный CI/CD

Push-to-deploy, preview-окружения, staging/prod процессы, откаты

Любой стек

Node, Python, Go, Rust, PHP, Ruby, Java, .NET, Docker, монорепозитории

Полноценный бэкенд

Postgres, MySQL, MongoDB, Redis, воркеры, WebSockets, хранилище

Домены и SSL

Автоматический Let’s Encrypt, wildcard-сертификаты, неограниченное число доменов, автопродление

CDN

Edge-кэширование, HTTP/3, сжатие Brotli, мгновенная очистка кэша

Почтовый сервер

Встроенный SMTP с DKIM/SPF/DMARC — без Mailgun или SES

Резервные копии

По расписанию, базы данных + тома, восстановление в один клик, экспорт в любое время

Мониторинг в реальном времени

Живые логи сборки, метрики контейнеров, география посетителей и распределение ответов по кодам — ~1,4 мкс на запрос, ноль записей в БД на запрос

Масштабирование

Автомасштабирование в Cloud, поддержка нескольких узлов при self-hosted установке

Портативность

Стандартные Docker-контейнеры — свободно переносите между провайдерами

Docker Compose

Деплой существующих compose-файлов как есть

Деплой где угодно

  • Openship Cloud — управляемый, с автомасштабированием, без настройки

  • Любой VPS — Hetzner, DigitalOcean, Linode, OVH и другие

  • Выделенные серверы — bare metal, colocation, домашняя лаборатория

  • Несколько серверов — распределяйте нагрузку между машинами

Одинаковый интерфейс вне зависимости от места деплоя.

Статус

Основная часть готова к продакшену, разработка активно ведётся. Self-hosting бесплатен (без выставления счетов).

Что будет дальше: мультинодовые кластеры, интерфейс для балансировки нагрузки, приватная сеть, расширенный мониторинг и визуальные CI/CD-пайплайны.

Участие в разработке

Безопасность

Обнаружили уязвимость? Мы рады вашему сообщению — раскрывайте её приватно, никогда не в публичных issue, PR или обсуждениях.

  • Сообщить здесь (предпочтительно): Сообщить об уязвимости — приватный GitHub advisory, видимый только вам и мейнтейнерам.

  • Область охвата, что включить в отчёт и процесс нашего ответа/раскрытия: SECURITY.md.

Добросовестные исследования безопасности разрешены в рамках нашей политики safe harbor; мы рады упоминать авторов достоверных первичных отчётов.

Лицензия

Openship — программное обеспечение с открытым исходным кодом, распространяемое под лицензией Apache 2.0.

Вы можете использовать, запускать, изменять, размещать у себя и распространять его — в том числе в коммерческих и закрытых продуктах — в соответствии с условиями лицензии Apache 2.0. Полный текст см. в LICENSE.

© 2026 meganuke