- Добавлен файл LICENSE с лицензией GNU General Public License версии 3.0. - Создан скрипт PowerShell (build-all.ps1) для сборки двоичных файлов Windows и Linux из Windows с использованием кросс-компиляции. - Разработан скрипт сборки Linux (build-linux.sh) для сборки двоичных файлов Linux. - Реализован скрипт PowerShell (build-windows.ps1) для сборки двоичных файлов Windows. - Каждый скрипт сборки включает упаковку и генерацию контрольной суммы SHA256 для двоичных файлов.
104 lines
3.5 KiB
Docker
104 lines
3.5 KiB
Docker
# Dockerfile для Compress
|
||
# Multi-stage сборка для оптимизации размера образа
|
||
|
||
# Стадия 1: Сборка приложения
|
||
FROM golang:1.24-alpine AS builder
|
||
|
||
# Метаданные
|
||
LABEL maintainer="Compress Team"
|
||
LABEL description="Compress - автоматическое сжатие 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 compress 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/compress /usr/local/bin/compress
|
||
|
||
# Копирование конфигурационного файла по умолчанию
|
||
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 compress --version || exit 1
|
||
|
||
# Команда запуска
|
||
ENTRYPOINT ["compress"]
|
||
CMD ["--config", "/app/config/config.yaml"]
|
||
|
||
# Метаданные образа
|
||
LABEL org.opencontainers.image.title="Compress"
|
||
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="Compress Team"
|
||
LABEL org.opencontainers.image.licenses="MIT"
|
||
LABEL org.opencontainers.image.documentation="https://github.com/your-username/compress"
|
||
LABEL org.opencontainers.image.source="https://github.com/your-username/compress"
|