Files
2026-etpgrf-site/Dockerfile

61 lines
1.9 KiB
Docker
Raw Permalink 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.
# --- Stage 1: Сборка фронтенда (CodeMirror) ---
FROM node:20-slim as frontend-builder
WORKDIR /app/frontend
# Копируем файлы зависимостей
COPY frontend-assembly/package.json frontend-assembly/package-lock.json ./
# Устанавливаем зависимости (включая devDependencies для сборки)
RUN npm ci
# Копируем исходники
COPY frontend-assembly/ ./
# Собираем бандл через npm script
RUN npm run build
# --- Stage 2: Сборка бэкенда (Django) ---
FROM python:3.13-slim
# Настройки Python
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
WORKDIR /app
# Установка Poetry
RUN pip install --no-cache-dir poetry
# Копируем файлы зависимостей
COPY pyproject.toml poetry.lock* /app/
# Настройка Poetry: не создавать venv и установка зависимостей (без dev-зависимостей для продакшена)
RUN poetry config virtualenvs.create false \
&& poetry install --no-interaction --no-ansi --no-root --only main
# Создаем непривилегированного пользователя
RUN useradd -m -r appuser
# Копируем код проекта
COPY . /app/
# Создаем папку для данных и статики, чтобы у appuser были права
RUN mkdir -p /app/data /app/public/static_collected
# Копируем собранный фронтенд из первого стейджа
COPY --from=frontend-builder /app/frontend/dist/editor.js /app/public/static/codemirror/editor.js
# Меняем владельца папки
RUN chown -R appuser:appuser /app
# Переключаемся на пользователя
USER appuser
# Порт
EXPOSE 8000
# Команда запуска через Gunicorn
CMD ["gunicorn", "--bind", "0.0.0.0:8000", "--chdir", "/app/etpgrf_site", "etpgrf_site.wsgi"]