CentOS 7. Установка Nginx php-fpm 7 MySQL(MariaDB) FTP
В этой статье рассмотрим установку на Linux CentOS 7 Вебсервера NginX php-fpm 7.0 ftp а также базы данных MySQL и настройку системы.
Для работы нам потребуется SSH-клиент. Для Windows можно использовать PuTTY, который можно скачать на сайте http://www.chiark.greenend.org.uk/~sgtatham/putty/. Пользователи Linux могут использовать любой другой.
Запустим PuTTY в окно Host Name введем ip-адрес нашего сервера. И нажмем Open Клиент попросит ввести логин и пароль.
Вводим логин root и пароль(внимание при вводе пароль курсор не будет отображать введеные символы, вообще ничего отображать не будет, просто вводим пароль и жмем enter)Предварительные работы
Возможно в вашей системе уже есть установленные php вебсерверы базы данных и прочее перед началом установки их надо удалить
yum remove httpd* php* php-common* mysql*
CentOS сама по себе как и RedHat Linux довольно консервативная система и в репозиториях по умолчанию вы не найдете последние версии php и NginX и поэтому, нам нужно будет установить дополнительные репозитории epel и webtatic
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
Обновим систему -
yum update
После обновления смотрим какие версии php нам доступны -
yum search php7
Нам выдаст подобный список
mod_php71w.x86_64 : PHP module for the Apache HTTP Server
php70w.x86_64 : PHP scripting language for creating dynamic web sites
php70w-bcmath.x86_64 : A module for PHP applications for using the bcmath library
php70w-cli.x86_64 : Command-line interface for PHP
php70w-common.x86_64 : Common files for PHP
php70w-dba.x86_64 : A database abstraction layer module for PHP applications
php70w-devel.x86_64 : Files needed for building PHP extensions
php70w-embedded.x86_64 : PHP library for embedding in applications
php70w-enchant.x86_64 : Enchant spelling extension for PHP applications
php70w-fpm.x86_64 : PHP FastCGI Process Manager
php70w-gd.x86_64 : A module for PHP applications for using the gd graphics library
php70w-imap.x86_64 : A module for PHP applications that use IMAP
php70w-interbase.x86_64 : A module for PHP applications that use Interbase/Firebird databases
php70w-intl.x86_64 : Internationalization extension for PHP applications
php70w-ldap.x86_64 : A module for PHP applications that use LDAP
php70w-mbstring.x86_64 : A module for PHP applications which need multi-byte string handling
php70w-mcrypt.x86_64 : Standard PHP module provides mcrypt library support
php70w-mysql.x86_64 : A module for PHP applications that use MySQL databases
php70w-mysqlnd.x86_64 : A module for PHP applications that use MySQL databases
php70w-odbc.x86_64 : A module for PHP applications that use ODBC databases
php70w-opcache.x86_64 : An opcode cache Zend extension
php70w-pdo.x86_64 : A database access abstraction module for PHP applications
php70w-pdo_dblib.x86_64 : MSSQL database module for PHP
php70w-pear.noarch : PHP Extension and Application Repository framework
php70w-pecl-apcu.x86_64 : APCu - APC User Cache
php70w-pecl-apcu-devel.x86_64 : APCu developer files (header)
php70w-pecl-igbinary.x86_64 : Replacement for the standard PHP serializer
php70w-pecl-igbinary-devel.x86_64 : Igbinary developer files (header)
php70w-pecl-imagick.x86_64 : Provides a wrapper to the ImageMagick library
php70w-pecl-imagick-devel.x86_64 : Imagick developer files (header)
php70w-pecl-mongodb.x86_64 : PECL package MongoDB driver
php70w-pecl-redis.x86_64 : Extension for communicating with the Redis key-value store
php70w-pecl-xdebug.x86_64 : PECL package for debugging PHP scripts
php70w-pgsql.x86_64 : A PostgreSQL database module for PHP
php70w-phpdbg.x86_64 : Interactive PHP debugger
php70w-process.x86_64 : Modules for PHP script using system process interfaces
php70w-pspell.x86_64 : A module for PHP applications for using pspell interfaces
php70w-recode.x86_64 : A module for PHP applications for using the recode library
php70w-snmp.x86_64 : A module for PHP applications that query SNMP-managed devices
php70w-soap.x86_64 : A module for PHP applications that use the SOAP protocol
php70w-tidy.x86_64 : Standard PHP module provides tidy library support
php70w-xml.x86_64 : A module for PHP applications which use XML
php70w-xmlrpc.x86_64 : A module for PHP applications which use the XML-RPC protocol
php71w-bcmath.x86_64 : A module for PHP applications for using the bcmath library
php71w-cli.x86_64 : Command-line interface for PHP
php71w-common.x86_64 : Common files for PHP
php71w-dba.x86_64 : A database abstraction layer module for PHP applications
php71w-devel.x86_64 : Files needed for building PHP extensions
php71w-embedded.x86_64 : PHP library for embedding in applications
php71w-enchant.x86_64 : Enchant spelling extension for PHP applications
php71w-fpm.x86_64 : PHP FastCGI Process Manager
php71w-gd.x86_64 : A module for PHP applications for using the gd graphics library
php71w-imap.x86_64 : A module for PHP applications that use IMAP
php71w-interbase.x86_64 : A module for PHP applications that use Interbase/Firebird databases
php71w-intl.x86_64 : Internationalization extension for PHP applications
php71w-ldap.x86_64 : A module for PHP applications that use LDAP
php71w-mbstring.x86_64 : A module for PHP applications which need multi-byte string handling
php71w-mcrypt.x86_64 : Standard PHP module provides mcrypt library support
php71w-mysql.x86_64 : A module for PHP applications that use MySQL databases
php71w-mysqlnd.x86_64 : A module for PHP applications that use MySQL databases
php71w-odbc.x86_64 : A module for PHP applications that use ODBC databases
php71w-opcache.x86_64 : An opcode cache Zend extension
php71w-pdo.x86_64 : A database access abstraction module for PHP applications
php71w-pdo_dblib.x86_64 : MSSQL database module for PHP
php71w-pear.noarch : PHP Extension and Application Repository framework
php71w-pecl-apcu.x86_64 : APCu - APC User Cache
php71w-pecl-apcu-devel.x86_64 : APCu developer files (header)
php71w-pecl-igbinary.x86_64 : Replacement for the standard PHP serializer
php71w-pecl-igbinary-devel.x86_64 : Igbinary developer files (header)
php71w-pecl-mongodb.x86_64 : PECL package MongoDB driver
php71w-pecl-redis.x86_64 : Extension for communicating with the Redis key-value store
php71w-pecl-xdebug.x86_64 : PECL package for debugging PHP scripts
php71w-pgsql.x86_64 : A PostgreSQL database module for PHP
php71w-phpdbg.x86_64 : Interactive PHP debugger
php71w-process.x86_64 : Modules for PHP script using system process interfaces
php71w-pspell.x86_64 : A module for PHP applications for using pspell interfaces
php71w-recode.x86_64 : A module for PHP applications for using the recode library
php71w-snmp.x86_64 : A module for PHP applications that query SNMP-managed devices
php71w-soap.x86_64 : A module for PHP applications that use the SOAP protocol
php71w-tidy.x86_64 : Standard PHP module provides tidy library support
php71w-xml.x86_64 : A module for PHP applications which use XML
php71w-xmlrpc.x86_64 : A module for PHP applications which use the XML-RPC protocol
Как видим доступно php-fpm 7.1
yum install php71w-fpm.x86_64
а также если необходимо дополнительные модули например
yum install php71w-opcache php71w-devel php71w-gd php71w-pdo php71w-pear php71w-xml php71w-mcrypt php71w-mbstring php71w-interbase php71w-common
systemctl enable php-fpm.service
Запустим
systemctl start php-fpm.service
Переходим на сайт - https://downloads.mariadb.org/mariadb/repositories/#mirror=tuna&distro=CentOS&distro_release=centos7-amd64--centos7&version=10.1
Выбираем версию операционной системы и версию MySQL которую мы ходим установить CentOS 7, на сегодняшний день последняя стабильная версия MariaDB 10.1. На сайте будут указаны команды для установки последней версииСоздаем файл MariaDB.repo в папке - /etc/yum.repos.d/ с содержимым
# MariaDB 10.1 CentOS repository list - created 2017-02-11 15:12 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
Установим
yum install MariaDB-server MariaDB-client
Запустим -
systemctl start mariadb.service
Добавим в автозагрузку -
systemctl enable mariadb.service
Откроем 80 порт
iptables -A IN_public_allow -p tcp -m tcp --dport 80 -m conntrack --ctstate NEW -j ACCEPT
iptables-save > /etc/sysconfig/iptables
установим NginX
yum install nginx
Добавим в автозагрузку
systemctl enable nginx.service
Включим
systemctl start nginx.service
Если все прошло правильно то при наборе в браузере ip сервера мы увидим приветствие NginX

