mirror of
https://github.com/sergeyyarkov/digital-store.git
synced 2026-10-11 10:19:15 +03:00
333 lines
12 KiB
Markdown
333 lines
12 KiB
Markdown
<p align="center">
|
||
<a href="http://materializecss.com/">
|
||
<img src="https://svgshare.com/i/HWW.svg" width="150">
|
||
</a>
|
||
</p>
|
||
|
||
<h3 align="center">Digital Store</h3>
|
||
|
||
<p align="center">
|
||
Digital Store - это настраиваемый интернет-магазин на платформе NodeJS для продажи ваших цифровых товаров.<br>
|
||
<a href="https://polar-peak-95205.herokuapp.com/">Демонстрация функционирования интернет-магазина.</a>
|
||
<br>
|
||
<br>
|
||
<img alt="GitHub package.json version (branch)" src="https://img.shields.io/github/package-json/v/sergeyyarkov/digital-store/production?color=%2326a69a">
|
||
<img alt="GitHub release (latest by date)" src="https://img.shields.io/github/v/release/sergeyyarkov/digital-store">
|
||
<img alt="GitHub All Releases" src="https://img.shields.io/github/downloads/sergeyyarkov/digital-store/total">
|
||
<img alt="GitHub top language" src="https://img.shields.io/github/languages/top/sergeyyarkov/digital-store?color=%23f9a825">
|
||
<img alt="GitHub repo size" src="https://img.shields.io/github/repo-size/sergeyyarkov/digital-store"><br>
|
||
<a href="https://david-dm.org/sergeyyarkov/digital-store">
|
||
<img src="https://david-dm.org/sergeyyarkov/digital-store/status.svg" alt="dependencies Status badge">
|
||
</a>
|
||
<a href="https://david-dm.org/sergeyyarkov/digital-store#info=devDependencies">
|
||
<img src="https://david-dm.org/sergeyyarkov/digital-store/dev-status.svg" alt="devDependency Status badge">
|
||
</a>
|
||
<a href="https://github.com/sergeyyarkov/digital-store/blob/master/LICENSE">
|
||
<img alt="GitHub" src="https://img.shields.io/github/license/sergeyyarkov/digital-store">
|
||
</a>
|
||
</p>
|
||
|
||
## 🐬 Установка через 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 сертификат будет автоматически обновляться, когда ему это потребуется.
|
||
|
||
Вход в админ панель: digital-store@support.ru:admin
|
||
|
||
Некоторые команды которые могут пригодится.
|
||
|
||
```
|
||
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)<br><br>
|