From 3a17fa5235fb85a522afb3edb51fc6d978173c87 Mon Sep 17 00:00:00 2001 From: Sergey Yarkov Date: Fri, 31 Jan 2020 22:37:12 +0300 Subject: [PATCH] readme & ecosys --- README.md | 211 +++++++++++++++++++++++++++++++++++++++++--- ecosystem.config.js | 6 +- 2 files changed, 203 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 2deb231..5b7548b 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ ## Содержание - [О проекте](#О-проекте) - [Структура репозитория](#Структура-репозитория) -- [Установка и найстройка скрипта](#Установка-и-найстройка-скрипта) +- [Установка и настройка скрипта](#Установка-и-настройка-скрипта) - [Запуск скрипта на локальном компьютере](#Запуск-скрипта-на-локальном-компьютере) - [Запуск скрипта на удаленном сервере](#Запуск-скрипта-на-удаленном-сервере) - [Переменные среды](#Переменные-среды) @@ -63,36 +63,224 @@ ## Структура репозитория: В основе всего репозитория существуют две ветки. Ветка master предназначена для разработки приложения, для выгрузки готового приложения на сервер используйте ветку production. -## Установка и найстройка скрипта: +## Установка и настройка скрипта: + ### Запуск скрипта на локальном компьютере: - [Установите последний релиз Digital Store](https://github.com/sergeyyarkov/digital-store/releases) из GitHub репозитория. - Или клонировать репозиторий `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. - Установите БД 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`. - Далле необходимо настроить переменные среды. Создайте файл `.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`: ```javascript host: "smtp.mail.ru", port: 465, secure: true, // true для 465, false для остальных. ``` -- Настройте систему комментарий [https://disqus.com/](Disqus.com). Добавьте свой домен на их сайт и замените embed код по адресу `dist/public/js/disqus.js`. -- После этого, введите `npm run start` и перейдите по адресу `localhost:3000`, вы увидите уже рабочий интернет-магазин который запущен у вас на локальном компьютере. -- Редирект после оплаты товара через QIWI на локальный адрес работать не будет, необходим домен. +- Затем укажите переменные среды `EMAIL_LOGIN` и `EMAIL_PASSWORD`. -### Запуск скрипта на удаленном сервере: -В данном примере на удаленном сервере будет использоваться связка ``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_NAME | Имя БД | | EMAIL_LOGIN | Логин от почты для отправки данных покупателю | @@ -101,7 +289,6 @@ secure: true, // true для 465, false для остальных. `.env` файл: ```bash -HOSTNAME_URI= DATABASE_URI= DATABASE_NAME= QIWI_SECRET_KEY= diff --git a/ecosystem.config.js b/ecosystem.config.js index 8765d3e..e4bf8ab 100644 --- a/ecosystem.config.js +++ b/ecosystem.config.js @@ -3,13 +3,15 @@ module.exports = { name: 'server', script: 'config/server.js', autorestart: true, - watch: false, + watch: true, + instances: 'max', + exec_mode: 'cluster', env: { NODE_ENV: 'development' }, env_production: { NODE_ENV: 'production', - DATABASE_URI: '', + DATABASE_URI: 'mongodb://127.0.0.1:27017', DATABASE_NAME: '', EMAIL_LOGIN: '', EMAIL_PASSWORD: '',