Настройка mysql centos 8

Обновлено: 06.07.2024

MySQL - самая популярная система управления реляционными базами данных с открытым исходным кодом.

Последняя версия сервера базы данных MySQL, версия 8.0, доступна для установки из репозиториев CentOS 8 по умолчанию.

MySQL 8.0 представил много новых функций и изменений, которые сделали некоторые приложения несовместимыми с этой версией. Прежде чем выбрать версию MySQL для установки, ознакомьтесь с документацией приложения, которое вы собираетесь развернуть на своем сервере CentOS.

CentOS 8 также предоставляет MariaDB 10.3, который является «заменой по месту» для MySQL 5.7, с некоторыми ограничениями. Если ваше приложение не совместимо с MySQL 8.0, установите MariaDB 10.3.

Установка MySQL 8.0 на CentOS 8

Установите сервер MySQL 8.0, используя диспетчер пакетов CentOS от имени пользователя root или пользователя с привилегиями sudo :

@mysql Модуль устанавливает MySQL и всю зависимость.

После завершения установки запустите службу MySQL и включите ее автоматический запуск при загрузке, выполнив следующую команду:

Чтобы проверить, работает ли сервер MySQL, введите:

Обеспечение безопасности MySQL

Запустите mysql_secure_installation сценарий, который выполняет несколько операций, связанных с безопасностью, и устанавливает корневой пароль MySQL:

Вам будет предложено настроить VALIDATE PASSWORD PLUGIN , который используется для проверки надежности паролей пользователей MySQL и повышения безопасности. Существует три уровня политики проверки паролей: низкий, средний и сильный. Нажмите, ENTER если вы не хотите устанавливать плагин проверки пароля.

В следующем приглашении вам будет предложено установить пароль для пользователя root MySQL. Как только вы это сделаете, скрипт также попросит вас удалить анонимного пользователя, ограничить доступ корневого пользователя к локальной машине и удалить тестовую базу данных. Вы должны ответить «Y» (да) на все вопросы.

Для взаимодействия с сервером MySQL из командной строки используйте клиентскую утилиту MySQL, которая устанавливается как зависимость. Проверьте доступ с правами root, набрав:

При появлении запроса введите пароль root , и вы увидите оболочку MySQL, как показано ниже:

Это оно! Вы установили и защитили MySQL 8.0 на своем сервере CentOS и готовы его использовать.

Метод аутентификации

Сервер MySQL 8.0, включенный в репозитории CentOS 8, настроен на использование старого mysql_native_password подключаемого модуля аутентификации, поскольку некоторые клиентские инструменты и библиотеки в CentOS 8 несовместимы с caching_sha2_password методом, который установлен по умолчанию в вышестоящей версии MySQL 8.0.

mysql_native_password Метод должен подойти для большинства установок. Тем не менее, если вы хотите изменить значение по умолчанию аутентификации плагин , caching_sha2_password который быстрее и обеспечивает более высокий уровень безопасности, открыть следующий файл конфигурации:

Измените значение default_authentication_plugin на caching_sha2_password :

Закройте и сохраните файл и перезапустите сервер MySQL, чтобы изменения вступили в силу:

Вывод

CentOS 8 распространяется с MySQL 8.0. Установка так же проста, как набор текста dnf install @mysql .

Теперь, когда ваш сервер MySQL запущен и вы можете подключиться к оболочке MySQL, создавать новые базы данных и пользователей

MySQL – это открытая система управления базами данных, которая является частью стека LEMP(Linux, Nginx, MySQL, PHP/Python/Perl). Для управления данными реляционная система MySQL использует SQL (Structured Query Language).

Данный мануал поможет установить версию MySQL 8 на сервер CentOS 8.

Требования

Для работы вам понадобится сервер CentOS 8 с пользователем sudo и настроенным брандмауэром firewalld. Все необходимые инструкции можно найти в мануале по начальной настройке сервера.

1: Установка MySQL

В системе CentOS 8 пакеты MySQL 8 можно найти в стандартном репозитории.

Чтобы установить пакет mysql-server и ряд зависимостей, введите следующую команду:

sudo dnf install mysql-server

По запросу нажмите y и Enter, чтобы продолжить.

. . .
Install 49 Packages
Total download size: 46 M
Installed size: 252 M
Is this ok [y/N]: y

Система MySQL теперь установлена на ваш сервер, но пока еще она не работает. Установленный вами пакет настраивает MySQL в качестве сервиса systemd, который называется mysqld.service. Вам нужно запустить этот сервис с помощью этой команды:

sudo systemctl start mysqld.service

