понедельник, 1 сентября 2014 г.

Rasberry PI: Делаем мини веб сервер.

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




Стартовый комплект:
Rasberry PI model B - на роль собственно сервера;
Flash SD card 8Gb - флешка для операционной системы;
Flash USB 4Gb  -  usb флешка в качестве отдельной области для хранения данных будущего сайта (не обязательно);

Итак начали...

Подрузамеваем что операционная система уже установлена, если же нет то устанавливаем с помощью NOOBS. В качестве ОС был выбран RASPBIAN в основном потому что мне он был знаком лучше других. Хотя есть и альтернативы.

Сразу по завершении установки имеет смысл сделать некоторые настройки с помощью команды:
raspi-config
А именно, устанавливаем пароль для пользователя pi (именно от его имени мы будем работать ), включаем SSH доступ (что бы иметь возможность удалённого управления системой) и включаем режим максимальной производительности "Turbo" (последнее весьма желательно и далее по тексту я объясню почему).  На этом предварительные настройки ОС можно считать завершёнными и можно приступать к установке самого веб сервера.

Подготовка USB накопителя.

Это пункт выполнять не обязательно, если у вас достаточно емкая SD карта, в таком случае этот пункт можно просто пропустить и начать с установки ПО сервера.  Я же хотел иметь отдельный и отсоединяемый раздел для данных.

Первым делом создаём рабочий каталог для веб сервера (тут будут хранится файлы CMS).
sudo mkdir /var/www
По умолчанию Nginx сервер у малинки использует другой каталог, но мне этот привычнее.

Монтируем USB флешку (/dev/sda1) в созданный каталог. USB диск должен быть соответствующим образом подготовлен, отформатирован в файловую систему ext3 или ext4.
sudo mount /dev/sda1 /var/www
Если ошибок нет можем прописать  авто монтирование  /dev/sda1 при загрузке системы в файле /etc/fstab. Дописываем в конец файла строчку:
/dev/sda1  /var/www   ext4   rw,default   0   0

Установка ПО сервера.

В качестве по веб сервера у нас будет выступать сборка: nginx + php5-fpm + memcached + vsftpd. Всё эти программы есть в стандартной репозитории RASPBIAN. В качестве CMS будет использован Drupal 7. 
sudo apt-get install mc nginx memcached php5-fpm php5-gd php5-sqlite php5-memcached php5-memcache php5-curl libmemcache-dev php5-dev sftpd 
После окончании установки ПО можно приступать к настройке. Что бы система заработала нужно настроить nginx исходя из выбранной CMS. Я использовал Drupal 7. Конфигурационный файл для него можно взять на сайте самого Nginx.
Также нужно настроить sftpd, он нужен для установки модулей через веб интерфейс Друпала. Хотя если устанавливать модули вручную без него вполне можно обойтись. Его конфигурационный файл я  приводить не буду, он вполне доступен в интернете, как и инструкция по его настройке. Как настроить memcached подробно можно прочитать тут.

Пример конфигурационного файла для Drupal7.
server {
listen   80;
server_name youdomen.ru;
root /var/www;
index index.php index.html index.htm;
gzip_static on;
         location = /favicon.ico {
                log_not_found off;
                access_log off;
        }
         location = /robots.txt {
                allow all;
                log_not_found off;
        }
location / {
try_files $uri @rewrite;
}
location ~ (^|/)\. {
                return 403;
        }
        location ~* \.(txt|log)$ {
                allow 192.168.0.0/16;
                deny all;
        }
        location ~ \..*/.*\.php$ {
                return 403;
        }
        location ~ ^/sites/.*/private/ {
                return 403;
}
location @rewrite {
                rewrite ^ /index.php;
        }
location /doc/ {
alias /usr/share/doc/;
autoindex on;
allow 127.0.0.1;
allow ::1;
deny all;
}
location ~ \.php$ {
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                include fastcgi_params;
                fastcgi_param SCRIPT_FILENAME $request_filename;
                fastcgi_intercept_errors on;
                fastcgi_pass unix:/var/run/php5-fpm.sock;
}}

Настройка PHP. 

Как правило работает изкоробки. Но некоторые изменения всё же стоит сделать.
В php.ini нужно изменить параметр, я указал 300 сек.
max_execution_time = 300;
Он отвечает за максимальную продолжительность выполнения PHP скриптов на сервере, если скрипт будет выполнятся слишком долго, его  выполнение будет прервано с ошибкой.

Drupal 7

Установка самого Друпал-а особых проблем не вызывает, она ничем не отличается от установки его на любой другой хостинг. Единственная сложность с которой я столкнулся это остановка скрипта по таймауту, Малинка работала довольно медленно. Это можно исправить увеличив параметр в php.ini max_execution_time;

Drupal 7 на Rasberry Pi

Производительность.

В начале я обещал рассказать зачем нужно переводить Rasberry Pi в турбо режим. Сейчас пришло время объяснить. Малинка производительностью не блещет, особенно при выполнении php (загрузка под 100%), поэтому мне пришлось поднять производительность до 1000Mhz (включить турбо режим) и использовать memcached. Если померить тестом 7z архиватора, процессор даже в турбо режиме, не выдаёт более 416 MIPS. Что примерно равняется Celeron 2000 (Northwood)  выпуска 2002 года, с поправкой на частоту (Celeron 2000 2Ghz показывает около 800-900 MIPS).

Установленный Drupal7 работает, но работает довольно медленно, ускорить его можно при помощи кеширования в самом Drupal + использованием  кеширования php (memcached). При использовании memcache, php уже не генерируется повторно, а выдаётся из кеша. Производительность, скорость открытия страниц вырастает в разы.
Сам Drupal 7 может использовать memcached, для  этого нужно только установить и настроить модуль Memcache API and Integration.

После всех этих манипуляций с кешированием, скорость генерации страницы: первый раз 6 сек, все последующие менее 2-х сек.

ЗЫ: Надо отметить что хоть малинка и тянет такие достаточно тяжёлые CMS как Drupal 7 или OwnCloud 7, её производительность недостаточна для полноценного функционирования при подобной нагрузке. Возможно определённую роль сыграл не самый оптимальный выбор ПО для веб сервера, это ещё нужно будет выяснить.




Комментариев нет: