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

Ниже — пошаговое руководство по подготовке 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 — кратко
- Зарегистрируйтесь на https://railway.app.
- Нажмите “Start a New Project”.
- Выберите “Provision PostgreSQL”.
- Откройте баннер Postgres и скопируйте переменные подключения.
- Вкладка Variables покажет DATABASE_URL и отдельные параметры (PGHOST, PGUSER и др.).
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-dotenv4. Связывание репозитория с Vercel и деплой
4.1 Создайте аккаунт и импортируйте репозиторий
- Перейдите на https://vercel.com и зарегистрируйтесь через GitHub.
- Выберите Hobby (бесплатный) план.
- Нажмите Add New → Project.
- Подключите аккаунт GitHub (Add GitHub Account) и разрешите доступ к репозиториям.
- Установите интеграцию и выберите репозиторий с Django-проектом.
4.2 Добавьте переменные окружения в Vercel
В настройках проекта на Vercel откройте раздел Environment Variables и добавьте все секреты, например:
- SECRET_KEY
- DATABASE_URL
- PGHOST, PGUSER, PGPASSWORD, PGDATABASE, PGPORT (если вы используете отдельные переменные)
- DEBUG (опционально)
4.3 Запустите деплой
Нажмите Deploy. Vercel выполнит билд и запустит ваш WSGI-приложение. После успешного деплоя вы получите сгенерированный URL.
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)
- Подготовьте проект локально (virtualenv, requirements.txt).
- Настройте vercel.json и wsgi.py.
- Подключите и настройте удалённую БД.
- Запушьте код на GitHub.
- Импортируйте репозиторий в Vercel и добавьте переменные окружения.
- Нажмите Deploy и проверьте логи и функциональность.
- Настройте кастомный домен и 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, чтобы работодатель или клиент мог быстро увидеть результат.
Похожие материалы
Проверка количества слов в Microsoft Word
Поиск в Windows 11 и Windows 10 — полное руководство
Скрыть «был(а) в сети» в Telegram
PDF в Chrome на Android — как открыть
Создание профилей в Firefox и Chrome