Digital Store

Digital Store - это настраиваемый интернет-магазин на платформе NodeJS для продажи ваших цифровых товаров.
Демонстрация функционирования интернет-магазина.

GitHub package.json version (branch) GitHub release (latest by date) GitHub All Releases GitHub top language GitHub repo size
dependencies Status badge devDependency Status badge GitHub

## 🐬 Установка через Docker: ### Для установки интернет магазина через Docker необходимо выполнить несколько шагов: Вам потребуется VPS с установленным приложением Docker. VPS на Linux купите у reg ru [здесь](https://www.reg.ru?rlink=reflink-5311069) обязательно с виртуализацией XEN. 1. После того, как вы зашли на сервер создайте папку с вашим приложением, скачайте магазин с github и отконфигурируйте файлы. ``` mkdir app cd ./app git clone https://github.com/sergeyyarkov/digital-store.git -b digital-store-docker . ``` 2. Настройте переменные среды в файле `docker-compose.yml`. Найдите сервис nodejs и заполните строки в `enviroment` Чтобы выйти и сохранить `ctrl + x` далее `y` и `enter` ``` nano docker-compose.yml` ``` 3. Отконфигурируйте файл с почтовым сервисом. Укажите свой сервер SMTP, Port. ``` nano ./server/config/nodemailer.config.js ``` 4. Настройте скрипт с сертификацией Lets-encrypt. Замените почту и домен на свои. ``` nano ./init-letsencrypt.sh ``` 5. Далее настройте файл конфигурации nginx. Замените везде домены на свои. ``` nano ./data/nginx/app.conf ``` 6. Запустите скрипт `./init-letsencrypt.sh`. Если выводит `Permission denied`, то `chmod u+x init-letsencrypt.sh` затем еще раз запустите скрипт. Если сертификация успешно прошла то у вас не должно высветится ошибок. 7. Импортируйте базу данных: ``` 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](https://qiwi.com/p2p-admin/transfers/api) и создайте пару ключей авторизации. Сохраните секретный ключ. - Если вы хотите настроить оформление формы приемов перевода, то перейдите [сюда](https://qiwi.com/p2p-admin/transfers/link) и скопируйте значение переменной `themeCode` и вставьте это значение по адресу `config/routes/payments/qiwi.payment.js`. - Секретный ключ нужно указать в поле переменной среды `QIWI_SECRET_KEY`. - Редирект после оплаты товара через QIWI на локальный адрес `localhost:3000` работать не будет, необходим домен. ### Настройка почтового сервиса: Для отдачи данных товара на почту покупателя после покупки товара, нужно настроить nodemailer: - Настройте почтовый сервис по адресу `config/nodemailer.config.js`: ```javascript host: "smtp.mail.ru", port: 465, secure: true, // true для 465, false для остальных. ``` - Затем укажите переменные среды `EMAIL_LOGIN` и `EMAIL_PASSWORD`. ### Настройка системы комментариев: В интернет магазине используется система комментариев [Disqus](https://disqus.com/): - Добавьте свой домен на их сайт и замените 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` файл: ```bash DATABASE_URI= DATABASE_NAME= QIWI_SECRET_KEY= HOSTNAME_URI= EMAIL_LOGIN= EMAIL_PASSWORD= ``` ## API: ### API представляет из себя различные URL, которые отвечают данными только в формате JSON. Здесь описаны основные `GET` запросы на сервер для получения данных: #### Для просмотра всех товаров которые существуют в магазине отправляется запрос: ```bash https://store-name.com/api/items ``` Ответ: ```javascript ;[ { _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', }, ] ``` ### Для просмотра товаров в интересующей категории отправляется запрос: ```bash https://store-name.com/api/items/{category} ``` Ответ: ```javascript ;[ { _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', }, ] ``` ### Для просмотра информации о всех категориях отправляется запрос: ```bash https://store-name.com/api/categories ``` Ответ: ```javascript ;[ { _id: '5df64563309e691f2c33d400', title: 'uplay', img: 'img-1576349954743.svg', type: 'type', format: 'format', }, { _id: '5e04ea023625771abc75fd14', title: 'fortnite', img: 'img-1576349989720.svg', type: 'type', format: 'format', }, ] ``` ### Для просмотра информации о интересующей категории отправляется запрос: ```bash https://store-name.com/api/category/{category} ``` Ответ: ```javascript ;[ { _id: '5df64563309e691f2c33d400', title: 'uplay', img: 'img-1576349954743.svg', type: 'type', format: 'format', }, ] ``` ### Для просмотра данных всех товаров отправляется запрос: **Нужна авторизация для администратора.** ```bash https://store-name.com/api/items/data ``` Ответ: ```javascript ;[ { _id: '5e15dbc415303a1980cd77a0', title: 'Тестовый товар №1', data: ['login:pass', 'login:pass', 'login:pass'], }, { _id: '5e175c63b479600ac493ce88', title: 'Тестовый товар №2', data: ['login:pass', 'login:pass', 'login:pass'], }, ] ``` ### Для просмотра покупателей отправляется запрос: **Нужна авторизация для администратора.** ```bash https://store-name.com/api/buyers ``` Ответ: ```javascript ;[ { _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'], }, ] ``` ### Для просмотра списка иконок отправляется запрос: **Нужна авторизация для администратора.** ```bash https://store-name.com/api/icons ``` Ответ: ```javascript ;[ 'img-1576349954743.svg', 'img-1576349989720.svg', 'img-1576420937629.svg', 'img-1576421960189.svg', ] ``` ## Требования: - Node.js v7.6.0 или выше ## Лицензия: [MIT](https://github.com/sergeyyarkov/digital-store/blob/master/LICENSE)