Установка LEMP + phpMyAdmin на CentOS 7

LEMP — набор софта, который реализует серверную платформу для хостинга сайтов с динамическим контентом. Термин является акронимом, за которым скрывается операционная система Linux, веб сервер ENginx (иногда он заменяется сервером Apache — LAMP), база данных MySQL и скриптовый язык PHP.
Сначала для получения последней версии пакета добавим официальный репозиторий:

# vim /etc/yum.repos.d/nginx.repo

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1

Подключив его просто устанавливаем nginx

# yum install nginx

пробуем запустить:

# service nginx start
Redirecting to /bin/systemctl start nginx.service

Автозагрузка тоже немного изменилась:

# chkconfig nginx on
Note: Forwarding request to 'systemctl enable nginx.service'.
ln -s '/usr/lib/systemd/system/nginx.service' '/etc/systemd/system/multi-user.target.wants/nginx.service'

По умолчанию в CentOS 7 открыт только 22 порт для коннекта по ssh. Необходимо разрешить и 80 для веб-сервера
Добавим правило:

# iptables -A IN_public_allow -p tcp -m tcp --dport 80 -m conntrack --ctstate NEW -j ACCEPT

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

# iptables-save > /etc/sysconfig/iptables

MySQL
Что бы иметь последние версии форка MariaDB добавим официальный репозиторий. Корректное содержание для файла можно сгенерировать на этом ресурсе, выбрав свой дистрибутив и версию
Для CentOS 7 текст такой

# MariaDB 10.3 CentOS repository list - created 2018-10-08 09:21 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.3/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

И устанавливаем рекомендуемые пакеты

# yum install MariaDB-server MariaDB-client -y

Мы уже умеем правильно запускать сервисы:

# systemctl start mariadb
# mysql_secure_installation

Enter current password for root (enter for none):
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!


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!

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!

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] y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

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

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

Cleaning up...

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

Thanks for using MariaDB!

И знаем как правильно добавить сервис в автозагрузку:

# systemctl enable mariadb.service

Установка интерпретатора PHP. Я сразу установлю и phpMyAdmin

# yum -y install epel-release
# yum install php-fpm php php-mysql phpMyAdmin

По умолчанию PHP-FPM работает на сетевом порту 9000. Я же для повышения как безопасности так и производительности запускаю его на доменном сокете. Так же сменим пользователя от которого будет работать сервис с apache на nginx.
Для этого в файле /etc/php-fpm.d/www.conf необходимо поменять строку listen = 127.0.0.1:9000 на listen = /var/run/php-fpm/php-fpm.sock
или быстрее просто

# sed -i 's/^listen = 127.*/listen = \/var\/run\/php-fpm\/php-fpm.sock/' /etc/php-fpm.d/www.conf
# sed -i 's/^user = apache/user = nginx/' /etc/php-fpm.d/www.conf
# sed -i 's/^group = apache/group = nginx/' /etc/php-fpm.d/www.conf
# sed -i 's/^;listen.owner = nobody/listen.owner = nginx/' /etc/php-fpm.d/www.conf
# sed -i 's/^;listen.group = nobody/listen.group = nginx/' /etc/php-fpm.d/www.conf
# sed -i 's/^;listen.mode = 0660/listen.mode = 0660/' /etc/php-fpm.d/www.conf

Кроме того по умолчанию есть параметр, который необходимо раскоментировать(удалив перед ним «;«) и заменить значение с 1 на 0 из соображений секьюрности в /etc/php.ini

# sed -i 's/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/g' /etc/php.ini

Запускаем и проверяем:

# systemctl start php-fpm.service
# ps aux | grep php-fpm
root     47055  0.0  0.2 220696  8428 ?        Ss   12:09   0:00 php-fpm: master process (/etc/php-fpm.conf)
apache   47056  0.0  0.1 220696  4056 ?        S    12:09   0:00 php-fpm: pool www
apache   47057  0.0  0.1 220696  4056 ?        S    12:09   0:00 php-fpm: pool www
apache   47058  0.0  0.1 220696  4056 ?        S    12:09   0:00 php-fpm: pool www
apache   47059  0.0  0.1 220696  4056 ?        S    12:09   0:00 php-fpm: pool www
apache   47060  0.0  0.1 220696  4052 ?        S    12:09   0:00 php-fpm: pool www

Работает, добавляем в автозагрузку:

# systemctl enable php-fpm.service

И собственно необходимо подружить вебсервер и менеджер процессов FastCGI. Мой конфиг имеет такой вид:
/etc/nginx/conf.d/default.conf

server {
    listen       80 default;
    server_name  localhost;
    root   /usr/share/nginx/html;
    index index.php index.html index.htm;

    #access_log  /var/log/nginx/log/host.access.log  main;
    location / {
	try_files $uri $uri/ =404;
    }

    error_page 404 /404.html;
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }

    location /pma/ {
        auth_basic           "O-ops! Password required";
        auth_basic_user_file /usr/share/phpMyAdmin/htpasswd;
	alias /usr/share/phpMyAdmin/;
	location ~ \.php$ {
		fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
		fastcgi_index index.php;
		include fastcgi_params;
		fastcgi_param SCRIPT_FILENAME $request_filename;
		fastcgi_ignore_client_abort off;
	}
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

Мы запаролили phpMyAdmin. Точнее пока что мы только указали, что этот локейшн запаролен. Так же нужно сгенерировать файл с доступами.

# htpasswd -cb /usr/share/phpMyAdmin/htpasswd user P@ssw0rd

Можно перезапустить сервер

# systemctl restart nginx.service

но я обычно проверяю конфиг и просто перечитываю правила:

# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
# nginx -s reload

Добавить комментарий