Чтобы убедиться, что сервис работает правильно, запустите следующую команду. Обратите внимание: большинство команд systemctl, в том числе start и status, не требуют включать .service в имя файла.

sudo systemctl status mysqld

Если сервис MySQL успешно запустился, в выводе вы увидите:

mysqld.service - MySQL 8.0 database server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2020-03-12 14:07:41 UTC; 1min 7s ago
Main PID: 15723 (mysqld)
Status: "Server is operational"
Tasks: 38 (limit: 5056)
Memory: 474.2M
CGroup: /system.slice/mysqld.service
└─15723 /usr/libexec/mysqld --basedir=/usr
Mar 12 14:07:32 cent-mysql-3 systemd[1]: Starting MySQL 8.0 database server.
Mar 12 14:07:32 cent-mysql-3 mysql-prepare-db-dir[15639]: Initializing MySQL database
Mar 12 14:07:41 cent-mysql-3 systemd[1]: Started MySQL 8.0 database server.

Затем добавьте MySQL в автозагрузку, чтобы сервис запускался вместе с вашим сервером.

sudo systemctl enable mysqld

Примечание: Если в будущем вы захотите удалить MySQL из автозагрузки, вы можете использовать команду:

sudo systemctl disable mysqld

Итак, теперь MySQL запущен и работает на вашем сервере. Теперь давайте повысим безопасность СУБД.

2: Защита MySQL

MySQL предлагает встроенный сценарий безопасности, который изменит некоторые параметры по умолчанию и заблокирует удалённый root-логин.

Запустите этот сценарий:

После этого сценарий задаст вам ряд вопросов. Сначала он предложит настроить Validate Password Plugin, который проверяет надежность вашего пароля.

Если вы решите настроить Validate Password Plugin, сценарий предложит выбрать уровень валидации пароля. Наивысший уровень можно включить, нажав 2; при этом ваш пароль должен будет включать минимум 8 символов, среди которых должны быть буквы в верхнем и нижнем регистре, цифры и специальные символы.

Securing the MySQL server deployment.
Connecting to MySQL using a blank password.
VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?
Press y|Y for Yes, any other key for No: Y
There are three levels of password validation policy:
LOW Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file
Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2

После Validate Password Plugin сценарий предложит выбрать root-пароль MySQL. Введите надежный пароль и подтвердите его:

Please set the password for root here.
New password:
Re-enter new password:

Если вы включили Validate Password Plugin, сценарий оценит сложность вашего пароля согласно выбранному уровню. После этого сценарий уточнит, хотите ли вы оставить этот пароль или выбрать новый. Чтобы продолжить работу, не меняя пароль, нажмите у:

Estimated strength of the password: 100
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : Y

В остальных случаях вы можете просто нажать Y и Enter, чтобы принять данные по умолчанию. Сценарий удалит анонимных пользователей и тестовую базу данных, отключит удаленный root логин и обновит правила, чтобы MySQL сразу же работал с новыми настройками.

Теперь ваш экземпляр MySQL использует безопасные параметры. Осталось убедиться, что MySQL работает должным образом.

3: Тестирование MySQL

Чтобы проверить работу вашей СУБД, попробуйте подключиться к MySQL с помощью инструмента mysqladmin. Это клиент, предназначенный для запуска команд администрирования.

Чтобы подключиться к MySQL как root (-u root), ввести пароль (-p) и запросить версию, введите команду:

mysqladmin -u root -p version

Эта команда вернет:

mysqladmin Ver 8.0.17 for Linux on x86_64 (Source distribution)
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Server version 8.0.17
Protocol version 10
Connection Localhost via UNIX socket
UNIX socket /var/lib/mysql/mysql.sock
Uptime: 2 hours 52 min 37 sec
Threads: 2 Questions: 20 Slow queries: 0 Opens: 131 Flush tables: 3 Open tables: 48 Queries per second avg: 0.001

Если команда вывела на экран такой результат, значит, установка MySQL прошла успешно.

Чтобы подключиться к MySQL и приступить к работе с данными, введите:

Как и предыдущая команда mysqladmin, эта команда включает флаг –u, который позволяет указать пользователя, с помощью которого вы хотите подключиться (в данном случае это root), и флаг –p, который запрашивает пароль этого пользователя.

Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, рекомендую познакомиться с онлайн-курсом «DevOps практики и инструменты» в OTUS. Курс не для новичков, для поступления нужно пройти . Если вам нужен высокопроизводительный web сервер на базе последних версий nginx и php-fpm, то читайте отдельную статью по этой теме - установка и настройка nginx и php-fpm7 на centos.

