/
codespawn
/
tgstream
Обзор
Документация
Войти
/
codespawn
/
tgstream
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
16
CI/CD
Аналитика
Безопасность
master
deploy/docker/Dockerfile
74 строки
3 KB
codespawn
Запрос на слияние 'feat/serve-subcommand' (
#13
) из feat/serve-subcommand в master
26 июл 2026, 18:07
Верифицирован
26 июл 2026, 18:07
caafaab
Код
Авторство
О чём код?
# Build stage FROM golang:1.25-alpine AS builder # Install git for go modules RUN apk add --no-cache git # Set working directory WORKDIR /app # Copy go mod files COPY go.mod go.sum ./ # Download dependencies RUN go mod download # Copy source code COPY . . # Версия/коммит/дата инъекцируются в бинарник через ldflags в internal/version # (тот же механизм, что в Makefile build / .goreleaser.yaml). Дефолты — для # случая, когда ARG не передан: бинарник идентифицируется как "dev/none/unknown" # (как при голой `go build`). CI передаёт VERSION=tag_name релиза; локальная # сборка — через docker build --build-arg VERSION=... или compose args (.env). ARG VERSION=dev ARG COMMIT=none ARG DATE=unknown # Build the application. CGO выключен (modernc.org/sqlite — чистый Go): это # позволяет кросс-собирать без C-тулчейна. -installsuffix cgo убран как # бессмысленный при CGO_ENABLED=0 (артефакт старых рецептов). RUN CGO_ENABLED=0 GOOS=linux go build -a \ -ldflags "\ -X gitverse.ru/codespawn/tgstream/internal/version.Version=${VERSION} \ -X gitverse.ru/codespawn/tgstream/internal/version.Commit=${COMMIT} \ -X gitverse.ru/codespawn/tgstream/internal/version.Date=${DATE}" \ -o tgstream ./cmd/tgstream # Final stage FROM alpine:latest # Install ca-certificates for HTTPS requests to sources RUN apk --no-cache add ca-certificates tzdata wget # Create non-root user RUN addgroup -g 1000 -S tgstream && \ adduser -u 1000 -S tgstream -G tgstream # Create directory for the app WORKDIR /app # Copy binary from builder stage COPY --from=builder /app/tgstream . # Copy shipped DSL extraction configs (telegram.yaml by default). # TGSTREAM_SOURCE_CONFIGS_DIR points here (see docker-compose.yml / systemd unit). COPY --from=builder /app/deploy/websource-configs /app/websource-configs # Create directory for database RUN mkdir -p data && chown tgstream:tgstream /app/data # Switch to non-root user USER tgstream # Expose port EXPOSE 8080 # Health check HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ CMD wget --no-verbose --tries=1 --spider http://localhost:8080/healthz || exit 1 # Run the application. Subcommand `serve` обязателен (Kong): без него # (tgstream без аргументов) выводится usage и ненулевой exit. См. main.go. CMD ["./tgstream", "serve"]