Гид по технологиям

Как бесплатно развернуть Django на Vercel и подключить базу данных

7 min read DevOps Обновлено 05 Dec 2025
Как бесплатно развернуть Django на Vercel
Как бесплатно развернуть Django на Vercel

Скриншот кода Python поверх изображения мобильного телефона

Ниже — пошаговое руководство по подготовке Django-проекта к деплою на Vercel. Я разберу настройки файлов, подключение удалённой базы данных, добавление зависимостей, интеграцию с GitHub и типичные ошибки с решениями. В конце — чеклисты для ролей и рекомендации по безопасности.

Что вы получите в этом гайде

  • Полный набор настроек для vercel.json и wsgi.py.
  • Пример конфигурации Django для подключения PostgreSQL через переменные окружения.
  • Пошаговая инструкция по связке GitHub → Vercel → Railway (Postgres).
  • Чеклисты, советы по безопасности и альтернативные подходы.

1. Подготовка проекта к Vercel

Перед деплоем нужно убедиться, что проект структурирован как стандартный Django-проект и что у вас есть репозиторий с кодом на GitHub. Vercel запускает ваш WSGI-приложение через билд-процесс, поэтому важно явно указать входной файл.

1.1 Создайте vercel.json в корне проекта

Файл vercel.json направит Vercel к вашему WSGI-у. Создайте файл с таким содержимым и замените django_app_name на имя каталога, где лежит settings.py:

{
  "builds": [
    {
      "src": "django_app_name/wsgi.py",
      "use": "@vercel/python"
    }
  ],
  "routes": [
    {
      "src": "/(.*)",
      "dest": "django_app_name/wsgi.py"
    }
  ]
}

Важные замечания:

  • “src” указывает на файл, который инициализирует WSGI-приложение.
  • “use”: “@vercel/python” сообщает Vercel, что нужно выполнять Python-билд.

1.2 Отредактируйте wsgi.py

Vercel ищет переменную app в модуле WSGI. Откройте django_app_name/wsgi.py и приведите его к такому виду:

import os
from django.core.wsgi import get_wsgi_application

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "django_app_name.settings")

application = get_wsgi_application()
app = application

Если ваш файл уже содержит application — добавьте строку app = application. Это всё, что нужно для совместимости с Vercel.

2. Подключение удалённой базы данных (PostgreSQL)

Если ваше приложение использует базу данных, встроенного SQLite может быть недостаточно. Vercel — бессерверная платформа, поэтому нужно подключать внешнюю БД. Рассмотрим Railway как пример бесплатного старта.

Принцип: вы создаёте кластер PostgreSQL в Railway (или другом провайдере), берёте строку соединения и пробрасываете её в Vercel через переменные окружения. В Django вы читаете эти переменные и настраиваете DATABASES.

2.1 Как получить PostgreSQL на Railway — кратко

  1. Зарегистрируйтесь на https://railway.app.
  2. Нажмите “Start a New Project”.
  3. Выберите “Provision PostgreSQL”.
  4. Откройте баннер Postgres и скопируйте переменные подключения.
  5. Вкладка Variables покажет DATABASE_URL и отдельные параметры (PGHOST, PGUSER и др.).

Главная страница Railway с предложением PostgreSQL

Варианты баз данных на Railway

Баннер Postgres на Railway

Переменные соединения Railway

Important: Не публикуйте DATABASE_URL в общедоступных репозиториях. Используйте переменные окружения.

2.2 Пример конфигурации DATABASES в settings.py

Лучше всего считывать значения из переменных окружения. Ниже — несколько вариантов: простой (ручной) и удобный через dj-database-url.

Простой вариант (без дополнительных библиотек):

import os
from urllib.parse import urlparse

DATABASE_URL = os.getenv('DATABASE_URL')  # полный URL, если его даёт провайдер

if DATABASE_URL:
    url = urlparse(DATABASE_URL)
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql',
            'NAME': url.path[1:],  # убираем ведущий '/'
            'USER': url.username,
            'PASSWORD': url.password,
            'HOST': url.hostname,
            'PORT': url.port or '5432',
        }
    }
else:
    # fallback для локальной разработки
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        }
    }

Вариант с библиотекой dj-database-url (удобно и компактно):

# requirements.txt должен содержать dj-database-url
import os
import dj_database_url

DATABASES = {
    'default': dj_database_url.config(default=os.getenv('DATABASE_URL'))
}

