Установка и настройка серверов Linux,создание сайтов, установка и настройка Asterisk PBX, Linux для начинающих и не только.
Получать статьи этого сайта на почту:

 

17
Aug 2015
sergldom
автор
0
комментариев
Рейтинг статьи:
5
Average: 5 (2 votes)

Установка веб сервера Nginx и PHP-FPM на мини сервер Raspberry Pi

Nginx и PHP-FPM на мини сервер Raspberry Pi    Сегодня мы будем настраивать веб сервер на нашем Raspberry Pi мини сервере либо его аналоге. Плюсы такого решения это малое потребление электричества, бесшумная работа так как все охлаждение пассивное, кстати если есть источник бесперебойного питания, то роутер и данный мини сервер достаточно долго могут висеть на бесперебойнике при аварийном отключении электричества. Из минусов только недостаточная мощность для высоконагруженных сайтов, магазинов, то есть тех, перерыв в работе которых будет ощутим для бизнеса. Малые сайты, сайты визитки данный сервер потянет только так, естественно никакой ддосс атаки не выдержит, но когда берутся за ддосс и при хороших деньгах его практически никто не выдержит.

Добавляем репозиторий для установки необходимых пакетов:

Для Debian 7 Wheezy:

deb http://archive.raspbian.org/raspbian wheezy main contrib non-free
deb-src http://archive.raspbian.org/raspbian wheezy main contrib non-free
deb http://mirrordirector.raspbian.org/raspbian/ wheezy main contrib non-free rpi

Для Debian 8 Jessie:

deb http://archive.raspbian.org/raspbian jessie main contrib non-free
deb-src http://archive.raspbian.org/raspbian jessie main contrib non-free
deb http://mirrordirector.raspbian.org/raspbian/ jessie main contrib non-free rpi

Добавляем ключи репозиториев в систему:

wget -O /tmp/raspbian.public1.key http://archive.raspbian.org/raspbian.public.key && apt-key add /tmp/raspbian.public1.key
wget -O /tmp/raspbian.public2.key http://mirrordirector.raspbian.org/raspbian.public.key && apt-key add /tmp/raspbian.public2.key

Есть одна из особенностей установки версии PHP языка, которые необходимо учитывать при установке операционной системы для работы вашего сайта на мини сервере Raspberry Pi:

  • в Debian 7 Wheezy устанавливается по умолчанию версия PHP 5.4

  • в Debian 8 Jessie устанавливается по умолчанию версия PHP 5.6

<![CDATA[]]>Nginx и PHP-FPM на мини сервер Raspberry Pi<![CDATA[]]>    В моем распоряжении Raspberry Pi сервер с такими параметрами: 1Gb System Flash, 512Mb RAM и 8Gb Flash мы разобьем на 3 раздела: /var - 1Gb, /usr - 1Gb, /home - все оставшееся место и перенесем данные разделы с системной флешки.  Операционная система на мини сервере Debian 7 Wheezy либо Debian 8 Jessie которую  мы установили ранее по инструкции Установка Debian на мини сервер Raspberry Pi, а также блок питания мощностью 1A от старого мобильного телефона.

!!! Если системная флешка имеет раздел более 4 Gb можно переносом разделов не замарачиватся, так как для сервера системной флешки в 4Gb и выше достаточно.

   !!! Внимание Настоятельно рекомендую использовать для Raspberry Pi флешки для установки системы отличные от Transcend, так как при установке на Transcend система после перезагрузки либо обновления может побить файловую систему и не грузится. С Kingston и Apacer такой проблемы не наблюдал. Такая проблема была с двумя Raspberry Pi платами с несколькими Transcend картами разного размера и класса.

   Так как железо у нас не супер мощное, будем ставить легкий веб сервер Nginx, PHP-FPM, APC и MYSQL сервер баз данных с phpmyadmin.

Устанавливаем необходимые пакеты программ:

apt-get install exim4 ntp ntpdate apache2-utils nginx php5-fpm php-apc php5-curl mysql-client mysql-server php5-mysql phpmyadmin sudo

   Соглашаемся на все вопросы инсталятора нажав букву y. При установке базы данных mysql инсталятор предложит ввести и повторить пароль пользователя root баз данных, обязательно необходимо записать в надежном месте, например в блокнот, чтобы не пришлось восстанавливать.

