diff --git a/README.md b/README.md index e75f03e..f9cfef7 100644 --- a/README.md +++ b/README.md @@ -6,32 +6,54 @@ HTTP‑шлюз на Go для [Telemt Control API](docs/API.md): один по Предполагается установлены Docker и Docker Compose v2. +**Рекомендуется** брать уже собранный образ из Container Registry Gitea (после каждого push в репозиторий CI обновляет теги, в том числе `latest`): + +```bash +# при необходимости (закрытый registry): логин Gitea + PAT с read:package +docker login git.shts.su + +docker pull git.shts.su/denozord/telemt-api:latest +``` + +Конфиг возьмите из репозитория или создайте свой `config.yaml` (см. [config.example.yaml](config.example.yaml)): + ```bash git clone && cd telemt-api cp config.example.yaml config.yaml -# отредактируйте config.yaml: servers, whitelist_cidrs или allow_all для разработки -docker build -t telemt-api-gateway:local . +# отредактируйте config.yaml: servers, whitelist_cidrs или allow_all для разработки + docker run -d --name telemt-gateway \ -p 8080:8080 \ -v "$(pwd)/config.yaml:/etc/telemt-gateway/config.yaml:ro" \ -e CONFIG_PATH=/etc/telemt-gateway/config.yaml \ - telemt-api-gateway:local + git.shts.su/denozord/telemt-api:latest + curl -sS http://127.0.0.1:8080/health curl -sS http://127.0.0.1:8080/api/main_srv/health ``` -Или через Compose (пример конфига смотрите в `config.compose.yaml`): +Обновление образа: `docker pull git.shts.su/denozord/telemt-api:latest` и пересоздайте контейнер (`docker rm -f telemt-gateway` и снова `docker run …`). + +### Compose + +Тот же образ подтягивается из registry (без локальной сборки): ```bash -docker compose up -d --build +git clone && cd telemt-api +docker compose pull +docker compose up -d docker compose logs -f gateway ``` +### Локальная сборка образа + +Если нужен образ из исходников на этой машине: `docker build -t telemt-api-gateway:local .` и в `docker run` укажите тег `telemt-api-gateway:local`. Подробнее — [docs/GATEWAY_RUN.md](docs/GATEWAY_RUN.md). + ## Документация | Документ | Содержание | |----------|------------| -| **[docs/GATEWAY_RUN.md](docs/GATEWAY_RUN.md)** | Полная инструкция: конфиг, Docker CLI, Compose, CI/CD, неполадки | +| **[docs/GATEWAY_RUN.md](docs/GATEWAY_RUN.md)** | Полная инструкция: конфиг, pull/registry, Docker CLI, Compose, CI/CD, неполадки | | **[docs/API.md](docs/API.md)** | Контракт Telemt Control API (`/v1/…`) | ## Сборка и тесты без Docker diff --git a/docker-compose.yml b/docker-compose.yml index dd0673f..e345907 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,7 +1,7 @@ services: gateway: - build: . - image: telemt-api-gateway:local + image: git.shts.su/denozord/telemt-api:latest + # Локальная сборка вместо pull: укажите build: . и image: telemt-api-gateway:local ports: - "8080:8080" volumes: diff --git a/docs/GATEWAY_RUN.md b/docs/GATEWAY_RUN.md index 99cbea1..a1db22b 100644 --- a/docs/GATEWAY_RUN.md +++ b/docs/GATEWAY_RUN.md @@ -6,12 +6,13 @@ 2. [Требования](#требования) 3. [Минимальная конфигурация](#минимальная-конфигурация) 4. [Переменные окружения](#переменные-окружения) -5. [Сборка образа](#сборка-образа) -6. [Запуск через Docker CLI](#запуск-через-docker-cli) -7. [Запуск через Docker Compose](#запуск-через-docker-compose) -8. [Проверка](#проверка) -9. [Обновление и CI/CD](#обновление-и-cicd) -10. [Устранение неполадок](#устранение-неполадок) +5. [Готовый образ из registry](#готовый-образ-из-registry) +6. [Локальная сборка образа](#локальная-сборка-образа) +7. [Запуск через Docker CLI](#запуск-через-docker-cli) +8. [Запуск через Docker Compose](#запуск-через-docker-compose) +9. [Проверка](#проверка) +10. [Обновление и CI/CD](#обновление-и-cicd) +11. [Устранение неполадок](#устранение-неполадок) ## Назначение @@ -80,24 +81,42 @@ servers: | `CONFIG_PATH` | Путь к YAML внутри контейнера. По умолчанию: `/etc/telemt-gateway/config.yaml`. | | `TELEMT_API_AUTH` | Пример: секрет для `authorization_env` в конфиге (имя может быть любым). | -## Сборка образа +## Готовый образ из registry -В каталоге репозитория: +CI публикует образ в Container Registry Gitea. Для репозитория `denozord/telemt-api` на `git.shts.su` стабильный тег: + +```bash +docker pull git.shts.su/denozord/telemt-api:latest +``` + +Если registry **не публичный**, сначала войдите (логин — пользователь Gitea, пароль — personal access token с правом **`read:package`**): + +```bash +docker login git.shts.su +``` + +Другие полезные теги из того же workflow: имя ветки (с `/` заменённым на `-`) и `sha-<12 символов коммита>` — см. раздел [Обновление и CI/CD](#обновление-и-cicd). + +## Локальная сборка образа + +Если нужно собрать образ самостоятельно из клона репозитория: ```bash docker build -t telemt-api-gateway:local . ``` +В командах `docker run` ниже вместо имени из registry подставьте `telemt-api-gateway:local`. + ## Запуск через Docker CLI -Пример для Linux (подставьте путь к `config.yaml`; ниже — файл из текущего каталога): +Пример для Linux (подставьте путь к `config.yaml`; ниже — файл из текущего каталога). Используется **готовый** образ: ```bash docker run -d --name telemt-gateway \ -p 8080:8080 \ -v "$(pwd)/config.yaml:/etc/telemt-gateway/config.yaml:ro" \ -e CONFIG_PATH=/etc/telemt-gateway/config.yaml \ - telemt-api-gateway:local + git.shts.su/denozord/telemt-api:latest ``` Проверка: @@ -118,14 +137,17 @@ docker rm telemt-gateway ## Запуск через Docker Compose -В репозитории есть [docker-compose.yml](../docker-compose.yml) и пример [config.compose.yaml](../config.compose.yaml) с `allow_all: true` и `base_url: http://host.docker.internal:9091` (Telemt на хосте; на Docker Desktop для Linux это обычно работает из коробки). +В репозитории есть [docker-compose.yml](../docker-compose.yml) и пример [config.compose.yaml](../config.compose.yaml) с `allow_all: true` и `base_url: http://host.docker.internal:9091` (Telemt на хосте; на Docker Desktop для Linux это обычно работает из коробки). Образ по умолчанию **скачивается** из registry, локальная сборка не требуется. ```bash -docker compose up -d --build +docker compose pull +docker compose up -d docker compose logs -f gateway docker compose down ``` +Чтобы пересобрать образ из исходников вместо pull, в [docker-compose.yml](../docker-compose.yml) временно замените блок `image:` на `build: .` (и нужный тег при необходимости). + На Linux без `host.docker.internal` сделайте одно из: - в `docker-compose.yml` для сервиса `gateway` добавьте `extra_hosts: ["host.docker.internal:host-gateway"]` (Docker Engine 20.10+); @@ -144,7 +166,7 @@ docker compose down ## Обновление и CI/CD -- **Образ**: пересоберите тег или подтяните новый из registry, затем `docker compose up -d --build` или `docker stop` / `docker run ...` с тем же volume конфига. +- **Образ**: подтяните свежий тег (`docker pull git.shts.su/denozord/telemt-api:latest` или `docker compose pull`), пересоздайте контейнер (`docker compose up -d` или новый `docker run` с тем же volume конфига). Локальная пересборка нужна только если вы меняете Dockerfile/код и не пользуетесь CI. - **Конфиг**: отредактируйте файл на хосте и перезапустите контейнер (шлюз не перечитывает конфиг на лету). - **Gitea Actions**: workflow [.gitea/workflows/docker.yaml](../.gitea/workflows/docker.yaml) сначала выполняет `go mod tidy && go test ./...`, затем собирает образ через Buildx и пушит в Container Registry Gitea. @@ -155,6 +177,7 @@ docker compose down ## Устранение неполадок +- **`docker pull`: `unauthorized` / `denied`**: выполните `docker login git.shts.su` с учётной записью Gitea и PAT с **`read:package`**. - **`403 forbidden` с хоста при `allow_all: false`**: добавьте CIDR клиента в `whitelist_cidrs`. Запросы из контейнера к самому себе идут с `127.0.0.1` — при необходимости добавьте `127.0.0.1/32`. - **За reverse proxy**: укажите CIDR прокси в `trusted_proxies`, иначе whitelist видит IP прокси, а не клиента. - **`502 bad_gateway`**: проверьте `base_url`, DNS в Docker‑сети и то, что Telemt слушает API (`[server.api].enabled=true` и корректный `listen`).