Задача: Разобрать свои шаги по поднятию связки Nginx + PHP + PHP-FPM + MariaDB
увы к сожалению на CentOS 7
, хотя я поклонник Ubuntu
систем, но вот из-за одного человека на текущем месте работы который уволился приходится все переделывать дабы было легко администрировать, как мои блоги:
- Реальные заметки Ubuntu & Mikrotik доступный по URL ссылке https://www.ekzorchik.ru
- Заметки Ubuntu от Ekzorchik теперь доступен по URL ссылке https://lin.ekzorchik.ru
- Заметки Windows от Ekzorchik теперь доступен по URL ссылке https://win.ekzorchik.ru
- Заметки Сети от Ekzorchik теперь доступен по URL ссылке https://net.ekzorchik.ru
У меня настроена максимальная производительность, безопасность, резервное копирование, а не то что сейчас основная ОСь CentOS 7
+ сайты в docker
которые все в разнобой, нет бекапирование и на десерт никто не знает как это все многообразие работает, и он предыдущий системный администратор уволился в конце года — теперь я поддерживают и оптимизируют этот бардак. Другого слова нет. Почему же CentOS 7
, сперва нужно сделать на ней, а после на Ubuntu 18.04 Server
все перенесу.
Текущая тестовая система (образ: CentOS-7-x86_64-Minimal-1908.iso
) развернутая под гипервизором Debian 10 + Proxmox 6 где характеристики:
CPU = 1
RAM = 2
HDD = 50
Информация по системе:
[ekzorchik@localhost ~]$ uname -a && cat /etc/os-release Linux localhost.localdomain 3.10.0-1062.9.1.el7.x86_64 #1 SMP Fri Dec 6 15:49:49 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux NAME="CentOS Linux" VERSION="7 (Core)" ID="centos" ID_LIKE="rhel fedora" VERSION_ID="7" PRETTY_NAME="CentOS Linux 7 (Core)" ANSI_COLOR="0;31" CPE_NAME="cpe:/o:centos:centos:7" HOME_URL="https://www.centos.org/" BUG_REPORT_URL="https://bugs.centos.org/" CENTOS_MANTISBT_PROJECT="CentOS-7" CENTOS_MANTISBT_PROJECT_VERSION="7" REDHAT_SUPPORT_PRODUCT="centos" REDHAT_SUPPORT_PRODUCT_VERSION="7"
Шаг №1:
Базовые шаги настройки системы перед последующим использованием:
[ekzorchik@localhost ~]$ nano default.sh #!/bin/bash sudo yum -y update && sudo yum -y upgrade sudo yum makecache fast sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config sudo rm -f /etc/localtime sudo ln -s /usr/share/zoneinfo/Europe/Moscow /etc/localtime sudo yum install -y mc epel-release unzip net-tools psmisc nano bind-utils htop atop lsof wget bzip2 traceroute epel-release yum-utils sudo systemctl start chronyd && sudo systemctl enable chronyd && sudo systemctl status chronyd | head -n5 sudo systemctl stop firewalld sudo systemctl disable firewalld sudo systemctl mask firewalld sudo firewall-cmd --state [ekzorchik@localhost ~]$ chmod +x default.sh [ekzorchik@localhost ~]$ sudo ./default.sh [ekzorchik@localhost ~]$ ip r | awk '{print $5}' | head -n1 eth0 [ekzorchik@localhost ~]$ sudo nano /etc/sysctl.conf net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.eth0.disable_ipv6 = 1 [ekzorchik@localhost ~]$ sudo sysctl -p [ekzorchik@localhost ~]$ sudo localectl set-locale LANG=en_US.UTF_8 [ekzorchik@localhost ~]$ sudo nano /etc/environment LC_ALL="en_US.UTF-8"
Шаг №2:
Устанавливаю Nginx
[ekzorchik@localhost ~]$ sudo yum install -y nginx [ekzorchik@localhost ~]$ sudo systemctl enable nginx [ekzorchik@localhost ~]$ sudo systemctl restart nginx Проверяю, что Web-сервис nginx работает: [ekzorchik@localhost ~]$ sudo netstat -tulpn | egrep 'nginx' tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 15472/nginx: master tcp6 0 0 :::80 :::* LISTEN 15472/nginx: master [ekzorchik@localhost ~]$ [ekzorchik@localhost ~]$ hostname -I 172.33.33.20
http://IP&DNS (http://172.33.33.20)
Шаг №3:
Создаю необходимую структуру сайтов, по сути это как в Ubuntu
системе:
[ekzorchik@localhost ~]$ sudo nano /etc/nginx/nginx.conf
Внутри http {…}
Прописываю
include /etc/nginx/sites-enabled/*.conf;
Итого:
user nginx; worker_processes auto; error_log /var/log/nginx/error.log; pid /run/nginx.pid; include /usr/share/nginx/modules/*.conf; events { worker_connections 1024; } http { 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; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; server_tokens off; include /etc/nginx/mime.types; default_type application/octet-stream; server { listen 80 default_server; server_name _; root /usr/share/nginx/html; location / { } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } } include /etc/nginx/sites-enabled/*.conf; } [ekzorchik@localhost ~]$ sudo mkdir /etc/nginx/{sites-available,sites-enabled} [ekzorchik@localhost ~]$ sudo nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Шаг №4:
Устанавливаю php
[ekzorchik@localhost ~]$ sudo yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm [ekzorchik@localhost ~]$ sudo yum-config-manager --disable remi-php54 [ekzorchik@localhost ~]$ sudo yum-config-manager --enable remi-php73
На заметку: Если нужна версия php 7.1 && php 7.2
, то:
sudo yum-config-manager --enable remi-php71 sudo yum-config-manager --enable remi-php72 [ekzorchik@localhost ~]$ sudo yum -y install php php-fpm php-mysqlnd php-zip php-devel php-gd php-mcrypt php-mbstring php-curl php-xml php-pear php-bcmath php-json php-pdo php-pecl-apcu php-pecl-apcu-devel [ekzorchik@localhost ~]$ php -v PHP 7.3.16 (cli) (built: Mar 17 2020 10:18:38) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.3.16, Copyright (c) 1998-2018 Zend Technologies
Шаг №5:
Настраиваю работу PHP:
[ekzorchik@localhost ~]$ sudo rm /etc/php.ini [ekzorchik@localhost ~]$ sudo nano /etc/php.ini [PHP] engine = On short_open_tag = Off precision = 14 output_buffering = 4096 zlib.output_compression = Off implicit_flush = Off unserialize_callback_func = serialize_precision = -1 disable_functions = disable_classes = zend.enable_gc = On expose_php = On max_execution_time = 30 max_input_time = 60 memory_limit = 128M error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT display_errors = Off display_startup_errors = Off log_errors = On log_errors_max_len = 1024 ignore_repeated_errors = Off ignore_repeated_source = Off report_memleaks = On html_errors = On variables_order = "GPCS" request_order = "GP" register_argc_argv = Off auto_globals_jit = On post_max_size = 8M auto_prepend_file = auto_append_file = default_mimetype = "text/html" default_charset = "UTF-8" doc_root = user_dir = enable_dl = Off cgi.fix_pathinfo=0 file_uploads = On upload_max_filesize = 2M max_file_uploads = 20 allow_url_fopen = On allow_url_include = Off default_socket_timeout = 60 [CLI Server] cli_server.color = On [Date] [filter] [iconv] [imap] [intl] [sqlite3] [Pcre] pcre.jit=0 [Pdo] [Pdo_mysql] pdo_mysql.default_socket= [Phar] [mail function] sendmail_path = /usr/sbin/sendmail -t -i mail.add_x_header = Off [ODBC] odbc.allow_persistent = On odbc.check_persistent = On odbc.max_persistent = -1 odbc.max_links = -1 odbc.defaultlrl = 4096 odbc.defaultbinmode = 1 [Interbase] ibase.allow_persistent = 1 ibase.max_persistent = -1 ibase.max_links = -1 ibase.timestampformat = "%Y-%m-%d %H:%M:%S" ibase.dateformat = "%Y-%m-%d" ibase.timeformat = "%H:%M:%S" [MySQLi] mysqli.max_persistent = -1 mysqli.allow_persistent = On mysqli.max_links = -1 mysqli.default_port = 3306 mysqli.default_socket = mysqli.default_host = mysqli.default_user = mysqli.default_pw = mysqli.reconnect = Off [mysqlnd] mysqlnd.collect_statistics = On mysqlnd.collect_memory_statistics = Off [PostgreSQL] pgsql.allow_persistent = On pgsql.auto_reset_persistent = Off pgsql.max_persistent = -1 pgsql.max_links = -1 pgsql.ignore_notice = 0 pgsql.log_notice = 0 [bcmath] bcmath.scale = 0 [browscap] [Session] session.save_handler = files session.use_strict_mode = 0 session.use_cookies = 1 session.use_only_cookies = 1 session.name = PHPSESSID session.auto_start = 0 session.cookie_lifetime = 0 session.cookie_path = / session.cookie_domain = session.cookie_httponly = session.cookie_samesite = session.serialize_handler = php session.gc_probability = 1 session.gc_divisor = 1000 session.gc_maxlifetime = 1440 session.referer_check = session.cache_limiter = nocache session.cache_expire = 180 session.use_trans_sid = 0 session.sid_length = 26 session.trans_sid_tags = "a=href,area=href,frame=src,form=" session.sid_bits_per_character = 5 [Assertion] zend.assertions = -1 [mbstring] [gd] [exif] [Tidy] tidy.clean_output = Off [soap] soap.wsdl_cache_enabled=1 soap.wsdl_cache_dir="/tmp" soap.wsdl_cache_ttl=86400 soap.wsdl_cache_limit = 5 [sysvshm] [ldap] ldap.max_links = -1 [dba] [curl] [openssl] [ekzorchik@localhost ~]$ sudo nano /etc/php-fpm.d/www.conf [www] user = nginx group = nginx ;listen = 0.0.0.0:9000 listen = 127.0.0.1:9000 ;listen = /var/run/php-fpm/php-fpm.sock listen.owner = nginx listen.group = nginx listen.allowed_clients = 127.0.0.1 pm = dynamic pm.max_children = 50 pm.start_servers = 5 pm.min_spare_servers = 5 pm.max_spare_servers = 35 slowlog = /var/log/php-fpm/www-slow.log php_admin_value[error_log] = /var/log/php-fpm/www-error.log php_admin_flag[log_errors] = on php_value[session.save_handler] = files php_value[session.save_path] = /var/lib/php/session php_value[soap.wsdl_cache_dir] = /var/lib/php/wsdlcache [ekzorchik@localhost ~]$ sudo cp /etc/php-fpm.d/www.conf /etc/php-fpm.d/www.conf.backup [ekzorchik@localhost ~]$ sudo rm /etc/php-fpm.d/www.conf [ekzorchik@localhost ~]$ sudo nano /etc/php-fpm.d/www.conf [www] user = nginx group = nginx listen = 127.0.0.1:9000 listen.owner = nginx listen.group = nginx listen.allowed_clients = 127.0.0.1 pm = dynamic pm.max_children = 50 pm.start_servers = 5 pm.min_spare_servers = 5 pm.max_spare_servers = 35 slowlog = /var/log/php-fpm/www-slow.log php_admin_value[error_log] = /var/log/php-fpm/www-error.log php_admin_flag[log_errors] = on php_value[session.save_handler] = files php_value[session.save_path] = /var/lib/php/session php_value[soap.wsdl_cache_dir] = /var/lib/php/wsdlcache [ekzorchik@localhost ~]$ sudo systemctl enable php-fpm Created symlink from /etc/systemd/system/multi-user.target.wants/php-fpm.service to /usr/lib/systemd/system/php-fpm.service. [ekzorchik@localhost ~]$ sudo systemctl start php-fpm
Шаг №6:
Создаю скрипт который служит проверкой, что Nginx + php-fpm
отрабатывает выполнение скриптов php
:
[ekzorchik@localhost ~]$ sudo nano /usr/share/nginx/html/info.php <?php phpinfo(); ?>; [ekzorchik@localhost ~]$ sudo chown -R nginx:nginx /usr/share/nginx/html/ [ekzorchik@localhost ~]$ sudo chmod -R 755 /usr/share/nginx/html/
Шаг №7:
Создаю конфигурационный файл сайта:
[ekzorchik@localhost ~]$ sudo nano /etc/nginx/sites-available/example.conf server { listen 80; server_name 172.33.33.20; set $root_path '/usr/share/nginx/html'; root $root_path; index index.php; location / { try_files $uri $uri/ $uri.html $uri.php$is_args$query_string; } error_page 500 502 503 504 /50x.html; error_page 404 /404.php; location = /50x.html {root /usr/share/nginx/html;} #location = /404.php {root $root_path;} location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param SCRIPT_NAME $fastcgi_script_name; include fastcgi_params; fastcgi_intercept_errors on; } error_log /var/log/nginx/nginx-error.log error; } [ekzorchik@localhost ~]$ sudo ln -s /etc/nginx/sites-available/example.conf /etc/nginx/sites-enabled/example.conf [ekzorchik@localhost ~]$ sudo systemctl restart nginx php-fpm.service
Шаг №8:
Проверяю, посредством браузера что скрипт отрабатывает путем обращения на URL: http://IP&DNS/info.php (http://172.33.33.20/info.php)
И скрипт выполнился
Отлично.
Шаг №9:
Устанавливаю сервис базы данных:
[ekzorchik@localhost ~]$ sudo nano /etc/yum.repos.d/mariadb.repo [mariadb] name = MariaDB baseurl = http://yum.mariadb.org/10.3/centos73-amd64 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1 [ekzorchik@localhost ~]$ sudo yum makecache fast [ekzorchik@localhost ~]$ sudo yum install -y MariaDB-server MariaDB-client [ekzorchik@localhost ~]$ rpm -qa | grep MariaDB MariaDB-common-10.3.22-1.el7.centos.x86_64 MariaDB-server-10.3.22-1.el7.centos.x86_64 MariaDB-compat-10.3.22-1.el7.centos.x86_64 MariaDB-client-10.3.22-1.el7.centos.x86_64 [ekzorchik@localhost ~]$ [ekzorchik@localhost ~]$ mysql -V mysql Ver 15.1 Distrib 10.3.22-MariaDB, for Linux (x86_64) using readline 5.1 [ekzorchik@localhost ~]$ sudo systemctl enable mariadb Created symlink from /etc/systemd/system/mysql.service to /usr/lib/systemd/system/mariadb.service. Created symlink from /etc/systemd/system/mysqld.service to /usr/lib/systemd/system/mariadb.service. Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service. [ekzorchik@localhost ~]$ sudo systemctl start mariadb [ekzorchik@localhost ~]$ sudo mysqladmin -u root password 712mbddr@ [ekzorchik@localhost ~]$ sudo mysql_secure_installation Enter current password for root (enter for none): 712mbddr@ Change the root password? [Y/n] n Remove anonymous users? [Y/n] y Disallow root login remotely? [Y/n] y Remove test database and access to it? [Y/n] y Reload privilege tables now? [Y/n] y [ekzorchik@localhost ~]$ sudo mysql -u root -p712mbddr@ -e "show databases" +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | +-----------------a---+ [ekzorchik@localhost ~]$
Отлично:
Итого, я получил свою собственную проработанную структуру Linux Nginx PHP-FPM Mariadb.
На этом пока все, с уважением автор блога Олло Александр aka ekzorchik.