Sprint 0 / #18: multi-stage Dockerfile и супервизор entrypoint #48

Closed
embeddevio wants to merge 2 commits from feat/18-dockerfile into main
Owner

Refs #18, Refs #15.

Что сделано

  • deploy/Dockerfile — multi-stage:
    • stage go-build (golang:1.23-alpine): клонирует и собирает amneziawg-go и amneziawg-tools (awg), ревизии параметризованы AMNEZIAWG_GO_REF / AMNEZIAWG_TOOLS_REF;
    • stage runtime (alpine:3.21): iptables/ip6tables, ipset, iproute2, dnsmasq, curl, tini, su-exec, python3 + venv с requirements.txt; сборка Python-зависимостей через временные .build-deps (образ не тащит компилятор);
    • пользователь awg (непривилегированный) для API-процесса; каталоги /config, /data, /run/awg (VOLUME), EXPOSE 8080, LABEL с источником;
    • HEALTHCHECK на http://127.0.0.1:8080/api/v1/health (эндпоинт появится в #31); ENTRYPOINT через tini для корректной обработки сигналов.
  • deploy/entrypoint.sh — супервизор: preflight-проверки (/dev/net/tun, доступ к iptables, наличие awg/ipset) с явным FATAL вместо тихой деградации, подготовка каталогов состояния, запись таблицы 100 awg-vpn в /etc/iproute2/rt_tables, включение ip_forward, запуск awg-api под su-exec awg и проброс кода возврата в Docker.
  • deploy/awg0.conf.example — пример клиентского .conf (только заглушки, без ключей).

Что НЕ проверено (честно)

  • Сборка образа не выполнена: на хосте, где работает TechLead-агент, нет бинаря docker (docker: command not found). Сборка и проверка awg --version / ipset --version / размер ≤250 MB должны быть выполнены там, где есть Docker — это зависит от #17 (CI runner) и #21 (стенд).
  • Репозитории и ревизии amneziawg-* в build-args взяты по upstream-референсу PoC; перед релизом их нужно запинить на проверенный тег (учтено в #45).
  • amneziawg-go в userspace-режиме не тестировался (нет стенда).

Гейты

  • Сборка образа и AC по AC #18 (awg/ipset version, HEALTHCHECK в манифесте, размер, падение без NET_ADMIN) — на стороне devops
  • CI green (#17)
  • Ревью владельца роли
Refs #18, Refs #15. ## Что сделано - **deploy/Dockerfile** — multi-stage: - stage `go-build` (`golang:1.23-alpine`): клонирует и собирает `amneziawg-go` и `amneziawg-tools` (`awg`), ревизии параметризованы `AMNEZIAWG_GO_REF` / `AMNEZIAWG_TOOLS_REF`; - stage `runtime` (`alpine:3.21`): iptables/ip6tables, ipset, iproute2, dnsmasq, curl, tini, su-exec, python3 + venv с `requirements.txt`; сборка Python-зависимостей через временные `.build-deps` (образ не тащит компилятор); - пользователь `awg` (непривилегированный) для API-процесса; каталоги `/config`, `/data`, `/run/awg` (VOLUME), `EXPOSE 8080`, `LABEL` с источником; - `HEALTHCHECK` на `http://127.0.0.1:8080/api/v1/health` (эндпоинт появится в #31); `ENTRYPOINT` через `tini` для корректной обработки сигналов. - **deploy/entrypoint.sh** — супервизор: preflight-проверки (`/dev/net/tun`, доступ к iptables, наличие `awg`/`ipset`) с явным FATAL вместо тихой деградации, подготовка каталогов состояния, запись таблицы 100 `awg-vpn` в `/etc/iproute2/rt_tables`, включение `ip_forward`, запуск `awg-api` под `su-exec awg` и проброс кода возврата в Docker. - **deploy/awg0.conf.example** — пример клиентского `.conf` (только заглушки, без ключей). ## Что НЕ проверено (честно) - **Сборка образа не выполнена**: на хосте, где работает TechLead-агент, нет бинаря `docker` (`docker: command not found`). Сборка и проверка `awg --version` / `ipset --version` / размер ≤250 MB должны быть выполнены там, где есть Docker — это зависит от #17 (CI runner) и #21 (стенд). - Репозитории и ревизии `amneziawg-*` в build-args взяты по upstream-референсу PoC; перед релизом их нужно **запинить на проверенный тег** (учтено в #45). - `amneziawg-go` в userspace-режиме не тестировался (нет стенда). ## Гейты - [ ] Сборка образа и AC по AC #18 (awg/ipset version, HEALTHCHECK в манифесте, размер, падение без NET_ADMIN) — на стороне devops - [ ] CI green (#17) - [ ] Ревью владельца роли
embeddevio added the devops label 2026-10-21 23:30:47 +03:00
embeddevio added 8 commits 2026-10-21 23:30:48 +03:00
embeddevio closed this pull request 2026-10-21 23:30:57 +03:00

Pull request closed

Sign in to join this conversation.