Ответ
Развертывание Python-приложения на Linux включает несколько подходов, от простых скриптов до контейнеризации. Выбор зависит от сложности проекта и требований к масштабируемости.
1. Связка Gunicorn + Nginx (Классический подход для веб-приложений)
Это надежная и производительная конфигурация. Gunicorn выступает в роли WSGI-сервера, который запускает ваше Python-приложение, а Nginx работает как reverse-proxy, принимая HTTP-запросы, отдавая статические файлы и перенаправляя динамические запросы к Gunicorn.
# Установка и запуск Gunicorn
pip install gunicorn
gunicorn --workers 4 --bind 0.0.0.0:8000 myproject.wsgi:application
2. Systemd для управления процессом
Systemd — это стандартный менеджер служб в большинстве современных дистрибутивов Linux. Он обеспечивает автоматический запуск приложения при старте системы, его перезапуск в случае сбоя и централизованное управление логами.
Пример файла службы /etc/systemd/system/myapp.service:
[Unit]
Description=Gunicorn instance to serve myapp
After=network.target
[Service]
User=sammy
Group=www-data
WorkingDirectory=/path/to/your/project
ExecStart=/path/to/your/venv/bin/gunicorn --workers 3 --bind unix:/path/to/your/project/myapp.sock myproject.wsgi:application
[Install]
WantedBy=multi-user.target
Команды для управления:
sudo systemctl start myapp
sudo systemctl enable myapp
3. Docker (Современный подход)
Контейнеризация — рекомендуемый способ, так как он изолирует приложение со всеми его зависимостями. Это обеспечивает консистентность окружения от разработки до продакшена и упрощает масштабирование.
Пример Dockerfile:
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["gunicorn", "--bind", "0.0.0.0:8000", "myproject.wsgi:application"]
Сборка и запуск контейнера:
docker build -t my-python-app .
docker run -p 8000:8000 my-python-app