mirror of
https://github.com/sergeyyarkov/digital-store.git
synced 2026-10-11 18:29:11 +03:00
readme & ecosys
This commit is contained in:
parent
0c964e2135
commit
3a17fa5235
211
README.md
211
README.md
@ -30,7 +30,7 @@
|
|||||||
## Содержание
|
## Содержание
|
||||||
- [О проекте](#О-проекте)
|
- [О проекте](#О-проекте)
|
||||||
- [Структура репозитория](#Структура-репозитория)
|
- [Структура репозитория](#Структура-репозитория)
|
||||||
- [Установка и найстройка скрипта](#Установка-и-найстройка-скрипта)
|
- [Установка и настройка скрипта](#Установка-и-настройка-скрипта)
|
||||||
- [Запуск скрипта на локальном компьютере](#Запуск-скрипта-на-локальном-компьютере)
|
- [Запуск скрипта на локальном компьютере](#Запуск-скрипта-на-локальном-компьютере)
|
||||||
- [Запуск скрипта на удаленном сервере](#Запуск-скрипта-на-удаленном-сервере)
|
- [Запуск скрипта на удаленном сервере](#Запуск-скрипта-на-удаленном-сервере)
|
||||||
- [Переменные среды](#Переменные-среды)
|
- [Переменные среды](#Переменные-среды)
|
||||||
@ -63,36 +63,224 @@
|
|||||||
## Структура репозитория:
|
## Структура репозитория:
|
||||||
В основе всего репозитория существуют две ветки. Ветка master предназначена для разработки приложения, для выгрузки готового приложения на сервер используйте ветку production.
|
В основе всего репозитория существуют две ветки. Ветка master предназначена для разработки приложения, для выгрузки готового приложения на сервер используйте ветку production.
|
||||||
|
|
||||||
## Установка и найстройка скрипта:
|
## Установка и настройка скрипта:
|
||||||
|
|
||||||
### Запуск скрипта на локальном компьютере:
|
### Запуск скрипта на локальном компьютере:
|
||||||
- [Установите последний релиз Digital Store](https://github.com/sergeyyarkov/digital-store/releases) из GitHub репозитория.
|
- [Установите последний релиз Digital Store](https://github.com/sergeyyarkov/digital-store/releases) из GitHub репозитория.
|
||||||
- Или клонировать репозиторий `git clone https://github.com/sergeyyarkov/digital-store.git -b production`.
|
- Или клонировать репозиторий `git clone https://github.com/sergeyyarkov/digital-store.git -b production`.
|
||||||
- Установите [Node.js](https://nodejs.org/ru/) не ниже версии 7.6.0, в процессе установки Node.js установите Node Package Manager.
|
- Установите [Node.js](https://nodejs.org/ru/) не ниже версии 7.6.0, в процессе установки Node.js установите Node Package Manager.
|
||||||
- Установите БД MongoDB на ваш компьютер или создайте кластер на сайте [www.mongodb.com](https://www.mongodb.com/) и импортируйте туда дамп структуры БД, которые находится в корне приложения `/database_dump`.
|
- Установите БД MongoDB на ваш компьютер или создайте кластер на сайте [www.mongodb.com](https://www.mongodb.com/) и импортируйте туда дамп структуры БД, которые находится в корне приложения `/database_dump`.
|
||||||
- Перейдите на сайт [QIWI API](https://qiwi.com/p2p-admin/transfers/api) и создайте пару ключей авторизации. Сохраните секретный ключ.
|
|
||||||
- Если вы хотите настроить оформление формы приемов перевода, то перейдите [сюда](https://qiwi.com/p2p-admin/transfers/link) и скопируйте значение переменной `themeCode` и вставьте это значение по адресу `config/routes/payments/qiwi.payment.js`.
|
|
||||||
- Для работоспособности интернет-магазина необходимо установить зависимости. Выполните комманду `npm install`.
|
- Для работоспособности интернет-магазина необходимо установить зависимости. Выполните комманду `npm install`.
|
||||||
- Далле необходимо настроить переменные среды. Создайте файл `.env` в корне вашего интернет-магазина и запишите туда [значения для переменных](#Переменные-среды). Обратите внимание, что для выгрузки скрипта на production сервер, нужно устанавливать переменные среды для вашего сервера, файл `.env` создавать не нужно.
|
- Далле необходимо настроить переменные среды. Создайте файл `.env` в корне вашего интернет-магазина и запишите туда [значения для переменных](#Переменные-среды). Обратите внимание, что для выгрузки скрипта на production сервер, нужно устанавливать переменные среды для вашего сервера, файл `.env` создавать не нужно.
|
||||||
|
- После этого, введите `npm run start` и перейдите по адресу `localhost:3000`, вы увидите уже рабочий интернет-магазин который запущен у вас на локальном компьютере.
|
||||||
|
|
||||||
|
### Запуск скрипта на удаленном сервере:
|
||||||
|
В данном примере на удаленном сервере будет использоваться связка `Ubuntu 18.04, Nginx, MongoDB, PM2, NodeJS` + `SSL Lets Encrypt`
|
||||||
|
|
||||||
|
- Переходим на сайт [RUVDS.COM](https://ruvds.com/pr4435) и приобретаем VPS услугу.
|
||||||
|
- Подключаемся к серверу по SSH и следуем далее описанным шагам.
|
||||||
|
- Устанавливаем NodeJS:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
|
||||||
|
|
||||||
|
apt-get install -y nodejs <--- попросит перезагрузить сервисы - соглашаемся (YES)
|
||||||
|
```
|
||||||
|
Если при выполнении команд `node -v` и `npm -v` выдается версия, то идем дальше.
|
||||||
|
- Создаем папку `/apps`, после переходим в нее и клонируем проект с github и переходим в наш магазин:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mkdir apps
|
||||||
|
|
||||||
|
cd apps/
|
||||||
|
|
||||||
|
git clone https://github.com/sergeyyarkov/digital-store.git -b production
|
||||||
|
|
||||||
|
cd digital-store/
|
||||||
|
```
|
||||||
|
- Устанавливаем зависимости для интернет-магазина `npm install`.
|
||||||
|
- Устанавливаем MongoDB:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
apt install -y mongodb
|
||||||
|
|
||||||
|
systemctl status mongodb <--- проверяем состояние службы, должно быть active (running)
|
||||||
|
```
|
||||||
|
Теперь нужно дать доступ для подключения к БД именно с вашего компьютера, это нам понадобится для импортирования дампа БД:
|
||||||
|
ip адресс берете с сайта 2ip
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ufw enable
|
||||||
|
|
||||||
|
ufw allow from ваш_ip_адресс_компьютера/32 to any port 27017
|
||||||
|
```
|
||||||
|
- Далее открываем конфигурационный файл MongoDB: `nano /etc/mongodb.conf`:
|
||||||
|
Добавляем IP-адрес вашего сервера в значение bindIP:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
logappend=true
|
||||||
|
|
||||||
|
bind_ip = 127.0.0.1,your_server_ip
|
||||||
|
#port = 27017
|
||||||
|
```
|
||||||
|
|
||||||
|
- Сохраните файл, закройте редактор и перезапустите MongoDB: `systemctl restart mongodb`:
|
||||||
|
- Теперь доступ к БД есть только у вашего компьютера, далее скачиваем [Studio 3T](https://studio3t.com/) и создаем новое соединение, ip адресс указываем вашего сервера.
|
||||||
|
- После подключения, создаем новую БД и называем её как хотим.
|
||||||
|
- Кликаем по вашей созданной БД и вверху нажимаем `Import`, после выбираем все JSON файлы, которые хранятся в папке `/database_dump`.
|
||||||
|
- Если все 6 коллекций успешно импортировались, то идем дальше.
|
||||||
|
- Устанавливаем менеджер процессов PM2 `npm install -g pm2`.
|
||||||
|
- Редактируем файл с переменными в файле ecosystem.config.js и устанавливаем свои значения `nano ecosystem.config.js`.
|
||||||
|
- Далее запускаем наше приложение:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pm2 start ecosystem.config.js --env production <--- стартуем наше приложение
|
||||||
|
|
||||||
|
pm2 status <--- как узнать статус запущенных процессов
|
||||||
|
|
||||||
|
pm2 save <--- сохраняем процесс
|
||||||
|
|
||||||
|
pm2 startup ubuntu <--- автоматически запускаем наше приложение в случае рестарта сервера
|
||||||
|
```
|
||||||
|
|
||||||
|
- Настраиваем файрволл:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ufw allow ssh
|
||||||
|
|
||||||
|
ufw allow http
|
||||||
|
|
||||||
|
ufw allow https
|
||||||
|
```
|
||||||
|
|
||||||
|
- Далее устанавливаем веб-сервер nginx `apt install nginx`, после редактируем конфигурационный файл:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
server_name yourdomain.com www.yourdomain.com;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
proxy_pass http://localhost:3000; #порт запущенного приложения
|
||||||
|
proxy_http_version 1.1;
|
||||||
|
proxy_set_header Upgrade $http_upgrade;
|
||||||
|
proxy_set_header Connection 'upgrade';
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_cache_bypass $http_upgrade;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
- Обязательно настройте gzip сжатие, ваш сайт будет работать быстрее:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
server {
|
||||||
|
gzip on;
|
||||||
|
gzip_disable "msie6";
|
||||||
|
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
- Так же желательно избавиться от дубля страницы www:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
if ($host = 'www.example.com') {
|
||||||
|
return 301 https://example.com$request_uri;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
- После настройки проверьте ваш конфигурационный файл на ошибки `nginx -t`, если ошибок нет, то перезапускаем сервис nginx `service nginx restart`.
|
||||||
|
- На сайте RUDVS добавьте свой домен и привяжите его к своему серверу, настройте DNS записи у регистратора. Через какое то время ваш магазин будет доступен по домену.
|
||||||
|
- Далее настройте SSL сертификат:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
add-apt-repository ppa:certbot/certbot
|
||||||
|
|
||||||
|
apt-get update
|
||||||
|
|
||||||
|
apt-get install python-certbot-nginx
|
||||||
|
|
||||||
|
certbot --nginx -d yourdomain.com -d www.yourdomain.com <--- в процессе установки выбираем цифру 2
|
||||||
|
```
|
||||||
|
|
||||||
|
- Ваш конфигурационный файл должен выглядеть примерно так:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
server {
|
||||||
|
|
||||||
|
gzip on;
|
||||||
|
gzip_disable "msie6";
|
||||||
|
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;
|
||||||
|
|
||||||
|
root /var/www/html;
|
||||||
|
|
||||||
|
index index.html index.htm index.nginx-debian.html;
|
||||||
|
|
||||||
|
server_name yourdomain.ru www.yourdomain.ru;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
proxy_pass http://localhost:3000;
|
||||||
|
proxy_http_version 1.1;
|
||||||
|
proxy_set_header Upgrade $http_upgrade;
|
||||||
|
proxy_set_header Connection 'upgrade';
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_cache_bypass $http_upgrade;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($host = 'www.yourdomain.ru') {
|
||||||
|
return 301 https://yourdomain.ru$request_uri;
|
||||||
|
}
|
||||||
|
|
||||||
|
listen [::]:443 ssl ipv6only=on; # managed by Certbot
|
||||||
|
listen 443 ssl; # managed by Certbot
|
||||||
|
ssl_certificate /etc/letsencrypt/live/yourdomain.ru/fullchain.pem; # managed by Certbot
|
||||||
|
ssl_certificate_key /etc/letsencrypt/live/yourdomain.ru/privkey.pem; # managed by Certbot
|
||||||
|
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
|
||||||
|
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
|
||||||
|
}
|
||||||
|
|
||||||
|
server {
|
||||||
|
if ($host = www.yourdomain.ru) {
|
||||||
|
return 301 https://$host$request_uri;
|
||||||
|
} # managed by Certbot
|
||||||
|
|
||||||
|
|
||||||
|
if ($host = yourdomain.ru) {
|
||||||
|
return 301 https://$host$request_uri;
|
||||||
|
} # managed by Certbot
|
||||||
|
|
||||||
|
listen 80 default_server;
|
||||||
|
listen [::]:80 default_server;
|
||||||
|
|
||||||
|
server_name yourdomain.ru www.yourdomain.ru;
|
||||||
|
return 404; # managed by Certbot
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
### Настройка платежной системы:
|
||||||
|
В скрипте на данный момент доступна система оплаты через сервис 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`:
|
- Настройте почтовый сервис по адресу `config/nodemailer.config.js`:
|
||||||
```javascript
|
```javascript
|
||||||
host: "smtp.mail.ru",
|
host: "smtp.mail.ru",
|
||||||
port: 465,
|
port: 465,
|
||||||
secure: true, // true для 465, false для остальных.
|
secure: true, // true для 465, false для остальных.
|
||||||
```
|
```
|
||||||
- Настройте систему комментарий [https://disqus.com/](Disqus.com). Добавьте свой домен на их сайт и замените embed код по адресу `dist/public/js/disqus.js`.
|
- Затем укажите переменные среды `EMAIL_LOGIN` и `EMAIL_PASSWORD`.
|
||||||
- После этого, введите `npm run start` и перейдите по адресу `localhost:3000`, вы увидите уже рабочий интернет-магазин который запущен у вас на локальном компьютере.
|
|
||||||
- Редирект после оплаты товара через QIWI на локальный адрес работать не будет, необходим домен.
|
|
||||||
|
|
||||||
### Запуск скрипта на удаленном сервере:
|
### Настройка системы комментариев:
|
||||||
В данном примере на удаленном сервере будет использоваться связка ``Ubuntu 18.04, Nginx, MongoDB, PM2, NodeJS.``
|
В интернет магазине используется система комментариев [Disqus](https://disqus.com/):
|
||||||
- ...
|
- Добавьте свой домен на их сайт и замените embed код по адресу `dist/public/js/disqus.js`.
|
||||||
|
|
||||||
## Переменные среды:
|
## Переменные среды:
|
||||||
Перменные среды нужны для работоспособности всего приложения, очень важно вписать верные данные для избежания возможных ошибок.
|
Перменные среды нужны для работоспособности всего приложения, очень важно вписать верные данные для избежания возможных ошибок.
|
||||||
### Описание переменных:
|
### Описание переменных:
|
||||||
| Переменная | Описание |
|
| Переменная | Описание |
|
||||||
| --------------- | -------------------------------------------------------- |
|
| --------------- | -------------------------------------------------------- |
|
||||||
| HOSTNAME_URI | Ваше имя хоста: `https://store-name.com`
|
|
||||||
| DATABASE_URI | Подключение к БД MongoDB |
|
| DATABASE_URI | Подключение к БД MongoDB |
|
||||||
| DATABASE_NAME | Имя БД |
|
| DATABASE_NAME | Имя БД |
|
||||||
| EMAIL_LOGIN | Логин от почты для отправки данных покупателю |
|
| EMAIL_LOGIN | Логин от почты для отправки данных покупателю |
|
||||||
@ -101,7 +289,6 @@ secure: true, // true для 465, false для остальных.
|
|||||||
|
|
||||||
`.env` файл:
|
`.env` файл:
|
||||||
```bash
|
```bash
|
||||||
HOSTNAME_URI=
|
|
||||||
DATABASE_URI=
|
DATABASE_URI=
|
||||||
DATABASE_NAME=
|
DATABASE_NAME=
|
||||||
QIWI_SECRET_KEY=
|
QIWI_SECRET_KEY=
|
||||||
|
|||||||
@ -3,13 +3,15 @@ module.exports = {
|
|||||||
name: 'server',
|
name: 'server',
|
||||||
script: 'config/server.js',
|
script: 'config/server.js',
|
||||||
autorestart: true,
|
autorestart: true,
|
||||||
watch: false,
|
watch: true,
|
||||||
|
instances: 'max',
|
||||||
|
exec_mode: 'cluster',
|
||||||
env: {
|
env: {
|
||||||
NODE_ENV: 'development'
|
NODE_ENV: 'development'
|
||||||
},
|
},
|
||||||
env_production: {
|
env_production: {
|
||||||
NODE_ENV: 'production',
|
NODE_ENV: 'production',
|
||||||
DATABASE_URI: '',
|
DATABASE_URI: 'mongodb://127.0.0.1:27017',
|
||||||
DATABASE_NAME: '',
|
DATABASE_NAME: '',
|
||||||
EMAIL_LOGIN: '',
|
EMAIL_LOGIN: '',
|
||||||
EMAIL_PASSWORD: '',
|
EMAIL_PASSWORD: '',
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user