четверг, 2 июля 2015 г.

Установка MariaDB + Nginx + PHP-FPM на CentOS 7 (Часть 2)

Продолжение статьи об установке MariaDB + Nginx + PHP-FPM на сервер под управлением CentOS 7. Предыдущая часть: Часть 1.

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

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


Содержание:

  1. Проверка текущей версии CentOS
  2. Установка FTP сервера (vsFTPd)
  3. Создание пользователя с правами root
  4. Настройка строки приглашения
  5. Установка MariaDB (MySQL)
  6. Настройка MariaDB
  7. Установка PHP
  8. Настройка PHP-FPM
  9. Установка NGINX
  10. Ключ на старт...
  11. Послесловие

5. Установка MariaDB (MySQL).

MariaDB является полноценным fork-ом MySQL, но только таким, каким его хотел видеть сам разработчик MySQL. Подробности я опущу, кому интересно могут перейти по ссылке [1] и найти всю нужную информацию, а так же сходства и различия между MariaDB и MySQL[2] [3]. В данном контексте я всего лишь ограничусь тем, что вместо всем известного MySQL, я буду ставить MariaDB. Так же, все рекомендации по установке вы сможете прочитать по ссылке [4]. Однако, чтобы вас не загружать поиском нужной информации, можете следовать моего мануала (если его можно так назвать).

Первым делом, чтобы установить сервер БД из репозитария yum, нужно создать конфигурацию, чтобы система знала что и откуда брать для установки и обновления данного сервера базы данных. Создаем файл и открываем его на редактирование.

[00:59 ebabenko@centos7 ~]$ cd /etc/yum.repos.d
[01:00 ebabenko@centos7 /etc/yum.repos.d]$ ll
total 24
-rw-r--r--. 1 root root 1664 Apr  1 01:27 CentOS-Base.repo
-rw-r--r--. 1 root root 1309 Apr  1 01:27 CentOS-CR.repo
-rw-r--r--. 1 root root  649 Apr  1 01:27 CentOS-Debuginfo.repo
-rw-r--r--. 1 root root  290 Apr  1 01:27 CentOS-fasttrack.repo
-rw-r--r--. 1 root root 1331 Apr  1 01:27 CentOS-Sources.repo
-rw-r--r--. 1 root root 1002 Apr  1 01:27 CentOS-Vault.repo
[01:00 ebabenko@centos7 /etc/yum.repos.d]$ sudo touch MariaDB.repo
[sudo] password for ebabenko:
[01:00 ebabenko@centos7 /etc/yum.repos.d]$ ll
total 24
-rw-r--r--. 1 root root 1664 Apr  1 01:27 CentOS-Base.repo
-rw-r--r--. 1 root root 1309 Apr  1 01:27 CentOS-CR.repo
-rw-r--r--. 1 root root  649 Apr  1 01:27 CentOS-Debuginfo.repo
-rw-r--r--. 1 root root  290 Apr  1 01:27 CentOS-fasttrack.repo
-rw-r--r--. 1 root root 1331 Apr  1 01:27 CentOS-Sources.repo
-rw-r--r--. 1 root root 1002 Apr  1 01:27 CentOS-Vault.repo
-rw-r--r--. 1 root root    0 Jul  1 01:00 MariaDB.repo
[01:00 ebabenko@centos7 /etc/yum.repos.d]$ sudo vi MariaDB.repo

Прописываем в нем следующие данные с учетом того, что на момент установки последняя версия была 10.1.5 и версия операционной системы 64-битная. Для того, чтобы репозиторий поддерживал обновления MariaDB, нужно указать только мажорную и минорную части версии (то есть 10.1).

[mariadb]
name=MariaDB
baseurl=http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

Запускаем установку

[01:12 ebabenko@centos7 /etc/yum.repos.d]$ sudo yum install MariaDB-server MariaDB-client

[...skipped...]

Install  2 Packages (+37 Dependent packages)

Total download size: 144 M
Is this ok [y/d/N]: y

[...skipped...]

Retrieving key from https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
Importing GPG key 0x1BB943DB:
 Userid     : "MariaDB Package Signing Key <package-signing-key@mariadb.org>"
 Fingerprint: 1993 69e5 404b d5fc 7d2f e43b cbcb 082a 1bb9 43db
 From       : https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
Is this ok [y/N]: y

[...skipped...]

Replaced:
  mariadb-libs.x86_64 1:5.5.41-2.el7_0

Complete!

Я не зря обратил ваше внимание на последние строки установки (обычно у меня они завершаются через skipped...comleted). Суть заключается в том, что даже если у вас была установлена какая-то версия MySQL или предыдущая версия MariaDB, она будет деинсталирована и заменена новой версией MariaDB. В данном случае была уже предуставновлена MariaDB версии 5.5.41. Не знаю как кому, а мне данный момент очень понравился. Нет излишнего выноса мозга "А все ли было удалено перед установкой? А не будет ли каких либо конфликтов при установке?". Инсталятор сам разобрался со всеми конфликтующими версиями и произвел все нужные для нормальной работы действия.

6. Настройка MariaDB.

Итак, сервер установлен. Посмотрим, что же есть внутри конфигурации сервера

[01:21 ebabenko@centos7 /etc/yum.repos.d]$ cd /etc
[01:21 ebabenko@centos7 /etc]$ cat my.cnf
#
# This group is read both both by the client and the server
# use it for options that affect everything
#
[client-server]

#
# include all files from the config directory
#
!includedir /etc/my.cnf.d

Увы и ах, ничего толкового. Просто пустышка, но с маленьким отклонением: конфиг обращается к другим конфигурационным файлам, которые распределены по своим задачам, что дает ещё больше плюсов в сторону MariaDB. По правде говоря, такой конфиг мне даже больше нравится: нет никаких излишеств, все требуемые настройки администратор может установить сам. "Тонкую настройку" я сейчас производить не буду, да и вообще никогда не занимался тонкой настройкой нового сервера БД, если конечно это небыло связано с расширением предыдущего рабочего сервера. Причина проста: для того чтобы нормально настроить сервер, ему нужно некоторое время поработать и собрать данные, и по ним уже ориентироваться какие настройки стоит добавить или исправить. Поэтому, сейчас я этот момент упускаю, остановлюсь только на установке работы сервера с кодировкой по умолчанию UTF-8.

Добавляем строчку в mysql-clients.cnf

[01:23 ebabenko@centos7 /etc]$ sudo vi my.cnf.d/mysql-clients.cnf

[...skipped...]

[mysql]
default-character-set=utf8

[...skipped...]

А так же добавляем подобный параметр в файле server.cnf, только он будет выглядеть немного иначе

[01:23 ebabenko@centos7 /etc]$ sudo vi my.cnf.d/server.cnf

[...skipped...]

# this is only for the mysqld standalone daemon
[mysqld]
character-set-server=utf8

[...skipped...]

Запускаем сервер и проверяем, что же получилось в итоге. Если вы ещё не успели установить пароль для пользователя root, при входе на сервер он его у вас не должен запросить.

[01:28 ebabenko@centos7 /etc]$ sudo systemctl start mysql
[01:28 ebabenko@centos7 /etc]$ mysql -u root
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 10.1.5-MariaDB MariaDB Server

Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MariaDB [mysql]> show variables like "%character%"; show variables like "%collation%";
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database   | utf8_general_ci |
| collation_server     | utf8_general_ci |
+----------------------+-----------------+
3 rows in set (0.00 sec)

MariaDB [mysql]> quit
Bye

То, что и требовалось получить в результате. Теперь "ужесточим" правила для авторизации на сервере. Нужно установить пароль для пользователя root сервера БД, а так же указать, что вход на сервер возможен только из локального хоста. Все эти настройки можно и произвести в ручную методом редактирования таблицы mysql.user. Однако, для этого существует скрипт, который выполняет все перечисленные настройки.

[01:32 ebabenko@centos7 /etc]$ sudo mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none):

Для внесения изменений, потребуется ввести текущий пароль root. Если уже установлен какой-то пароль, вводим его. Но так как у меня это новая установка, то пароль ещё никакой не установлен, просто нажимаем Enter.

OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

Set root password? [Y/n] y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
 ... Success!

Следующий этап скрипта попросит установить новый пароль для root. Если вам не требуется его менять, отвечаем "n" и данный этап скрипт пропустит. Однако, если пароль никакой не установлен, или вы его все таки желаете поменять, отвечаете "y". После чего на запрос New password: вводите новый пароль, в запросе Re-enter new password: повторяете его. После ввода повтора пароля, скрипт автоматически перегрузит привилегии.

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y
 ... Success!

Следующий этап спросит, стоит ли удалять анонимных пользователей. Отвечаем "y" (не нужны нам анонимусы)

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] y
 ... Success!

