Сьогодні ми налаштуємо веб-сервер на нашому мікро сервері Raspberry Pi або його аналогу. Переваги такого розчину є низьким споживанням електроенергії, безшумна операція, оскільки все охолодження проходить пасивно, до речі, якщо є джерело безперебійного живлення, то маршрутизатор і цей міні-сервер може повісити на безперервному пристрої протягом тривалого часу в разі аварійного відключення електроенергії. З недоліків, для бізнесу буде помітно тільки недостатня потужність для сайтів високого навантаження, магазинів, тобто ті, які перебої будуть помітні. Малі сайти, візитні картки, цей сервер витягнеться тільки так, звичайно, не атака DDoS не витримає, але коли вони приймають DDoS і з хорошими грошима, майже ніхто не може протистояти йому.
Додайте репозиторію для установки необхідних пакетів:
Для Debian 7 Керези:
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 Джессі:
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.
У моєму розпорядженні Raspberry Pi сервер з наступними параметрами: 1Gb System Flash, 512Mb оперативної пам'яті і 8Gb Flash ми поділимо на 3 розділи: /var - 1Гб, /usr - 1Гб, /home - всі залишилися місця і переводять ці розділи з системи флеш-накопичувача. Операційна система на міні сервері Debian 7 Wheezy або Debian 8 Jessie, який ми встановили раніше відповідно до інструкцій Встановіть Debian на міні-сервері Raspberry PiА також джерело живлення 1A від старого мобільного телефону.
!! Якщо система флеш-накопичувача має перегородку більше 4 Гб, можна перенести розділи без отримання брудних, так як для сервера система USB-накопичувача в 4Гб і вище достатньо.
!! До уваги. Я настійно рекомендую за допомогою флеш-накопичувача Raspberry Pi для установки систем, крім Transcend, як при встановленні на Transcend, система після перезавантаження або оновлення може збити файлову систему і не завантажується. Кінгстон і Apacer не мають цієї проблеми. Ця проблема була з двома дошками Малина Пі з декількома транскендом різних розмірів і класів.
Оскільки обладнання не є потужним, ми встановимо легкий веб-сервер 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, інсталятор підкаже вам ввести і повторити пароль бази даних користувача, обов'язково напишіть його в безпечне місце, наприклад, у блокноті, щоб ви не повинні відновити його.
Встановити 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
Для перегляду параметрів програми диска необхідно набрати літеру. 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
Встановити перший розділ в папку /mntCopy зміст розділу /usr І ми не монтуємо розділ за виконанням команд:
mount /dev/sdb1 /mnt/ cp -Rp /usr/* /mnt/ umount /mnt
Встановіть другий розділ в папку /mntCopy зміст розділу /var І ми не монтуємо розділ за виконанням команд:
mount /dev/sdb2 /mnt/ cp -Rp /var/* /mnt/ umount /mnt
Встановіть третій розділ в папку /mntCopy зміст розділу /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 налаштовано, потім файли з системи USB-накопичувача видаляються і перезавантажуються за допомогою виконання команд:
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 домен-created 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 для нашого вебсервера.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, ми відкриваємо адресну адресу і вводимо кореневий логін і пароль, який ви входите під час встановлення сервера mysql:
http://webserver.loc/phpmyadmin/
Сьогодні ми встановили веб-сервер бази даних на одному платному комп'ютері Raspberry Pi або його аналогу (наприклад, Orange Pi) достатній для роботи невеликого веб-сайту, телефона PBX.
Я був з вами. Сергій Лазаренко.
Дайте коротку поломку і подивіться відео про те, як зробити ванну в таборі:



Про нас