{"id":21518759,"url":"https://github.com/halo-lab/hades","last_synced_at":"2026-02-07T20:30:48.211Z","repository":{"id":125833908,"uuid":"560920422","full_name":"Halo-Lab/Hades","owner":"Halo-Lab","description":"Halo deployments","archived":false,"fork":false,"pushed_at":"2022-11-04T13:42:21.000Z","size":3,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-31T04:44:58.981Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Halo-Lab.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-11-02T14:55:56.000Z","updated_at":"2022-11-02T14:58:53.000Z","dependencies_parsed_at":null,"dependency_job_id":"5bdbcae8-2f4b-47c4-b633-7a8d6fabfc01","html_url":"https://github.com/Halo-Lab/Hades","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Halo-Lab/Hades","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Halo-Lab%2FHades","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Halo-Lab%2FHades/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Halo-Lab%2FHades/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Halo-Lab%2FHades/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Halo-Lab","download_url":"https://codeload.github.com/Halo-Lab/Hades/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Halo-Lab%2FHades/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29208161,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-07T20:13:33.422Z","status":"ssl_error","status_checked_at":"2026-02-07T20:13:31.455Z","response_time":63,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-24T00:53:50.870Z","updated_at":"2026-02-07T20:30:48.202Z","avatar_url":"https://github.com/Halo-Lab.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Проект \"Hades\" (Halo deployments), draft\n\n## Цели\n\nСоздать централизованный инструментарий для деплоя и мониторинга студийных проектов (либо найти и адаптировать существующее OpenSource-решение). В качестве «точки отсчёта» можно использовать [CapRover](https://www.notion.so/halolab/Staging-deploy-with-CapRover-356a654b5d774a4ab0e8d9ee343fdbb3), развёрнутый на Halo staging.\n\n## Требования к системе\n\nОбщее видение системы: бэкенд (с внутренней базой), выставляющий наружу API; а также UI-dashboard для удобства работы с ресурсами. На первой фазе вместо визуального дашборда можно реализовать «общение» с бэкендом проекта через CLI. В дальнейшем, оба варианта (UI и CLI) могут существовать и развиваться параллельно. Также можно рассмотреть возможность реализации console-based UI (например см. утилиту `htop`). Система должна максимально простым образом разворачиваться на linux-сервере.\n\nПоддержка возможности деплоя как минимум в AWS (static deploy on S3, EC2, RDS, ElastiCache) и на выделенные сервера (в докер-контейнерах, по аналогии с CapRover). В идеале ещё и в аналогичные AWS'овским под-сервисы DigitalOcean и Azure.\n\nРеквизиты доступа к облачным аккаунтам / серверам могут добавляться во write-only режиме, шифроваться на сервере и храниться во внутренней БД проекта в зашифрованном виде.\n\nИсточником файлов для деплоя могут быть GitHub, либо вручную загружаемый архив. В случае с GitHub необходимо реализовать поддержку опционального авто-деплоя при детекте изменений в определённой ветке (через вебхуки); но и деплой вручную должен быть доступен (по аналогии с CapRover).\n\nДля серверов проектов должна быть доступна удобная модификация переменных окружения, а также лёгкий доступ в ssh-консоль.\n\nСбор и централизованное отображение метрик серверов и логов деплойментов/сервисов (здесь большое поле для рисёрча существующих инструментов/библиотек). Важен осмысленный и быстрый поиск по логам, а также поддержка отправки алертов (почта / слак) при достижении метриками заданных пороговых значений.\n\nКритично важно создать систему пользователей с разграничениями прав (и соответствующий инструментарий для управления пользователями). Изначально можно ориентироваться на то, что регулировка доступа необходима будет на уровне отдельных проектов, а также на уровне read-write / read-only (т.е. доступ к потенциально деструктивным действиям вроде деплоя проекта / доступ только к просмотрам логов и метрик).\n\n## Задачи\n\n### 1 — Прототип деплоя по SSH\n\nСобрать небольшой прототип (по сути, несколько запускаемых скриптов), позволяющих на старте указать (пока что в виде открытого конфиг-файла — это совершенно не секьюрно, но на этапе прототипа допустимо):\n- публично доступный URL GitHub-проекта (далее GHP)\n- параметры коннекта (адрес, имя пользователя, пароль/ключ) к удалённому SSH-серверу для сборки (Build Server — далее BS)\n- параметры коннекта (адрес, имя пользователя, пароль/ключ) к удалённому SSH-серверу для деплоя (Deployment Server — далее DS; может совпадать с BS, может отличаться)\n- переменные окружения со значениями\n\nСкрипт должен вытащить GHP из гитхаба на BS, собрать докер-образ по инструкциям в докерфайле внутри GHP (можно добавить GHP-конфиг по аналогии с капровером), запустить докерфайл на DS, пробросив необходимые порты наружу (порты могут настраиваться из GHP-конфига). Важно предоставить docker-контейнеру переменные окружения как на этапе сборки, так и на этапе запуска (это часто нужно для Next.js-проектов, например).\n\nВ качестве примера GHP можно использовать Next.js-стартер, запускаемый в контейнере в режиме веб-сервера.\n\nЯзык, используемый для написания прототипа, можно выбирать произвольно (с учётом задач): от shell-скриптов до программы на Go; но важно учитывать, что далее это решение необходимо будет интегрировать в более массивный продукт, описанный в разделе «Требования к системе» выше.\n\nНа этом этапе необходимо также провести рисёрч на тему того, как удобнее будет работать с BS и DS: в режиме SSH-команд, или в режиме дополнительного устанавливаемого на сервер модуля, обслуживающего внешние запросы через открытый порт, например. Второй вариант может быть удобнее в контроле, но будет дольше в реализации; плюс здесь необходимо подумать про безопасность. Также имеет смысл провести исследование существующих продуктов, позволяющих удалённо управлять *nix-сервером.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhalo-lab%2Fhades","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhalo-lab%2Fhades","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhalo-lab%2Fhades/lists"}