Собственный сервис заметок Paperwork. Установка и настройка на Ubuntu Server 16.04.

Что вы делаете когда вам в голову приходит умная мысль? Как вы ее фиксируете, точнее где? Записываете в блокнот или на первый попавшийся листик, а потом благополучно теряете его? Или вы используете онлайн-сервисы заметок типа Ever­note или Google Keep?

Я пользовался онлайн-сервисами заметок, сначала Ever­note, потом Quip, пока не задумался о приватности своих данных. Сразу хочу уточнить, я не обвиняю сервисы в просмотре пользовательских записей. Это конечно возможно, но вряд ли происходит, если всплывут подобные факты, то будет нанесен огромный ущерб репутации, а следовательно и прибыли, ведь частично сервисы являются платными.

Мы это понимаем, сервисы понимают тоже, но случиться может всякое. Если разговор заходит о приватности и безопасности данных, то так можно считать тогда, когда доступ к данным есть только у вас. Именно поэтому я перестал пользоваться подобными онлайн-сервисами и установил на свой VPS систему Paper­work, так мне спокойнее.

Paper­work - полностью свободная система заметок с открытым исходным кодом, благодаря чему любой человек может установить ее на собственный сервер. Да, может быть она не так функциональна как тот же Ever­note, и у нее нет браузерных расширений и прочих примочек, но со своей задачей она справляется. Самое главное, что она только ваша, и доступ к ней есть только у вас, если не считать пользователей которым вы разрешите в ней зарегистрироваться. Это могут быть ваши родственники, друзья, коллеги по работе, если система является корпоративной, в общем только свои. Имеется поддержка русского языка, а еще интерфейс на старый Ever­note смахивает.

paperwork ubuntuPaper­work написан на PHP, использует в работе MySQL базы данных, управляется серверами Apache или Nginx и сравнительно просто устанавливается, как на свежий сервер, так и на уже используемый. У меня Paper­work работает совместно с Mari­aDB, сервером Nginx, а также PHP версии 7.1.1 собранным из исходников. Основой является Ubun­tu Serv­er 16.04.

Для установки и работы Paper­work необходим следующий набор программ и пакетов.

MariaDB и база данных для Paperwork

Начать стоит с Mari­aDB, здесь я не буду описывать ее установку и настройку, весь процесс подробно описан в отдельной статье.

Допустим что Mari­aDB уже стоит, в таком случае нам нужно создать базу данных, которую Paper­work будет использовать в своей работе.

Сейчас мы создадим базу данных - paper­work, если имя не устраивает, можно задать свое, изменив его в вводимых командах. То же касается пользователя базы и его пароля, в командах я буду использовать 'user­name' и 'pass­word' соответственно.

Запомним эти данные, они нам понадобятся для настройки связи Paper­work с базой данных.

Установка и настройка PHP

Если следовать официальной инструкции по установке Paper­work, то для работы системы необходимо установить следующий набор PHP модулей из репозиториев Ubun­tu.

Если вся система устанавливается с нуля, исключительно под Paper­work, то проще всего установить PHP именно так, из системных репозиториев. Тогда не потребуется вносить никаких дополнительных настроек и правок конфигурационных файлов, как в моем случае, когда PHP был установлен из исходников.

Поскольку я устанавливал Paper­work на уже использующийся сервер, то PHP у меня уже был установлен. Это была версия 7.1.1 собранная вручную из исходников, процесс установки которой описан в этой статье.

Пришлось использовать то что было. Как оказалось, с этим связано несколько небольших, но вполне решаемых проблем. Если кто-то из вас устанавливает Paper­work, также как и я, на уже готовый сервер с кастомным PHP, то данная информация может вам пригодиться. Но обо всем по порядку.

Первое, с чем придется столкнуться, это вероятное отсутствие нужных опций и модулей PHP. Проблема решается простой пересборкой с добавлением нужных опций. Мне пришлось пересобирать PHP несколько раз, пока я не добавил все что нужно.

В моей сборке уже было все, включая поддержку библиотеки GD, не было только поддержки Mcrypt шифрования. Поэтому я добавил к старой конфигурации --with-mcrypt и с чистой совестью пересобрал PHP заново, думая что у меня есть все что нужно. Но как оказалось, этого было мало.

Позже, когда я начал устанавливать Com­pos­er, вылезла еще одна недостача. Com­pos­er ни в какую не хотел устанавливаться и ругался на опцию --dis­able-phar, которая отключает поддержку phar модуля, нужного для работы Com­pos­er. Надо признаться что тут я ее просто не заметил, хотя знал что phar для Com­pos­er-а нужен.

Я опять пересобрал PHP, выкинув --dis­able-phar из конфигурации, думая что вот теперь то уже точно все и дальше проблем не будет. Но нет, при выполнении миграции, когда Paper­work связывается со своей базой данных, вылезла еще одна ошибка, сообщающая что у меня нет поддержки PDO_MYSQL драйвера.