Запускать сервисы из под пользователя root не хорошо и небезопасно. Поэтому мы создадим пользователя с домашней папкой и настроим систему таким образом чтобы не пускать все сервисы дальше домашней папки пользователя.
Создаем пользователя например vasya и запрещаем ему доступ по SSH
useradd vasya -b /home/ -m -U -s /bin/false
Задаем новый пароль для пользователя
passwd vasya
Настройка vsftpd
Установим и настроим vsftpd
yum install vsftpd
Откроем файл /etc/vsftpd/vsftpd.conf и отредактируем его
Разрешаем вход и запись для локальных пользователей
local_enable=YES
write_enable=YES
ascii_upload_enable=YES
ascii_download_enable=YES
Выставляем права по умолчанию для файлов заливаемых пользователем по формуле 777 отнять права которые надо получить допустим 755.
777-755=22 выставляем маску 22 и все файлы у нас будут заливаться с правами 755
local_umask=022
Запретим доступ анонимным пользователям
anonymous_enable=NO
Добавим работу в пассивном режиме
pasv_min_port=50000
pasv_max_port=50020
Добавим поддрежку ipv6
listen=NO
listen_ipv6=YES
Запретим пользователю FTP выходить за пределы домашней директории
chroot_local_user=YES
chroot_list_enable=NO
Разрешим пользователю запись в корень своей домашней директории
allow_writeable_chroot=YES
Откроем файл /etc/pam.d/vsftpd Так как у нашего пользователя нет SSH доступа то чтобы работал FTP доступ закомментируем строчку
#auth required pam_shells.so
Добавим в автозагрузку
systemctl enable vsftpd.service
Откроем 21 порт и динамические порты для FTP
iptables -A IN_public_allow -p tcp -m tcp --dport 21 -m conntrack --ctstate NEW -j ACCEPTiptables -I INPUT -p tcp -m state --state NEW -m tcp -m multiport --dports 50000:50020 -j ACCEPT
iptables-save > /etc/sysconfig/iptables
Запустим FTP
systemctl start vsftpd.service
Соединяемся с сервером при помощи любого FTP клиента например FileZilla - https://filezilla-project.org/
Создаем в корневой папке пользователя следующие папки
public_html - здесь будут находится нашы сайты
session - в эту папку php будет писать сессии
tmp - папка для временных файлов php
в папке public_html создадим папку default временно для проверки работоспособности nginx и php
а также папку site.com(название вашего сайта)
Откроем файл /etc/nginx/nginx.conf
и приведем его к такому виду
user vasya;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
server_names_hash_bucket_size 128;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
client_max_body_size 50m;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name ""; #default
location / {
root /home/vasya/public_html/default;
index index.php index.html index.htm;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
root /home/vasya/public_html/default;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
server {
listen 80;
server_name site.com www.site.com;
location / {
root /home/vasya/public_html/site.com;
index index.php index.html index.htm;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
root /home/vasya/public_html/site.com;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
}
Этот конфиг настроен таким образом что при обращении к серверу по ip адресу будут отдаваться файлы из папки /home/vasya/public_html/default
А при обращении по адресу site.com или www.site.com будут отдаваться файлы из папки/home/vasya/public_html/site.com
Перезапустми Nginx
systemctl restart nginx.service
Откроем файл /etc/php-fpm.d/www.conf
Изменим имя пользователя и группу с www-data на vasya
user = vasya
group = vasya
Откроем файл /etc/php.ini
установим следующие значения
Запретить php выход за пределы домашней папки
open_basedir ="/home/vasya/"
Разрешить короткие теги(многие разработчики пишут скрипты короткими тегами)
short_open_tag = On
Установим папку для временных файлов
upload_tmp_dir = "/home/vasya/tmp/"
Установим папку для хранения сессий php
session.save_path = "/home/vasya/session/"
Перезапустим php-fpm
systemctl restart php-fpm.service
Скопируем в папку/home/vasya/public_html/default/
файл index.php со следующим содержимым
<?php phpinfo();?>
Наберем http://ваш-ip/
Если появилось phpinfo то все настроено правильно Можно заливать файлы, заводить БД и пользоваться сайтом