readme & ecosys

This commit is contained in:
Sergey Yarkov 2020-01-31 22:37:12 +03:00
parent 0c964e2135
commit 3a17fa5235
2 changed files with 203 additions and 14 deletions

211
README.md
View File

@ -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=

View File

@ -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: '',