Пришлось собирать третий раз, на этот раз добавив --with-pdo-mysql=mysqlnd, включающую поддержку PDO_MYSQL. Хорошо, что все это я проделывал на виртуальной машине. Так повелось, что у меня всегда есть копия VPS на виртуальной машине, с тем же установленным ПО, для подобных тренировок и тестов. Сначала все отрабатывается на ней, а только потом все воспроизводится на рабочем сервере.

Итак, если нужно пересобрать PHP под использование Paper­work, то вам понадобится следующая конфигурация из необходимых опций + добавить ваши из старой конфигурации.

На всякий случай приведу полную конфигурацию сборки, может из нее еще что нужно, по крайней мере больше ошибок связанных со сборкой PHP не возникало.

Отсюда появляются еще несколько моментов. Для сборки PHP вместе с --with-mcrypt, необходимо установить следующие пакеты и библиотеки.

Иначе при конфигурации будет такая ошибка.

Поскольку в новой сборке появилась поддержка phar, нужно создать символическую ссылку на файл phar в каталоге /bin. Я делаю это исходя из своего местоположения установки PHP и соответственно файла phar.

Второе, с чем придется столкнуться, это различные правки конфигурационных файлов PHP, вносимые на протяжении эксплуатации сервера. У меня нашлось два значения несовместимых с Paper­work и ее установкой.

Помимо сборки, Com­pos­er ругался на отключенную allow_url_fopen в php.ini.

Решается правкой php.ini и выставлением allow_url_fopen в On.

Также у меня была еще одна ошибка, связанная с функцией php exec. Но она появилась уже после установки Paper­work и подробно описана в отдельном разделе статьи.

Установка и настройка Nginx

Для управления и обслуживания Paper­work нужен сервер, в моем случае в этой роли выступает Nginx. Его довольно просто установить из системных репозиториев Ubun­tu, достаточно выполнить следующую команду.

После установки сервер нужно настроить, о том как это сделать можно прочитать здесь и здесь. Под спойлером выкладываю готовый файл nginx.conf.

nginx.conf

На данный момент настройка Nginx не доведена до конца, еще не хватает хост-файла для обслуживания Paper­work, его мы напишем немного позже.

Установка Composer

Установим пакетный менеджер Com­pos­er, устанавливающий необходимые зависимости для приложений использующих PHP. В нашем случае он нужен для установки зависимостей Paper­work. Com­pos­er состоит из одного файла composer.phar, по сути являющимся php-скриптом и распространяющимся в phar архиве.

С помощью Curl скачиваем Com­pos­er в текущий каталог, например в /root. Если Curl будет ругаться на сертификаты или невозможность скачать файл по https, то добавьте к команде -k или лучше всего обновите систему. Такое иногда бывает.

Перемещаем файл composer.phar в директорию /usr/local/bin, переименовывая его в com­pos­er.

Теперь Com­pos­er может быть вызван следующей командой.

Kоманда покажет список доступных опций.

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

Установка Paperwork

Переходим к установке Paper­work. Устанавливать будем в каталог /var/www, перейдем в него.

Клонируем Paper­work с github.
Переходим в каталог fron­tend.

Находясь в каталоге fron­tend запускаем сom­pos­er, он установит все необходимые зависимости.

Перейдем в каталог /app/storage/config.

Нас интересуют default_database.json и default_paperwork.json. Первый файл отвечает за связь Paper­work с базой данных, второй за регистрацию пользователя. Нам нужно переименовать их в database.json и paperwork.json соответственно.

Копируем с переименованием, чтобы сохранить исходные файлы.

Когда мы устанавливали зависимости, то в конце можно было увидеть следующие строки, сообщающие что Paper­work не удалось связаться с базой данных.

По умолчанию Paper­work пытается связаться с базой данных подставляя значения имени и пароля пользователя прописанные в файле database.json, а в нем значится одно и то же - paper­work.

В самом начале мы создавали свою базу данных, а также своего пользователя со своим паролем. Поэтому не удивительно что система не смогла связаться с базой данных. Необходимо отредактировать файл database.json, внеся в него свои значения из начала статьи.

Редактируем database.json.

В этом же каталоге создадим файл set­up, добавим в него цифру 8, после чего сохраним изменения.

Это нужно для того, чтобы не заполнять все значения вручную через веб-интерфейс, после первого запуска Paper­work. Когда будем выполнять миграцию, все это будет сделано автоматически и при первом запуске сразу появится форма входа / регистрации. Это так называемая "установка без использования Set­up Wiz­ard".

Переходим обратно в каталог /paperwork/frontend.

Выполняем миграцию для заполнения базы данных. На вопрос Do you real­ly wish to run this com­mand? - вводим "y" и нажимаем Enter.

