Внутренняя разработка компании Стандарт-Н
Данная разработка представляет из себя серверную часть системы Новости Общего Заказа и предназначена для обработки запросов от клиентской части. Сервер работает с базой данных MongoDB.
- Пример клиентской части: http://oz.st-n.ru/publish/
- Исходный код клиентской части: https://github.com/standart-n/sn-oz-client
- Сервер построен на node.js фреймворке express
- Работа с базой данных ведется спомощью mongoose
- Обмен данными между клиентской частью и сервером происходит спомощью JSONP формата
* GCC 4.2 or newer
* Python 2.6 or 2.7
* GNU Make 3.81 or newer
* libexecinfo (FreeBSD and OpenBSD only)
* Node.js 0.10.10 or newer
* NPM.js 1.2.25 or newer
* MongoDB 2.4.5 or newer
* GraphicsMagick 1.3.12 2010-03-08 or newer
ozserver run
Параметры:
- port - порт, на котором будет работать сервер
- mongodb_connection - строка подключения к базе данных mongodb
ozserver-store
Параметры:
- email - адрес с которого будет отправляться почта
- host - ip почтового сервера
- user - пользователь
- password - пароль
ozserver-mail
устанавливаем
npm install --global ozserver
затем можно запустить сервер
ozserver run
создаем каталог, в который установим сервер
mkdir -p /var/www/oz/api/server_1/
переходим в даннный каталог
cd /var/www/oz/api/server_1
устанавливаем пакет
npm install ozserver
переходим в нужный каталог
cd node_modules/ozserver
запускаем
node ozserver run
скачиваем
git clone https://github.com/standart-n/sn-oz-api
переходим в папку проекта
cd ./sn-oz-api
собираем проект
make
запускаем
node ozserver run
для этого должен быть установлен forever
npm install -g forever
создадим в каталоге /etc/init.d
файл ozserver
и выставим ему права на исполнение
cd /etc/init.d/
touch ozserver
chmod 755 ./ozserver
далее откроем файл на редактирование спомощью nano
и вставим в него следующий код
#!/bin/sh
#
### BEGIN INIT INFO
# Provides: ozserver
# Required-Start: $all
# Required-Stop: $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: oz server api
# Description: oz server
# api
#
### END INIT INFO
export USER=root
export PWD=/root
export HOME=/root
export PATH=$PATH:/usr/local/bin
export NODE_PATH=$NODE_PATH:/usr/local/lib/node_modules
export NODE_ENV=production
case "$1" in
'start')
exec forever start -a -l /var/log/ozserver.forever.log -o /var/log/ozserver.out.log -e /var/log/ozserver.err.log --sourceDir=/usr/local/lib/node_modules/ozserver/ ozserver run > /var/log/ozserver.init.log
;;
'stop')
exec forever stop /usr/local/lib/node_modules/ozserver/ozserver > /var/log/ozserver.init.log
;;
'restart')
exec forever -a -l /var/log/ozserver.forever.log -o /var/log/ozserver.out.log -e /var/log/ozserver.err.log restart /usr/local/lib/node_modules/ozserver/ozserver > /var/log/ozserver.init.log
;;
'status')
exec forever list
;;
*)
echo "Usage: $0 { start | stop | restart | status }"
exit 1
;;
esac
exit 0
в результате мы получим сервис /etc/init.d/ozserver
/etc/init.d/ozserver start
/etc/init.d/ozserver status
/etc/init.d/ozserver stop
добавить в автозагрузку
update-rc.d ozserver defaults
убрать запуск сервера из автозагрузки
update-rc.d ozserver remove
создаем файл конфигурации
touch /etc/logrotate.d/ozserver
открываем его спомощью nano
и записываем туда:
/var/log/ozserver*.log {
daily
rotate 5
create 644 root adm
missingok
notifempty
compress
delaycompress
postrotate
/etc/init.d/ozserver stop
/etc/init.d/ozserver start
endscript
}
применяем конфигурацию
logrotate /etc/logrotate.conf
далее можно протестировать
logrotate -f /etc/logrotate.conf
server {
# порт, который слушает nginx
listen 8080;
# доменные имена
server_name api.oz.st-n.ru www.api.oz.st-n.ru;
# путь к логам
access_log /var/log/nginx/st-n.log;
location / {
# 127.0.0.1 - здесь мб адрес любой машины в сети
# 2424 - порт который слушает запущенный нами сервер
proxy_pass http://127.0.0.1:2424/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Авторизация по e-mail и паролю
- GET /signin
- password
Авторизация по ключу
- GET /signin/:id/:key
Простая регистрация
- GET /registration
- model
- firstname
- lastname
- company
- region
- model
Личные данные
- PUT /edit/personal
- model
- id
- firstname_new
- lastname_new
- model
Смена пароля
- PUT /edit/password
- model
- id
- password_new
- model
Восстановление пароля
- GET /remember
- model
- model
Получение новостей
- GET /feed/post/:region
- [limit]
Проверка актуальности ленты новостей
- GET /feed/post/:region/:seria
- [limit]
Добавление новости
- POST /feed/post
- model
- message
- region
- model
Редактирование своей новости
- PUT /feed/post
- model
- id
- message
- model
Удаление своей новости
- DELETE /feed/post/:id
- Загрузка файлов и картинок на сервер
-
Переписал механизм сессий
- Теперь они сохраняются в коллекцию sessions и только у авторизованных пользователей.
-
Сохранение последнего действия пользователя в коллекцию actions.
-
Изменен механизм сессий
- Теперь id сессии нужно сохранять после авторизации, а затем отправлять его в запросах в качестве параметра sessid.
-
Внедрил сокеты (библиотека SockJS).
-
Переход на сессии.
-
Упростил API.
-
Загрузка файлов на сервер:
-
ограничение на 10мб
-
проверка на авторизацию
-
Исправил ошибку с форматом даты в логах.
-
Упростил установку с GitHub.
- Добавил вывод даты и времени запроса в логах.
- Сделал возможность создавать профили настроек через
--profile
.
-
Добавил инструкцию по созданию сервиса для данного сервера. Это позволяет запускать сервев в качестве демона, а также можно добавить этот сервис в автозагрузку.
-
Возможность запускать сервер с командами
--port
и--connection
. -
Перенес настройки в
/usr/lib/ozserver
, чтобы они не затирались при обновлении сервера. -
Увеличил лимит сообщения с
255
до100000
.
The MIT License (MIT)
Copyright (c) 2013 standart-n
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.