Цели статьи

Данная статья является частью единого цикла статьей про сервер Centos.

Введение

В этой статье я расскажу, как настроить web сервер на базе популярного стека технологий - apache и php с модулем prefork. В связи с выходом нового релиза Centos 8, многие статьи на эту тему стали не актуальны, так как версии софта в базовых репозиториях обновились и тот же php нет смысла ставить из стороннего репозитория.

Работать будем на сервере под управлением CentOS 8. Если у вас его еще нет, то читайте мои статьи на тему установки и базовой настройки centos. Не забудьте уделить внимание теме настройки iptables. В данной статье я ее не буду касаться, хотя тема важная для web сервера.

В своей тестовой среде я буду использовать следующие сущности.

Web сервер на CentOS 8

Подопытным сервером будет выступать виртуальная машина от ihor, характеристики следующие:

Процессор 2 ядра
Память 3 Gb
Диск 30 Gb SSD

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

Настройка apache в CentOS 8

Теперь приступим к установке apache. В CentOS 8 это делается очень просто:

Добавляем apache в автозагрузку:

Запускаем apache в CentOS 8:

Проверяем, запустился ли сервер:

Если ничего не видите, скорее всего у вас не настроен firewall. Если не занимались его настройкой, то по-умолчанию в centos установлен firewalld. На нем открыть порты для web сервера можно следующими командами.

Проверить, открылись ли порты можно командой.

Все в порядке, веб сервер работает. Теперь займемся настройкой apache. Я предпочитаю следующую структуру веб хостинга:

Создаем для нее директории.

Перезапуск apache в centos

Проверим созданную конфигурацию и выполним перезапуск apache.

В данном случае ошибок нет, показано предупреждение. Теперь делаем restart apache:

Дальше на своем компьютере правим файл hosts, чтобы обратиться к нашему виртуальному хосту. Добавляем туда строчку:

где 10.20.1.23 ip адрес нашего веб сервера. Это нужно сделать только в том случае, если настраиваете web сервер где-то в локальной сети без реально существующего доменного имени.

Установка php в CentOS 8

Установка php в Centos 8 сильно упростилась по сравнению с предыдущей версией, потому что в базовом репозитории хранится актуальная версия php 7.2 , которой можно пользоваться. Пока нет необходимости подключать сторонние репозитории, так как версия 7.2 вполне свежа и актуальна. Если у вас нет необходимости использовать что-то новее, то можно остановиться на этой версии.

Устанавливаем php в CentOS 8, а так же некоторые популярные модули, которые могут пригодиться для того же phpmyadmin.

Выполним перезапуск apache:

Создадим файл в директории виртуального хоста и проверим работу php:

Вы должны увидеть вывод информации о php. Если что-то не так, возникли какие-то ошибки, смотрите лог ошибок виртуального хоста, php ошибки будут тоже там. Если вам необходима более свежая версия php, то читайте статью по обновлению php 7.2 до 7.4.

Где лежит php.ini

После установки часто возникает вопрос, а где хранятся настройки php? Традиционно они находятся в едином файле настроек. В CentOS php.ini лежит в /etc, прямо в корне. Там можно редактировать глобальные настройки для всех виртуальных хостов. Персональные настройки каждого сайта можно сделать отдельно в файле конфигурации виртуального хоста, который мы сделали раньше. Давайте добавим туда несколько полезных настроек:

Добавляем в самый конец, перед </VirtualHost>

Для применения настроек нужно сделать restart apache. Если у вас полностью дефолтная установка, как у меня, то скорее всего вы увидите ошибку.

Invalid command 'php_admin_value', perhaps misspelled or defined by a module not included in the server configuration

Тут стоит проверка на запуск модуля. Он загружается только, если у нас загружен модуль prefork. Давайте попробуем его загрузить принудительно. Для этого комментируем все строки, кроме основной.

Проверяем конфигурацию apache.

Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe.

Стандартный модуль mod_php скомпилирован с поддержкой модуля mpm_prefork. С другими он работать не будет. Таким образом, чтобы у нас нормально заработал php, нам надо вместо модуля mpm_event подключить модуль mpm_prefork. Для этого в конфиге 00-mpm.conf закомментируем подключение mpm_event_module и раскомментируем prefork.

После этого проверяйте конфигурацию и перезапускайте apache. Все должно заработать. Теперь в выводе phpinfo можно увидеть изменение настроек.

Установка MySQL в CentOS 8

Как я уже писал ранее, сейчас все большее распространение получает форк mysql — mariadb. Она имеет полную совместимость с mysql, так что можно смело пользоваться. Я предпочитаю использовать именно ее.