Если все в порядке, то должно быть примерно так.

Находясь в каталоге paperwork/frontend, устанавливаем gulp-bow­er с помощью пакетного менеджера npm (должен быть установлен вместе со всем софтом из начала статьи).

Установим нужные зависимости.
Установим зависимости для bow­er.
Проводим финальную сборку.
Должно быть примерно так.

Осталось создать хост-файл Nginx, для обслуживания Paper­work. Создадим файл paper­work в директории /etc/ng­inx/sites-avail­able.

Минимальная конфигурация будет следующая.
  • Имя сайта я указал как paperwork.test.com, вы естественно используете свое имя, например поддомен от основного доменного имени.
  • В качестве корневой директории Paper­work выступает frontend/public именно она отвечает за доступ к системе. Поэтому в значении root указываем ее полный адрес /var/www/paperwork/frontend/public.
  • Что касается сокета /run/php/php7.0-fpm.sock, то он используется по умолчанию, если PHP устанавливался из системных репозиториев Ubun­tu. Соответственно если нужно использовать свой сокет, то указываем его.

Сразу же создадим символическую ссылку на файл в каталоге sites-enabled, для того чтобы Nginx мог найти данный файл.

Создадим указанный в конфигурации каталог для размещения логов, иначе сервер будет ругаться на его отсутствие.

Назначим владельца для каталога /var/www/paperwork. В противном случае система будет ругаться на невозможность выполнения служебных файлов.

Перезагружаем Nginx и PHP.

Теперь система будет доступна или по ip-адресу сервера, или по указанному адресу. Остается только зарегистрироваться, выбрать нужный язык и нажать Sign Up.

paperwork install

После чего можно сразу приступать к заметкам.

paperwork ubuntu

Ошибки при обращении к Paperwork

Если вдруг, по какой либо причине вы используете PHP версии выше чем 7.0, например 7.1.X, то готовьтесь к возникновению ошибки. Вместо формы входа вы увидите следующую картину.

paperwork ubuntu

Система сообщает об устаревшей и не поддерживаемой функции mcrypt_get_iv_size(). Дело в том, что используемая в Paper­work версия фреймворка Lar­avel 4.2 несовместима с последними версиями PHP выше чем 7.0. В последнем PHP этой функции уже нет, а в фреймворке есть, отсюда и возникает данная ошибка. Согласно официальной документации PHP использовать эту функцию не рекомендуется.

Вылечить можно двумя способами. Первый, это обновление Lar­avel до 5-ой версии, в нем эта функция тоже убрана. Но этот способ трудный и долгий. Значительно быстрее отредактировать файл app.php находящийся в директории /frontend/app/config.

В начало файла, после открывающего тега <?php, нужно добавить - error_reporting(E_ALL ^ E_DEPRECATED); выражение запрещающее вывод ошибок. После чего сохранить изменения в файле.

Если после правки файла обновить страницу в браузере, то есть два варианта того что вы увидите. Вы можете увидеть форму входа в Paper­work, это значит что все исправлено и можно начинать пользоваться системой.

А можете увидеть ошибку, но уже другую.

paperwork ubuntu

Теперь система ругается на отключенную в целях безопасности функцию exec. Может когда-то давно, вы могли отключить ее за ненадобностью. Откройте свой php.ini найдите строчку disable_functions и уберите из ее значения функцию exec.

Перезапустите PHP, перезагрузите страницу в браузере и начинайте пользоваться Paper­work.

paperwork ubuntu

Шифрование трафика Paperwork

Выполняя вышеуказанную конфигурацию, сервер предоставляет клиенту не шифрованный трафик, что не есть хорошо с точки зрения безопасности. Ведь изначально все затевалось именно ради безопасности, а тут трафик не шифрованный используется… Непорядок выходит.

Я настоятельно рекомендую использовать HTTPS подключение к Paper­work. Пусть для этого и придется затратить немного больше времени, на получение сертификатов и настройку сервера, но оно того стоит. Хотя шифрование не везде себя оправдывает, например если сервер находится в локальной сети или на виртуальной машине, то тут можно обойтись и без него.

Если вы решили использовать HTTPS соединение с Paper­work, то начинать стоит с получения сертификатов. Быстрее и проще всего получить сертификат можно с помощью программы Cert­bot от Let’s Encrypt, выдающей бесплатные SSL сертификаты. Как получить сертификат с помощью Cert­bot подробно описано здесь.

Сертификат нужно включить в конфигурацию Nginx вместе с опциями обеспечивающими поддержку HTTPS протокола и шифрования трафика. О том как настроить Nginx на использование шифрования трафика подробно описано здесь. Ниже я приведу примерную конфигурацию Nginx с поддержкой шифрования и кое какими дополнительными опциями.

На этом все. Благодарю за внимание.