Следующий шаг спросит, запретить ли удаленный доступ к серверу пользователем root. Если вы хотите получать доступ к серверу из-под пользователя root с удаленного компьютера, ответьте на этот вопрос "n" (разрешить удаленный доступ). Лично я всегда запрещаю подобные подключения, поэтому отвечаю на данный вопрос "y" (то есть запретить). Даже скажу больше, сколько пользовался сервером MySQL, а так же MariaDB, у меня ни разу не возникало необходимости использовать логин root как таковой, не то что удаленно, даже локально. Поэтому, крайне не рекомендую вам предоставлять удаленный доступ для root.

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] n
 ... skipping.

Данный шаг спросит, нужно ли удалять таблицу test, которая ставится по умолчанию во время установки сервера баз данных. Я не вижу в этом особой необходимости даже на боевом сервере. Очень часто приходится делать какие-то эксперименты над таблицами. На боевой БД этого делать, понятное дело, нельзя, а каждый раз для экспериментов создавать новую БД, то же как-то не очень хорошо. Поэтому, я эту БД оставляю как раз для таких случаев. Отвечаем "n", если хотим оставить ее в покое, или "y", если хотим удалить ее.

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y
 ... Success!

После внесенных изменений, требуется перегрузить привилегии. Поэтому отвечаем на следующий запрос "y".

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

Проверим введенные изменения.

[01:38 ebabenko@centos7 /etc]$ mysql -u root
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
[01:38 ebabenko@centos7 /etc]$ mysql -u root -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 11
Server version: 10.0.11-MariaDB MariaDB Server

Copyright (c) 2000, 2014, Oracle, SkySQL Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MariaDB [mysql]> select Host, User, Password from user;
+-----------+------+-------------------------------------------+
| Host      | User | Password                                  |
+-----------+------+-------------------------------------------+
| localhost | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
| 127.0.0.1 | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
| ::1       | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
+-----------+------+-------------------------------------------+
3 rows in set (0.00 sec)

MariaDB [mysql]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.00 sec)

MariaDB [mysql]> quit
Bye

Как видим, при попытке подключиться root-ом без пароля, сервер отказал в авторизации, вход теперь возможен только с паролем. Так же, в таблице user, остался только пользователь root с возможностью подключения по локальному хосту, а в списке баз данных test осталась не тронутой. Сервер настроен, осталось только проверить, когда он будет запускаться. Есть небольшая недоработка со стороны MariaDB:

[01:43 ebabenko@centos7 /etc]$ sudo systemctl enable mysql
mysql.service is not a native service, redirecting to /sbin/chkconfig.
Executing /sbin/chkconfig mysql on
The unit files have no [Install] section. They are not meant to be enabled
using systemctl.
Possible reasons for having this kind of units are:
1) A unit may be statically enabled by being symlinked from another unit's
   .wants/ or .requires/ directory.
2) A unit's purpose may be to act as a helper for some other unit which has
   a requirement dependency on it.
3) A unit may be started when needed via activation (socket, path, timer,
   D-Bus, udev, scripted systemctl call, ...).

Другими словами, mysql.service не является полноценным сервисом для systemctl, поэтому система рекомендует использовать старый добрый chkconfig вместо systemctl. Но при этом:

[01:44 ebabenko@centos7 /etc]$ sudo chkconfig --list mysql

Note: This output shows SysV services only and does not include native
      systemd services. SysV configuration data might be overridden by native
      systemd configuration.

      If you want to list systemd services use 'systemctl list-unit-files'.
      To see services enabled on particular target use
      'systemctl list-dependencies [target]'.

mysql           0:off   1:off   2:on    3:on    4:on    5:on    6:off

Хоть система и ругнулась, на автозагрузку mysql был установлен. Думаю, что разработчики MariaDB доработают этот недочет. Но тем не менее, данный момент не столь критичен и вполне рабочеспособный.

Продолжение статьи "Установка MariaDB + Nginx + PHP-FPM на CentOS 7 (Часть 3)".

Источники:
[1] https://mariadb.org/en/ (вернутсья к тексту)
[2] https://mariadb.com/kb/en/mariadb/mariadb-vs-mysql-features/ (вернутсья к тексту)
[3] https://mariadb.com/kb/en/mariadb/mariadb-vs-mysql-compatibility/ (вернутсья к тексту)
[4] https://mariadb.com/kb/en/mariadb/yum/ (вернутсья к тексту)