Если вы используете dj-database-url, добавьте её в requirements.txt перед деплоем.

2.3 Хранение секретов и переменных окружения

  • В локальной разработке используйте .env (python-dotenv или django-environ).
  • На Vercel добавьте переменные окружения через UI при импорте проекта: SECRET_KEY, DATABASE_URL и прочие.
  • В коде считывайте os.getenv(‘SECRET_KEY’) и т. п.

3. Подготовка зависимостей и requirements.txt

Vercel устанавливает зависимости из requirements.txt. Создайте файл в корне проекта:

pip freeze > requirements.txt

Советы:

  • Формируйте requirements.txt из virtualenv, а не из глобального окружения, чтобы избежать лишних пакетов.
  • Минимальные пакеты: Django, gunicorn (не обязателен для Vercel, но часто включают), dj-database-url (если используете) и psycopg2-binary или psycopg[binary] для PostgreSQL.

Пример минимального requirements.txt:

Django>=3.2
psycopg2-binary
dj-database-url
python-dotenv

4. Связывание репозитория с Vercel и деплой

4.1 Создайте аккаунт и импортируйте репозиторий

  1. Перейдите на https://vercel.com и зарегистрируйтесь через GitHub.
  2. Выберите Hobby (бесплатный) план.

Экран регистрации Vercel

  1. Нажмите Add New → Project.

Дэшборд Vercel, кнопка Add New

  1. Подключите аккаунт GitHub (Add GitHub Account) и разрешите доступ к репозиториям.

Установка интеграции с GitHub

  1. Установите интеграцию и выберите репозиторий с Django-проектом.

Выбор репозитория для импорта

4.2 Добавьте переменные окружения в Vercel

В настройках проекта на Vercel откройте раздел Environment Variables и добавьте все секреты, например:

  • SECRET_KEY
  • DATABASE_URL
  • PGHOST, PGUSER, PGPASSWORD, PGDATABASE, PGPORT (если вы используете отдельные переменные)
  • DEBUG (опционально)

Форма ввода переменных окружения на Vercel

4.3 Запустите деплой

Нажмите Deploy. Vercel выполнит билд и запустит ваш WSGI-приложение. После успешного деплоя вы получите сгенерированный URL.

Панель развернутого приложения на Vercel

Vercel автоматически отслеживает ветку (обычно main) и деплоит изменения при пуше.

5. Тестирование и типичные проблемы

Ниже — список распространённых ошибок и способы их устранения.

5.1 Ошибка: приложение возвращает 500 при запуске

  • Проверьте логи Vercel (Deploy → View Build Logs). Логи подскажут, какой модуль не найден или какая ошибка при импорте.
  • Убедитесь, что requirements.txt содержит все зависимости.
  • Проверьте, что SECRET_KEY задан и DEBUG = False корректно обработан.

5.2 Ошибка подключения к базе данных

  • Убедитесь, что DATABASE_URL корректен и не содержит опечаток.
  • Проверьте, что firewall/allowlist хоста БД разрешает подключения из сети провайдера (для некоторых провайдеров нужно разрешить IP Vercel или использовать туннелирование).
  • Если вы используете переменные по отдельности (PGHOST и т. п.), убедитесь, что в коде вы их правильно читаете.

5.3 Ошибка: static-файлы и медиа

Vercel предназначен прежде всего для серверной логики и статических сайтов. Для обслуживания статических медиа и пользовательских файлов лучше использовать отдельный CDN или хранилище (S3, Cloudinary).

Рекомендации:

  • Собирайте статику командой collectstatic и грузите её в облачное хранилище.
  • Настройте Django Storage backend (например, django-storages + boto3 для S3).

6. Альтернативные подходы и когда Vercel не подходит

  • Если у вас тяжёлые фоновые задачи (celery, long-running workers), Vercel не предназначен для этого — используйте Heroku (платный), Render, Fly.io, DigitalOcean или AWS.
  • Для проектов с интенсивной работой с файлами лучше держать медиа на S3/Cloudflare R2.
  • Если нужен полный контроль над системой и сетью — виртуальная машина (VPS) или Kubernetes дают больше гибкости.

7. Практические чеклисты (роль‑ориентированные)

Разработчик:

  • vercel.json присутствует и корректно указывает путь к wsgi.py.
  • wsgi.py содержит app = application.
  • requirements.txt актуален и сформирован из virtualenv.
  • settings.py читает секреты из переменных окружения.
  • Логи проекта пишутся и доступны.

Девопс / Системный инженер:

  • В Vercel добавлены все необходимые Environment Variables.
  • Проверены build logs и runtime logs.
  • Подключено внешнее хранилище для статических/медиа-файлов.
  • Настроено резервное копирование БД (на стороне провайдера БД).

Продакт-менеджер / Дизайнер:

  • Домен привязан (если нужен кастомный URL).
  • Тестовая сборка доступна командe для проверки.
  • Точка возврата (rollback) известна и проверена.

8. Безопасность и конфиденциальность

  • Никогда не сохраняйте SECRET_KEY и DATABASE_URL в репозитории.
  • Установите DEBUG = False для продакшн-сборки.
  • Примените HTTPS и HSTS (Vercel по умолчанию ставит HTTPS для сгенерированных доменов и интегрированных доменов).
  • Проверяйте зависимости на уязвимости (pip-audit, safety).

Privacy / GDPR заметки

  • Если вы храните персональные данные пользователей, убедитесь, что выбранный провайдер базы данных и хостинг соответствуют требованиям GDPR и храните данные в нужном регионе.
  • Обновите политику конфиденциальности и укажите страну хранения данных.

9. Шпаргалка: минимальные файлы проекта для деплоя

  • vercel.json
  • django_app_name/wsgi.py
  • requirements.txt
  • manage.py и сам пакет django_app_name
  • .vercelignore (опционально) для исключения лишних файлов

Пример .vercelignore:

.env
__pycache__/
*.pyc
node_modules/
tests/

10. Модель принятия решения (кратко)

Mermaid-диаграмма для выбора платформы:

graph TD
  A{Нужны фоны и workers?} -->|Да| B[Используйте VPS/Kubernetes/Render]
  A -->|Нет| C{Нужны статики/много медиа?}
  C -->|Да| D[Используйте Vercel + S3 или Cloudinary]
  C -->|Нет| E[Используйте Vercel]

11. Короткая методология развертывания (SOP)

  1. Подготовьте проект локально (virtualenv, requirements.txt).
  2. Настройте vercel.json и wsgi.py.
  3. Подключите и настройте удалённую БД.
  4. Запушьте код на GitHub.
  5. Импортируйте репозиторий в Vercel и добавьте переменные окружения.
  6. Нажмите Deploy и проверьте логи и функциональность.
  7. Настройте кастомный домен и SSL при необходимости.

12. Тест-кейсы и критерии приёмки

Критерии приёмки:

  • Проект успешно деплоится на Vercel без ошибок сборки.
  • Основные страницы приложения доступны по URL.
  • CRUD‑операции с базой данных работают корректно.
  • Статические файлы загружаются корректно (через CDN/хранилище).

Тест-кейсы:

  • Загрузка главной страницы (HTTP 200).
  • Аутентификация пользователя (регистрация/вход).
  • Создание записи в базе данных и её отображение.
  • Проверка логов на отсутствие критических исключений.

13. Заключение

Vercel — удобный вариант для быстрого развёртывания Django‑прототипов и портфолио. Он прост в настройке: достаточно vercel.json, небольшой правки wsgi.py, корректной настройки переменных окружения и подключения внешней БД. Для продакшн‑нагррузок и сложных фоновых задач рассмотрите альтернативы, но для демонстрационных целей Vercel — отличный выбор.

Короткий чеклист для старта:

  • vercel.json: готов
  • wsgi.py: app = application
  • requirements.txt: актуален
  • DATABASE_URL: в переменных Vercel
  • Домен/README: добавьте ссылку на live‑сайт

Спасибо за внимание — разверните проект и вставьте ссылку в README, чтобы работодатель или клиент мог быстро увидеть результат.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Проверка количества слов в Microsoft Word
Руководство

Проверка количества слов в Microsoft Word

Поиск в Windows 11 и Windows 10 — полное руководство
Windows

Поиск в Windows 11 и Windows 10 — полное руководство

Скрыть «был(а) в сети» в Telegram
Конфиденциальность

Скрыть «был(а) в сети» в Telegram

PDF в Chrome на Android — как открыть
Android.

PDF в Chrome на Android — как открыть

Создание профилей в Firefox и Chrome
Браузеры

Создание профилей в Firefox и Chrome

Kodi: автозапуск следующего эпизода
Руководство

Kodi: автозапуск следующего эпизода