Устанавливаем mariadb на CentOS 8:

Запускаем mariadb и добавляем в автозагрузку.

Запускаем скрипт начальной конфигурации mysql и задаем пароль для root. Все остальное можно оставить по-умолчанию.

Не буду приводить весь вывод работы этого скрипта, там все достаточно просто и понятно. Сначала задаем пароль для root (текущий пароль после установки пустой), потом удаляем анонимных пользователей, отключаем возможность подключаться root удаленно, удаляем тестового пользователя и базу.

Файлы настроек mysql/mariadb в Centos 8 лежат в директории /etc/my.cnf.d. Для обычной работы достаточно настроек по-умолчанию. Но если вы решите изменить их, не забудьте перезапустить службу баз данных.

Перезапуск mariadb/mysql в CentOS 8:

На этом все. Базовый функционал web сервера на CentOS 8 настроен. Дальше настроим популярную панель управления mysql сервером - phpmyadmin.

Установка phpmyadmin

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

После добавления конфига, не забудьте перезапустить apache.

Архив упакован в zip. Если у вас нет на сервере пакета unzip, установите его.

Распаковываем исходники в директорию виртуального хоста.

Более подробно вопрос установки и настройки phpmyadmin я рассматривал отдельно. Можете зайти в панель и создать базу mysql для тестового сайта, например, wordpress. Затем через консоль загрузить исходники cms и распаковать их.

Настройка ssl сертификата Lets Encrypt в apache

Теперь настроим работу web сервера apache с ssl сертификатом. Хотя если быть точным, то tls сертификатом. Устанавливаем пакет certbot для получения бесплатного ssl сертификата от let’s encrypt. Для этого нам сначала надо подключить репозиторий epel.

После установки пакетов certbot, если его запустить, напишет ошибку, что не может сам настроить apache.

Настроим все сами. Для начала создадим самоподписанный дефолтный сертификат, чтобы apache не ругался на отсутствие файла и смог запуститься.

Все параметры оставляйте дефолтные, не принципиально. Мы этот сертификат использовать не будет. Перезапустите apache.

Теперь выпустим сертификат для нашего домена. Имейте ввиду, чтобы получить сертификат у вас должно быть действующее доменное имя, ссылающееся на web сервер, который настраиваете. Let's Encrypt будет по доменному имени обращаться к серверу, на котором настраиваете сертификат, чтобы проверить домен. В тестовой лаборатории с вымышленным доменным именем получить настоящий ssl сертификат не получится.

В качестве способа аутентификации выбирайте

По аналогии делаете с остальными виртуальными хостами, для которых используете бесплатные сертификаты let’s encrypt. Осталось дело за малым — настроить автоматический выпуск новых ssl сертификатов, взамен просроченным. Для этого добавляем в /etc/crontab следующую строку:

  1. Через файл .htaccess
  2. С помощью настройки виртуального хоста.

Мне нравится больше второй вариант, поэтому приводим конфиг виртуального хоста к следующему виду.

Ротация логов веб сервера apache

Последний штрих в настройке web сервера — ротация логов виртуальных хостов. Если этого не сделать, то через какое-то, обычно продолжительное, время возникает проблема в связи с огромным размером лог файла.

Я предлагаю ротировать файлы логов по достижению ими размера в 10Мб, сжимать после ротации и хранить 10 архивов с логом. Обращаю внимание на важный нюанс при ротации логов по размеру. Скорее всего в общем случае она будет работать не так, как вы ожидаете. Подробности читайте по ссылке. Я привел пример простой конфигурации. Все параметры вы можете поменять по своему усмотрению. Примеров конфигурации logrotate в интернете много.

Настройка SELinux для web сервера apache

Раздел для тех, кто хочет настроить SELinux на своем web сервере. Сначала ставим пакет policycoreutils-python-utils если он еще не установлен. Он нам нужен для утилиты semanage.

Теперь автоматически сформируем модуль для selinux на основе событий аудита, которые накопились, пока мы настраивали сайт. Посмотреть их можно командой.

Создаем модуль selinux.

То же самое делаем для php.

Добавим нашу директорию /web/sites в соответствующие таблицы selinux для контента и логов.

И отдельно добавим каталог, куда web сервер сможет писать данные. Я покажу на примере правила для сайтов wordpress, где web сервер должен уметь писать в директорию wp-content для загрузки медиафайлов, установки тем и плагинов, а так же изменять файл wp-config.php.

Обновляем атрибуты файлов новым контекстом SELinux.

Теперь активируем защиту selinux и проверяем, что она работает.

