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