Монтируем флешку 8gb на которой будут находится файлы и логи веб сайта

Подключаем флешку 8GB в USB порт мини сервера и проверяем видима ли флешка в системе выполнив команду:

fdisk -l

Ответ ситемы:

Disk /dev/mmcblk0: 1023 MB, 1023934464 bytes
4 heads, 16 sectors/track, 31248 cylinders, total 1999872 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

        Device Boot      Start         End      Blocks   Id  System
/dev/mmcblk0p1            8192      122879       57344    6  FAT16
/dev/mmcblk0p2          122880     1999871      938496   83  Linux

Disk /dev/sdb: 7948 MB, 7948206080 bytes
255 heads, 63 sectors/track, 966 cylinders, total 15523840 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000f1f67

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1              63    15518789     7759363+   b  W95 FAT32

   Тут мы видим, что система видит флешку /dev/sdb: размером 7948 MB(8Gb), а так же, что флешка отформатирована в Windows файловую систему Fat32.

Приступим к разбивке флешки выполнив команду:.

fdisk /dev/sdb

   Для просмотра параметров работы програмы fdisk необходимо набрать букву m, програма выдаст список возможных команд:

Command (m for help): m
Command action
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition
   l   list known partition types
   m   print this menu
   n   add a new partition
   o   create a new empty DOS partition table
   p   print the partition table
   q   quit without saving changes
   s   create a new empty Sun disklabel
   t   change a partition's system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit
   x   extra functionality (experts only)

Проверяем таблицу разделов на флешке нажав p:

Command (m for help): p

Disk /dev/sdb: 7948 MB, 7948206080 bytes
255 heads, 63 sectors/track, 966 cylinders, total 15523840 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000f1f67

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1              63    15518789     7759363+   b  W95 FAT32

Удаляем существующий раздел на флешке нажав букву d:

Command (m for help): d
Selected partition 1

Проверяем, что раздел удален набрав букву p:

Command (m for help): p

Disk /dev/sdb: 7948 MB, 7948206080 bytes
255 heads, 63 sectors/track, 966 cylinders, total 15523840 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000f1f67

   Device Boot      Start         End      Blocks   Id  System

Создаем раздел /usr размером 1Gb набрав букву n:

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p):
Using default response p
Partition number (1-4, default 1):
Using default value 1
First sector (2048-15523839, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-15523839, default 15523839): +1G

Создаем раздел /var размером 1Gb набрав букву n:

Command (m for help): n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p):
Using default response p
Partition number (1-4, default 2):
Using default value 2
First sector (2099200-15523839, default 2099200):
Using default value 2099200
Last sector, +sectors or +size{K,M,G} (2099200-15523839, default 15523839): +1G

Создаем раздел /home размером на все оставшееся место набрав букву n:

Command (m for help): n
Partition type:
   p   primary (2 primary, 0 extended, 2 free)
   e   extended
Select (default p):
Using default response p
Partition number (1-4, default 3):
Using default value 3
First sector (4196352-15523839, default 4196352):
Using default value 4196352
Last sector, +sectors or +size{K,M,G} (4196352-15523839, default 15523839):
Using default value 15523839

Проверяем созданные разделы набрав букву p:

Command (m for help): p

Disk /dev/sdb: 7948 MB, 7948206080 bytes
255 heads, 63 sectors/track, 966 cylinders, total 15523840 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000f1f67

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     2099199     1048576   83  Linux
/dev/sdb2         2099200     4196351     1048576   83  Linux
/dev/sdb3         4196352    15523839     5663744   83  Linux

Записываем внесенные в флешку изменения набрав букву w:

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

Проверяем разбивку флешки выполнив команду:

fdisk -l
...
Disk /dev/sdb: 7948 MB, 7948206080 bytes
245 heads, 62 sectors/track, 1021 cylinders, total 15523840 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000f1f67

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     2099199     1048576   83  Linux
/dev/sdb2         2099200     4196351     1048576   83  Linux
/dev/sdb3         4196352    15523839     5663744   83  Linux

Приступаем к форматированию созданных разделов выполнив команды:

