Files
bot-telegram/Dockerfile
2025-09-22 12:35:41 +05:00

59 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
# Устанавливаем uv - современный менеджер пакетов для Python
RUN pip install --no-cache-dir uv
# Копируем файлы зависимостей и конфигурации uv
COPY pyproject.toml ./
COPY uv.lock ./
# Создаем виртуальное окружение и синхронизируем зависимости
RUN uv venv /app/.venv
RUN uv sync --frozen
# Этап 2: Производственный образ
FROM python:3.12-slim AS production
# Устанавливаем curl для healthcheck
RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/*
WORKDIR /app
# Копируем виртуальное окружение с установленными пакетами
COPY --from=builder /app/.venv /app/.venv
# Копируем исходный код приложения
COPY app.api/ ./app.api/
COPY app.bot/ ./app.bot/
COPY app.control-bot/ ./app.control-bot/
COPY *.py ./
COPY pyproject.toml ./
# Создаем папку для изображений
RUN mkdir -p ./images
# Создаем непривилегированного пользователя для безопасности
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 VIRTUAL_ENV=/app/.venv
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/docs')" || exit 1
# Команда по умолчанию для запуска бота (можно переопределить в docker-compose)
CMD ["python", "main.py", "--mode", "bot"]