Здравствуйте, уважаемые друзья.
В прошлый раз мы научились устанавливать среду виртуализации VirtualBox и запустили пару виртуальных машин - ОС Linux Mint и Windows XP. Сегодня, как я и обещал мы запустим виртуальный сервер на базе Ubuntu Server 20.04 LTS, настроим "боевое" окружение - связку Nginx + MySQL + PHP, и установим на него некоторые утилиты, которые скрасят нам работу в консоли, ибо " консолью единой жив админ". Приступаем!
Для начала, нам необходимо скачать установочный образ диска нашей операционной системы. Для Ubuntu Server ссылка приведена выше. Если вы предпочитаете работать с другими серверными дистрибутивами Linux/*BSD, то ниже приведен краткий список источников, откуда их можно скачать:
Помимо связки LEMP (Linux Enginx MySql PHP) Будет установлено следующее программное обеспечение:
- Файловый менеджер MC, с текстовым интерфейсом. Позволяет сильно облегчить работу и операции с файлами в Linux/BSD/*nix - системах.
- Программный комплекс WebMin, позволяющий обойтись без применения консольных команд, так же облегчает работу с серверными ОС новичкам.
Установка серверной ОС происходит так же, как и обычной настольной системы, с тем отличием, что установщик работает не в графическом, а в текстовом режиме:
После установки нашего виртуального сервера и его первоначальной настройки (обновления пакетов), нам необходимо скачать и установить программное обеспечение, которое позволит работать с сервером удалённо. Это SSH-клиент PuTTY - управление сервером посредством команд в консоли и WinSCP - графический клиент SFTP (SSH File Transfer Protocol) для Windows. Скачиваем и устанавливаем это программное обеспечение.
После установки пробуем подключиться к нашему виртуальному серверу по его IP-адресу (рис. 1):
После нажатия кнопки "Open" откроется окно с приглашением ввести логи и пароль пользователя (рис. 2):
Если логин и пароль введены верно, будет произведен вход в систему (рис. 3):
Теперь можно приступить к установке и настройке необходимого ПО на нашем виртуальном сервере.
В видео выше мы уже установили фаловый менеджер Midnight Commander, сейчас я повторю все команды, необходимые для первоначальной настройки сервера в текстовом режиме, их можно непосредственно отсюда будет копировать и вставлять в окне PuTTY, что бы не набирать вручную (хотя это дурной тон, если планируете работать с серверами, привыкайте запоминать команды и работать ручками):
- sudo apt update - получение наиболее свежих сведений о программном обеспечении из интернета (репозиториев).
- sudo apt upgrade - обновление программного обеспечения (если таковое имеется)
- sudo apt install mc - установка файлового менеджера Midnight Commander
Теперь подробнее о командах:
- sudo - substitute user and do, дословно «подменить пользователя и выполнить». программа для системного администрирования UNIX-систем, позволяющая делегировать те или иные привилегированные ресурсы пользователям с ведением протокола работы. Основная идея — дать пользователям как можно меньше прав, при этом достаточных для решения поставленных задач. Программа поставляется для большинства UNIX и UNIX-подобных операционных систем. Именно ввиду того, что вход в систему производится пользователем с пониженными (минимальными) правами действия в системе, операционные системы *nix/bsd и являются наиболее безопасными и защищенными с точки зрения взлома/вирусной активности. Т.е. пользователь должен осознавать, что он делает и какие команды выполняет в системе. Например обычный пользователь andrey, которого мы завели в системе при установке, не сможет без повышения прав удалить корневой каталог системы, тем самым обрушив всю систему. Отсюда следует, что такие операции, как обновление операционной системы или пакетов программного обеспечения, установку нового ПО, необходимо выполнять с повышением прав пользователя, например выполнив команду sudu (так же, аналогичная (но не равнозначная) команда su - в некоторых *nix/bsd ОС).
- apt - (сокращение от Advanced Packaging Tool) — это набор утилит для установки, удаления, обновления, поиска пакетов в Linux, а также для управления репозиториями. APT еще называют пакетным менеджером.
- update | upgrade - параметры команды apt, выполняющие соответственно чтение списка пакетов из репозиториев и обновление самих пакетов в операционной системе. Более подробно с другими опциями команды apt можно ознакомится, введя в командной строке нашего сервера man apt. Вообще, команда man предназначена как раз для вывода справочной информации. Если вы хотите уверенно работать в среде Linux/*BSD, вам часто придется обращаться к команде man.
- install - один из параметров команды apt, позволяющий установить определённую версию пакета.
Из описания выше становится понятно, как работает набор команд, которые мы с вами ввели - sudo повышает привилегии пользователя andrey для того, что бы была возможность выполнить команду обновления списка пакетов apt update.
sudo apt upgrade - обновляет установленные в системе пакеты приложений.
sudo apt install mc - устанавливает пакет mc (Midnight Commander) в систему.
В дальнейшем мы будем часто использовать именно эти команды для установки тех или иных пакетов.
Теперь наконец то приступаем к установке LEMP (Linux Nginx MySql PHP):
- sudo apt install nginx - устанавливает WEB-сервер Nginx. Если всё прошло успешно, то зайдя из вашей основной операционной системы (с физического компьютера) по IP-адресу установленного виртуального сервера браузером по адресу http://_ip-адрес_виртуального_сервера, вы попадете на страничку приветствия сервера Nginx (рис. 4):
Теперь в нашей виртуальной системе есть WEB-сервер. Уже сейчас вы можете разместить на сервере собственные web-странички, изучая HTML.
Давайте для примера создадим свою страничку и разместим её на нашем свежем web-сервере.
Заходим в консоль сервера и даём команду:
- sudo nano /var/www/html/my.html
В открывшемся окне редактора nano введем следующий: текст:
<html>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<head>
<title>your_domain website</title>
</head>
<body>
<h1>Привет Мир!</h1>
<p>Это наша первая страничка созданная в редакторе <strong>nano</strong>.</p>
</body>
</html>
Комбинацией клавиш Ctrl+O сохраняем файл Ctrl+X выходим из редактора nano. Теперь, зайдя по адресу http://_ip_адрес_вашего_сервера/my.html вы увидите такую web-страничку (рис. 5):
Мы убедились, что установка WEB-сервера Nginx прошла успешно, он работает и отдаёт в мир созданные нами HTML-странички. Всё это хорошо, но для того, что бы запустить на нашем сервере что то более серьёзное, например какую-либо CMS, нам понадобится установить систему управления БД MySQL для хранения контента и язык PHP. Такая связка является наиболее распространенной, если вы собираетесь в дальнейшем работать с различными системами управления контентом (CMS). Продолжим:
- sudo apt install mysql-server - команда установит MySQL на наш виртуальный сервер. Сразу после завершения процесса установки нам необходимо задействовать минимально безопасный режим работы сервера mysql. Для этого запустим специальный инструмент, входящий в состав поставки mysql: даём команду sudo mysql_secure_installation. Запущенный скрипт задаст нам ряд вопросов, на которые нужно будет правильно ответить для повышения безопасности сервера mysql (рис. 6):
Если на данном этапе ответить "yes", то нас попросят ввести пароль, соответствующий определенным правилам - длинна пароля не менее 8 символов, обязательное содержание букв в верхнем и нижнем регистре и обязательное содержание цифр, например что-то вроде "Dfcz21uJl6VtCzWtdHjb44yF". Если мы ответим отрицательно, то пароль может быть практически любым, естественно желательно подобрать пароль достаточной сложности. Я как правило отвечаю на первый вопрос отрицательно, пароли на моих серверах и так отвечают правилам валидации. Теперь нас попросят ввести пароль для пользователя root (рис. 7):
Вводим пароль, после этого потребуется его повторный ввод для подтверждения правильности.
После процедуры ввода пароля нам сообщат, что по-умолчанию в СУБД MySQL присутствует анонимный пользователь и спросят, хотим ли мы его удалить? Отвечаем утвердительно - Y(es).
После того, как мы удалили анонимного пользователя, СУБД сообщает, что по-умолчанию присутствует тестовая база данных. Будет задан вопрос - хотим ли мы её удалить? Так же отвечаем утвердительно - Y(es). Последний вопрос касается применения параметров безопасности (рис. 8):
Соглашаемся - Y(es) и видим, что первоначальная настройка СУБД MySQL завершена. Ниже приведен полный список вопросов скрипта mysql_secure_installation (рис. 9):
Если вы всё сделали правильно, то по команде sudo mysql, вы попадёте в консоль управления СУБД MySQL (рис. 10):
Что бы выйти из консоли управления просто наберите команду exit.
Теперь установим PHP:
- sudo apt install php-fpm php-mysql
Эта команда устанавливает "обвязку" или API, позволяющую взаимодействовать между собой нашим устанавливаемым программам - Nginx, MySQL и PHP. API - описание способов, которыми одна компьютерная программа может взаимодействовать с другой программой. В нашем случае устанавливается SAPI, она же Server API для взаимодействия между собой указанных выше элементов системы.
После установки PHP, php-fpm и php-mysql необходимо сделать некоторые настройки. Открываем редактором nano файл конфигурации php.ini:
- sudo nano /etc/php/7.4/fpm/php.ini. Обратите внимание, цифра "4" не зря выделена жирным. Это версия PHP на момент написания данной статьи, которая установлена на сервере. Если вы ставили на виртуальную машину не Ubuntu Server 20.04 LTS, а допустим Debian Linux или другой дистрибутив, версия PHP может отличаться. Так же версия, и соответственно расположение файла php.ini будет отличаться, по этому во время установки PHP нужно обратить внимание на это необходимо обратить внимание.
И так, в открывшемся окне редактора nano ищем строчку cgi.fix_pathinfo. Он будет закомментирован точкой с запятой (;) и будет иметь значение “1” по умолчанию (рис. 11):
Эти настройки по умолчанию очень небезопасны, потому что благодаря им PHP попытается исполнить ближайший файл, который сможет найти в случае, когда запрашиваемый PHP файл не может быть найден. Это позволит пользователям сформировать PHP запросы таким образом, чтобы запускать скрипты, к которым у них не должно быть доступа. Мы можем предотвратить такое поведение раскомментировав эту строку и изменив её значение на “0” (рис. 12):
cgi.fix_pathinfo=0
Перезапускаем обработчик PHP командой:
- sudo systemctl restart php7.4-fpm
Настраиваем Nginx для работы с PHP. Редактируем конфигурацию серверного блока default:
sudo nano /etc/nginx/sites-available/default
В окне редактора мы увидим примерно следующий код:
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files $uri $uri/ =404;
}
}
Его нужно привести к следующему виду:
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;
server_name _IP_адрес_сервера;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
Жирным выделено то, что необходимо изменить или добавить. После изменения файла сохраняем изменения нажатием Ctrl+O и выходим из редактора нажатием комбинации клавиш Ctrl+X.
После всех изменений, необходимо протестировать файл конфигурации на наличие ошибок. Делается это командой nginx -t. Если всё правильно, команда отработает без вывода сообщений об ошибках. Теперь следует перезапустить сервер Nginx командой:
- sudo systemctl reload nginx
Теперь мы можем проверить работу всей связки Nginx+MySQL+PHP на нашем виртуальном сервере. Введем и выполним команду:
- nano /var/www/html/info.php
В открывшемся окне редактора nano введем следующие строчки кода:
<?php
phpinfo();
Сохраним файл info.php сочетанием клавиш Ctrl+O и выйдем из редактора, используя сочетание клавиш CTRL+X.
Зайдя браузером по адресу http://_ip_адрес_вашего_сервера/info.php, вы увидите следующую страничку (рис. 13):
Если всё отображается так, как описано выше, значит мы успешно установили и настроили виртуальный сервер Ubuntu 20.04 LTS, связку Nginx + MySQL + PHP.
Теперь вы можете проводить различные эксперименты с сервером, устанавливать различные CMS (Joomla, WordPress, LiveStreet, OpenCart, SMF и прочее) - в зависимости от вашей фантазии и потребностей. Установка будет происходить именно так, как если бы работали с реальным сервером в Интернете.
Чем удобен виртуальный сервер, находящийся у вас? Хотя бы тем, что вы можете обкатать на нём какие то свои решения, не беспокоясь о том, что что-то испортите на "боевом" сервере в сети Интернет. Вы можете сделать резервную копию конфигурации сервера прямо сейчас, пока не установили другое программное обеспечение или не успели залить на сервер какую-либо CMS. В случае неполадок, вам достаточно будет восстановить состояние сервера из резервной копии и начать "с чистого листа". Либо, полностью настроив и отладив то или иное ПО, так же можете сделать резервную копию сервера и в случае сбоя просто развернуть его заново, запустили и он готов к работе.
Установка WebMin.
В первую очередь, необходимо добавить репозиторий WebMin, для этого отредактируем файл /etc/apt/sources.list:
- sudo nano /etc/apt/sources.list
Добавим в конец файла запись (рис. 14):
deb https://download.webmin.com/download/repository sarge contrib
Сохраняем изменения сочетанием клавиш Ctrl+O и выходим из редактора nano (Ctrl+X).
Скачиваем GPG ключ:
- wget http://www.webmin.com/jcameron-key.asc
Устанавливаем его:
- sudo apt-key add jcameron-key.asc
Обновляем список репозиториев:
- sudo apt update
Устанавливаем WebMin:
- sudo apt install webmin
Если процесс установки прошел успешно, то зайдя браузером по адресу https://_ip_адрес_вашего_сервера:10000 вы увидите в браузере приглашение к вводу логина и пароля (рис. 15):
Введя имя пользователя и пароль, который мы использовали при установке Ubntu Server в нашу систему виртуализации, вы попадёте в систему администрирования WebMin (рис. 16):
Заходим в меню Webmin -> Languages and Themes, в выпадающем меню слева выбираем язык Russian UTF-8 и применяем изменения. Теперь WebMin русифицирован (рис. 16):
Уже сейчас, на этой стадии настройки, наш с вами виртуальный сервер готов принимать подключения из Интернета, уже сейчас вы можете создать и опубликовать собственную WEB-страничку в сети. Каким образом это сделать, мы рассмотрим в следующих статьях. Пока же ваш виртуальный сервер будет доступен только из вашей домашней сети.
Если вам понравилось, подписывайтесь на мой канал. Есть вопросы и пожелания - пишите, с удовольствием отвечу.
Вопросы, набравшие наибольшее количество + будут оформлены в виде отдельных статей, будем работать в интерактивном режиме.
До встречи, друзья.
P.S. Спасибо моей ассистентке Прасковье (Прошке) за действенную помощь в написании статей на Яндекс.Дзене и озвучивании видеозаписей =)