Web server

Установка и настройка веб-сервера на базе Debian 9 + Nginx + PHP-fpm + MariaDB + CMS WordPress.

1. Установка Debian 9 (Streth) Server.

Рассмотрим вариант установки шустрого веб-сервера на некий сайт site.ru 🙂

Скачиваем:

  1. Debian дистрибутив Live текущий релиз.
  2. Программу Rufus текущая версия 3.4 (Программа не требует установки).
  3. Сами non-free пакеты
  4. Крайне необходим SSH клиент, лучший это PuTTY
  5. Так же потребуется файл-менеджер, например FileZilla

ISO файл записываем его на флэшку (или иной носитель), после чего не вынимая его открываем корень в проводнике.Находим папку firmware.
В нее распаковываем содержимое заранее скачанного архива с non-free пакетами. Заходим в папку, внимательно изучая содержимое. Наша задача оставить пакеты, которые могут подойти к нашему железу, остальной можно выкинуть. Те пакеты, название которых вам ничего не говорит лучше оставить, будет меньше проблем с драйверами.
Устанавливаем систему, сам процесс установки прост, русифицирован и интуитивно понятен. Разметку диска ставим авто:

        


При выборе пакетов убираем все, оставляя только SSH-server и системные утилиты.

Добавление любого окружения рабочего стола автоматически потащит за собой установку большого количества (около 1,5 Гб) ненужных серверу пакетов (Office, Firefox, и проч.), что повлечет потерю ресурсов, потребление электроэнергии и кучу мелких неприятностей.
Решать конечно вам, лично я не рекомендую ставить иксы и графические оболочки. НО, если вам не жмет дисковое пространство, а администрирование проще производить в графической среде, то ставьте LXDE, и функционально и легко.

GRUB в главную загрузочную запись — ok., выбираете устройство — ваш диск (флэшку случайно не отметьте!).
Убираем флэшку. Завершение установки и перезагрузка.

Заходим в систему под root пользователем, лучше сразу посредством ssh терминала PuTTY .

su

проводим небольшие манипуляции, построчно вводя команды.

apt update

apt upgrade

apt install mc

apt install wget

apt install sudo

Переходим к следующему этапу.

 

Что делать если что то не получилось:
1. Проверьте в биосе с какого устройства вы загружаетесь.
2. Если не получается загрузиться с флэшки, попробуйте выбрать в Rufus схему раздела GPT и целевую систему UEFI (non-CSM).
3. Перезапишите папку с non-free пакетами, не редактируя содержимого.

 

2. Установка web сервера.

Установка Nginx.

По умолчанию оказываемся в своей папке /home/(пользователь)

Скачаем, установим PGP-ключ для репозитория Nginx:

на вопрос выбора текстового редактора по умолчанию я рекомендую выбрать mcedit.

добавляем в конец файла строки:

wget https://nginx.org/keys/nginx_signing.key

apt-key add nginx_signing.key

mcedit /etc/apt/sources.list

в редакторе в конец файла добавляем:

deb http://nginx.org/packages/debian/ stretch nginx

deb-src http://nginx.org/packages/debian/ stretch nginx

сохраняем и выходим, можем устанавливать Nginx.

apt update

apt install nginx

убедиться, что все прошло нормально можно набрав команду

nginx -v

На экране будет отображена текущая версия nginx, что то наподобие

nginx version: nginx/1.14.2

Установка PHP-fpm.

 

Изначально с Debian 9 устанавливается PHP 7.0

при попытке apt-get install php-fpm установщик должен предложить еще установить пакеты —

php-common php7.0-cli php7.0-common php7.0-fpm php7.0-json php7.0-opcache php7.0-readline. Но, к сожалению, этих пакетов нам недостаточно.

Поэтому сразу пишем команду, вручную перечисляя все нужные пакеты

apt install php-common php7.0-readline php7.0-fpm php7.0-common php7.0-cli php7.0-gd javascript-common php7.0-mysql php7.0-json libphp-phpmailer php7.0-opcache php7.0-mbstring php-mbstring php7.0-curl

