Update Docker configuration and documentation for Linux compatibility. Added extra_hosts for Docker Compose and updated GATEWAY_RUN.md to reflect changes in running commands for Linux. Enhanced GitHub Actions workflow for building and pushing Docker images.
This commit is contained in:
+23
-21
@@ -84,49 +84,52 @@ servers:
|
||||
|
||||
В каталоге репозитория:
|
||||
|
||||
```powershell
|
||||
```bash
|
||||
docker build -t telemt-api-gateway:local .
|
||||
```
|
||||
|
||||
## Запуск через Docker CLI
|
||||
|
||||
Пример для PowerShell (подставьте путь к своему `config.yaml`):
|
||||
Пример для Linux (подставьте путь к `config.yaml`; ниже — файл из текущего каталога):
|
||||
|
||||
```powershell
|
||||
docker run -d --name telemt-gateway `
|
||||
-p 8080:8080 `
|
||||
-v "C:\path\to\config.yaml:/etc/telemt-gateway/config.yaml:ro" `
|
||||
-e CONFIG_PATH=/etc/telemt-gateway/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
|
||||
```
|
||||
|
||||
Проверка:
|
||||
|
||||
```powershell
|
||||
Invoke-WebRequest -Uri http://127.0.0.1:8080/health -UseBasicParsing
|
||||
Invoke-WebRequest -Uri http://127.0.0.1:8080/api/main_srv/health -UseBasicParsing
|
||||
```bash
|
||||
curl -sS -i http://127.0.0.1:8080/health
|
||||
curl -sS -i http://127.0.0.1:8080/api/main_srv/health
|
||||
```
|
||||
|
||||
Второй запрос проксируется на `{base_url}/v1/health` для alias `main_srv`.
|
||||
|
||||
Остановка и удаление:
|
||||
|
||||
```powershell
|
||||
```bash
|
||||
docker stop telemt-gateway
|
||||
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-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 это обычно работает из коробки).
|
||||
|
||||
```powershell
|
||||
```bash
|
||||
docker compose up -d --build
|
||||
docker compose logs -f gateway
|
||||
docker compose down
|
||||
```
|
||||
|
||||
На старых Linux‑хостах, где нет `host.docker.internal`, замените `base_url` на IP хоста или добавьте сервис Telemt в тот же `docker-compose` и укажите его DNS‑имя.
|
||||
На Linux без `host.docker.internal` сделайте одно из:
|
||||
|
||||
- в `docker-compose.yml` для сервиса `gateway` добавьте `extra_hosts: ["host.docker.internal:host-gateway"]` (Docker Engine 20.10+);
|
||||
- либо замените в `config.compose.yaml` значение `base_url` на IP хоста в docker‑bridge (часто `172.17.0.1`) или на имя сервиса Telemt в той же сети compose.
|
||||
|
||||
## Проверка
|
||||
|
||||
@@ -143,17 +146,16 @@ docker compose down
|
||||
|
||||
- **Образ**: пересоберите тег или подтяните новый из registry, затем `docker compose up -d --build` или `docker stop` / `docker run ...` с тем же volume конфига.
|
||||
- **Конфиг**: отредактируйте файл на хосте и перезапустите контейнер (шлюз не перечитывает конфиг на лету).
|
||||
- **Gitea Actions**: workflow [.gitea/workflows/docker.yaml](../.gitea/workflows/docker.yaml) выполняет `go test` и собирает Docker‑образ. Для пуша в registry задайте secrets:
|
||||
- **Gitea Actions**: workflow [.gitea/workflows/docker.yaml](../.gitea/workflows/docker.yaml) сначала выполняет `go mod tidy && go test ./...`, затем собирает образ через Buildx и пушит в Container Registry Gitea.
|
||||
|
||||
- `REGISTRY_IMAGE` — полное имя образа без тега, например `git.example.com/owner/telemt-api-gateway`
|
||||
- `REGISTRY_URL` — хост registry, например `git.example.com`
|
||||
- `REGISTRY_USER` / `REGISTRY_PASSWORD`
|
||||
|
||||
Если secrets не заданы, образ только собирается в runner без push.
|
||||
- В репозитории должен быть secret **`ACTIONS_PAT`** — personal access token пользователя с правом **`write:package`** (и при необходимости `read:package`), как для обычного `docker login` к registry.
|
||||
- Логин в registry: пользователь **`gitea.actor`** (кто запустил workflow), пароль — этот PAT.
|
||||
- Хост registry задаётся в workflow в `env.REGISTRY` (по умолчанию `git.shts.su`); при другом инстансе Gitea измените значение в `.gitea/workflows/docker.yaml`.
|
||||
- Теги образа: `latest`, имя ветки/тега (с `/` заменённым на `-`), и `sha-<первые 12 символов коммита>`. Полный путь: `{REGISTRY}/{gitea.repository}:<тег>`.
|
||||
|
||||
## Устранение неполадок
|
||||
|
||||
- **`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`).
|
||||
- **Сборка Go без Docker**: выполните `go mod tidy && go test ./...` в корне репозитория.
|
||||
- **Сборка Go без Docker**: в корне репозитория выполните `go mod tidy && go test ./...`.
|
||||
|
||||
Reference in New Issue
Block a user