Files
compress/Dockerfile
Dmitriy Fofanov ec65cfd05a Достижение: Добавлены скрипты и документация для релиза PDF Compressor.
- Добавлен release-body.md для подробных заметок о релизе на русском языке.
- Реализован release-gitea.ps1 для автоматизированного релиза Gitea с помощью PowerShell.
- Создан release-gitea.sh для автоматизированного релиза Gitea с помощью Bash.
- Добавлен release.sh для сборки и маркировки релизов с поддержкой нескольких платформ.
- Улучшен пользовательский интерфейс благодаря информативному логированию и обработке ошибок.
- Добавлена ​​поддержка переменных окружения и управления конфигурацией.
- Добавлена ​​функция создания архивов и загрузки ресурсов в Gitea.
2025-11-05 09:33:12 +03:00

104 lines
3.6 KiB
Docker
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Dockerfile для PDF Compressor
# Multi-stage сборка для оптимизации размера образа
# Стадия 1: Сборка приложения
FROM golang:1.24-alpine AS builder
# Метаданные
LABEL maintainer="PDF Compressor Team"
LABEL description="PDF Compressor - автоматическое сжатие PDF файлов"
LABEL version="1.0.0"
# Установка необходимых пакетов для сборки
RUN apk add --no-cache \
git \
ca-certificates \
tzdata \
gcc \
musl-dev
# Создание пользователя для сборки
RUN adduser -D -s /bin/sh -u 1001 builder
# Установка рабочей директории
WORKDIR /app
# Копирование файлов зависимостей
COPY go.mod go.sum ./
# Загрузка зависимостей (кэшируемый слой)
RUN go mod download && go mod verify
# Копирование исходного кода
COPY . .
# Изменение владельца файлов
RUN chown -R builder:builder /app
USER builder
# Сборка приложения с оптимизациями
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build \
-ldflags='-w -s -extldflags "-static"' \
-a -installsuffix cgo \
-o pdf-compressor cmd/main.go
# Стадия 2: Минимальный runtime образ
FROM alpine:3.19
# Установка runtime зависимостей
RUN apk add --no-cache \
ca-certificates \
tzdata \
&& update-ca-certificates
# Создание пользователя для runtime
RUN addgroup -g 1001 -S pdfuser && \
adduser -u 1001 -S pdfuser -G pdfuser
# Создание рабочих директорий
RUN mkdir -p /app/input /app/output /app/config /app/logs && \
chown -R pdfuser:pdfuser /app
# Копирование скомпилированного приложения
COPY --from=builder /app/pdf-compressor /usr/local/bin/pdf-compressor
# Копирование конфигурационного файла по умолчанию
COPY config.yaml /app/config/config.yaml
# Установка переменных окружения
ENV APP_CONFIG_PATH="/app/config/config.yaml"
ENV APP_LOG_LEVEL="info"
ENV APP_INPUT_DIR="/app/input"
ENV APP_OUTPUT_DIR="/app/output"
ENV APP_LOGS_DIR="/app/logs"
# Переключение на непривилегированного пользователя
USER pdfuser
# Установка рабочей директории
WORKDIR /app
# Открытие портов (если потребуется web интерфейс в будущем)
# EXPOSE 8080
# Volumes для данных
VOLUME ["/app/input", "/app/output", "/app/config", "/app/logs"]
# Healthcheck для мониторинга
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
CMD pdf-compressor --version || exit 1
# Команда запуска
ENTRYPOINT ["pdf-compressor"]
CMD ["--config", "/app/config/config.yaml"]
# Метаданные образа
LABEL org.opencontainers.image.title="PDF Compressor"
LABEL org.opencontainers.image.description="Автоматическое сжатие PDF файлов с TUI интерфейсом"
LABEL org.opencontainers.image.version="1.0.0"
LABEL org.opencontainers.image.created="2024"
LABEL org.opencontainers.image.vendor="PDF Compressor Team"
LABEL org.opencontainers.image.licenses="MIT"
LABEL org.opencontainers.image.documentation="https://github.com/your-username/pdf-compressor"
LABEL org.opencontainers.image.source="https://github.com/your-username/pdf-compressor"