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

Статья возможно устарела. По крайней мере некоторые ссылки точно.

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

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

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

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

paperwork ubuntuPaperwork написан на PHP, использует в работе MySQL базы данных, управляется серверами Apache или Nginx и сравнительно просто устанавливается, как на свежий сервер, так и на уже используемый. У меня Paperwork работает совместно с MariaDB, сервером Nginx, а также PHP версии 7.1.1 собранным из исходников. Основой является Ubuntu Server 16.04.

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

apt-get update && apt-get install -y npm zip curl wget git nodejs nodejs-legacy

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

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

Допустим что MariaDB уже стоит, в таком случае нам нужно создать базу данных, которую Paperwork будет использовать в своей работе.

Сейчас мы создадим базу данных - paperwork, если имя не устраивает, можно задать свое, изменив его в вводимых командах. То же касается пользователя базы и его пароля, в командах я буду использовать 'username' и 'password' соответственно.

# Войти в консоль mariadb
mysql -u root -p

# Создаем пользователя базы и пароль
create user 'username@localhost' identified by 'password';

# Создаем базу данных - paperwork
create database paperwork default character set utf8 collate utf8_general_ci;

# Разрешаем пользователю управлять созданной базой данных
grant all privileges on paperwork.* to username@localhost identified by 'password' with grant option;

# Применяем изменения
flush privileges;

# Выходим из консоли
quit

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

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

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

apt-get install php7.0-mysql php7.0-fpm php7.0-cli php7.0-gd php7.0-mcrypt php-xml -y

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

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

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

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

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

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

Some settings on your machine make Composer unable to work properly.
Make sure that you fix the issues listed below and run this script again:

The phar extension is missing.
Install it or recompile php without --disable-phar

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

[PDOException]         
could not find driver

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

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

Должно быть:

Поддержка GD (насчет нужности ВСЕХ всех директорий не уверен) 
--with-gd 
--with-jpeg-dir=/usr 
--with-png-dir=/usr 
--with-webp-dir=/usr 
--with-xpm-dir=/usr 
--with-freetype-dir=/usr 
 
Поддержка Mcrypt
--with-mcrypt

Поддержка PDO_MYSQL
--with-pdo-mysql=mysqlnd

Не должно быть:
--disable-phar

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

./configure --prefix=/usr/local/php7 --with-config-file-path=/etc/php7/conf --with-fpm-user=nginx --with-fpm-group=nginx --enable-fpm --enable-mysqlnd --enable-mbstring --enable-sockets --enable-opcache --enable-zip --enable-exif --enable-calendar --disable-ipv6 --disable-rpath --with-mcrypt --with-mhash --with-openssl --with-zlib --with-curl --with-gd --with-jpeg-dir=/usr --with-png-dir=/usr --with-webp-dir=/usr --with-xpm-dir=/usr --with-freetype-dir=/usr --with-mysql-sock=/var/run/mysqld/mysqld.sock --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-bz2 --without-sqlite3 --without-pdo-sqlite --without-pear

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

apt-get install libmcrypt-dev libreadline-dev -y

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

configure: error: mcrypt.h not found. Please reinstall libmcrypt.

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

ln -s /usr/local/php7/bin/phar /bin/phar

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

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

Some settings on your machine make Composer unable to work properly.
Make sure that you fix the issues listed below and run this script again:

The allow_url_fopen setting is incorrect.
Add the following to the end of your `php.ini`:
    allow_url_fopen = On

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

allow_url_fopen = On

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

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

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

apt-get install nginx -y

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

nginx.conf
### nginx.conf ###
### Располагается в /etc/nginx/

    # Если используется другой пользователь то измените.
    user                        www-data;

    worker_processes            1;
    worker_priority             -5;

    error_log                   /var/log/nginx/error.log crit;
    pid                         /var/run/nginx.pid;

events {

    worker_connections          1024;
    multi_accept                on;
    use                         epoll;

}

