- Добавлен release-body.md для подробных заметок о релизе на русском языке. - Реализован release-gitea.ps1 для автоматизированного релиза Gitea с помощью PowerShell. - Создан release-gitea.sh для автоматизированного релиза Gitea с помощью Bash. - Добавлен release.sh для сборки и маркировки релизов с поддержкой нескольких платформ. - Улучшен пользовательский интерфейс благодаря информативному логированию и обработке ошибок. - Добавлена поддержка переменных окружения и управления конфигурацией. - Добавлена функция создания архивов и загрузки ресурсов в Gitea.
104 lines
3.6 KiB
Docker
104 lines
3.6 KiB
Docker
# 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"
|