12 KiB
Digital Store
Digital Store - это настраиваемый интернет-магазин на платформе NodeJS для продажи ваших цифровых товаров.
Демонстрация функционирования интернет-магазина.
🐬 Установка через Docker:
Для установки интернет магазина через Docker необходимо выполнить несколько шагов:
Вам потребуется VPS с установленным приложением Docker. VPS на Linux купите у reg ru здесь обязательно с виртуализацией XEN.
- После того, как вы зашли на сервер создайте папку с вашим приложением, скачайте магазин с github и отконфигурируйте файлы.
mkdir app
cd ./app
git clone https://github.com/sergeyyarkov/digital-store.git -b digital-store-docker .
- Настройте переменные среды в файле
docker-compose.yml. Найдите сервис nodejs и заполните строки вenviromentЧтобы выйти и сохранитьctrl + xдалееyиenter
nano docker-compose.yml`
- Отконфигурируйте файл с почтовым сервисом. Укажите свой сервер SMTP, Port.
nano ./server/config/nodemailer.config.js
- Настройте скрипт с сертификацией Lets-encrypt. Замените почту и домен на свои.
nano ./init-letsencrypt.sh
- Далее настройте файл конфигурации nginx. Замените везде домены на свои.
nano ./data/nginx/app.conf
-
Запустите скрипт
./init-letsencrypt.sh. Если выводитPermission denied, тоchmod u+x init-letsencrypt.shзатем еще раз запустите скрипт. Если сертификация успешно прошла то у вас не должно высветится ошибок. -
Импортируйте базу данных:
docker exec -it mongodb bash
cd ./backup
mongorestore --username root --password secret -d digital_store --drop /backup/digital_store/
exit
✔️ Теперь приложение полностью настроено и готово к работе. Ваш SSL сертификат будет автоматически обновляться, когда ему это потребуется.
Некоторые команды которые могут пригодится.
docker-compose up -d - запустить приложение в detach режиме
docker-compose stop - остановить приложение
mongodump --username root --password secret --db plunderweb --out=/backup/ - выполнить backup БД. Перед тем как выполнить эту команду, зайдите в контейнер с mongodb в папку backup.
docker-compose up -d --no-deps --build nodejs - если вы изменили чтото в файлах, то после этого необходимо выполнить эту команду чтобы изменения отображались на вашем сайте.
Настройка платежной системы:
В скрипте на данный момент доступна система оплаты через сервис QIWI, чтобы настроить оплату в вашем магазине следуйте следующим шагам:
- Перейдите на сайт QIWI API и создайте пару ключей авторизации. Сохраните секретный ключ.
- Если вы хотите настроить оформление формы приемов перевода, то перейдите сюда и скопируйте значение переменной
themeCodeи вставьте это значение по адресуconfig/routes/payments/qiwi.payment.js. - Секретный ключ нужно указать в поле переменной среды
QIWI_SECRET_KEY. - Редирект после оплаты товара через QIWI на локальный адрес
localhost:3000работать не будет, необходим домен.
Настройка почтового сервиса:
Для отдачи данных товара на почту покупателя после покупки товара, нужно настроить nodemailer:
- Настройте почтовый сервис по адресу
config/nodemailer.config.js:
host: "smtp.mail.ru",
port: 465,
secure: true, // true для 465, false для остальных.
- Затем укажите переменные среды
EMAIL_LOGINиEMAIL_PASSWORD.
Настройка системы комментариев:
В интернет магазине используется система комментариев Disqus:
- Добавьте свой домен на их сайт и замените embed код по адресу
dist/public/js/disqus.js.
Переменные среды:
Перменные среды нужны для работоспособности всего приложения, очень важно вписать верные данные для избежания возможных ошибок.
Описание переменных:
| Переменная | Описание |
|---|---|
| DATABASE_URI | Подключение к БД MongoDB |
| DATABASE_NAME | Имя БД |
| EMAIL_LOGIN | Логин от почты для отправки данных покупателю |
| EMAIL_PASSWORD | Пароль от почты |
| HOSTNAME_URI | Ссылка на ваш сайт https://domain.ru |
| QIWI_SECRET_KEY | Секретный ключ QIWI для работоспособности системы оплаты |
.env файл:
DATABASE_URI=
DATABASE_NAME=
QIWI_SECRET_KEY=
HOSTNAME_URI=
EMAIL_LOGIN=
EMAIL_PASSWORD=
API:
API представляет из себя различные URL, которые отвечают данными только в формате JSON. Здесь описаны основные GET запросы на сервер для получения данных:
Для просмотра всех товаров которые существуют в магазине отправляется запрос:
https://store-name.com/api/items
Ответ:
;[
{
_id: '5e15dbc415303a1980cd77a0',
title: 'Тестовый товар №1',
count: 0,
price: 1,
category: 'steam',
description: '-',
date: '2020-01-08T13:40:20.353Z',
},
{
_id: '5e15dcb4138c3339bcbc3719',
title: 'Тестовый товар №2',
count: 0,
price: 1,
category: 'uplay',
description: '-',
date: '2020-01-08T13:44:20.940Z',
},
]
Для просмотра товаров в интересующей категории отправляется запрос:
https://store-name.com/api/items/{category}
Ответ:
;[
{
_id: '5e15dbc415303a1980cd77a0',
title: 'Тестовый товар №1',
count: 0,
price: 1,
category: 'steam',
description: '-',
date: '2020-01-08T13:40:20.353Z',
},
{
_id: '5e1ccf30d5b894228c86385a',
title: 'Тестовый товар №2',
count: 10,
price: 1,
category: 'steam',
description: '-',
date: '2020-01-13T20:12:32.814Z',
},
]
Для просмотра информации о всех категориях отправляется запрос:
https://store-name.com/api/categories
Ответ:
;[
{
_id: '5df64563309e691f2c33d400',
title: 'uplay',
img: 'img-1576349954743.svg',
type: 'type',
format: 'format',
},
{
_id: '5e04ea023625771abc75fd14',
title: 'fortnite',
img: 'img-1576349989720.svg',
type: 'type',
format: 'format',
},
]
Для просмотра информации о интересующей категории отправляется запрос:
https://store-name.com/api/category/{category}
Ответ:
;[
{
_id: '5df64563309e691f2c33d400',
title: 'uplay',
img: 'img-1576349954743.svg',
type: 'type',
format: 'format',
},
]
Для просмотра данных всех товаров отправляется запрос: Нужна авторизация для администратора.
https://store-name.com/api/items/data
Ответ:
;[
{
_id: '5e15dbc415303a1980cd77a0',
title: 'Тестовый товар №1',
data: ['login:pass', 'login:pass', 'login:pass'],
},
{
_id: '5e175c63b479600ac493ce88',
title: 'Тестовый товар №2',
data: ['login:pass', 'login:pass', 'login:pass'],
},
]
Для просмотра покупателей отправляется запрос: Нужна авторизация для администратора.
https://store-name.com/api/buyers
Ответ:
;[
{
_id: '5e1c97701b619a31f010062c',
bill_id: '9244e5ae-560a-432a-9882-bc1b941c8cca',
email: 'test-email@mail.com',
method: 'qiwi',
date: '2020-01-13T18:13:38.623+03:00',
amount: 2,
data: ['login:pass', 'login:pass'],
},
]
Для просмотра списка иконок отправляется запрос: Нужна авторизация для администратора.
https://store-name.com/api/icons
Ответ:
;[
'img-1576349954743.svg',
'img-1576349989720.svg',
'img-1576420937629.svg',
'img-1576421960189.svg',
]
Требования:
- Node.js v7.6.0 или выше