http {

    include                     mime.types;
    default_type                application/octet-stream;

    sendfile                    on;
    sendfile_max_chunk          128k;
    tcp_nopush                  on;

    tcp_nodelay                 on;
    keepalive_timeout           10;
    keepalive_requests          100;

    reset_timedout_connection   on;
    client_body_timeout         5;
    client_header_timeout       5;

    client_header_buffer_size   2k;
    large_client_header_buffers 4 16k;
    client_body_buffer_size     256k;
    client_max_body_size        13m;
    send_timeout                3;

    access_log                  off;
    server_tokens               off;

    include                     /etc/nginx/sites-enabled/*;

}

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

Установка Composer

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

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

curl -sS https://getcomposer.org/installer | php

All settings correct for using Composer
Downloading...
Composer (version 1.4.2) successfully installed to: /root/composer.phar
Use it: php composer.phar

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

mv composer.phar /usr/local/bin/composer

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

composer

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

   ______
  / ____/___  ____ ___  ____  ____  ________  _____
 / /   / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
                    /_/
Composer version 1.4.2 2017-05-17 08:17:52

Usage:
  command [options] [arguments]

Options:
  -h, --help                     Display this help message
  -q, --quiet                    Do not output any message
  -V, --version                  Display this application version
      --ansi                     Force ANSI output
      --no-ansi                  Disable ANSI output
  -n, --no-interaction           Do not ask any interactive question
      --profile                  Display timing and memory usage information
      --no-plugins               Whether to disable plugins.
  -d, --working-dir=WORKING-DIR  If specified, use the given directory as working directory.
  -v|vv|vvv, --verbose           Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug

Available commands:
  about           Short information about Composer.
  archive         Create an archive of this composer package.
  browse          Opens the package's repository URL or homepage in your browser.
  clear-cache     Clears composer's internal package cache.
  clearcache      Clears composer's internal package cache.
  config          Set config options.
  create-project  Create new project from a package into given directory.
  depends         Shows which packages cause the given package to be installed.
  diagnose        Diagnoses the system to identify common errors.
  dump-autoload   Dumps the autoloader.
  dumpautoload    Dumps the autoloader.
  exec            Execute a vendored binary/script.
  global          Allows running commands in the global composer dir ($COMPOSER_HOME).
  help            Displays help for a command
  home            Opens the package's repository URL or homepage in your browser.
  info            Show information about packages.
  init            Creates a basic composer.json file in current directory.
  install         Installs the project dependencies from the composer.lock file if present, or falls back on the composer.json.
  licenses        Show information about licenses of dependencies.
  list            Lists commands
  outdated        Shows a list of installed packages that have updates available, including their latest version.
  prohibits       Shows which packages prevent the given package from being installed.
  remove          Removes a package from the require or require-dev.
  require         Adds required packages to your composer.json and installs them.
  run-script      Run the scripts defined in composer.json.
  search          Search for packages.
  self-update     Updates composer.phar to the latest version.
  selfupdate      Updates composer.phar to the latest version.
  show            Show information about packages.
  status          Show a list of locally modified packages.
  suggests        Show package suggestions.
  update          Updates your dependencies to the latest version according to composer.json, and updates the composer.lock file.
  validate        Validates a composer.json and composer.lock.
  why             Shows which packages cause the given package to be installed.
  why-not         Shows which packages prevent the given package from being installed.

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

Установка Paperwork

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

cd /var/www

Клонируем Paperwork с github.

git clone -b 1 https://github.com/twostairs/paperwork.git

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

cd ./paperwork/frontend/

Находясь в каталоге frontend запускаем сomposer, он установит все необходимые зависимости.

composer install

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

cd ./app/storage/config

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

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

cp default_database.json database.json
cp default_paperwork.json paperwork.json

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

PDOException: SQLSTATE[HY000] [1045] Access denied for user 'paperwork'@'localhost' (using password: YES)
Please configure your database connection correctly, or use the sqlite memory driver (-M). Skipping \Illuminate\Support\Facades\Password.
PDOException: SQLSTATE[HY000] [1045] Access denied for user 'paperwork'@'localhost' (using password: YES)
Please configure your database connection correctly, or use the sqlite memory driver (-M). Skipping \Illuminate\Support\Facades\Schema.

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

cat database.json
{
    "driver": "mysql",
    "database": "paperwork",
    "host": "localhost",
    "username": "paperwork",
    "password": "paperwork",
    "port": 3306

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

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

nano database.json

username - заменяем на имя пользователя базы данных
password - заменяем на пароль пользователя
paperwork - имя базы данных (если назвали по своему)

host, port, driver - оставляем по умолчанию

    "driver": "mysql",
    "database": "paperwork",
    "host": "localhost",
    "username": "username",
    "password": "password",
    "port": 3306

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

nano setup

Это нужно для того, чтобы не заполнять все значения вручную через веб-интерфейс, после первого запуска Paperwork. Когда будем выполнять миграцию, все это будет сделано автоматически и при первом запуске сразу появится форма входа / регистрации. Это так называемая "установка без использования Setup Wizard".

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

cd /var/www/paperwork/frontend

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

php artisan migrate

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

Migration table created successfully.
Migrated: 2014_07_22_194050_initialize
Migrated: 2014_07_24_103915_create_password_reminders_table
Migrated: 2014_10_08_203732_add_visibility_to_tags_table
Migrated: 2015_01_21_034728_add_admin_to_users
Migrated: 2015_05_05_094021_modify_tag_user_relation
Migrated: 2015_05_22_220540_add_version_user_relation
Migrated: 2015_06_15_224221_add_tag_parent
Migrated: 2015_06_30_125536_add_sessions_table
Migrated: 2015_07_29_130508_alter_versions
Migrated: 2016_10_21_224100_fix_timestamps_for_postgres_again

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

npm install -g gulp bower

Установим нужные зависимости.

npm install

Установим зависимости для bower.

bower install --allow-root

Проводим финальную сборку.

gulp

Должно быть примерно так.

[16:48:09] Using gulpfile /var/www/paperwork/frontend/gulpfile.js
[16:48:09] Starting 'compileLessBootstrapTheme'...
[16:48:09] Finished 'compileLessBootstrapTheme' after 48 ms
[16:48:09] Starting 'compileLessPaperworkThemeV1'...
[16:48:09] Finished 'compileLessPaperworkThemeV1' after 9.28 ms
[16:48:09] Starting 'compileLessFreqselector'...
[16:48:09] Finished 'compileLessFreqselector' after 4.23 ms
[16:48:09] Starting 'compileLessTypeahead'...
[16:48:09] Finished 'compileLessTypeahead' after 16 ms
[16:48:09] Starting 'less'...
[16:48:09] Finished 'less' after 66 μs
[16:48:09] Starting 'lint'...
[16:48:09] Finished 'lint' after 46 ms
[16:48:09] Starting 'compileJsBootstrap'...
[16:48:09] Finished 'compileJsBootstrap' after 6.91 ms
[16:48:09] Starting 'compileJsPaperwork'...
[16:48:09] Finished 'compileJsPaperwork' after 31 ms
[16:48:09] Starting 'compileJsPaperworkNative'...
[16:48:09] Finished 'compileJsPaperworkNative' after 15 ms
[16:48:09] Starting 'compileJsAngular'...
[16:48:09] Finished 'compileJsAngular' after 27 ms
[16:48:09] Starting 'compileJsJquery'...
[16:48:09] Finished 'compileJsJquery' after 5.44 ms
[16:48:09] Starting 'compileJsTagsinput'...
[16:48:09] Finished 'compileJsTagsinput' after 21 ms
[16:48:09] Starting 'compileJsLibraries'...
[16:48:09] Finished 'compileJsLibraries' after 18 ms
[16:48:09] Starting 'compileJsLtIe9Compat'...
[16:48:09] Finished 'compileJsLtIe9Compat' after 8.37 ms
[16:48:09] Starting 'compileJsLtIe11Compat'...
[16:48:09] Finished 'compileJsLtIe11Compat' after 3.11 ms
[16:48:09] Starting 'js'...
[16:48:09] Finished 'js' after 59 μs
[16:48:09] Starting 'concatLibCSS'...
[16:48:10] Finished 'concatLibCSS' after 31 ms
[16:48:10] Starting 'default'...
[16:48:10] Finished 'default' after 21 μs

Осталось создать хост-файл Nginx, для обслуживания Paperwork. Создадим файл paperwork в директории /etc/nginx/sites-available.

nano /etc/nginx/sites-available/paperwork

Минимальная конфигурация будет следующая.

  • Имя сайта я указал как paperwork.test.com, вы естественно используете свое имя, например поддомен от основного доменного имени.
  • В качестве корневой директории Paperwork выступает frontend/public именно она отвечает за доступ к системе. Поэтому в значении root указываем ее полный адрес /var/www/paperwork/frontend/public.
  • Что касается сокета /run/php/php7.0-fpm.sock, то он используется по умолчанию, если PHP устанавливался из системных репозиториев Ubuntu. Соответственно если нужно использовать свой сокет, то указываем его.
server {

    # Порт который будет слушать nginx
    listen      80;

    # Имя сайта
    server_name paperwork.test.com;

    # Корневая директория и индексный файл
    root        /var/www/paperwork/frontend/public;
    index       index.php;

    # Лог-файлы
    access_log  /var/www/paperwork/logs/access.log;
    error_log   /var/www/paperwork/logs/error.log;
	
    location / {
        try_files $uri $uri/ /index.php?$args;
    }
 
    location ~ \.php$ {

        try_files $uri =404;

        include       fastcgi_params;
        fastcgi_index index.php;
        fastcgi_pass  unix:/run/php/php7.0-fpm.sock;
        fastcgi_param SCRIPT_FILENAME
                      $document_root$fastcgi_script_name;
    }
    
}

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

ln -s /etc/nginx/sites-available/paperwork /etc/nginx/sites-enabled/paperwork

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

mkdir /var/www/paperwork/logs

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

chown nginx:nginx -R /var/www/paperwork

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

systemctl restart nginx
systemctl restart php7.0-fpm

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

paperwork install

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

paperwork ubuntu

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

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

paperwork ubuntu

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

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

nano /var/www/paperwork/frontend/app/config/app.php

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

Например вот так:

<?php

error_reporting(E_ALL ^ E_DEPRECATED);

return array(

        /*
        |--------------------------------------------------------------------------
        | Application Debug Mode
        |--------------------------------------------------------------------------
        |
        | When your application is in debug mode, detailed error messages with
        | stack traces will be shown on every error that occurs within your
        | application. If disabled, a simple generic error page is shown.
        |
        */

        'debug' => true,

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

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

paperwork ubuntu

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

disable_functions = system, exec, phpinfo
Уберите exec
disable_functions = system, phpinfo

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

paperwork ubuntu

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

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

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

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

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

### хост-файл paperwork ###

server {
    listen 80;
    server_name paperwork.test.com;
    return 301 https://$server_name$request_uri;
}

server {

    # Порт который будет слушать nginx
    listen      443 ssl http2;

    # Имя сайта
    server_name paperwork.test.com;

    # Корневая директория и индексный файл
    root        /var/www/paperwork/frontend/public;
    index       index.php;

    # Лог-файлы
    access_log  /var/www/paperwork/logs/access.log;
    error_log   /var/www/paperwork/logs/error.log;
	
    # Сертификаты и ключи
    ssl_certificate         /etc/letsencrypt/live/paperwork.test.com/fullchain.pem;
    ssl_certificate_key     /etc/letsencrypt/live/paperwork.test.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/paperwork.test.com/chain.pem;
    
    # SSL - сессия
    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:50m;
    ssl_session_tickets off;

    # Используемые протоколы
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
	
    # Наборы шифров
    ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
    
    # Приоритет серверных шифров
    ssl_prefer_server_ciphers on;

    # Включение HSTS (Strict-Transport-Security)(15768000 seconds = 6 months)
    add_header Strict-Transport-Security max-age=15768000;

    # OCSP Stapling
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8 8.8.4.4 valid=300s;
	
    location ~ /\. {
        deny all;
    }
	
    location ~ /.well-known {
        allow all;
    }

    location = /favicon.(ico|png) {
        access_log off;
	log_not_found off;
    }
	
    location / {
        try_files $uri $uri/ /index.php?$args;
    }
 
    location ~ \.php$ {

        try_files $uri =404;

        include       fastcgi_params;
        fastcgi_index index.php;
        fastcgi_pass  unix:/run/php/php7.0-fpm.sock;
        fastcgi_param SCRIPT_FILENAME
                      $document_root$fastcgi_script_name;
    }
    
    # Gzip-сжатие контента
    gzip                        on;
    gzip_comp_level             6;
    gzip_min_length             512;
    gzip_buffers                8 64k;

    # Типы контента для gzip-сжатия
    gzip_types
        text/css
        text/xml
        text/jav$
        text/plain
        application/xml
        application/json
        application/xml+rss
        application/javascript
        application/x-javascript

    gzip_proxied                any;
    gzip_disable                "msie6";
	
    # Кэширование файлов
    location ~* ^.+\.(js|css|png|jpg|jpeg|gif|ico)$ {
        expires       30d;
        access_log    off;
        log_not_found off;
    }
}

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

Ответить:

Please enter your comment!
Please enter your name here