Вынести лендинг в отдельный сервис + Docker 8080 + статус проекта #9
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Задача
Вынести лендинг Phantom Protocol в отдельный сервис с Docker-контейнеризацией и отображением статуса проекта.
Текущее состояние
website/— статический HTML+CSS+JSnpx http-server -p 8000Требуемый результат
1. Отдельная структура
2. Docker-контейнер
curl -f http://localhost:80/health || exit 13. Отображение статуса проекта
/api/status(или аналогичный endpoint)4. CI/CD для лендинга
.github/workflows/landing.ymlAcceptance Criteria
landing/(или отдельный репозиторий)docker compose up landingзапускает лендинг на http://localhost:8080docker build -f landing/Dockerfile .собирает образ без ошибокnpm run minifyработает внутри контейнера (optional stage)Исключения (не входят в задачу)
Артефакты archive ветки
В archive ветке лендинг содержит те же файлы (проверено diff). Нового контента для миграции нет — задача чисто структурная.
Модули проекта (исключены из Gitea sync)
Следующие директории добавлены в .gitignore и НЕ будут синхронизироваться с Gitea:
.kilo/agents/,.kilo/rules/,.kilo/skills/,.kilo/commands/,.kilo/workflows/,.kilo/shared/,.kilo/logs/,.kilo/plans/,.kilo/worktrees/src/kilocode/agent-evolution/scripts/sync-agents.cjs,scripts/validate-agents.cjsdist/,.architect/.env,.env.local✅ lead-developer + devops + frontend completed
Task: Вынести лендинг в отдельный сервис + Docker 8080 + статус проекта
Milestone: #71
Duration: ~8 minutes
Commit: e2fcaf2 (40 files, +13 822 lines)
Что сделано
Docker-инфраструктура
Build команда:
Тестирование (Phase 5)
curl -fsSL https://phantom.protocol/install.sh | bash
Проверка установки
phantom --version
</html> | ✅ HTML отдаётся | | | { "status": "ok", "ci": "passing", "commit": "3d4beb3", "issues": 7, "milestone": "Phantom Protocol — Архитектурный аудит и восстановление", "updated": "2026-05-18T18:00:00Z" } | ✅ JSON корректный | | | (function() { const API_URL = window.PHANTOM_API_URL || 'api/status.json';Копировать
async function loadStatus() {
try {
const res = await fetch(API_URL, { cache: 'no-store' });
if (!res.ok) throw new Error('Status unavailable');
const data = await res.json();
renderStatus(data);
} catch (e) {
renderStatus({ status: 'offline', commit: '-', issues: '-', ci: 'unknown' });
}
}
function renderStatus(data) {
const el = document.getElementById('project-status');
if (!el) return;
const statusClass = data.status === 'ok' ? 'status-online' : 'status-offline';
const ciClass = data.ci === 'passing' ? 'ci-passing' : 'ci-failing';
el.innerHTML =
<div class="status-badge ${statusClass}"> <span class="status-dot"></span> <span class="status-label">${data.status === 'ok' ? 'Online' : 'Offline'}</span> </div> <div class="status-details"> <span class="ci-badge ${ciClass}">${data.ci || 'unknown'}</span> <span class="commit-sha">${data.commit ? data.commit.slice(0,7) : '-'}</span> <span class="issues-count">Issues: ${data.issues ?? '-'}</span> </div>;}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', loadStatus);
} else {
loadStatus();
}
})(); | ✅ JS отдаётся |
| HTML статус элементов | grep , , | ✅ 3 совпадения |
| CSS статус правил | grep , , | ✅ 7 совпадений |
| Script теги | grep | ✅ 9 скриптов загружаются |
Известный blocker
Define and run multi-container applications with Docker
Options:
--all-resources Include all resources, even those not
used by services
--ansi string Control when to print ANSI control
characters ("never"|"always"|"auto")
(default "auto")
--compatibility Run compose in backward compatibility mode
--dry-run Execute command in dry run mode
--env-file stringArray Specify an alternate environment file
-f, --file stringArray Compose configuration files
--parallel int Control max parallelism, -1 for
unlimited (default -1)
--profile stringArray Specify a profile to enable
--progress string Set type of progress output (auto,
tty, plain, json, quiet)
--project-directory string Specify an alternate working directory
(default: the path of the, first
specified, Compose file)
-p, --project-name string Project name
Management Commands:
bridge Convert compose files into another model
Commands:
attach Attach local standard input, output, and error streams to a service's running container
build Build or rebuild services
commit Create a new image from a service container's changes
config Parse, resolve and render compose file in canonical format
cp Copy files/folders between a service container and the local filesystem
create Creates containers for a service
down Stop and remove containers, networks
events Receive real time events from containers
exec Execute a command in a running container
export Export a service container's filesystem as a tar archive
images List images used by the created containers
kill Force stop service containers
logs View output from containers
ls List running compose projects
pause Pause services
port Print the public port for a port binding
ps List containers
publish Publish compose application
pull Pull service images
push Push service images
restart Restart service containers
rm Removes stopped service containers
run Run a one-off command on a service
scale Scale services
start Start services
stats Display a live stream of container(s) resource usage statistics
stop Stop services
top Display the running processes
unpause Unpause services
up Create and start containers
version Show the Docker Compose version information
volumes List volumes
wait Block until containers of all (or specified) services stop.
watch Watch build context for service and rebuild/refresh containers when files are updated
Run 'docker compose COMMAND --help' for more information on a command. |
Acceptance Criteria
Модули исключены из синхронизации
Следующие директории добавлены в и не синхронизируются с Gitea:
Next: После добавления пользователя в группу выполнить:
✅ Final Update — Все изменения synchronized
Результат
Новый README.md (remote)
Git remote security
Следующий шаг для пользователя
Добавить в группу для запуска landing-контейнера: