Полный вариант статьи находится тут. Алгоритм установки проверен пошагово на железе.
Рассмотрим вариант LEMP (Linux + Nginx + MariaDB + PHP) + WP установки веб-сервера на некий сайт site.ru. На момент написания данного текста последовательность действий проверена на «железном» сервере и должна работать у вас тоже. Исключения возможны по множеству причин, но в 90% случаев алгоритм и для вас будет верным. Конфиги не идеальны, получив рабочий вариант сервера вы можете его оптимизировать сколько вам будет угодно, главное делайте бэкап конфигов и бд.
1. Установка OS Debian 10
Скачиваем:
- Сами non-free пакеты
- Крайне необходим SSH клиент, лучший это PuTTY
- Кому то потребуется FTP файл-менеджер, например FileZilla
ISO файл записываем его на флэшку (или иной носитель), после чего не вынимая его открываем корень в проводнике. Находим папку firmware.
В нее распаковываем содержимое заранее скачанного архива с non-free пакетами. Заходим в папку, внимательно изучая содержимое. Наша задача оставить пакеты, которые могут подойти к нашему железу, остальной можно выкинуть. Те пакеты, название которых вам ничего не говорит лучше оставить, будет меньше проблем с драйверами.
Устанавливаем систему, сам процесс установки прост, русифицирован и интуитивно понятен. Разметку диска ставим авто:
При выборе пакетов убираем все, оставляя только SSH-server и системные утилиты. В этом случае не будет установлена графическая оболочка. Если вам без нее сложно, добавьте LXDE, она самая легкая и близка дизайном к привычной и всеми горячо любимой ОС.
Добавление любого окружения рабочего стола автоматически потащит за собой установку большого количества (около 1,5 Гб) ненужных серверу пакетов (Office, Firefox, и проч.), что повлечет потерю ресурсов, потребление электроэнергии и кучу мелких неприятностей.
Но решать конечно вам, лично я не рекомендую ставить иксы и графические оболочки.
GRUB в главную загрузочную запись — ok., выбираете устройство — ваш диск (флэшку случайно не отметьте!).
Убираем флэшку. Завершение установки и перезагрузка.
Заходим в систему под root пользователем, лучше сразу посредством ssh терминала PuTTY .
После установки
Проводим небольшие манипуляции, построчно вводя команды. Часть из них избыточна, потому что мы ставим свежую систему. Но на всякий случай.
Shell
su
apt-get update
apt-get upgrade
apt-get install mc
apt-get install wget
apt-get install sudo
sudo adduser USER sudo (вместо USER имя пользователя)
sudo apt-get install software-properties-common dirmngr
sudo reboot
Переходим к следующему этапу.
Что делать если что то не получилось:
- Проверьте в биосе с какого устройства вы загружаетесь.
- Если не получается загрузиться с флэшки, попробуйте выбрать в Rufus схему раздела GPT и целевую систему UEFI (non-CSM).
- Перезапишите папку с non-free пакетами, не редактируя содержимого.
2. Установка web сервера Nginx + PHP-fpm + Maria DB.
Установка Nginx
По умолчанию оказываемся в своей папке /home/(пользователь)
Скачаем, установим PGP-ключ для репозитория Nginx:
Shell
wget https://nginx.org/keys/nginx_signing.key
sudo apt-key add nginx_signing.key
Shell
sudo add-apt-repository 'deb http://nginx.org/packages/debian/ buster nginx'
Или вручную правим файл . На вопрос выбора текстового редактора по умолчанию я рекомендую выбрать mcedit
Shell
sudo mcedit /etc/apt/sources.list
и добавляем в конец файла строки:
Shell
deb http://nginx.org/packages/debian/ buster nginx
deb-src http://nginx.org/packages/debian/ buster nginx
сохраняем и выходим. Далее:
Shell
sudo apt-get update
sudo apt-get install nginx
убедиться, что все прошло нормально можно набрав команду:
Shell
sudo nginx -v
На экране будет отображена текущая версия nginx. Вариант просто «nginx -v» работать не будет.
Установка PHP-fpm
Изначально с Debian 10 устанавливается PHP 7.3
Для установки php-fpm установщик должен предложить еще установить пакеты —
php-common php7.3-cli php7.3-common php7.3-fpm php7.3-json php7.3-opcache php7.3-readline, но и это не все нужные нам пакеты.
поэтому сразу пишем:
Shell
sudo apt-get install php-common php7.3-cli php7.3-common php7.3-fpm php7.3-json php7.3-opcache php7.3-readline php7.3-gd javascript-common php7.3-mysql libphp-phpmailer php7.3-mbstring php-common php7.3-curl
узнать какая у вас версия можно набрав команду:
Shell
php -v
получим ответ типа
Shell
PHP 7.3.11-1~deb10u1 (cli) (built: Oct 26 2019 14:14:18) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.11, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.3.11-1~deb10u1, Copyright (c) 1999-2018, by Zend Technologies
Текущие версии PHP можно увидеть на сайте https://php.net. Версии упакованы в архивы с исходными файлами, установку из исходников мы пока рассматривать не будем.
Но есть одно но. Это Debian, стабильность прежде всего. Раз уж команда разработчиков не включает в релизы последние версии, потому что с ними может быть не всё так хорошо. Вот проверят, тогда… Впрочем решайте сами 🙂
Можно конечно подключить репозиторий https://packages.sury.org/php/dists/, но я не знаю того парня, и вообще «оно таки вам надо ?» 🙂
Что они туда завтра положат и чем все это кончится? По мне так пусть будет чуть помедленнее, но стабильно.
Установка MariaDB
Ситуация с сервером баз данных аналогична ситуации с PHP. В стандартных репозиториях
Shell
sudo apt-cache policy mariadb-server
mariadb-server:
Установлен: (отсутствует)
Кандидат: 1:10.3.22-0+deb10u1
Таблица версий:
1:10.3.22-0+deb10u1 500
500 http://deb.debian.org/debian buster/main amd64 Packages
Следуя философии Debian нужно просто выполнить:
Shell
sudo apt-get install mariadb-server
Но. На всякий случай, есть на официальном сайте MariaDB конфигуратор для основных версий Linux, в том числе и для Debian.
Разработчики MariaDB утверждают, что предлагаемые ими для установки пакеты стабильны. Доверять им или нет, дело каждого. Лично я считаю, что большой разницы в скорости работы не будет, и оставляю версию из официального репозитория, доверяя разработчикам Debian.
Потому что стабильность прежде всего, не так ли ? 🙂
Настройка сервера
Самое важное это настройка конфигурационных файлов. Для начала проверяем настройки nginx
Shell
sudo nginx -t -v
Система скажет, что все ок, заодно показав установленную версию «nginx version: nginx/1.16.1»
Нужно завести папку для версий конфигов где нибудь в /home/user/configs и туда скидывать файлы, которые мы меняем, чередуя версии. Своего рода бэкап, но дело каждого.
Остановим сервер nginx:
Shell
sudo service nginx stop
Для справки, структура конфига nginx http://nginx.org/ru/docs/beginners_guide.html#conf_structure
создаем папки для резервных конфигов и будущего сайта
Shell
sudo mkdir /var/configs
sudo mkdir /var/www
sudo mkdir /var/www/site.ru
сохраняем всегда изменяемые конфиги на всякий случай в эту папку.
Настраиваем nginx
Shell
sudo mcedit /etc/nginx/nginx.conf
удаляем все, и вставляем следующее содержимое, внося необходимые корректировки:
Nginx
user www-data;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
Убираем все файлы в директории /etc/nginx/conf.d/
Создаем новый файл в директории, заменив site.ru на свой вариант
Shell
sudo mcedit /etc/nginx/conf.d/site.ru.conf
Nginx
server {
listen 80; # порт который слушает nginx
server_name localhost; # имя сайтa
charset utf-8; # кодировка принятая по умолчанию
root /var/www/site.ru; # расположение сайта
index index.php index.html; # начальный документ, загрузит тот, кто первый в списке
client_max_body_size 40m;
client_body_buffer_size 256k;
client_header_timeout 2m;
client_body_timeout 2m;
send_timeout 2m;
client_header_buffer_size 1k;
large_client_header_buffers 4 16k;
# Сжатие
gzip on;
gzip_disable "msie6";
gzip_comp_level 6;
gzip_min_length 1100;
gzip_buffers 16 8k;
gzip_proxied any;
gzip_types text/plain application/xml application/javascript text/css text/js text/xml application/x-javascript text/javascript application/json application/xml+rss;
############################### static #############################################
location ~* .(jpg|jpeg|gif|css|png|js|ico|html)$ {
access_log off;
expires max;
log_not_found off;
}
############################### php ################################################
location / {
# add_header Access-Control-Allow-Origin *;
try_files $uri $uri/ /index.php?$query_string;
}
location ~* .php$ {
try_files $uri = 404;
fastcgi_split_path_info ^(.+.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php7.3-fpm.sock; # подключаем сокет php-fpm
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /.ht {
deny all;
}
}
############################################################################
сохраняем, выходим, проверяем
Shell
sudo nginx -t
Если все ок, то создаем папку сайта по ранее указанному адресу и запускаем nginx:
Shell
sudo systemctl start nginx
Нужно создать первую страницу, заодно проверить работу php-fpm:
Shell
mcedit /var/www/site.ru/index.php
Добавляем содержимое:
PHP
<?php
phpinfo();
?>
Убираем наш файл index.php из директории сайта из соображений безопасности, на память можно сделать скриншот.
Что делать если что то не получилось:
- Проверьте настройки провайдера/роутера. Доходит до вас пинг вообще или нет.
- Проверьте порты, настройки фаерволов и проч.
php
Мы же будем потом WordPress ставить? Измените /etc/php/7.3/fpm/php.ini и установите:
PHP
upload_max_filesize = 20M
Сохраняемся и выходим. Перезапускаем PHP.
Shell
sudo service php7.3-fpm reload
Настройка HTTPS
В целом вроде бы все хорошо, кому не нужен SSL могут пропустить эту часть. В общем не было бы проблем, но сертификат SSL стоит денег. Непонятно почему, но это так. Но пока есть и бесплатные варианты. Установка и настройка HTTPS в следующей статье.
Настройка MariaDB
Shell
mariadb -u root -p
Не забудьте, что вместо значений wp, user и password нужно вставить свои значения. Лучше заранее скопировать все в текстовый редактор, отредактировать и построчно ввести команды. Иначе придется потом удалять юзера «user» со сверхнадежным паролем.:)
CREATE DATABASE wp DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL PRIVILEGES ON wp.* TO user@localhost IDENTIFIED BY 'password' WITH GRANT OPTION;
FLUSH PRIVILEGES;EXIT;
Запустим скрипт безопасности, введем пароль и на все остальные вопросы ответим положительно.
Shell
/usr/bin/mysql_secure_installation
Для настройки базы данных есть отличная программа phpmyadmin. Есть вариант и полегче, например, phpadminer. Оба варианта избыточны для текущей задачи, поскольку хватает и консоли. Например, ради интереса, рассмотрим установку и работу с phpadminer. Уточняем текущую версию программы, на момент написания это https://github.com/vrana/adminer/releases/download/v4.7.6/adminer-4.7.6.php
Для этого заходим в папку нашего сайта
Shell
cd /var/www/site.ru
wget https://github.com/vrana/adminer/releases/download/v4.7.6/adminer-4.7.6.php
mv adminer-4.7.6.php adminer.php
systemctl restart mariadb
И заходим по адресу localhost/adminer.php
Входим под root или user, Заходим
выбираем слева вверху русский язык, «Создать базу данных» придумываем название базе, режим сопоставления выбираем utf8_general_ci, жмем «Сохранить»
далее «Полномочия», «Создать пользователя», выбираем имя, сервер «localhost».
Отмечаем галочки All privileges и Grant option, далее жмем «Сохранить»
Что делать если что то не получилось:
- Если что то не получается и SQL выдает ошибку то можно попробовать выполнить процедуру создания базы данных, Пользователя и настройки привилегий из консоли. Неправильно созданную базу проще удалить из консоли и сделать новую.
- Хорошо запомните введенные данные и проверьте правильность их ввода. Сервер должен быть обязательно «localhost».
3. Установка WordPress.
4 шага для wordpress
- Переходим в директорию нашего сайта и скачиваем WordPress
Shell
wget https://ru.wordpress.org/latest-ru_RU.zip
unzip latest-ru_RU.zip -d /var/www/site.ru
rm /var/www/site.ru/latest-ru_RU.zip
переносим содержимое папки wordpress в корень сайта var/www/site.ru и удаляем саму папку wordpress“, файл wp-config-sample.php переименовываем в wp-config.php. Открываем его в mcedit, затем вносим изменения в строки (вводим название базы данных, имя пользователя, его пароль, кодировка ‘utf8’):
- в конце файла вписываем еще строку, поскольку другие методы закачки используют намного реже.
PHP
define('FS_METHOD', 'direct');
- сохраняемся и выходим в консоль, устанавливаем права
Shell
chown -R www-data:www-data /var/www/html
chmod -R 755 /var/www/html
входим на сайт http://localhost
заполняем поля уже введенными ранее данными в файл wp-config.php, отвечаем на несколько вопросов и дело сделано.
Полный вариант статьи находится тут.