Files
bot-telegram/Dockerfile
2025-09-14 22:09:39 +05:00

63 lines
2.1 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.
# Многоступенчатая сборка для оптимизации размера образа
# Этап 1: Сборка зависимостей
FROM python:3.12-slim AS builder
WORKDIR /app
# Устанавливаем системные зависимости для сборки
RUN apt-get update && apt-get install -y \
gcc \
build-essential \
libpq-dev \
&& rm -rf /var/lib/apt/lists/*
# Устанавливаем uv для управления зависимостями
RUN pip install uv
# Копируем файлы зависимостей
COPY pyproject.toml uv.lock* ./
# Устанавливаем зависимости
RUN uv sync --frozen
# Этап 2: Производственный образ
FROM python:3.12-slim AS production
WORKDIR /app
# Устанавливаем только необходимые runtime зависимости
RUN apt-get update && apt-get install -y \
libpq5 \
postgresql-client \
&& rm -rf /var/lib/apt/lists/* \
&& apt-get clean
# Копируем установленные зависимости из builder stage
COPY --from=builder /app/.venv /app/.venv
# Копируем исходный код приложения (единое приложение с API и database)
COPY api/ ./api/
COPY database/ ./database/
COPY run_api.py ./
COPY pyproject.toml ./
# Создаем непривилегированного пользователя для безопасности
RUN groupadd -r appuser && useradd -r -g appuser -s /bin/bash appuser
RUN chown -R appuser:appuser /app
USER appuser
# Открываем порт для API
EXPOSE 8000
# Устанавливаем переменные окружения
ENV PYTHONPATH=/app
ENV PYTHONUNBUFFERED=1
ENV PATH="/app/.venv/bin:$PATH"
# Проверка здоровья контейнера
HEALTHCHECK --interval=30s --timeout=30s --start-period=5s --retries=3 \
CMD python -c "import requests; requests.get('http://localhost:8000/health')" || exit 1
# Команда для запуска единого приложения (API + database логика)
CMD ["python", "run_api.py"]