Dockerfile-smithery.build•2.46 kB
#############################################
# Builder stage: сборка в окружении Debian
#############################################
FROM golang:1.24-bullseye AS builder
WORKDIR /app
# Устанавливаем необходимые инструменты сборки и UPX
RUN apt-get update && \
apt-get install -y --no-install-recommends git gcc build-essential upx && \
rm -rf /var/lib/apt/lists/*
# Копируем файлы модулей и загружаем зависимости
COPY go.mod go.sum ./
RUN go mod download
# Копируем исходный код
COPY . .
# Собираем бинарный файл с включённым CGO (необходимо для duckdb-go-bindings)
RUN CGO_ENABLED=1 GOOS=linux go build -ldflags="-w -s" -o gateway
# Сжимаем бинарный файл с помощью UPX
RUN upx --best --lzma gateway
#############################################
# Final stage: минимальный образ на базе Debian
#############################################
FROM debian:bullseye-slim
ENV DEBIAN_FRONTEND=noninteractive
# Устанавливаем tzdata и ca-certificates, настраиваем часовой пояс
RUN apt-get update && \
apt-get install -y --no-install-recommends tzdata ca-certificates && \
rm -rf /var/lib/apt/lists/* && \
ln -fs /usr/share/zoneinfo/Etc/UTC /etc/localtime && \
echo "Etc/UTC" > /etc/timezone && \
groupadd --system gateway && \
useradd --system --create-home --home-dir /home/gateway --gid gateway gateway
# Устанавливаем необходимые переменные окружения
ENV TZ=Etc/UTC
ENV ROTATION_TZ=Etc/UTC
ENV HOME=/home/gateway
# Копируем собранный бинарный файл из этапа сборки
COPY --from=builder /app/gateway /usr/local/bin/gateway
# Create necessary directories with proper permissions
RUN mkdir -p /var/log/gateway /etc/gateway && \
chown -R gateway:gateway /var/log/gateway /etc/gateway /usr/local/bin && \
chmod 755 /var/log/gateway /etc/gateway && \
chmod +x /usr/local/bin/gateway
# Create a working directory for the application with proper permissions
WORKDIR /app
RUN chown -R gateway:gateway /app && \
chmod 755 /app
# Переключаемся на непривилегированного пользователя
USER gateway
ENTRYPOINT ["/usr/local/bin/gateway"]