Можно ли развернуть Django проект на Vercel? Полное руководство

Краткий обзор Django: мощный Python фреймворк

Django — это высокоуровневый Python веб-фреймворк, придерживающийся принципа DRY (Don’t Repeat Yourself) и философии "батарейки в комплекте". Он предоставляет разработчикам мощный ORM, систему миграций, панель администрирования, систему шаблонов и многое другое, позволяя быстро создавать сложные и надежные веб-приложения.

Vercel: платформа для статических и динамических проектов

Vercel позиционирует себя как платформа для фронтенд-разработчиков, оптимизированная для развертывания статических сайтов (React, Vue, Angular) и Serverless Functions. Она предлагает глобальную CDN, автоматические HTTPS-сертификаты, CI/CD и превью-развертывания, что делает ее привлекательной для быстрой итеративной разработки.

Проблема: Django не является нативным для Vercel

Основная проблема заключается в том, что Django — это традиционное WSGI-приложение, требующее постоянного работающего сервера приложений (например, Gunicorn или uWSGI) для обработки запросов. Vercel же изначально не предназначен для запуска таких долгоживущих серверных процессов. Его основная модель для бэкенда — Serverless Functions, которые запускаются по требованию.

Цель руководства: развертывание Django с обходными путями

Несмотря на кажущуюся несовместимость, развернуть Django-проект на Vercel возможно. Это руководство покажет, как подготовить проект и использовать Serverless Functions Vercel для запуска Django-приложения, а также рассмотрит ограничения и альтернативы.

Подготовка Django проекта к развертыванию на Vercel

Создание нового Django проекта или использование существующего

Вы можете использовать как существующий Django проект, так и создать новый стандартным образом:

django-admin startproject myproject
cd myproject
python manage.py startapp myapp

Ключевым моментом является адаптация структуры и конфигурации под требования Vercel.

Настройка `requirements.txt`: указание зависимостей

Создайте файл requirements.txt в корне проекта и перечислите все необходимые зависимости, включая Django и любые другие библиотеки:

Django>=4.0
psycopg2-binary # Пример для PostgreSQL
whitenoise
# Другие ваши зависимости...

Vercel будет использовать этот файл для установки пакетов в окружении Serverless Function.

Реклама

Использование `whitenoise` для обслуживания статики (если необходимо)

Поскольку Vercel не предоставляет традиционный веб-сервер (как Nginx) для раздачи статики из Django-приложения в Serverless-контексте, whitenoise может помочь. Он позволяет вашему WSGI-приложению эффективно обслуживать статические файлы.

Добавьте whitenoise.middleware.WhiteNoiseMiddleware в MIDDLEWARE в settings.py, сразу после django.middleware.security.SecurityMiddleware:

# settings.py
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'whitenoise.middleware.WhiteNoiseMiddleware', # Добавить сюда
    # ... остальные middleware
]

STATIC_ROOT = BASE_DIR / 'staticfiles'
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

Не забудьте выполнить python manage.py collectstatic перед развертыванием.

Создание `vercel.json`: файл конфигурации для Vercel

Это ключевой файл, определяющий, как Vercel будет собирать и запускать ваш проект. Создайте vercel.json в корне проекта.

{
  "version": 2,
  "builds": [
    {
      "src": "myproject/wsgi.py",
      "use": "@vercel/python",
      "config": { "maxLambdaSize": "15mb", "runtime": "python3.9" }
    },
    {
      "src": "build_files.sh",
      "use": "@vercel/static-build",
      "config": {
        "distDir": "staticfiles_build"
      }
    }
  ],
  "routes": [
    {
      "src": "/static/(.*)",
      "dest": "/staticfiles_build/$1"
    },
    {
      "src": "/(.*)",
      "dest": "myproject/wsgi.py"
    }
  ]
}

builds: Описывает процесс сборки. Первый блок указывает Vercel использовать Python runtime для файла wsgi.py. Второй блок (опциональный, для whitenoise) использует скрипт для сборки статики.

routes: Определяет маршрутизацию. Первый маршрут направляет запросы к статике в директорию, созданную collectstatic. Второй маршрут перенаправляет все остальные запросы на ваше Django WSGI-приложение.

Вам также понадобится скрипт build_files.sh:

#!/bin/bash

# Сборка статики
python manage.py collectstatic --noinput

# (Опционально) Выполнение миграций, если используете БД, доступную на этапе сборки
# python manage.py migrate --noinput

Не забудьте сделать скрипт исполняемым: chmod +x build_files.sh.

Развертывание Django проекта на Vercel с использованием Serverless Functions (Python)

Обзор Serverless Functions: как они работают на Vercel

Vercel использует Serverless Functions для выполнения бэкенд-логики. Когда приходит запрос, соответствующий настроенному маршруту, Vercel запускает экземпляр вашей функции (в нашем случае, Python-окружение с Django), обрабатывает запрос и возвращает ответ. После периода неактивности функция


Добавить комментарий