узнать какая у вас версия можно набрав команду

php -v

получим ответ типа:

Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
with Zend OPcache v7.0.33-0+deb9u1, Copyright (c) 1999-2017, by Zend Technologies

с точки зрения оптимальности в скорости работы сайта и надежности лучше установить последнюю версию ветки 7.2,
хотя решать вам. Нужно понимать, что 7.0 будет работать стабильнее, ну а более новая, например 7.3 быстрее.
Текущие версии PHP можно увидеть на сайте http://php.net.

2019-02-09

Но есть одно но. Это Debian. А по мнению разработчиков стабильность прежде всего. Раз уж умные люди не включают в релизы версии 7.1,7.2 или тем более 7.3, значит не все с ними так хорошо.
Можно конечно подключить репозиторий https://packages.sury.org/php/dists/ но я не знаю того парня и вообще «оно таки вам надо ?»
Что они туда завтра положат и чем все это кончится? По мне так пусть будет чуть помедленнее, но стабильно. Ну а если вас совершенно не устраивает такая забота о стабильности вашей системы, то вы можете установить например любой форк
Ubuntu, там и версии PHP и других пакетов посвежее, и администрирование такое же как в Debian, но стабильность хуже. Вообще выбор дистрибутива это тема для отдельной статьи.

Установка MariaDB

Ситуация с сервером баз данных аналогична ситуации с PHP. В стандартных репозиториях

apt-cache policy mariadb-server

mariadb-server:
  Установлен: 10.1.37-0+deb9u1
  Кандидат:   10.1.37-0+deb9u1
  Таблица версий:
 *** 10.1.37-0+deb9u1 500
        500 http://security.debian.org/debian-security stretch/updates/main amd64 Packages
        100 /var/lib/dpkg/status
     10.1.26-0+deb9u1 500

Следуя философии Debian нужно просто выполнить

apt install mariadb-server

Но. На всякий случай, есть на официальном сайте MariaDB конфигуратор для основных версий Linux, в том числе и для Debian.
Разработчики MariaDB утверждают, что предлагаемые ими для установки пакеты стабильны. Доверять им или нет дело каждого.
Лично я считаю, что большой разницы в скорости работы не будет, и оставляю версию из официального репозитория, доверяя разработчикам Debian.
Ведь стабильность прежде всего, не так ли ? 🙂

3. Настройка сервера.

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

nginx -t

Система проверит дефолтный конфиг и скажет, что все ок, заодно показав расположение главного конфигурационного файла /etc/nginx/nginx.conf.
Нужно завести папку для версий конфигов где-нибудь в /home/user/configs и туда скидывать файлы, которые мы меняем, чередуя версии. Своего рода бэкап, Меняете конфиг ? сохраните бэкап, это должно стать привычкой. Систему названий и версий и начального расположения сами придумаете ту, которая удобнее и легче запоминается.
Остановим сервер nginx:

service nginx stop

для справки структура конфига http://nginx.org/ru/docs/beginners_guide.html#conf_structure

создаем папку для резервных конфигов

mkdir /home/user/defconf

сохраняем всегда изменяемые конфиги на всякий случай в эту папку /home/user/defconf/ , про это больше я не напоминаю.

И еще момент. Лучше сразу определиться, нужен вам SSL или нет. Сайт, настроенный на https, вызывает большее доверие посетителей, покупателей, спецслужб и проч.

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

Есть, правда, бесплатные варианты, но … собственно это тема отдельного разговора. В данной статье мы установим SSL, а где вы его купите возьмете дело ваше.

Настраиваем nginx:

mcedit /etc/nginx/nginx.conf

удаляем все, и вставляем следующее содержимое, внося необходимые корректировки:

user www-data www-data;

worker_processes auto; # Обычно пишется число ядер процессора

error_log /var/log/nginx/error.log;

pid /var/run/nginx.pid;