Режим работы Enforcing означает, что selinux работает. Убедиться, что модули загружены, можно командой.

В целом, по selinux все. Мы просто разрешили все, что веб сервер просил. По идее, надо вдумчиво во всех правилах разбираться и разрешать только то, что считаешь нужным. Я честно скажу, что selinux знаю не очень хорошо. Дальше загрузки готовых модулей и автоматического создания модулей с помощью audit2allow я не двигался. Руками модули никогда не писал. Если есть какой-то более осмысленный и правильный способ настройки selinux на кастомной конфигурации веб сервера, буду рад полезной информации.

Видео

В завершении полное видео настройки web сервера apache на основе приведенной статьи. Если у кого-то что-то не получается, посмотрите, как это сделал я.

Заключение

Не понравилась статья и хочешь научить меня администрировать? Пожалуйста, я люблю учиться. Комментарии в твоем распоряжении. Расскажи, как сделать правильно!

На этом по настройке apache все. Я рассмотрел все основные моменты, которые необходимы для установки и настройки web сервера на основе apache и php, который обычно называют LAMP. При этом рассказал о некоторых вещах, которые повышают удобство и гибкость эксплуатации сервера.

Тема настройки веб сервера обширна. Рассмотреть все варианты в одной статье невозможно, так как функционал будет разниться, в зависимости от назначения сервера. Тем не менее приведу еще несколько ссылок на материалы, которые имеют отношение к настройке web сервера:

    или отдельных сайтов. и веб сайта с помощью zabbix. .
  • Если у вас будут проблемы с ботами, то пригодится статья по блокировке доступа к сайту по странам или защита сайта от ddos.

Если еще что-то полезное вспомню, добавлю ссылки. Пока вроде все. Статья получилось большой и насыщенной. Было не просто все собрать воедино, проверить, связать между собой и оформить в последовательное повествование. Мог где-то ошибиться. Жду комментариев и отзывов. Написал все по своему опыту, как я обычно настраиваю веб сервера. Предполагаю что-то можно сделать более удобно и правильно. Буду рад научиться.

Напоминаю, что данная статья является частью единого цикла статьей про сервер Centos.

Веб-сервер, настроенный по данной инструкции можно будет использовать для размещения собственных сайтов в локальной сети или сети Интернет. Данная инструкция проверена для CentOS 8.

Общая настройка системы

Установка пакетов

1. Обновляем CentOS:

2. Устанавливаем репозиторий EPEL и дополнительные пакеты для загрузки и распаковки:

dnf install epel-release wget unzip

Время

1. Устанавливаем часовой пояс:

\cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime

* данной командой мы установим часовой пояс по московскому времени.

2. Устанавливаем и запускаем службу для автоматической синхронизации времени:

dnf install chrony

systemctl enable chronyd

systemctl start chronyd

Настройка безопасности

1. Отключаем SELinux:

sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config

* первая команда редактирует конфигурационный файл, чтобы SELinux не запускался автоматически, вторая — отключает его разово. Подробнее читайте статью Как отключить SELinux.

2. Открываем необходимые порты в брандмауэре:

firewall-cmd --permanent --add-port=/tcp

firewall-cmd --permanent --add-port=/tcp

firewall-cmd --permanent --add-port=/tcp

* 80, 443 и 8080 порты для веб-сервера; 20, 21 порты нужны для работы FTP; 60000-65535 также необходимы для работы FTP (динамические порты для пассивного режима); 25, 465 и 587 порты нужны для работы почтового сервера по SMTP; последняя команда перезапускает firewalld, чтобы применить новые правила. Подробнее про настройку firewalld.

Установка NGINX

dnf install nginx

Внесем небольшую корректировку в файл nginx.conf:

* на практике, может встретиться ошибка could not build server_names_hash, you should increase server_names_hash_bucket_size: 32. Она возникает при большом количестве виртуальных серверов или если один из них будет иметь длинное название. Данная строка в конфиге исправит ситуацию.

Разрешаем автозапуск сервиса и запустим его:

systemctl enable nginx

systemctl start nginx

Проверим, что веб-сервер работает. Для этого открываем браузер на другом компьютере, который находится в одной сети и вводим в адресной строке IP-адрес сервера. В итоге мы должны увидеть заголовок «Welcome to nginx!»:

* обратите внимание, что данное приветствие может иметь и другой вид.

Установка PHP и PHP-FPM

Устанавливаем PHP и php-fpm следующей командой:

dnf install php php-fpm

* В CentOS 8 будет установлена версия php 7.2 и выше

Запускаем php-fpm и разрешаем его автозапуск:

