Базовые знания Linux админа

 

Примечание

В данной серии не будет теории и прочего

Это абсолютный базис-гайд по установке ОС и базовым навыкам в терминале

В конце будет рассмотрено несколько современных технологий в простых реализациях

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

Все. Дальше - сами, книги, видео, стажировка

Этот гайд - выжимка на многолетние накопления вопросов на канале и сайте

Гайд будет доступен на моем сайте:

http://snakeproject.ru

Видео будут доступны на моем канале YouTube:

https://www.youtube.com/channel/UCR6j95DKI80MFXIw2iJ3f1w

 

План:

 

7 часть — nginx

 

В этой части мы установим и минимально настроим веб-связку

Nginx + MySQL + PHP (версии 7)

 

Nginx - веб-сервер

MySQL - база данных

Php - язык, на котором пишутся сайты (связующее звено между nginx и mysql)

 

Начнем с баз данных MySQL

 

В них мы будем хранить саму базу данных, в ней таблицы, в которых будут данные, которые будут выводиться на сайте

 

Запрос будет приходить на веб-сервер Nginx, далее приложение на языке php будет обращаться к бд MySQL за данными, и php будет формировать страницу

 

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

sudo apt-get install mysql-server mysql-client mysql-common php7.4-mysql

 

Внимание, версия php7.4 может отличаться, посмотреть актуальную в вашей ОС -  apt search php7 | grep mysql

 

При установке задайте пароль root - это суперпользователь самой БД MySQL

 

В /etc/mysql/mysql.conf.d/mysqld.cnf укажем локальный адрес нашей машины, на котором открыть порт для подключения:

bind-address=127.0.0.1

 

Мы не указываем ip 192.168.0.180 т.к. наш веб-сервер и приложение на php будут на одном сервере

Обращения к MySQL извне по сети нам ненужны

 

Добавим сервис mysql в автозапуск служб системы Linux:

sudo systemctl enable mysql

 

Запустим сервис mysql:

sudo systemctl start mysql

 

Проверяем:

 

Запускаем процесс первоначальной инициализации:

sudo mysql_secure_installation

 

Проверяем подключение под пользователем root:

sudo mysql -u root -p

 

Создаем базу данных :

CREATE DATABASE test_database;

 

Создим пользователя test_user с паролем 654321, дадим ему права на базу test_database:

CREATE USER 'test_user'@'localhost' IDENTIFIED BY 'QwertY654o321!';

GRANT ALL ON test_database.* TO 'test_user'@'localhost';

 

Выйдите из сервера БД:

\q

 

Заходим под пользователем test_user:

sudo mysql -u test_user -p

 

Заходим в базу test_database:

USE test_database;

 

Создаем новую таблицу:

create table test_table ( id int not null,  mess varchar(50) );

 

Добавим тестовые данные:

insert into test_table (mess,id) values('First mess',1);

insert into test_table (mess,id) values('Second mess',2);

\q

 

О бэкапах пару слов в MySQL

 

Сдать резервную копию базы данных MySQL:

sudo mysqldump -u root -p test_database >test_database_bac.sql

 

Процесс восстановления данных в новую, пустую базу "test_database_2":

sudo mysqladmin -u root -p create test_database_2

sudo mysql -u root -p test_database_2<test_database_bac.sql

 

Установка PHP

PHP-FPM - простой и надежный менеджер процессов FastCGI для PHP

Напоминаю, я ставлю конкретно версию 7.4, смотрите актуальную для свое ОС

 

Установка:

sudo apt-get install php7.4-fpm

 

Автозагрузка и старт сервиса:

sudo systemctl enable php7.4-fpm

sudo systemctl start php7.4-fpm

 

Приступим к установке веб-сервера nginx

 

Установка:

sudo apt-get install nginx

 

Добавим сервис nginx в автозапуск служб системы Linux:

sudo systemctl enable nginx

 

Запустим сервис nginx:

sudo service nginx start

 

Проверьте, url должен быть доступен:

http://192.168.0.180/

 

Теперь отредактируем конфигурационный файл веб-сервера nginx сайта по умолчанию

 

sudo vi /etc/nginx/sites-available/default

 

server {

       #Какой порт слушать (указан 80 по умолчанию для http)

        listen 80 default_server;

        listen [::]:80 default_server;

 

       #В каком каталоге смотреть файлы приложения

        root /var/www/html;

 

         #Какие файлы по умолчанию будут отдаваться при обращении

        index index.php index.html;

 

        #На каком адресе будет работать сервис nginx

        server_name _;

 

        #Проверка наличия запрашиваемого файла в директории (указана /)

        location / {

                try_files $uri $uri/ =404;

        }

 

        #Запрошенные файлы с расширением php отправляем к обработчику php-fpm

        location ~* \.php$ {

          fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;

          fastcgi_index index.php;

          fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

          include fastcgi_params;

        }

}

 

Тестовый файл /var/www/html/index.php:

<?php echo 'Test from PHP'; ?>

 

Тестовый файл /var/www/html/index_db.php подключения из php к mysql:

<?php

  $conn = new mysqli("localhost", "test_user", "QwertY654o321!", "test_database");

  if ($conn->connect_error) {

    die("Ошибка: не удается подключиться: " . $conn->connect_error);

  }

 

  echo 'Подключен к базе данных<br>';

  print "Сообщение:<br>";

 

  foreach ($conn->query("SELECT id, mess FROM test_table") as $row) {

   print "id: " . $row['id'] . ", mess: " . $row['mess'] . "<br>";

  }

 

  $conn = null;

  $result->close();

  $conn->close();

?>

 

Дадим права на каталог серверу nginx:

chown -R www-data:www-data /var/www

 

Перезапустите nginx:

sudo service nginx restart

 

Проверяем:

 

Немного о сетевых утилитах

sudo apt install net-tools

 

Список прослушиваемых TCP-портов сервером:

netstat -tl

 

Список прослушиваемых UDP-портов сервером:

netstat -ul

 

Только номер порта без расшифровки протокола (n):

netstat -ntul

 

Список всех соединений в любых состояниях:

netstat -ntua