diff --git a/.ci/scripts/compute-release.mjs b/.ci/scripts/compute-release.mjs index 1f0b3d3..a4cf61a 100644 --- a/.ci/scripts/compute-release.mjs +++ b/.ci/scripts/compute-release.mjs @@ -11,7 +11,7 @@ const outputDir = process.env.RELEASE_OUTPUT_DIR ? join(repoRoot, process.env.RELEASE_OUTPUT_DIR) : join(repoRoot, ".ci", "release") const repository = process.env.GITEA_REPOSITORY ?? process.env.GITHUB_REPOSITORY ?? "" -const serverUrl = (process.env.GITEA_SERVER_URL ?? "https://git.shts.su").replace(/\/$/, "") +const serverUrl = (process.env.GITEA_SERVER_URL ?? "https://git.shx.one").replace(/\/$/, "") const MANIFEST_COMMIT_LIMIT = Number(process.env.RELEASE_MANIFEST_COMMIT_LIMIT ?? 6) const CONVENTIONAL_RE = diff --git a/.gitea/workflows/docker.yml b/.gitea/workflows/docker.yml index 4a96664..104e75b 100644 --- a/.gitea/workflows/docker.yml +++ b/.gitea/workflows/docker.yml @@ -7,8 +7,8 @@ on: workflow_dispatch: env: - REGISTRY: git.shts.su - GITEA_SERVER_URL: https://git.shts.su + REGISTRY: git.shx.one + GITEA_SERVER_URL: https://git.shx.one jobs: prepare-release: @@ -76,7 +76,7 @@ jobs: - name: Log in to Gitea Registry uses: docker/login-action@v3 with: - registry: git.shts.su + registry: git.shx.one username: ${{ gitea.actor }} password: ${{ secrets.ACTIONS_PAT }} @@ -161,7 +161,7 @@ jobs: - name: Log in to Gitea Registry uses: docker/login-action@v3 with: - registry: git.shts.su + registry: git.shx.one username: ${{ gitea.actor }} password: ${{ secrets.ACTIONS_PAT }} @@ -214,7 +214,7 @@ jobs: - name: Log in to Gitea Registry uses: docker/login-action@v3 with: - registry: git.shts.su + registry: git.shx.one username: ${{ gitea.actor }} password: ${{ secrets.ACTIONS_PAT }} diff --git a/README.md b/README.md index fca87a2..019ed58 100644 --- a/README.md +++ b/README.md @@ -23,13 +23,13 @@ | Контракты | `packages/contracts/` | Zod 4, `@mmapp/contracts` | — | встраиваются в frontend/backend | | Updater | `deploy/updater/` | bash, `docker:27-cli`, curl, jq | — | `…-updater` | | Деплой | `deploy/docker-compose.yml` | Docker Compose | — | — | -| CI | `.gitea/workflows/docker.yml` | Gitea Actions, Buildx | — | push в `git.shts.su` | +| CI | `.gitea/workflows/docker.yml` | Gitea Actions, Buildx | — | push в `git.shx.one` | Имена образов в registry для репозитория `denozord/MikrotikManager-3`: -- `git.shts.su/denozord/mikrotikmanager-backend` -- `git.shts.su/denozord/mikrotikmanager-frontend` -- `git.shts.su/denozord/mikrotikmanager-updater` +- `git.shx.one/denozord/mikrotikmanager-backend` +- `git.shx.one/denozord/mikrotikmanager-frontend` +- `git.shx.one/denozord/mikrotikmanager-updater` Для другого owner/repo подставьте имя по правилу CI (см. [CI/CD](#cicd-gitea-actions)). @@ -54,7 +54,7 @@ flowchart TB subgraph ci [Gitea Actions] WF[".gitea/workflows/docker.yml"] - WF --> Reg["git.shts.su registry"] + WF --> Reg["git.shx.one registry"] end subgraph prod [Прод-сервер] @@ -192,9 +192,9 @@ npm --prefix backend run db:studio | Job | Build context | Dockerfile | Имя образа | |-----|---------------|------------|------------| -| `backend-image` | `.ci/docker/backend` (staging в CI) | `backend/Dockerfile` | `git.shts.su//-backend` | -| `frontend-image` | `.ci/docker/frontend` | `Dockerfile.frontend` | `git.shts.su//-frontend` | -| `updater-image` | `deploy/updater` | `deploy/updater/Dockerfile` | `git.shts.su//-updater` | +| `backend-image` | `.ci/docker/backend` (staging в CI) | `backend/Dockerfile` | `git.shx.one//-backend` | +| `frontend-image` | `.ci/docker/frontend` | `Dockerfile.frontend` | `git.shx.one//-frontend` | +| `updater-image` | `deploy/updater` | `deploy/updater/Dockerfile` | `git.shx.one//-updater` | - `` — первая часть `gitea.repository`, lower case. - `` — имя репозитория lower case без суффикса `-<цифры>` в конце (например `MikrotikManager-3` → `mikrotikmanager`). @@ -212,7 +212,7 @@ npm --prefix backend run db:studio - **`feat` / `feat!` / `BREAKING CHANGE`** → minor (`1.x.0`); **`fix`**, `chore`, `docs`, `refactor`, `style`, `test`, `build`, `ci` → patch (`1.0.x`). - Если после последнего тега нет новых коммитов, **релиз** пропускается; Docker-образы при этом всё равно собираются и публикуются с `:latest` и `:`. - Первый релиз без тега `v1.0.0` возможен автоматически: CI берёт историю `HEAD`, считает bump от `1.0.0` и создаёт тег (например `v1.1.0` при `feat:`). -- Job **`publish-release`**: annotated tag `v1.2.3`, Gitea Release на `https://git.shts.su` (markdown notes), образы с тегами `:latest`, `:`, `:`. +- Job **`publish-release`**: annotated tag `v1.2.3`, Gitea Release на `https://git.shx.one` (markdown notes), образы с тегами `:latest`, `:`, `:`. - UI: версия в sidebar и страница **`/releases`**; manifest `public/release-manifest.json` (в CI подставляется из артефакта). - Bootstrap: один раз выставить `1.0.0` в workspace `package.json` и создать тег **`v1.0.0`** на `main` перед первым автоматическим bump. - Сообщения коммитов: см. [`.cursor/rules/release-versioning.mdc`](.cursor/rules/release-versioning.mdc); subject и body — **на русском**, префикс Conventional Commits — на английском. @@ -225,9 +225,9 @@ npm --prefix backend run db:studio | Сервис | `container_name` | Образ (пример) | Порты host:container | Тома | `restart` | |--------|------------------|----------------|----------------------|------|-----------| -| backend | `mmapp-backend` | `git.shts.su/denozord/mikrotikmanager-backend:latest` | `8000:8000` | `backend-data` → `/app/data` | `unless-stopped` | -| frontend | `mmapp-frontend` | `git.shts.su/denozord/mikrotikmanager-frontend:latest` | `3000:3000` | — | `unless-stopped` | -| updater | `mmapp-updater` | `git.shts.su/denozord/mikrotikmanager-updater:latest` | не публикуются | docker.sock, `updater-state` → `/state`, `targets.json` → `/etc/updater/targets.json:ro` | `unless-stopped` | +| backend | `mmapp-backend` | `git.shx.one/denozord/mikrotikmanager-backend:latest` | `8000:8000` | `backend-data` → `/app/data` | `unless-stopped` | +| frontend | `mmapp-frontend` | `git.shx.one/denozord/mikrotikmanager-frontend:latest` | `3000:3000` | — | `unless-stopped` | +| updater | `mmapp-updater` | `git.shx.one/denozord/mikrotikmanager-updater:latest` | не публикуются | docker.sock, `updater-state` → `/state`, `targets.json` → `/etc/updater/targets.json:ro` | `unless-stopped` | Метки для updater на backend и frontend: @@ -258,14 +258,14 @@ npm --prefix backend run db:studio | `POLL_INTERVAL_SECONDS` | `300` | пауза между циклами опроса | | `HEALTH_TIMEOUT_SECONDS` | `120` | ожидание HTTP health | | `STOP_TIMEOUT_SECONDS` | `30` | `docker stop -t` | -| `REGISTRY` | `git.shts.su` | registry для `docker login` | +| `REGISTRY` | `git.shx.one` | registry для `docker login` | | `REGISTRY_USERNAME` | пусто | логин (если заданы оба с паролем) | | `REGISTRY_PASSWORD` | пусто | пароль registry | ### Docker Compose ```bash -docker login git.shts.su +docker login git.shx.one export CORS_ORIGIN=http://<хост>:3000 export REGISTRY_USERNAME= export REGISTRY_PASSWORD= @@ -307,8 +307,8 @@ docker run -d \ -v backend-data:/app/data \ --label mmapp.updater.managed=true \ --label mmapp.updater.target=backend \ - --label mmapp.updater.image=git.shts.su/denozord/mikrotikmanager-backend:latest \ - git.shts.su/denozord/mikrotikmanager-backend:latest + --label mmapp.updater.image=git.shx.one/denozord/mikrotikmanager-backend:latest \ + git.shx.one/denozord/mikrotikmanager-backend:latest ``` **Frontend:** @@ -320,8 +320,8 @@ docker run -d \ -p 3000:3000 \ --label mmapp.updater.managed=true \ --label mmapp.updater.target=frontend \ - --label mmapp.updater.image=git.shts.su/denozord/mikrotikmanager-frontend:latest \ - git.shts.su/denozord/mikrotikmanager-frontend:latest + --label mmapp.updater.image=git.shx.one/denozord/mikrotikmanager-frontend:latest \ + git.shx.one/denozord/mikrotikmanager-frontend:latest ``` **Updater:** @@ -331,7 +331,7 @@ docker volume create updater-state docker run -d \ --name mmapp-updater \ --restart unless-stopped \ - -e REGISTRY=git.shts.su \ + -e REGISTRY=git.shx.one \ -e REGISTRY_USERNAME= \ -e REGISTRY_PASSWORD= \ -e POLL_INTERVAL_SECONDS=300 \ @@ -340,7 +340,7 @@ docker run -d \ -v /var/run/docker.sock:/var/run/docker.sock \ -v updater-state:/state \ -v /path/to/targets.json:/etc/updater/targets.json:ro \ - git.shts.su/denozord/mikrotikmanager-updater:latest + git.shx.one/denozord/mikrotikmanager-updater:latest ``` ### Проверка после деплоя @@ -399,7 +399,7 @@ bash deploy/updater/validate.sh ## Первичная настройка сервера -Пошагово на чистом Linux-хосте с доступом в интернет и к `git.shts.su`. +Пошагово на чистом Linux-хосте с доступом в интернет и к `git.shx.one`. 1. Установить Docker Engine и плагин Compose (официальная документация Docker для вашего дистрибутива). 2. Проверить: @@ -413,7 +413,7 @@ docker compose version 4. Войти в registry: ```bash -docker login git.shts.su +docker login git.shx.one ``` 5. Получить файлы деплоя: клонировать репозиторий или скопировать каталог `deploy/` и подготовить `deploy/updater/targets.json`. @@ -443,8 +443,8 @@ Updater опрашивает registry с интервалом `POLL_INTERVAL_SEC ### Ручное обновление ```bash -docker pull git.shts.su/denozord/mikrotikmanager-backend:latest -docker pull git.shts.su/denozord/mikrotikmanager-frontend:latest +docker pull git.shx.one/denozord/mikrotikmanager-backend:latest +docker pull git.shx.one/denozord/mikrotikmanager-frontend:latest ``` Через compose (пересоздание при смене образа): @@ -485,7 +485,7 @@ docker start mmapp-backend 1. Установить Docker Engine и Compose plugin; проверить `docker version` и `docker compose version`. 2. Открыть порты 3000 и 8000 (или обеспечить доступ клиентов к UI и API). -3. Выполнить `docker login git.shts.su`. +3. Выполнить `docker login git.shx.one`. 4. Склонировать репозиторий или скопировать `deploy/`. 5. Задать `CORS_ORIGIN` (origin фронтенда для браузера). 6. Задать `REGISTRY_USERNAME` и `REGISTRY_PASSWORD` для updater при приватном registry. diff --git a/app/(main)/settings/page.tsx b/app/(main)/settings/page.tsx index a995244..7ffc574 100644 --- a/app/(main)/settings/page.tsx +++ b/app/(main)/settings/page.tsx @@ -1189,7 +1189,7 @@ export default function SettingsPage() { Control plane EvoBGP: Bearer-ключ и роль viewer+ — см.{" "} diff --git a/deploy/docker-compose.yml b/deploy/docker-compose.yml index a76505c..27256f0 100644 --- a/deploy/docker-compose.yml +++ b/deploy/docker-compose.yml @@ -1,6 +1,6 @@ services: backend: - image: git.shts.su/denozord/mikrotikmanager-backend:latest + image: git.shx.one/denozord/mikrotikmanager-backend:latest container_name: mmapp-backend restart: unless-stopped ports: @@ -12,10 +12,10 @@ services: labels: mmapp.updater.managed: "true" mmapp.updater.target: backend - mmapp.updater.image: git.shts.su/denozord/mikrotikmanager-backend:latest + mmapp.updater.image: git.shx.one/denozord/mikrotikmanager-backend:latest frontend: - image: git.shts.su/denozord/mikrotikmanager-frontend:latest + image: git.shx.one/denozord/mikrotikmanager-frontend:latest container_name: mmapp-frontend restart: unless-stopped depends_on: @@ -27,14 +27,14 @@ services: labels: mmapp.updater.managed: "true" mmapp.updater.target: frontend - mmapp.updater.image: git.shts.su/denozord/mikrotikmanager-frontend:latest + mmapp.updater.image: git.shx.one/denozord/mikrotikmanager-frontend:latest updater: - image: git.shts.su/denozord/mikrotikmanager-updater:latest + image: git.shx.one/denozord/mikrotikmanager-updater:latest container_name: mmapp-updater restart: unless-stopped environment: - REGISTRY: git.shts.su + REGISTRY: git.shx.one REGISTRY_USERNAME: ${REGISTRY_USERNAME:-} REGISTRY_PASSWORD: ${REGISTRY_PASSWORD:-} POLL_INTERVAL_SECONDS: ${POLL_INTERVAL_SECONDS:-300} diff --git a/deploy/updater/Dockerfile b/deploy/updater/Dockerfile index 093b4c1..d6da98f 100644 --- a/deploy/updater/Dockerfile +++ b/deploy/updater/Dockerfile @@ -16,7 +16,7 @@ ENV STATE_FILE=/state/updater-state.json ENV POLL_INTERVAL_SECONDS=300 ENV HEALTH_TIMEOUT_SECONDS=120 ENV STOP_TIMEOUT_SECONDS=30 -ENV REGISTRY=git.shts.su +ENV REGISTRY=git.shx.one VOLUME ["/state"] diff --git a/deploy/updater/entrypoint.sh b/deploy/updater/entrypoint.sh index 071d17e..f7c0e2b 100644 --- a/deploy/updater/entrypoint.sh +++ b/deploy/updater/entrypoint.sh @@ -6,7 +6,7 @@ STATE_FILE="${STATE_FILE:-/state/updater-state.json}" POLL_INTERVAL_SECONDS="${POLL_INTERVAL_SECONDS:-300}" HEALTH_TIMEOUT_SECONDS="${HEALTH_TIMEOUT_SECONDS:-120}" STOP_TIMEOUT_SECONDS="${STOP_TIMEOUT_SECONDS:-30}" -REGISTRY="${REGISTRY:-git.shts.su}" +REGISTRY="${REGISTRY:-git.shx.one}" MANAGED_LABEL="mmapp.updater.managed" TARGET_LABEL="mmapp.updater.target" IMAGE_LABEL="mmapp.updater.image" diff --git a/deploy/updater/targets.json.example b/deploy/updater/targets.json.example index 420a211..f5dedc9 100644 --- a/deploy/updater/targets.json.example +++ b/deploy/updater/targets.json.example @@ -3,7 +3,7 @@ { "id": "backend", "container_name": "mmapp-backend", - "image": "git.shts.su/denozord/mikrotikmanager-backend:latest", + "image": "git.shx.one/denozord/mikrotikmanager-backend:latest", "health": { "type": "http", "url": "http://backend:8000/health", @@ -13,7 +13,7 @@ { "id": "frontend", "container_name": "mmapp-frontend", - "image": "git.shts.su/denozord/mikrotikmanager-frontend:latest", + "image": "git.shx.one/denozord/mikrotikmanager-frontend:latest", "health": { "type": "http", "url": "http://frontend:3000/dashboard", diff --git a/deploy/updater/test-staging.sh b/deploy/updater/test-staging.sh index 401e96d..045f905 100644 --- a/deploy/updater/test-staging.sh +++ b/deploy/updater/test-staging.sh @@ -18,7 +18,7 @@ Staging checklist for mmapp-updater: - Confirm updater rolls back to previous_digest and keeps mmapp-backend running. 4. Registry outage - - Block access to git.shts.su temporarily. + - Block access to git.shx.one temporarily. - Confirm updater logs remote_digest_failed and does not stop managed containers. Run ./validate.sh before executing this checklist on a staging host.