Search for a command to run...
В этом руководстве вы узнаете, как установить Medusa DTC Starter от Gorgo, настроить оба приложения и подключить первую интеграцию.
Установите стартер одним из двух способов: разверните новый проект через собственный CLI Medusa либо клонируйте репозиторий и настройте каждое приложение вручную.
yarn dlx create-medusa-app@latest --repo-url https://github.com/gorgojs/medusa-dtc-starterуказывает разворачивать проект из указанного репозитория вместо официального стартера Medusa, но обычные запросы про имя проекта и базу данных остаются такими же. По умолчанию команда также запускает миграции, создаёт администратора и засеивает базу данных. Передайте , чтобы пропустить все три шага.
Клонируйте репозиторий и установите зависимости:
1git clone https://github.com/gorgojs/medusa-dtc-starter.git2cd medusa-dtc-starter3yarn installСоздайте файл переменных окружения бэкенда и укажите в реальную базу данных:
Terminalcp apps/backend/.env.template apps/backend/.env
apps/backend/.envDATABASE_URL=postgres://postgres:@localhost:5432/medusa-dtc-starter
Запустите миграции, создайте администратора, загрузите начальные данные и запустите бэкенд:
1cd apps/backend2yarn medusa db:migrate3yarn medusa user -e admin@medusajs.com -p supersecret4yarn seed5yarn devОткройте панель администратора по адресу , войдите и скопируйте публикуемый API-ключ в Настройки → Публикуемые API-ключи.
Создайте файл переменных окружения витрины с этим ключом:
Terminalcp apps/storefront/.env.template apps/storefront/.env.local
apps/storefront/.env.localNEXT_PUBLIC_MEDUSA_PUBLISHABLE_KEY=pk_6c3...
Запустите витрину:
1cd apps/storefront2yarn devВитрина запускается на . Корень репозитория настроен под pnpm, поэтому оттуда поднимает оба приложения сразу. С npm или yarn запускайте каждое приложение из его собственной папки.
Перед запуском бэкенда нужно задать реальное значение для и :
apps/backend/.env1DATABASE_URL=postgres://postgres:@localhost:5432/medusa-dtc-starter2INTEGRATION_ENCRYPTION_KEY=supersecret
Остальные переменные в уже заданы рабочими значениями для localhost, кроме блока SMTP, в котором указан условный хост, пока вы не заполните его своим. Что делают остальные переменные:
| Переменная | Что делает |
|---|---|
| Строка подключения к PostgreSQL. Имя базы данных подставляется из | |
| Шифрует секретные поля, которые хранит Модуль интеграций | |
| , | Секреты для подписи токенов и cookie |
| Задайте на рабочем домене, чтобы cookie передавались только по HTTPS | |
| , , | Источники, которым разрешено обращаться к Store API, Admin и аутентификации. Добавьте сюда свой домен, когда перенесёте любое из приложений с localhost |
| Инстанс Redis для кэша, шины событий и движка воркфлоу. В продакшене используется всегда, когда задана. направляет на отдельный инстанс только кэш | |
| Задайте , чтобы использовать и в разработке. Без неё все три работают в памяти, чего достаточно для разработки | |
| , , , , | Почтовый сервер, через который уходят транзакционные письма. Пока они не заполнены, письма не отправляются |
| , | Адрес отправителя и адрес для ответа в этих письмах |
| , , , | Данные магазина, которые выводятся в шаблонах писем |
| Резервный язык письма, когда язык покупателя неизвестен | |
| Адрес витрины для ссылок внутри писем и для вебхуков ревалидации | |
| Общий секрет, который бэкенд отправляет с каждым вебхуком ревалидации. Должен совпадать со значением в витрине | |
| , , , , | Переносят загрузку файлов в S3-совместимое хранилище. Читаются только в продакшене |
| Директория витрины, на которую указывает сценарий онбординга Medusa |
Смените все значения перед продакшеном.
Для витрины нужен как минимум публикуемый API-ключ вашего бэкенда:
apps/storefront/.env.localNEXT_PUBLIC_MEDUSA_PUBLISHABLE_KEY=pk_6c3...
Остальные переменные уже заданы рабочими значениями по умолчанию для localhost:
| Переменная | Что делает |
|---|---|
| Публикуемый API-ключ из Medusa Admin. Обязательная | |
| Адрес, по которому витрина обращается к бэкенду | |
| Собственный адрес витрины для абсолютных ссылок в метаданных, карте сайта и | |
| Название магазина в шапке, подвале и при оформлении заказа. Оно же попадает в разметку и в эндпоинт | |
| Резервный код страны, когда определить местоположение посетителя не удалось. Значение из шаблона не совпадает ни с одним регионом из seed-данных, и тогда выбирается первый регион, который вернёт бэкенд | |
| , | Способ определения страны нового посетителя. На Vercel или Cloudflare провайдер можно оставить незаданным, читайте в документации Настройка определения страны |
| Задайте , и каждый ответ будет объяснять, какую страну выбрал middleware и почему | |
| , | Подсказки адреса при оформлении заказа, читайте в документации Настройка автозаполнения адреса |
| Публикуемый ключ Stripe, нужен только если вы принимаете платежи через Stripe | |
| , | Ключ и подключённый аккаунт Medusa Cloud Payments. Ключ используется, когда пуст |
| Идентификатор ресурса Google Analytics 4. Оставьте её пустой, и витрина не загрузит ни одного скрипта аналитики | |
| Должен совпадать с одноимённой переменной в , потому что бэкенд отправляет его с каждым вебхуком ревалидации. Смените его перед продакшеном | |
| , | Разрешают изображения из бакета Medusa Cloud. Нужны только при развёртывании там |
| Окружение Node |
Модуль интеграций () уже зарегистрирован в с пустым массивом , так что перед добавлением интеграции ничего дополнительно подключать не нужно. Когда бэкенд запущен, добавьте платёжную, логистическую или ERP-интеграцию и настройте ее из Medusa Admin, читайте в документации Поиск и добавление интеграции.
В логах витрины видна ошибка:
Логи витриныError fetching regions. Did you set up regions in your Medusa Admin and define a NEXT_PUBLIC_MEDUSA_BACKEND_URL environment variable.
Причина одна из двух: либо не задан или указывает не туда, либо на бэкенде пока не настроен ни один регион. Проверьте, что бэкенд запущен и доступен по этому адресу. Если регионов правда нет, их создаёт seed-скрипт, читайте в документации Настройка начальных данных.
В логах витрины видна одна из двух ошибок:
Логи витриныStripe key is missing. Set NEXT_PUBLIC_STRIPE_KEY environment variable.
Первая означает, что витрина попыталась отрисовать Stripe Elements без публикуемого ключа Stripe.
Логи витриныStripe client secret is missing. Cannot initialize Stripe.
Вторая означает, что для корзины ещё не создана платёжная сессия Stripe, обычно потому что в выбранном регионе не настроен провайдер Stripe.
Новый посетитель попадает в регион, никак не связанный с его местоположением, обычно каждый раз в один и тот же.
Задайте в , перезагрузите страницу и прочитайте заголовки на запросе документа в панели сети браузера. называет, что дало ответ: означает, что cookie не была удалена, тогда удалите её или откройте новое приватное окно; означает, что определить страну не удалось, а тоже не совпала ни с одним регионом из seed-данных, тогда задайте в ней реальный код страны; означает, что переменная не дошла до сервера. Что означает каждый заголовок, читайте в документации Настройка определения страны.
Если поле адреса при оформлении заказа не подсказывает варианты по мере набора, скорее всего не задан ключ DaData. Заведите аккаунт на DaData, укажите свой ключ в и оставьте равным . Подробнее о настройке автозаполнения и подключении другого провайдера читайте в документации Настройка автозаполнения адреса.
, и в бэкенда задают списки разрешённых источников. Если вы переносите витрину или Admin на другой порт или домен, добавьте этот адрес в соответствующую переменную и перезапустите бэкенд.