events {

worker_connections 2048;

use epoll;

multi_accept on;

}

include /etc/nginx/conf.d/*.conf;

Сохраняемся и выходим. Подробно останавливаться на настройках пока не будем.

Убираем все файлы в директории /etc/nginx/conf.d/
Создаем новый файл в директории site.ru.conf

так вот помечаю что нужно поменять

http {

include /etc/nginx/mime.types;

default_type application/octet-stream;

server_tokens off;

sendfile on;

sendfile_max_chunk 128k;

tcp_nopush on;

tcp_nodelay on;

reset_timedout_connection on;

client_header_timeout 3;

client_body_timeout 5;

send_timeout 5;

client_header_buffer_size 2k;

client_body_buffer_size 256k;

access_log off;

client_max_body_size 20m;

server {

listen 80;

server_name www.site.ru site.ru;

index index.php index.html;

# access_log /var/log/nginx/access.log;

error_log /var/log/nginx/error.log error;

charset utf-8;

ssi on;

return 301 https://$host:443$request_uri;

}

server {

listen 443; # порт который слушает nginx

ssl on;

ssl_certificate /etc/ssl/site.ru/site.ru.crt; # создаем директорию по адресу и туда помещаем сертификат

ssl_certificate_key /etc/ssl/site.ru/site.ru.key; # в ту же папку копируем ключ

ssl_protocols TLSv1.2 TLSv1.1 TLSv1;

keepalive_timeout 60 60;

# Сжатие данных

gzip on;

gzip_comp_level 1;

gzip_min_length 512;

gzip_buffers 8 64k;

gzip_types text/plain;

gzip_proxied any;

ssl_prefer_server_ciphers on; # Отдавать предпочтение шифрам, заданным на сервере

ssl_session_cache shared:TLS:2m; # Установка длительности TLS сессии в 2 минуты

ssl_session_timeout 2m;

server_name www.site.ru site.ru; # имя сайта

root /var/www/site.ru; # расположение сайта

index index.html index.htm index.php; # начальный документ

charset utf8;

location ~* \.(jpg|jpeg|gif|css|png|js|ico|html)$ {

access_log off;

expires max;

log_not_found off;

}

location / {

try_files $uri $uri/ /index.php?$query_string;

}

location ~*\.php$ {

# При ошибке 404 выдавать страницу, сформированную WordPress

try_files $uri =404;

# При обращении к php передавать его на интерпретацию FPM

include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

fastcgi_pass unix:/var/run/php/php7.0-fpm.sock; # !!! проверь путь до сокета

}

location ~ /\. {

deny all;

}

}

}

 

сохраняем, выходим.

Нужно создать первую страницу, заодно проверить работу php-fpm:

mkdir /var/www
mkdir /var/www/site.ru
mcedit /var/www/site.ru/index.php

Добавляем содержимое:

<?php phpinfo();

Если все ок, то:

nginx -t
systemctl start nginx

Заходим в браузере на свой сайт, смотрим. Все должно работать, появится картинка, что то вроде этой.

Убираем наш файл index.php из директории сайта из соображений безопасности, на память можно сделать скриншот или сохранить как веб страницу.

 

Что делать если что-то не получилось:
1. Проверьте настройки провайдера/роутера. Доходит до вас пинг вообще или нет.
2. Проверьте порты, настройки фаерволов, роутеров.

3. Проверьте путь до сокета php-fpm.

 

Настройка php

Найдите и измените в файле /etc/php/7.0/fpm/php.ini следующие параметры:

cgi.fix_pathinfo = 0
upload_max_filesize = 20M

Выходим, сохраняем, перезапускаем сервис

service php7.0-fpm reload

Настройка MariaDB

Для настройка базы данных мы не будем пользоваться замечательной программой phpmyadmin. Да просто.

Воспользуемся прекрасным и легким вариантом Adminer.php

Для этого заходим в папку нашего сайта

cd /var/www/site.ru
wget https://github.com/vrana/adminer/releases/download/v4.7.1/adminer-4.7.1.php
mv adminer-4.7.1.php adminer.php

 

Запустим скрипт безопасности,

/usr/bin/mysql_secure_installation

Change the root password? [Y/n]  n
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y
Thanks for using MariaDB!

 

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

mysql -u root -p 

 

Теперь построчно вводим
команды, заменяя и запоминая те данные,
которые выделены цветом

CREATE DATABASE IF NOT EXISTS database_name; CREATE USER user@localhost IDENTIFIED BY "user_password";
GRANT ALL PRIVILEGES ON database_name.* TO user@localhost;
FLUSH PRIVILEGES;
quit;
systemctl restart mariadb

И заходим по адресу http://ваш_домен/adminer.php

Входим под пользователем, которого вы создали, «Режим сопоставления » выбираем utf8_general_ci, жмем «Сохранить»

 

Что делать если что-то не получилось:
1. Если SQL выдает ошибку то можно попробовать выполнить процедуру создания базы данных, Пользователя и настройки привилегий из phpmyadmin, правда придется его для этого устанавливать.
2. Хорошо запомните введенные данные и проверьте их. Сервер должен быть обязательно «localhost».

3. В Adminer при создании базы уберите одиночные кавычки в поле названия создаваемой базы.

 

4. Установка и настройка WordPress.

Переходим в директорию нашего сайта и скачиваем wordpress

cd /var/www
wget https://wordpress.org/latest.zip
unzip latest.zip 

Русскоязычный ресурс https://ru.wordpress.org/wordpress-5.0.3-ru_RU.zip но почему то на русской версии нет возможности загрузки «latest» версии)

переносим содержимое папки wordpress в корень сайта
var/www/site.ru
и удаляем саму папку wordpress и скачанный ранее архив.

Файл
wp-config-sample.php переименовываем в wp-config.php
и открываем в mcedit, внося изменения в строки (вводим название базы данных,
имя пользователя, его пароль):

/** The name of the database for WordPress */ define(‘DB_NAME’, ‘database_name_here‘);
/** MySQL database username */ define(‘DB_USER’, ‘username_here‘);
/** MySQL database password */ define(‘DB_PASSWORD’, ‘password_here‘);

