Sprint 0: multi-stage Dockerfile vpn-gateway (awg-tools + runtime alpine + супервизор) #18
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?
Owner: devops · Est: 5 SP · Priority: P0 · Sprint: 0 · Deps: —
Refs #15. Референс:
Dockerfileизembeddevio/amneziawg-docker-gateway.Что сделать
golang:alpineсобираетamneziawg-goиamneziawg-tools(awg); runtimealpine:3.21.awg-agent(root, сеть/iptables/ipset/awg) иawg-api(непривилегированный, FastAPI+UI+статика); супервизор вdeploy/entrypoint.shзапускает оба процесса и прокидывает unix-socket.HEALTHCHECKна/api/v1/health;EXPOSE 8080; объявление VOLUME/config,/data.Acceptance criteria
docker run --rm image awg --version && ipset --version, THEN обе команды завершаются с кодом 0.docker inspect, THEN HEALTHCHECK задан иHEALTHCHECKне требует привилегий для/api/v1/health.--cap-add=NET_ADMIN, WHEN стартует, THEN падает с явным сообщением о нехватке привилегий, а не с тихой ошибкой.DoD
Тесты на новый код ≥ 70 %, CI green, PR с ревью владельца роли.
TechLead: артефакт готов в ветке
feat/18-docker-runtime, PR #49 (3 файла, базаmain). Статус →status/review.Состав:
deploy/Dockerfile(multi-stage: golang builder → alpine runtime, venv, пользовательawg, VOLUME /config /data, HEALTHCHECK на/api/v1/health, tini),deploy/entrypoint.sh,deploy/awg0.conf.example.Проверено:
deploy/entrypoint.sh—sh -nOK,dash -nOK; git-blob-sha1 файла в рабочей копии совпадает с blob в ветке (5fd7db…ac91), т.е. проверен именно закоммиченный байт-в-байт файл.shellcheckв окружении агента отсутствует — статические проверки ширеsh -nне выполнены.НЕ проверено (блокирующее для закрытия задачи): сборка образа. На хосте TechLead-агента нет бинарника
docker, поэтому AC #18 (awg --version,ipset --version, HEALTHCHECK в манифесте, размер ≤ 250 MB, падение безNET_ADMIN) не подтверждён. Требуется исполнение там, где есть Docker: CI runner (#17) или dev-стенд (#21).Перед релизом ревизии
amneziawg-go/amneziawg-toolsиз build-args нужно запинить на тег — учтено в #45.TechLead — AC #18 подтверждён на реальном Docker-хосте (192.168.1.147, Docker 29.4.1, сборка через SSH).
Контекст сборки = объединённое состояние PR #47 + PR #49 (main + каркас + deploy). Все 5 файлов сверены по git-blob-sha1 с деревьями веток (несоответствий нет).
Три дефекта, которые выявила именно сборка (исправлены в ветке
feat/18-docker-runtime)GO_IMAGE=golang:1.23-alpine→go: go.mod requires go >= 1.25.0 (running go 1.23.12). Фикс:golang:1.25-alpine.amneziawg-tools/srcцельmakeсобирает бинарьwg, а неawg→cp awgпадало (can't stat 'awg'). Фикс:cp wg /usr/local/bin/awg(+awg-quickпри наличии)./etc/iproute2/rt_tablesв Alpine отсутствует → запись таблицы 100 падала сcan't create ... nonexistent directory. Фикс:mkdir -p /etc/iproute2 && touch ….Результаты проверок
docker build -f deploy/DockerfileBUILD3_EXIT=0, imagesha256:47b38a6515…docker image lsawgв образе--entrypoint awg awg --versionamneziawg-tools v3.1.20260812, rc=0 ✓ipsetв образе--cap-add=NET_ADMIN --entrypoint ipset ipset --versionipset v7.22, rc=0 ✓--entrypoint amneziawg-go --versionamneziawg-go v3.1.20260828, rc=0 ✓docker inspect .Config.HealthcheckCMD-SHELL curl -fsS .../api/v1/health, 30s/5s/20s/retries=3 ✓docker run --device=/dev/net/tun …FATAL: iptables недоступен: нужен --cap-add=NET_ADMIN, rc=1 ✓--device=/dev/net/tun --cap-add=NET_ADMINrt_tablesпишется без ошибок, контейнер в ожидании (ждёт #22/#31)fastapi 0.159.0✓Замечания для последующих задач
ipset --versionбез NET_ADMIN возвращает rc=1 (Kernel error: Operation not permitted) — в тестах вызывать только с NET_ADMIN.net.ipv4.ip_forwardв непривилегированном контейнере не включается — в runbook (#45) нужен--sysctl net.ipv4.ip_forward=1или--privileged; предупреждение в entrypoint теперь прямо это говорит.requirements.txtиbackend/из PR #47 → порядок мержа: #47 → #49.awg-dash:dev(202 MB,sha256:47b38a6515685f204db60d8d91f202beec5bf450fdde0bfd8fa40929d2cb0230) — пригодится для стенда #21.amneziawg-go/amneziawg-toolsпо-прежнемуmaster→ запинить на теги перед релизом (#45); версии, на которых проверено: toolsv3.1.20260812, gov3.1.20260828.