From 6577c1fb39631da71ae646c68ce8c0320648537c Mon Sep 17 00:00:00 2001 From: grendervill Date: Tue, 22 Sep 2026 20:42:52 +0300 Subject: [PATCH] =?UTF-8?q?build(security):=20=D0=BE=D0=B1=D1=80=D0=B0?= =?UTF-8?q?=D0=B7=D1=8B=20=D0=BF=D0=B8=D0=BD=D1=8F=D1=82=D1=81=D1=8F=20?= =?UTF-8?q?=D0=BF=D0=BE=20digest?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit AGENT.md 11.3 требует фиксировать образы по digest: тег в реестре может быть перезаписан. Закреплены базовые образы Dockerfile (node, golang, alpine) и образы установщика (caddy, livekit-server). Digest'ы проверены на стенде: сборка образа и пересоздание LiveKit проходят, caddy тянется по digest. --- Dockerfile | 9 ++++++--- deploy/install.sh | 6 ++++-- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/Dockerfile b/Dockerfile index e1eb2cf..f4a4eab 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,10 @@ +# Образы пинятся по digest (AGENT.md 11.3): тег может быть перезаписан в +# реестре, digest — нет. Обновление: получить новый digest +# (`docker buildx imagetools inspect <образ>` или Docker Hub API) и заменить. # syntax=docker/dockerfile:1 # ---------- web ---------- -FROM node:24-bookworm-slim AS web +FROM node:24-bookworm-slim@sha256:0e0ff40c39bc087845bfb27465a0df4ea419520094bc35842ff83dd8cbe6f9b6 AS web WORKDIR /src/web COPY web/package.json web/package-lock.json ./ RUN npm ci --no-audit --no-fund @@ -9,7 +12,7 @@ COPY web/ ./ RUN npm run build # ---------- go ---------- -FROM golang:1.27-bookworm AS gobuild +FROM golang:1.27-bookworm@sha256:69a7b9788769bec032d238959b61854e9ae87f57be9029ec04e9885fabf99195 AS gobuild WORKDIR /src ARG VERSION=dev ARG COMMIT=none @@ -36,7 +39,7 @@ RUN CC=musl-gcc CGO_ENABLED=1 go build \ # ---------- runtime ---------- # База alpine + статический бинарник: образ укладывается в бюджет §9.1 # (<50 MB). Проверка: docs/DECISIONS.md, решение D-007. -FROM alpine:3.20 AS runtime +FROM alpine:3.20@sha256:d9e853e87e55526f6b2917df91a2115c36dd7c696a35be12163d44e6e2a4b6bc AS runtime RUN addgroup -S -g 10001 glchat \ && adduser -S -u 10001 -G glchat -h /app -s /sbin/nologin glchat \ diff --git a/deploy/install.sh b/deploy/install.sh index 6df6350..64963f0 100755 --- a/deploy/install.sh +++ b/deploy/install.sh @@ -106,8 +106,10 @@ ENABLE_NFTABLES="${ENABLE_NFTABLES:-true}" ENABLE_SSH_HARDENING="${ENABLE_SSH_HARDENING:-true}" APP_IMAGE="${APP_IMAGE:-glchat:local}" IMAGE_TAG="${IMAGE_TAG:-v0.1.0}" -CADDY_IMAGE_TAG="${CADDY_IMAGE_TAG:-2.10-alpine}" -LIVEKIT_IMAGE_TAG="${LIVEKIT_IMAGE_TAG:-v1.9.7}" +# Тег + digest: реестр может перезаписать тег, digest фиксирует содержимое +# (AGENT.md 11.3). Обновление — заменить digest после проверки образа. +CADDY_IMAGE_TAG="${CADDY_IMAGE_TAG:-2.10-alpine@sha256:4c6e91c6ed0e2fa03efd5b44747b625fec79bc9cd06ac5235a779726618e530d}" +LIVEKIT_IMAGE_TAG="${LIVEKIT_IMAGE_TAG:-v1.9.7@sha256:ee33f59dc8d2fe176db7f2ef74e1b3ec754f29b50b0ae519b3fa893f7b015d07}" MAX_UPLOAD_MB="${MAX_UPLOAD_MB:-}" LOG_LEVEL="${LOG_LEVEL:-info}" SKIP_TLS="${SKIP_TLS:-0}"