ozserver

API for OZ

npm install ozserver
36 downloads in the last week
73 downloads in the last month

API сервер для Новостей Общего Заказа

Внутренняя разработка компании Стандарт-Н

Данная разработка представляет из себя серверную часть системы Новости Общего Заказа и предназначена для обработки запросов от клиентской части. Сервер работает с базой данных 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

Если на машине будет запущен только один сервер, то пакет можно установить глобально

устанавливаем

npm install --global ozserver

затем можно запустить сервер

ozserver run
Eсли необходимо запустить несколько серверов на одной машине

создаем каталог, в который установим сервер

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
Как настроить logrotate

создаем файл конфигурации

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

Как привязать сервер к доменному имени в nginx

  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;
    }
  }

API

Авторизация пользователя

Авторизация по e-mail и паролю

  • GET /signin
    • email
    • password

Авторизация по ключу

  • GET /signin/:id/:key

Регистрация пользователя

Простая регистрация

  • GET /registration
    • model
      • firstname
      • lastname
      • email
      • company
      • region

Редактирование информации о пользователе

Личные данные

  • PUT /edit/personal
    • model
      • id
      • firstname_new
      • lastname_new

Смена пароля

  • PUT /edit/password
    • model
      • id
      • password_new

Функция вспомнить пароль

Восстановление пароля

  • GET /remember
    • model
      • email

Лента новостей

Получение новостей

  • GET /feed/post/:region
    • [limit]

Проверка актуальности ленты новостей

  • GET /feed/post/:region/:seria
    • [limit]

Добавление новости

  • POST /feed/post
    • model
      • message
      • region

Редактирование своей новости

  • PUT /feed/post
    • model
      • id
      • message

Удаление своей новости

  • DELETE /feed/post/:id

Журнал изменений

26 сен 2013г. v0.2.1
  • Загрузка файлов и картинок на сервер
26 сен 2013г. v0.1.7
  • Переписал механизм сессий

    • Теперь они сохраняются в коллекцию sessions и только у авторизованных пользователей.
  • Сохранение последнего действия пользователя в коллекцию actions.

25 сен 2013г. v0.1.6
  • Изменен механизм сессий

    • Теперь id сессии нужно сохранять после авторизации, а затем отправлять его в запросах в качестве параметра sessid.
  • Внедрил сокеты (библиотека SockJS).

16 сен 2013г. v0.1.4
  • Переход на сессии.

  • Упростил API.

04 сен 2013г. v0.1.4
  • Загрузка файлов на сервер:

    • ограничение на 10мб

    • проверка на авторизацию

02 сен 2013г.
  • Исправил ошибку с форматом даты в логах.

  • Упростил установку с GitHub.

28 авг 2013г. v0.1.3
  • Добавил вывод даты и времени запроса в логах.
28 авг 2013г. v0.1.2
  • Сделал возможность создавать профили настроек через --profile.
28 авг 2013г. v0.1.1
  • Добавил инструкцию по созданию сервиса для данного сервера. Это позволяет запускать сервев в качестве демона, а также можно добавить этот сервис в автозагрузку.

  • Возможность запускать сервер с командами --port и --connection.

  • Перенес настройки в /usr/lib/ozserver, чтобы они не затирались при обновлении сервера.

  • Увеличил лимит сообщения с 255 до 100000.

License

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.

npm loves you