mkfs.ext4 /dev/sdb1
mkfs.ext4 /dev/sdb2
mkfs.ext4 /dev/sdb3

Монтируем первый раздел в папку /mnt, копируем содержимое раздела /usr и размонтируем раздел выполнив команды:

mount /dev/sdb1 /mnt/
cp -Rp /usr/* /mnt/
umount /mnt

Монтируем второй раздел в папку /mnt, копируем содержимое раздела /var и размонтируем раздел выполнив команды:

mount /dev/sdb2 /mnt/
cp -Rp /var/* /mnt/
umount /mnt

Монтируем третий раздел в папку /mnt, копируем содержимое раздела /home и размонтируем раздел выполнив команды:

mount /dev/sdb3 /mnt/
cp -Rp /home/* /mnt/
umount /mnt

Вносим изменения в файл монтирования разделов /etc/fstab

vi /etc/fstab
...
/dev/sdb1       /usr            ext4    defaults,noatime  0       2
/dev/sdb2       /var            ext4    defaults,noatime  0       2
/dev/sdb3       /home           ext4    defaults,noatime  0       2

# монтирум папку логов в оперативную память для дольшей работы флешки:
tmpfs /var/log tmpfs rw,size=150m 0 0

   Так как системная флешка маленькая, и системные разделы /usr и /var мы скопировали на отдельную флешку, fstab настроили, тогда файлы с системной флешки удаляем и перезагружаем плату выполнив команды:

rm -rf /usr/*
rm -rf /var/*
reboot

   После перезагрузки плата загрузится с двух флешек. Обязательно необходимо сделать образы обоих флешек после завершения настройки, чтобы не пришлось заново все настривать при выходе какой-либо флешки из строя.

 

Настраиваем PHP

Вносим изменения в конфигурационный файл PHP:

vi /etc/php5/fpm/php.ini

было:

...
;cgi.fix_pathinfo=1
...
;date.timezone =
...

стало:

...
cgi.fix_pathinfo=0
...
date.timezone="Europe/Kiev"
...

Настраиваем APC для кеширования php скриптов:

vi /etc/php5/fpm/conf.d/20-apc.ini

extension=apc.so
; Включаем APC:
apc.enabled=1    
; Количество сегментов памяти:
apc.shm_segments=1      
; Размер одного сегмента памяти":
apc.shm_size=64

Настраиваем Nginx

   Настраиваем веб сервер, добавляем домен на котором будет работать сайт на нашей плате, для примера сайт будет называться webserver.loc

    Добавляем группу в которую будем добавлять пользователя под которым будет работать веб сервер выполнив команду:

addgroup --gid 10000 webserver

Добавляем пользователя с домашней директории /home/www/webserver.loc выполнив команду:

adduser --home /home/www/webserver.loc --shell /dev/null --uid 10000 --gid 10000 --disabled-password --disabled-login --gecos '' webserver

Создаем структуру директорий веб сайта:

mkdir /home/www/webserver.loc/logs
mkdir /home/www/webserver.loc/www
mkdir /home/www/webserver.loc/tmp
mkdir /home/www/webserver.loc/sessions
chown -R webserver:webserver /home/www/webserver.loc/

   Создаем конфигурационный файл webserver.loc.conf в папке pool.d для создаваемого домена webserver.loc и вносим изменения в данный файл:

vi /etc/php5/fpm/pool.d/webserver.loc.conf

[webserver.loc]
user = webserver
group = webserver

listen = 127.0.0.1:9000

listen.owner = webserver
listen.group = webserver
listen.mode = 0660

pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
chdir = /

php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f [email protected]
php_flag[display_errors] = off
php_admin_value[error_log] = /home/www/webserver.loc/logs/fpm-php.www.log
php_admin_flag[log_errors] = on
php_admin_value[upload_tmp_dir] = /home/www/webserver.loc/tmp
php_admin_value[session.save_path] = /home/www/webserver.loc/sessions
php_admin_value[open_basedir] = /home/www/webserver.loc/www:/home/www/webserver.loc/tmp:/home/www/webserver.loc/sessions:/usr/share/phpmyadmin
php_admin_value[mail.log] = /home/www/webserver.loc/logs/mail.log
php_admin_value[memory_limit] = 128M
php_admin_value[post_max_size] = 18M
php_admin_value[max_execution_time] = 300
php_admin_value[allow_url_fopen] = Off
php_admin_value[upload_max_filesize] = 18M
php_admin_value[date.timezone] = Europe/Kiev

Отключаем настройки по умолчанию для веб сервера выполнив команду:

unlink /etc/nginx/sites-enabled/default

Создаем конфигурационный файл веб сервера Nginx для нашего домена webserver.loc:

vi /etc/nginx/sites-available/webserver.loc.conf
# redirect www
server {
        listen 80;

        server_name www.webserver.loc;
        return 301 $scheme://webserver.loc$request_uri;
}
server {
        listen   80; ## listen for ipv4

        # root dir of your pages
        root /home/www/webserver.loc/www/;

        index index.php index.html index.htm;

        server_name webserver.loc;

        location / {
                try_files $uri $uri/ /index.html;
        }

        # pass the PHP scripts to FastCGI
        location ~ \.php$ {
                try_files $uri = 404;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                # php5-fpm :
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_read_timeout 300;
                fastcgi_index index.php;
                include fastcgi_params;
        }

        # deny access to .htaccess files, if Apache's document root concurs with nginx's one
        location ~ /\.ht {
                deny all;
        }

        # error and access logs
#        error_log /home/www/webserver.loc/logs/nginx-error.log crit;
        error_log /home/www/webserver.loc/logs/nginx-error.log;
        access_log /home/www/webserver.loc/logs/nginx-access.log;


#Работа с phpMyAdmin
         location /phpmyadmin {
               root /usr/share/;
               index index.php index.html index.htm;
               location ~ ^/phpmyadmin/(.+\.php)$ {
                       try_files $uri =404;
                       root /usr/share/;
                       fastcgi_pass 127.0.0.1:9000;
                       fastcgi_read_timeout 300;
                       fastcgi_index index.php;
                       fastcgi_param SCRIPT_FILENAME $request_filename;
                       include /etc/nginx/fastcgi_params;
               }
               location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {
                       root /usr/share/;
               }
        }
        location /phpMyAdmin {
               rewrite ^/* /phpmyadmin last;
        }
}

В файл /etc/nginx/nginx.conf вносим данные:

vi /etc/nginx/nginx.conf

user www-data;
 
# Число рабочих процессов nginx, рекомендуется ставить по количеству процессоров/ядер на вашем сервере
worker_processes  1;
 
# Уменьшает число системных вызовов gettimeofday(), что приводит к увеличению производительности
timer_resolution 100ms;
 
# Изменяет ограничение на число используемых файлов RLIMIT_NOFILE для рабочего процесса.
worker_rlimit_nofile 8192;
 
# Директива задаёт приоритет рабочих процессов от -20 до 20 (отрицательное число означает более высокий приоритет).
worker_priority -20;
 
# Путь к логу ошибок
error_log  /var/log/nginx/error.log;
pid         /var/run/nginx.pid;
 
events {
    worker_connections  768;
    use epoll;
    # multi_accept on;
}
 
http {
	server_names_hash_bucket_size 64;
    include       /etc/nginx/mime.types;
	default_type application/octet-stream;
	
	ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
    ssl_prefer_server_ciphers on;
 
 
# log options
    log_format main      '$remote_addr - $remote_user [$time_local] '
                         '"$request" $status $bytes_sent '
                         '"$http_referer" "$http_user_agent" '
                         '"$gzip_ratio" "$request_time"';
 
    access_log  /var/log/nginx/access.log main;
 
# Включить sendfile(). Использование sendfile() экономит системные вызовы, уменьшает число копирований данных, позволяет использовать меньше физической памяти.
    sendfile        on;
 
# Разрешаем использовать TCP_CORK в Linux, что позволяет передавать заголовок ответа и начало файла в одном пакете в Linux
    tcp_nopush      on;
 
# Задаём таймаут, в течение которого keep-alive соединение с клиентом не будет закрыто со стороны сервера. Второй параметр задаёт значение в строке "Keep-Alive: timeout=время" в заголовке ответа.
    #keepalive_timeout  0;
    keepalive_timeout  35 45;
 
# Разрешаем использовать опцию TCP_NODELAY
    tcp_nodelay         on;
 
# Запрещаем выдавать версию nginx'а в сообщениях об ошибках и в строке заголовка ответа "Server".
    server_tokens off;
 

# Разрешаем сжатие ответа методом gzip.
    gzip on;
 
#Разрешаем проверку готового сжатого файла.
    gzip_static on;
 
# Устанавливаем уровень сжатия ответа методом gzip.
    gzip_comp_level 4;
 
# Устанавливаем минимальную длину ответа, для которых будет выполняться сжатие ответа методом gzip
    gzip_min_length 1024; 
 
    gzip_disable "MSIE [1-6]\.(?!.*SV1)";
    gzip_buffers 64 8k;
    gzip_http_version 1.1;
    gzip_proxied any;
    gzip_types
        text/plain
        text/css
        text/x-js
        text/xml
        text/javascript
        application/javascript
        application/x-javascript
        application/json
        aplication/xml
        application/xml+rss
        application/vnd.ms-fontobject
        application/x-font-ttf
        font/ttf
        font/opentype;  
	
    proxy_connect_timeout        600 ;
    proxy_send_timeout           600 ;
    proxy_read_timeout           600 ;
    send_timeout                 600 ;
	
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

 

Внимание!!! Если при перезагрузке веб сервера выдает ошибку:

Restarting nginx: nginx: [emerg] could not build the server_names_hash, you should increase server_names_hash_bucket_size: 32
nginx: configuration file /etc/nginx/nginx.conf test failed

Необходимо в секцию http добавляем параметр server_names_hash_bucket_size:

http {
    server_names_hash_bucket_size  64;
    ...

   Для проверки работы PHP скриптов на сервере, создаем в директории сайта файл index.php с содержимым:

<?php phpinfo(); ?>

Можно этот же файл создать выполнив команду:

echo '<?php phpinfo(); ?>' > /home/www/webserver.loc/www/index.php

   Включаем домен создав символическую ссылку и перезагружаем Nginx и php5-fpm выполнив команды:

ln -s /etc/nginx/sites-available/webserver.loc.conf /etc/nginx/sites-enabled/
/etc/init.d/nginx restart
/etc/init.d/php5-fpm restart

   После этого можем открывать в браузере адрес вашего домена webserver.loc и посмотреть на открывшуюся страницу с параметрами PHP.

   Внимание!!!  Если у Вас установлена операционная система Debian Jessie и открывается белый экран вместо страницы с информацией о PHP, необходимо внести изменения в файл /etc/nginx/fastcgi_params:

vi /etc/nginx/fastcgi_params
fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
...

Перегружаем Nginx WEB сервер выполнив команду:

/etc/init.d/nginx restart

   Если необходимо открыть phpmyadmin для работы с Mysql, открываем в браузере адрес и вводим логин root и пароль который Вы вводили во время установки mysql сервера:

http://webserver.loc/phpmyadmin/

   Сегодня мы установили веб и бд сервер на одноплатном компьютере Raspberry Pi либо его аналоге например Orange Pi достаточный для работы небольшого веб сайта, телефонной АТС.

   С Вами был Сергей Лазаренко.

   Сделаем небольшой перерыв и посмотрим видео как можно сделать баню в походе:

 

Рейтинг статьи: 

5
Average: 5 (2 votes)

Вам понравилась статья? Хотите получать уведомления о выходе новых статей с этого сайта на свой почтовый адрес? Подписывайтесь пожалуйста. Введите свой почтовый адрес и нажмите кнопку Хочу получать статьи!

<![CDATA[]]><![CDATA[]]>

 

*Адреса электронной почты не разглашаются и не предоставляются третьим лицам для коммерческого или некоммерческого использования.

 

 
 

 

Add new comment

Filtered HTML

  • Search Engines will index and follow ONLY links to allowed domains.

  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Lines and paragraphs break automatically.

Plain text

  • Allowed HTML tags: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Web page addresses and e-mail addresses turn into links automatically.
  • Lines and paragraphs break automatically.
  • Search Engines will index and follow ONLY links to allowed domains.

CAPTCHA
This question is for testing whether you are a human visitor and to prevent automated spam submissions.