systemctl enable php-fpm --now

Настройка связки NGINX + PHP

Открываем файл для настройки виртуального домена по умолчанию:

В секции location редактируем параметр index на следующее значение:

location / index index.php index.html index.htm;
>

* добавляем index.php в начало списка. Если параметра index нет, создаем его.

А внутри секции server добавим следующее:

Открываем настройки php-fpm:

Проверяем, что параметр listen настроен так:

. иначе, меняем значение. После перезагружаем php-fpm:

systemctl restart php-fpm

Проверяем правильность настроек nginx:

И перезагружаем его:

systemctl restart nginx

Создаем index.php в каталоге сайта по умолчанию со следующим содержимым:

Открываем в браузере IP-адрес нашего сервера. Теперь мы должны увидеть сводную информацию по PHP и его настройкам, например:

Установка MariaDB или MySQL

В данной статье мы установим MariaDB, но процедура установки и настройки MySQL аналогичная. Все расхождения будут отмечены явно в инструкции.

Устанавливаем MariaDB следующей командой:

dnf install mariadb mariadb-server

* для установки mysql выполняем команду dnf install mysql

Разрешаем автозапуск и запускаем СУБД:

systemctl enable mariadb --now

* для работы с mysql меняем mariadb на mysql.

Сразу создаем пароль для учетной записи root:

mysqladmin -u root password

PHP + MariaDB (MySQL)

Для возможности подключаться к базе данных скриптами PHP необходимо установить следующие модули:

dnf install php-mysqli

Если мы установили php5, также ставим php-mysql:

dnf install php-mysql

После перезагружаем php-fpm:

systemctl restart php-fpm

И открываем наш сайт в браузере. В phpinfo появится новая секция MySQL:

В phpinfo появилась информация о поддержке MySQL

* нас не должно смущать, что установили мы mariadb, а заголовок mysql. Если посмотреть в таблицу, можно увидеть ячейку Client API version, в которой указано, что используется именно mariadb.

Установка phpMyAdmin

Переходим на сайт разработчика phpMyAdmin и копируем ссылку на нужную нам версию, например, последнюю:

Копируем ссылку на последнюю версию phpMyAdmin

Воспользовавшись скопированной ссылкой, скачиваем архив с установочными файлами:

Распаковываем скачанный архив:

Создаем каталог для phpmyadmin:

. и переносим в него содержимое распакованного архива:

mv phpMyAdmin-*-all-languages/* /usr/share/phpMyAdmin/

Задаем владельца для каталога:

chown -R apache:apache /usr/share/phpMyAdmin

* как правило, сервис, которых обрабатываем php-запросы работает от пользователя apache.

Устанавливаем модули php, необходимые для корректной работы phpMyAdmin:

dnf install php-json php-mbstring php-mysqli

Внесем небольшую настройку в конфигурацию phpMyAdmin.

Сгенерируем случайную последовательность символов:

Откроем на редактирование или создадим файл:

Внесем в него строку:

* где jd7n6yIcHOl55ikE7l5HAdNaWwunSHvR — последовательность, которую нам выдала команда head /dev/urandom . ; Также обратите внимание на <?php ?> — если мы создали новый файл, необходимо указать данные теги, так как они открывают код PHP. В противном случае, настройка не применится.

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

И добавим в него следующее содержимое:

server listen 80;
server_name phpmyadmin.dmosk.local;
set $root_path /usr/share/phpMyAdmin;

location / root $root_path;
index index.php;
>

* где phpmyadmin.dmosk.local — адрес для виртуального домена, именно этот адрес должен быть введен в адресную строку браузера, чтобы открылся нужный сайт. Поэтому если нет возможности зарегистрировать домен и имя узла в DNS, можно воспользоваться локальным файлом hosts. /usr/share/phpMyAdmin — это каталог, в который по умолчанию устанавливается phpMyAdmin.

После перезапускаем NGINX:

systemctl reload nginx

Также нужно перезапустить php-fpm, так как в процессе установки были добавлены модули для PHP:

systemctl restart php-fpm

Установка Memcached

Первым этапом мы установим и настроим сервис memcached. Вторым — модуль php-memcached.

Сервис memcached

Выполняем установку пакетов:

dnf install memcached libmemcached

Создаем или открываем на редактирование конфигурационный файл для запуска сервиса:

Приводим его к виду:

* где PORT указываем на каком порту будет слушать сервис кэширования; USER — пользователь, под которым должен запускаться сервис; MAXCONN — максимальное число одновременных подключений; CACHESIZE — размер под кэш в мегабайтах; OPTIONS — параметры запуска (в данном примере наш сервис будет принимать запросы только с адреса локальной петли).

После разрешаем автозапуск и запускаем сервис кэширования:

systemctl enable memcached --now

Модуль для php

Копируем ссылку на исходник memcached

Обратите внимание, что у каждой версии пакета есть свои требования к версии PHP. Внимательно изучаем, подойдет ли версия php-memcached для нашего сервера.

Скачиваем архив, ссылку на который мы скопировали:

Устанавливаем пакеты, необходимые для сборки php-pecl-memcached:

dnf install php-devel zlib-devel make

dnf --enablerepo=PowerTools install libmemcached-devel

Распаковываем скачанный архив:

tar -xvzf memcached-*.tgz

Переходим в распакованный каталог:

Запускаем компиляцию php-расширения:

Копируем созданный модуль в каталог php-модулей:

cp modules/memcached.so /usr/lib64/php/modules/

Создаем конфигурационной файл для подключения расширения:

После установки модуля перезапускаем php-fpm:

systemctl restart php-fpm

Чтобы проверить, что модуль memcached работаем, открываем наш сайт в браузере — в phpinfo должна появиться новая секция:

В phpinfo появилась информация о поддержке Memcached

. или вводим команду:

php -m | grep memcached

Мы должны получить:

Установка и настройка FTP-сервера

В качестве FTP-сервера будем использовать ProFTPd, так как он позволяет авторизовываться под uid системных учетных записей.

ProFTPd можно устанавливать командой:

dnf install proftpd

Загружаем скрипт ftpasswd:

Разрешаем запуск на выполнение скрипта:

chmod +x /etc/proftpd/ftpasswd

Создаем виртуального пользователя:

/etc/proftpd/ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=ftpwww --uid=48 --gid=48 --home=/var/www --shell=/sbin/nologin

  • /etc/proftpd/ftpd.passwd — путь до файла, в котором хранятся пользователи;
  • ftpwww — имя пользователя (логин);
  • uid и gid — идентификаторы пользователя и группы системной учетной записи (apache);
  • /var/www — домашний каталог пользователя;
  • /sbin/nologin — оболочка, запрещающая локальный вход пользователя в систему.

Изменим права для созданного файла с паролями:

chmod 440 /etc/proftpd/ftpd.passwd

* в противном случае, при запуске proftpd мы получим ошибку «. fatal: AuthUserFile: unable to use /etc/proftpd.d/ftpd.passwd: Operation not permitted. »

Открываем на редактирование конфигурационный файл proftpd:

И редактируем следующее (комментируем):

Создадим конфигурационный файл со своими настройками:

И добавим следующее:

UseIPv6 off
IdentLookups off
PassivePorts 60000 65535

RequireValidShell off
AuthUserFile /etc/proftpd/ftpd.passwd
AuthPAM off
LoadModule mod_auth_file.c
AuthOrder mod_auth_file.c

* где 60000 - 65535 — диапазон динамических портов для пассивного режима.

Разрешаем автозапуск FTP-серверу и запускаем его:

systemctl enable proftpd --now

Пробуем подключиться к серверу, использую любые FTP-клиенты, например, FileZilla, Total Commander или тот же браузер.

Это базовая и самая простая настройка ProFTPd, но если необходимо настроить TLS или хранить виртуальных пользователей в базе MySQL, читайте подробнее инструкцию по настройке ProFTPd на CentOS.

Несмотря на то, что мы установили и настроили PHP-FPM, Apache нам понадобится, как минимум, по двум причинам. Во-первых, многие сайты используют файл .htaccess, который читает Apache. Во-вторых, последний включает большое число модулей, которые может использовать портал.

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

Заходим в настройки:

И редактируем следующее:

* наш веб-сервер будет слушать на порту 8080, так как на 80 уже работает NGINX.

<IfModule dir_module>
DirectoryIndex index.php index.html
</IfModule>

* если не указан конкретный скрипт, сначала веб-сервер пытается найти и запустить index.php, затем index.html

<Directory /var/www/*/www>
AllowOverride All
Options Indexes ExecCGI FollowSymLinks
Require all granted
</Directory>

* где Directory — разрешенные каталоги для запуска из apache; Options — разрешенные опции; Require — с каких IP-адресов можно открывать сайты, определенные в данном каталоге. Итого, мы разрешаем все каталоги в /var/www, но только если следующий каталог будет www; разрешаем опции Indexes (возвращает список файлов, если нет индексного файла, например, index.php), ExecCGI (разрешены сценарии CGI), FollowSymLinks (включены символические ссылки в этом каталоге); доступ для данных каталогов разрешен со всех адресов (all granted).

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

