From 13acda9581598ecaf154ecc2de74afe0f5ce9fb8 Mon Sep 17 00:00:00 2001 From: Artem Mayer <40364948+mayerdev@users.noreply.github.com> Date: Mon, 10 Feb 2020 18:46:55 +0300 Subject: [PATCH 1/2] Update README.md --- README.md | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index ef57b67..a80ade3 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@

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

GitHub package.json version (branch) @@ -40,17 +40,17 @@ - [Лицензия](#Лицензия) ## О проекте: -Этот проект представляет из себя интернет-магазин на платформе NodeJS, вы можете продавать свои цифровые товары именно скачав этот репозиторий, в [панели управления](#Панель-управления) вы сможете создавать, удалять и редактировать товары или категории . В проекте используется концепция REST API, поэтому для отдачи информации клиенту существует отдельный API. Информация о покупателях, товарах, категориях и т.д хранится в БД MongoDB (используется нативный драйвер). +Этот проект представляет из себя интернет-магазин на платформе NodeJS, Вы можете продавать свои цифровые товары именно загрузив этот репозиторий, в [панели управления](#Панель-управления) Вы сможете создавать, удалять и редактировать товары или категории . В проекте используется концепция REST API, поэтому для отдачи информации клиенту существует отдельный API. Информация о покупателях, товарах, категориях и т.д хранится в БД MongoDB (используется нативный драйвер). ### Функционал покупателя: - Возможность выбирать интересующие категории, переход по одиночным страницам конкретного товара. - Возможность комментировать как отдельный товар, так и весь магазин на отдельной странице с помощью системы комментариев Disqus. - Возможность фильтровать интересующую категорию или все товары через фильтр. -- Покупатель может совершать одну или несколько покупок через корзину или через кнопку "Купить". +- Покупатель может совершать одну или несколько покупок через корзину или кнопку "Купить". - Оплата осуществляется через сервис QIWI API. -- Результатом оплаты будут данные одного или нескольких товаров, все данные отсылаются на почту покупателя, которую он указывал при создании заказа. +- Результатом оплаты будут данные одного или нескольких товаров, все данные отсылаются на электронную почту покупателя, которую он указал при создании заказа. - Покупатель может узнать все свои совершенные покупки в магазине на отдельной странице. ### Функционал администратора: -Для входа в админ-панель необходимо дописать в адресной строке `/admin`, после вы попадете на страницу авторизации где нужно вписать данные `email:password`. По умолчанию `admin@support.ru:admin` +Для входа в админ-панель необходимо дописать в адресной строке `/admin`, после Вы попадете на страницу авторизации где нужно ввести данные в формате `email:password`. По умолчанию `admin@support.ru:admin` - Пароль админа хэшируется через `bcrypt` для безопасности и записывается в БД. - На главной странице есть небольшая статистика, где можно посмотреть: сумму проданных товаров, кол-во проданных товаров, кол-во товаров в наличии. - На главной странце так же можно узнать подробные данные о покупателях: номер заказа, почта покупателя, способ оплаты, дата покупки, сумма и данные которые были высланы по почте. @@ -71,21 +71,24 @@ - Или клонировать репозиторий `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`. -- Для работоспособности интернет-магазина необходимо установить зависимости. Выполните комманду `npm install`. +- Для работоспособности интернет-магазина необходимо установить зависимости. Выполните комманду `npm i`. - Далле необходимо настроить переменные среды. Создайте файл `.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 услугу. +- Переходим на сайт [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) +apt-get update && apt-get install curl -y +curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.2/install.sh | bash +export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")" +[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" +source ~/.bashrc +nvm install 12 ``` Если при выполнении команд `node -v` и `npm -v` выдается версия, то идем дальше. - Создаем папку `/apps`, после переходим в нее и клонируем проект с github и переходим в наш магазин: @@ -198,7 +201,7 @@ apt-get update apt-get install python-certbot-nginx -certbot --nginx -d yourdomain.com -d www.yourdomain.com <--- в процессе установки выбираем цифру 2 +certbot --nginx -d yourdomain.com <--- в процессе установки выбираем цифру 2 ``` - Ваш конфигурационный файл должен выглядеть примерно так: @@ -256,7 +259,7 @@ server { ``` -### Выгрузка скрипта на бесплатный хостинг от Heroku: +### Установка скрипта на бесплатный хостинг от Heroku: - Регистрируемся на сайте [Heroku](https://signup.heroku.com/login). - Устанавливаем heroku-cli `https://devcenter.heroku.com/articles/heroku-cli`. - Проверьте установку, написав в консоле `heroku --help` если всё выводит, идем дальше. From 16ceabe1074f2adfd290445d2ae3c914ee220b51 Mon Sep 17 00:00:00 2001 From: Artem Mayer <40364948+mayerdev@users.noreply.github.com> Date: Mon, 10 Feb 2020 18:56:13 +0300 Subject: [PATCH 2/2] Update server.js --- server/server.js | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/server/server.js b/server/server.js index 1f204eb..48c4703 100644 --- a/server/server.js +++ b/server/server.js @@ -23,13 +23,13 @@ MongoClient.connect(db_config.url, {useNewUrlParser: true, useUnifiedTopology: t const storage = multer.diskStorage({ destination: 'dist/public/img/service-icons', filename: function(req, file, cb) { - cb(null, file.fieldname + '-' + Date.now() + path.extname(file.originalname)); + cb(null, `${file.fieldname}-${Date.now()}${path.extname(file.originalname)}`); } }); // Config server.use(cors()); - server.use(express.static(path.join(__dirname, '../dist/public'))); + server.use(express.static(`${__dirname}/../dist/public`)); server.use(multer({storage: storage}).single('img')); server.use(express.urlencoded({ extended: false })); server.use(express.json()); @@ -39,7 +39,7 @@ MongoClient.connect(db_config.url, {useNewUrlParser: true, useUnifiedTopology: t server.use(passport.session()); server.use(methodOverride('_method')); server.set('view engine', 'pug'); - server.set('views', path.join(__dirname, '../dist/views')); + server.set('views', `${__dirname}/../dist/views`); // Routes require('./routes/main')(server, db); // маршруты сайта @@ -60,9 +60,4 @@ MongoClient.connect(db_config.url, {useNewUrlParser: true, useUnifiedTopology: t console.log(error); }); }) - .finally(() => { - const port = process.env.PORT || 3000; - server.listen(port, () => { - console.log('App is running...'); - }); - }); + .finally(server.listen(process.env.PORT || 3000, console.log('App is running...')));