Производственные решения Django DockerPython

Программы на Python
Ответить
Anonymous
 Производственные решения Django Docker

Сообщение Anonymous »

Я создал приложения Python Django для семейного использования, например. г. для фильмов и книг. Я использую локальный компьютер для разработки и NAS с докером для использования в производстве. Приложения доступны через traefik, но только в локальной сети, а не из Интернета.
Я разработал версию django 5.1.6 и использовал ее в производстве в течение нескольких месяцев. В производстве я запускаю, как и при разработке, приложение с

Код: Выделить всё

python manage.py runserver
В последние дни я обновил все пакеты и django до версии 5.2.9. Испытания в разработке прошли успешно. Но при запуске сервера разработки я получаю сообщение:

Код: Выделить всё

WARNING: This is a development server. Do not use it in a production setting. Use a production WSGI or ASGI server instead.
For more information on production servers see: https://docs.djangoproject.com/en/5.2/howto/deployment/
Итак, я обновил рабочее приложение и создал новый образ докера, в котором используется оружие. Вот Dockerfile:

Код: Выделить всё

# Stage 1: Base build stage
FROM python:3.13-slim AS builder

# Create the app directory
RUN mkdir /app

# Set the working directory
WORKDIR /app

# Set environment variables to optimize Python
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1

# Upgrade pip and install dependencies
RUN pip install --upgrade pip

# Copy the requirements file first (better caching)
COPY requirements.txt /app/

# Install Python dependencies
RUN pip install --no-cache-dir -r requirements.txt

# Stage 2: Production stage
FROM python:3.13-slim

RUN useradd -m -r appuser && \
mkdir /app && \
chown -R appuser /app

# Copy the Python dependencies from the builder stage
COPY --from=builder /usr/local/lib/python3.13/site-packages/ /usr/local/lib/python3.13/site-packages/
COPY --from=builder /usr/local/bin/ /usr/local/bin/

# Set the working directory
WORKDIR /app

# Copy application code
COPY --chown=appuser:appuser . .

# Set environment variables to optimize Python
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1

# Switch to non-root user
USER appuser

# Expose the application port
EXPOSE 8000

# Start the application using Gunicorn
CMD ["gunicorn", "--bind", "0.0.0.0:8000", "--workers", "3", "localmovies.wsgi:application"]
В приложении localmovies я получаю данные из TMDB по фильмам, людям и так далее. А при производстве с Gunicorn я получаю несколько ошибок, например. г.

Код: Выделить всё

[CRITICAL] WORKER TIMEOUT (pid:8)
что приводит к неполным данным в базе данных.
Затем я меняю Dockerfile, чтобы запустить сервер разработки, и никаких проблем не возникает.
Я также пробую uWSGI, но безуспешно. Я вижу в журнале докера сообщение

Код: Выделить всё

[uWSGI] getting INI configuration from /uwsgi/uwsgi.ini
а затем контейнер остановился.
Теперь мои вопросы:
Какое решение рекомендуется для использования приложения django в докере,
сервер разработки
gunicorn
uWSGI
...
Есть у кого-нибудь идея, почему у Gunicorn есть тайм-ауты, а сервер разработки нет?
Может ли кто-нибудь подсказать, как использовать uWSGI с django и docker?

Подробнее здесь: https://stackoverflow.com/questions/798 ... -solutions
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»