Настройка базы данных
Прежде чем продолжить работу над панелью управления, вам понадобятся данные. В этой главе вы настроите базу данных PostgreSQL, используя одну из интеграций маркетплейса Vercel. Если вы уже знакомы с PostgreSQL и предпочитаете использовать собственного провайдера базы данных, можете пропустить эту главу и настроить её самостоятельно. В противном случае продолжим!
Создание репозитория на GitHub
Для начала, если вы ещё не сделали этого, давайте загрузим ваш репозиторий на GitHub. Это упростит настройку базы данных и развертывание.
Если вам нужна помощь в настройке репозитория, ознакомьтесь с этим руководством на GitHub.
Полезно знать:
- Вы также можете использовать другие git-провайдеры, такие как GitLab или Bitbucket.
- Если вы новичок в GitHub, мы рекомендуем GitHub Desktop App для упрощения рабочего процесса разработки.
Создание аккаунта Vercel
Перейдите на vercel.com/signup для создания аккаунта. Выберите бесплатный тариф "hobby". Нажмите Continue with GitHub, чтобы связать ваши аккаунты GitHub и Vercel.
Подключение и развертывание проекта
Далее вы попадёте на экран, где можно выбрать и импортировать только что созданный репозиторий GitHub:

Назовите проект и нажмите Deploy.

Ура! 🎉 Ваш проект теперь развернут.

После подключения репозитория GitHub, при каждом пуше изменений в ветку main, Vercel будет автоматически переразвертывать ваше приложение без дополнительной настройки. При открытии pull request'ов вы также получите URL-адреса для мгновенного предпросмотра, которые позволяют выявлять ошибки развертывания на ранних этапах и делиться предпросмотром проекта с членами команды для получения обратной связи.
Создание базы данных Postgres
Для настройки базы данных нажмите Continue to Dashboard и выберите вкладку Storage в панели управления проектом. Нажмите Create Database. В зависимости от времени создания вашего аккаунта Vercel, вы можете увидеть варианты Neon или Supabase. Выберите предпочитаемого провайдера и нажмите Continue.

Выберите регион и тариф хранилища, если требуется. Регион по умолчанию для всех проектов Vercel — Вашингтон (iad1), и мы рекомендуем выбрать его, если он доступен, чтобы уменьшить задержку при запросах данных.

После подключения перейдите на вкладку .env.local
, нажмите Show secret и Copy Snippet. Убедитесь, что вы раскрыли секреты перед их копированием.

Вернитесь в редактор кода и переименуйте файл .env.example
в .env
. Вставьте скопированное содержимое из Vercel.
Важно: Проверьте файл
.gitignore
и убедитесь, что.env
находится в списке игнорируемых файлов, чтобы предотвратить раскрытие секретов базы данных при пуше на GitHub.
Заполнение базы данных
Теперь, когда база данных создана, давайте заполним её начальными данными.
Мы включили API, доступный в браузере, который запустит скрипт для заполнения базы данных начальным набором данных.
Скрипт использует SQL для создания таблиц и данные из файла placeholder-data.ts
для их заполнения после создания.
Убедитесь, что локальный сервер разработки запущен командой pnpm run dev
, и перейдите по адресу localhost:3000/seed
в браузере. По завершении вы увидите сообщение "Database seeded successfully" в браузере. После завершения вы можете удалить этот файл.
Решение проблем:
- Убедитесь, что вы раскрыли секреты базы данных перед копированием в файл
.env
.- Скрипт использует
bcrypt
для хеширования паролей пользователей. Еслиbcrypt
несовместим с вашей средой, вы можете обновить скрипт, используяbcryptjs
.- Если у вас возникли проблемы при заполнении базы данных и вы хотите запустить скрипт снова, вы можете удалить существующие таблицы, выполнив
DROP TABLE tablename
в интерфейсе запросов базы данных. Подробнее см. в разделе выполнение запросов ниже. Но будьте осторожны — эта команда удалит таблицы и все их данные. Это допустимо для примера приложения, так как вы работаете с тестовыми данными, но не следует выполнять эту команду в рабочем приложении.
Выполнение запросов
Давайте выполним запрос, чтобы убедиться, что всё работает как ожидается. Мы используем ещё один обработчик маршрута app/query/route.ts
для запроса к базе данных. Внутри этого файла вы найдёте функцию listInvoices()
со следующим SQL-запросом.
SELECT invoices.amount, customers.name
FROM invoices
JOIN customers ON invoices.customer_id = customers.id
WHERE invoices.amount = 666;
Раскомментируйте файл, удалите блок Response.json()
и перейдите по адресу localhost:3000/query
в браузере. Вы должны увидеть возвращённые значения amount
и name
счёта.