в конце файла вписываем еще строку

define(‘FS_METHOD’, ‘direct’);

сохраняемся и выходим в консоль, устанавливаем права

chown -R www-data:www-data /var/www/html
chmod -R 755 /var/www/html

входим на сайт http://localhost

заполняем поля уже введенными ранее данными в файл wp-config.php, отвечаем на несколько вопросов и дело сделано.

Сами по себе настройки понятны и просты. Хочу только остановиться не некоторых моментах:

1. Настройки постоянных ссылок.

выбираем строку Произвольно, например /%author%/%category%/%postname%/

2. Устанавливаем плагины.

Cyr-to-Lat enhanced конвертер кириллических названий в транслит.

wp-fastest-cache кэш для ускорения загрузки сайта.

All In One WordPress Security !защита сайта внимательно проходимся по настройкам сайта, затыкая дыры. Нормальный результат 200 баллов. Своевременно выполняем резервное копирование.

Не забываем что установленные плагины нужно активировать и настроить.

3. Выбираем и устанавливаем тему.

Это самый наверное запутанный вопрос. Шаблонов тысячи, все довольно симпатично смотрятся на картинке, но по факту оказываются страшненькими и какими то сырыми.

А интересные «фичи» оказывается доступны только в платной версии. Что делать ? Выбирайте ту, которая попроще и у которой больше всего звезд, не гонитесь за яркой обложкой.

Более подробно шаблонам wordpress будет посвящена отдельная статья.

 

Буду рад дополнениям и справедливым замечаниям.

 

 

 

 

 

 

3 комментария к “Web server”

  1. PS Чуть попозже добавлю конфиг для просто HTTP и вариант статьи для Ubuntu. Хотя это несложно и самим доделать 🙂

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

тринадцать − десять =