build(security): образы пинятся по digest
AGENT.md 11.3 требует фиксировать образы по digest: тег в реестре может быть перезаписан. Закреплены базовые образы Dockerfile (node, golang, alpine) и образы установщика (caddy, livekit-server). Digest'ы проверены на стенде: сборка образа и пересоздание LiveKit проходят, caddy тянется по digest.
This commit is contained in:
+6
-3
@@ -1,7 +1,10 @@
|
|||||||
|
# Образы пинятся по digest (AGENT.md 11.3): тег может быть перезаписан в
|
||||||
|
# реестре, digest — нет. Обновление: получить новый digest
|
||||||
|
# (`docker buildx imagetools inspect <образ>` или Docker Hub API) и заменить.
|
||||||
# syntax=docker/dockerfile:1
|
# syntax=docker/dockerfile:1
|
||||||
|
|
||||||
# ---------- web ----------
|
# ---------- web ----------
|
||||||
FROM node:24-bookworm-slim AS web
|
FROM node:24-bookworm-slim@sha256:0e0ff40c39bc087845bfb27465a0df4ea419520094bc35842ff83dd8cbe6f9b6 AS web
|
||||||
WORKDIR /src/web
|
WORKDIR /src/web
|
||||||
COPY web/package.json web/package-lock.json ./
|
COPY web/package.json web/package-lock.json ./
|
||||||
RUN npm ci --no-audit --no-fund
|
RUN npm ci --no-audit --no-fund
|
||||||
@@ -9,7 +12,7 @@ COPY web/ ./
|
|||||||
RUN npm run build
|
RUN npm run build
|
||||||
|
|
||||||
# ---------- go ----------
|
# ---------- go ----------
|
||||||
FROM golang:1.27-bookworm AS gobuild
|
FROM golang:1.27-bookworm@sha256:69a7b9788769bec032d238959b61854e9ae87f57be9029ec04e9885fabf99195 AS gobuild
|
||||||
WORKDIR /src
|
WORKDIR /src
|
||||||
ARG VERSION=dev
|
ARG VERSION=dev
|
||||||
ARG COMMIT=none
|
ARG COMMIT=none
|
||||||
@@ -36,7 +39,7 @@ RUN CC=musl-gcc CGO_ENABLED=1 go build \
|
|||||||
# ---------- runtime ----------
|
# ---------- runtime ----------
|
||||||
# База alpine + статический бинарник: образ укладывается в бюджет §9.1
|
# База alpine + статический бинарник: образ укладывается в бюджет §9.1
|
||||||
# (<50 MB). Проверка: docs/DECISIONS.md, решение D-007.
|
# (<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 \
|
RUN addgroup -S -g 10001 glchat \
|
||||||
&& adduser -S -u 10001 -G glchat -h /app -s /sbin/nologin glchat \
|
&& adduser -S -u 10001 -G glchat -h /app -s /sbin/nologin glchat \
|
||||||
|
|||||||
+4
-2
@@ -106,8 +106,10 @@ ENABLE_NFTABLES="${ENABLE_NFTABLES:-true}"
|
|||||||
ENABLE_SSH_HARDENING="${ENABLE_SSH_HARDENING:-true}"
|
ENABLE_SSH_HARDENING="${ENABLE_SSH_HARDENING:-true}"
|
||||||
APP_IMAGE="${APP_IMAGE:-glchat:local}"
|
APP_IMAGE="${APP_IMAGE:-glchat:local}"
|
||||||
IMAGE_TAG="${IMAGE_TAG:-v0.1.0}"
|
IMAGE_TAG="${IMAGE_TAG:-v0.1.0}"
|
||||||
CADDY_IMAGE_TAG="${CADDY_IMAGE_TAG:-2.10-alpine}"
|
# Тег + digest: реестр может перезаписать тег, digest фиксирует содержимое
|
||||||
LIVEKIT_IMAGE_TAG="${LIVEKIT_IMAGE_TAG:-v1.9.7}"
|
# (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:-}"
|
MAX_UPLOAD_MB="${MAX_UPLOAD_MB:-}"
|
||||||
LOG_LEVEL="${LOG_LEVEL:-info}"
|
LOG_LEVEL="${LOG_LEVEL:-info}"
|
||||||
SKIP_TLS="${SKIP_TLS:-0}"
|
SKIP_TLS="${SKIP_TLS:-0}"
|
||||||
|
|||||||
Reference in New Issue
Block a user