. разрешаем автозапуск и запускаем службу:

Создаем php-файл со следующим содержимым:

NGINX + Apache

Ранее нами была настроена связка nginx + php-fpm. Теперь проверяем совместную работу первого с apache.

Открываем конфигурационный файл nginx:

Находим наш настроенный location для php-fpm:

Проверяем, есть ли файл:

. и если есть, комментируем его содержимое:

* в данном примере мы отключили обработку всех php-файлов с помощью php-fpm, так как это у нас должен делать apache.

Проверяем и перезапускаем nginx:

systemctl restart nginx

Apache Real IP

Для решения проблемы будем использовать модуль mod_rpaf. Устанавливаем набор разработчика для apache:

Переходим в каталог /usr/local/src:

Переходим в распакованный каталог:

Собираем модуль и устанавливаем его:

* при возникновении ошибки ./apxs.sh: line 15: -c: command not found, необходимо поставить which командой dnf install which.

Создаем конфигурационный файл со следующим содержимым:

Реальный IP-адрес при обращении к Apache

Postfix

Устанавливаем postfix командой:

dnf install postfix

Теперь нам необходимо сделать несколько простых настроек:

.
myorigin = $mydomain
.
inet_protocols = ipv4
.

Открываем карту пересылки:

* данной настройкой мы будем подставлять всем отправляемым письмам без поля FROM адрес no-reply@dmosk.local.

Для применения настроек перезагружаем почтовый сервер:

systemctl restart postfix

Тюнинг веб-сервера

Открываем на редактирование следующий файл:

И правим следующее:

upload_max_filesize = 512M
.
post_max_size = 512M
.
short_open_tag = On
.
date.timezone = "Europe/Moscow"

systemctl restart php-fpm

NGINX

Открываем на редактирование следующий файл:

После перезапускаем nginx:

systemctl restart nginx

Postfix

Чтобы отправляемая почта меньше попадала в СПАМ, необходимо выполнить следующие шаги:

Создание первого сайта

Задаем переменную, значение которой будет домен сайта:

Создаем новый файл виртуального домена NGINX:

* обязательно на конце должен быть .conf, так как только такие файлы веб-сервер подгружает в конфигурацию.

И добавляем следующее содержимое.

access_log /var/www/site1/log/nginx/access_log;
error_log /var/www/site1/log/nginx/error_log;

gzip on;
gzip_disable "msie6";
gzip_min_length 1000;
gzip_vary on;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;

* ^.+\.(jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|doc|docx|xls|xlsx|exe|pdf|ppt|tar|wav|bmp|rtf|js)$ expires modified +1w;
>
>

* где site1.local — домен, для которого создается виртуальный домен; /var/www/site1 — каталог, в котором будет размещаться сайт.
** все запросы будут переводиться на локальный сервер, порт 8080, на котором работает apache, кроме обращений к статическим файла (jpg, png, css и так далее).
*** обратите внимание на выделения полужирным — здесь нужно подставить свои данные.

server listen 443 ssl;
ssl on;
ssl_certificate /etc/nginx/ssl/cert.pem;
ssl_certificate_key /etc/nginx/ssl/cert.key;

access_log /var/www/site1/log/nginx/access_log;
error_log /var/www/site1/log/nginx/error_log;

gzip on;
gzip_disable "msie6";
gzip_min_length 1000;
gzip_vary on;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;

* ^.+\.(jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|doc|docx|xls|xlsx|exe|pdf|ppt|tar|wav|bmp|rtf|js)$ expires modified +1w;
>
>

Теперь настроим виртуальный домен в Apache:

<VirtualHost *:8080>
Define root_domain site1.local
Define root_path /var/www/site1

ErrorLog $/log/apache/error_log
TransferLog $/log/apache/access_log
</VirtualHost>

Создаем каталоги для сайта:

mkdir -p /var/www/$TMP_SITE/

mkdir -p /var/www/$TMP_SITE/log/

Создаем индексный файл со следующим содержимым:

Задаем права на папки:

chown -R apache:apache /var/www/$TMP_SITE

chmod -R 775 /var/www/$TMP_SITE

Проверяем корректность настроек конфигурационных файлов:

systemctl reload nginx

Открываем сайт в браузере.

При необходимости, создаем базу данных.

> CREATE DATABASE site1 DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

* данными sql-командами мы создаем базу данных site1 и предоставляем к ней доступ для учетной записи dbuser с паролем password. При желании сделать соединение более безопасным, можно убрать WITH GRANT OPTION.

Читайте также: