
# Сайт lycArch.urfu.ru

### Содержание

[О сайте](#о-сайте)

&emsp;&emsp;[Назначение и основные возможности](#назначение-и-основные-возможности)

&emsp;&emsp;[Лицензия](#лицензия)

&emsp;&emsp;[Краткая техническая характеристика](#краткая-техническая-характеристика)

&emsp;&emsp;[Сервер авторизации](#сервер-авторизации)

&emsp;&emsp;[Структура папок](#структура-папок)

[Установка, запуск и останов](#установка-запуск-и-останов)

&emsp;&emsp;[Установка на хостинг](#установка-на-хостинг)

&emsp;&emsp;[Запуск серверов](#структура-папок)

&emsp;&emsp;[Останов серверов](#структура-папок)

## О сайте

Сайт `lycArch.urfu.ru` представляет собой архив публикаций обучающихся и сотрудников СУНЦ УрФУ и публикует научные статьи, авторами которых являются обучающиеся и сотрудники Спе­ци­а­ли­зи­ро­ван­но­го учебно-научного центра Уральского федерального университета (Екатеринбург). Сайт не является средством массовой информации.

После минимальной доработки (смены логотипа и при необходимости — дизайна страниц, редактирования текстов с упоминанием СУНЦ УрФУ, редактирования шаблона статьи) сайт может быть использован для автоматизации работы **любой редакции** рецензируемого журнала (с рецензированием каждой статьи *одним* рецензентом).

#### Назначение и основные возможности

Сайт предназначен для автоматизации всех редакционных процессов и позволяет:

- **неавторизованному пользователю:** видеть список последних пяти опубликованных статей и читать эти статьи; производить поиск статей по тематическому разделу, фамилии автора либо фрагменту названия или ключевого слова и читать найденные статьи; знакомиться с содержимым странички «Редакция»; знакомиться с содержимым странички «Авторам» (требованиями к содержанию и оформлению статей);
- **авторизованному учащемуся или сотруднику СУНЦ УрФУ**, кроме того: отправлять в редакцию свои статьи, редактировать их, удалять их; просматривать свои опубликованные и неопубликованные статьи; получать по электронной почте замечания редактора и рецензента, а также информацию о всех действиях редакции; получать сертификат о публикации в формате pdf;
- **главному редактору:** назначать редакторов, корректоров и рецензентов из числа сотрудников СУНЦ УрФУ; удалять опубликованные статьи;
- **редактору:** просматривать перечни неопубликованных статей по категориям (вновь поступившие, получившие замечания редактора, переданные рецензенту, получившие замечания рецензента, одобренные рецензентом и направленные корректору, прошедшие корректуру и ожидающие публикации); получать полную информацию о неопубликованной статье; редактировать статью; отправлять автору замечания редактора; направлять статью рецензенту или корректору; публиковать статью; удалять статью;
- **корректору:** просматривать направленные ему редактором статьи; редактировать статьи;
- **рецензенту:** просматривать направленные ему редактором статьи (без просмотра фамилий и иных данных автора и соавторов); отправлять автору статьи замечания; рекомендовать редактору удалить статью без ее рассмотрения; рекомендовать редактору опубликовать статью.

#### Лицензия

Программное обеспечение сайта доступно по лицензии ISC (файл LICENSE.txt).

#### Краткая техническая характеристика

Сайт представляет собой клиентское веб-приложение, написанное на JavaScript. Клиентская часть обращается к API серверной части, работающей на платформе Nodejs. Статические файлы отдаются посредством любого web-сервера (в настоящее время используется `lighttpd`). Для хранения данных используется СУБД NeDB (@yetzt/nedb — модуль Nodejs).

#### Сервер авторизации

Для работы сайта требуется **наличие сервера авторизации пользователей** (без авторизации доступен только просмотр опубликованных статей, сведений о редакции сайта и мануала для авторов).

Сервер авторизации на GET-запрос вида

```txt
хост?login-password
```

(пароли и логины пользователей не должны содержать дефисов; дефис используется как разделитель логина и пароля) должен выдавать строку либо `noauth`, либо данные пользователя вида

```txt
pupkin,Пупкин,Василий,Петрович,
```

(для учащихся с пустым отчеством, для сотрудников — с реальным отчеством).

Если сервер авторизации отвечает по протоколу https, то и сайт архива публикаций должен работать по протоколу https, иначе запрос к серверу авторизации будет заблокирован политикой безопасности браузера.

#### Структура папок

```txt
lycarch.urfu.ru
├── api                       Скрипты, реализующие API (nodejs)
│   ├── sert_blank.jpg        Фоновое изображение (бланк) сертификата
│   └── *.js                  Скрипты, реализующие API
├── db                        Таблицы базы данных
│   ├── articles.db           Каталог статей (опубликованных и ждущих публикации)
│   └── users.db              Редакторы, рецензенты, корректоры
├── draft                     Статьи, ждущие публикации (отдаются nodejs'ом!)
│   ├── z000                  Папка-заглушка для того, чтобы каталог draft не был пустым
│   └── ...                   Прочие папки со статьями, ждущими публикации
│       ├── article.txt       Аннотация, текст и библиография статьи
│       ├── editor.txt        Замечания редактора
│       └── reviewer.txt      Замечания рецензента
├── logs                      Логи сервера
├── www
│   ├── fonts                 Подгружаемые шрифты
│   ├── img                   Изображения, обслуживающие сайт
│   ├── include               Подгружаемый контент, стили, шаблоны
│   │   ├── corrector.html    Интерфейс корректора
│   │   ├── editor.html       Интерфейс редактора
│   │   ├── form.html         Форма ввода / редактирования статьи
│   │   ├── main.html         Контент страницы «Статьи»
│   │   ├── manual.html       Контент страницы «Авторам»
│   │   ├── office.html       Контент страницы «Редакция»
│   │   ├── reviewer.html     Интерфейс рецензента
│   │   ├── send.html         Контент страницы «Мои статьи»
│   │   ├── print.css         Стиль статьи
│   │   ├── style.css         Стиль страниц сайта
│   │   └── print.tpl         Шаблон статьи
│   ├── js
│   │   ├── admin.js          Обработка контента интерфейса главного редактора
│   │   ├── page.js           Обработка контента сайта и формы авторизации
│   │   └── print.js          Обработка страницы со статьей
│   ├── katex                 Библиотека katex для рендеринга формул
│   ├── pub                   Опубликованные статьи
│   │   ├── _sample           Статья-образец
│   │   ├── ...               Прочие опубликованные статьи
│   │   └── index.html        Файл перенаправления на главную страницу сайта
│   ├── index.html            Главная страница
│   ├── sections.js           Перечень тематических разделов архива публикаций
│   ├── root.html             Страничка с интерфейсом главного редактора
│   ├── favicon.ico
│   └── robots.txt
├── config.json               Определение переменных — настройки сайта
├── kod404.html               Страничка 404
├── LICENSE.txt               Текст лицензии
├── package.json
├── README.md                 Этот файл
└── server.js                 Стартовый скрипт API (nodejs)
```

## Установка, запуск и останов

#### Установка на хостинг

1. Установите любой сервер (ниже описываются действия для `lighttpd`; настройка `Apache`, `nginx` и других серверов выполняется аналогично). В качестве папки документов сервера укажите папку сайта `www`, в качестве папки логов — папку `logs`, в качестве странички ошибок 404 — файл `kod404.html` (в настройках `lighttpd` указывается без кода ответа и без расширения):

    ```
    server.errorfile-prefix = "путь/kod"
    ```

1. В файле `lighttpd.conf` подключите модуль `mod_proxy` и включите проксирование запросов к API на порт 8080, добавив в конец этого файла строку

        $HTTP["url"] =~ "(^\/api\/)" {proxy.server = ("" => (("host" => "127.0.0.1", "port" => "8080")))}

1. Установите Nodejs версии не менее 12.x.

1. Установите дополнительные модули `node-fetch`, `mmmagic`, `@yetzt/nedb` (можно использовать и модуль `nedb`, но он имеет конфликт версий, который можно можно проигнорировать), `nodemailer`, `pdfkit`.

1. После копирования сайта в рабочий каталог сервера измените собственника всех папок и файлов сайта на `www-data` и выставьте права на папки `755`, а права на файлы `644`.

1. Отредактируйте файл `/www/sections.js` (перечень тематических разделов архива публикаций).

1. Отредактируйте файл `/config.json` (определение переменных — настройки сайта):

    - ADMIN — логин главного редактора (используемый при авторизации на сервере авторизации);
    - admEml — e-mail главного редактора;
    - SALT — произвольная символьная строка, используемая в качестве соли для хеширования паролей пользователей;
    - authServ — URI сервера авторизации (вместе с протоколом http:// или https://);
    - director — инициалы и фамилия директора СУНЦ УрФУ;
    - glred — инициалы и фамилия главного редактора архива публикаций;
    - smtpSrv — URL smtp-сервера, используемого для отправки e-mail с сайта;
    - smtpPort — номер smtp-порта;
    - smtpUs — логин для авторизации на smtp-сервере;
    - smtpPwd — пароль для авторизации на smtp-сервере.

#### Запуск серверов

1. Запуск и рестарт сервера `lighttpd` производится штатными средствами ОС, например

    ```txt
    service lighttpd start
    ```

1. В unix-подобных ОС запуск nodejs-сервера производится командой

    ```txt
    nohup node /путь/server.js &
    ```

    Nodejs необходимо запускать из-под суперпользователя с тем, чтобы иметь доступ на запись к некоторым папкам сайта (альтернативный и более безопасный вариант — выставить права `775` на папки `draft` и `www/pub` и включить пользователя, из-под которого будет запускаться nodejs, в группу `www-data`).

    Для выхода из ssh-сессии необходимо предварительно подать команду `exit`; в случае, если возникнет предупреждение о незавершенных процессах, необходимо подать команду `disown 0000` (где 0000 — id процесса), а затем снова `exit`.

#### Останов серверов

Останов сервера `lighttpd` производится штатными средствами ОС, например

```txt
service lighttpd stop
```

Останов nodejs-сервера производится командой `killall node` (для работы killall может потребоваться предварительная установка в системе пакета `psmisc`).
