Установка и настройка WEB сервера NGINX + Apache (httpd) + MariaDB (MySQL) + PHP + PHP-FPM (fastCGI) + FTP + PHPMyAdmin + Memcached + Postfix на CentOS 8

Материал из Шпаргалка знаний
Перейти к навигации Перейти к поиску

Веб-сервер, настроенный по данной инструкции можно будет использовать для размещения собственных сайтов в локальной сети или сети Интернет.

После установки на сервер CentOS 8 (Minimal) (x86_64) 4Gb RAM, 4 CPU, 50Gb SSD, приступаем к подготовке сервера.

Проверить какая у вас версия ОС можно командой:

cat /etc/*release

Подготовка сервера

Обновляем CentOS 8:

dnf update -y

Устанавливаем репозиторий EPEL и дополнительные пакеты для загрузки и распаковки:

dnf install epel-release wget nano mc unzip open-vm-tools dnf-utils net-tools diffutils -y

Настройка времени

Устанавливаем корректный часовой пояс:

\cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime

* данной командой мы установим часовой пояс по московскому времени.

Теперь устанавливаем и запускаем службу для автоматической синхронизации времени:

dnf install chrony -y
systemctl enable chronyd
systemctl start chronyd

Безопасность

Если на сервере используется SELinux (по умолчанию, на системах RPM), рекомендуется ее отключить.

sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config
setenforce 0

* первая команда редактирует конфигурационный файл, чтобы SELinux не запускался автоматически, вторая — отключает его разово.

Брандмауэр

Для нормальной работы WEB сервера нужно открыть порты:

  • 80 — основной порт (http);
  • 8080 — дополнительный порт (http);
  • 443 — SSL порт (https);
  • 20, 21 — порты нужны для работы (FTP);
  • 60000-65535 — порты необходимы для работы FTP (динамические порты для пассивного режима);
  • 25, 465, 587 — порты нужны для работы почтового сервера по SMTP;
firewall-cmd --permanent --add-port={80,443,8080}/tcp
firewall-cmd --permanent --add-port={20,21,60000-65535}/tcp
firewall-cmd --permanent --add-port={25,465,587}/tcp
firewall-cmd --reload

* Команда (firewall-cmd --reload) перезапускает firewalld, чтобы применить новые правила.

Установка NGINX

Для установки самой свежей стабильной версии nginx создаем конфиг:

nano /etc/yum.repos.d/nginx.repo

Есть 2 версии nginx. Stable version (Стабильная) и Mainline version (Основная). Основная версия — это последняя версия nginx с новыми функционалом. Стабильная версия — это версия, которая нацелена на стабильность и безопасность. Новый функционал не добавляется.

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/8/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/8/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

Можно прописать в файл все два репозитория. Если нужна стабильная версия, тогда ее нужно указать программе dnf, что бы она использовала репозиторий стабильной версии.

dnf config-manager --set-enabled nginx-stable

Устанавливаем NGINX:

dnf install nginx -y

Внесем небольшую корректировку в файл nginx.conf:

nano /etc/nginx/nginx.conf
http {
    ...
    server_names_hash_bucket_size 64;
    ....
}

* на практике, может встретиться ошибка could not build server_names_hash, you should increase server_names_hash_bucket_size: 32. Она возникает при большом количестве виртуальных серверов или если один из них будет иметь длинное название. Данная строка в конфиге исправит ситуацию.

Разрешаем автозапуск сервиса и запустим его:

systemctl enable nginx
systemctl start nginx

Проверим, что веб-сервер работает. Для этого открываем браузер на другом компьютере, который находится в одной сети и вводим в адресной строке IP-адрес сервера. В итоге мы должны увидеть заголовок «Welcome to nginx!»:

  • обратите внимание, что данное приветствие может иметь и другой вид.

Установка PHP и PHP-FPM

Если мы введем команду: yum install php php-fpm , то у нас репозитария установиться php версии 7.4, но нам нужно php версии 8.2. Добавляем репозиторий:

dnf -y install https://rpms.remirepo.net/enterprise/remi-release-8.rpm

Теперь вы можете перечислить модули PHP и посмотреть, был ли добавлен PHP 8.2

dnf module list php

После этого теперь вы можете сбросить модуль и включить PHP 8.2:

dnf module reset php
dnf module install php:remi-8.2
dnf module enable php:remi-8.2

И устанавливаем php и PHP-FPM версии 8.2:

dnf install php php-fpm -y

Проверяем:

php -r "phpinfo();" | grep "PHP Version"

Установим наиболее популярные модули, которые могут пригодится в процессе эксплуатации веб сервера.

dnf install php-{common,spl,hash,ctype,cli,gd,ldap,odbc,pdo,pecl-memcache,opcache,pear,xml,xmlrpc,mbstring,json,snmp,soap,intl,devel,apcu,igbinary,curl,imagick,fpm,zip} -y
dnf install libicu-devel -y

Запускаем php-fpm и разрешаем его автозапуск:

systemctl enable php-fpm --now

Настройка связки NGINX + PHP

Открываем файл для настройки виртуального домена по умолчанию. В зависимости от версии CentOS 8 пути могут различаться:

1) nano /etc/nginx/conf.d/default.conf


2) nano /etc/nginx/nginx.conf
3) nano /etc/nginx/nginx.conf.default

В секции location редактируем параметр index на следующее значение:

location / {
        index  index.php index.html index.htm;
    }
  • добавляем index.php в начало списка. Если параметра index нет, создаем его.

А внутри секции server добавим следующее:

    location ~ \.php$ {
        set $root_path /usr/share/nginx/html;
        fastcgi_pass unix:/run/php-fpm/www.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $root_path$fastcgi_script_name;
        include fastcgi_params;
        fastcgi_param DOCUMENT_ROOT $root_path;
    }
  • где /usr/share/nginx/html — корневой путь хранения скриптов; unix:/run/php-fpm/www.sock — файл для взаимодействия с php-fpm.

Открываем настройки php-fpm:

nano /etc/php-fpm.d/www.conf

Проверяем, настройки параметров:

listen = /run/php-fpm/www.sock
...
listen.group = nginx
...
  • listen должен иметь значение /run/php-fpm/www.sock (путь до сокетного файла, который мы указали в конфигурационном файле nginx); listen.group указывает, какую группу назначить сокетному файлу.

... иначе, меняем значение. После перезагружаем php-fpm:

systemctl restart php-fpm
  • в данном примере мы указываем, что php-fpm будет использовать сокетный файл /run/php-fpm/www.sock для взаимодействия. Этот файл мы указали выше в настройке NGINX.

Проверяем правильность настроек nginx:

nginx -t

Если все настроено верно, то видим следующее:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

И перезагружаем его:

systemctl restart nginx

Создаем index.php в каталоге сайта по умолчанию со следующим содержимым:

nano /usr/share/nginx/html/index.php
<?php phpinfo(); ?>

Открываем в браузере IP-адрес нашего сервера. Теперь мы должны увидеть сводную информацию по PHP и его настройкам, например:

Установка MariaDB или MySQL

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

Генерируем репозиторий mariadb.repo.

Скачиваем скрипт из оф.сайта для генерации репозитория mariadb.repo и даем ему право на выполнение.

cd ~
wget https://downloads.mariadb.com/MariaDB/mariadb_repo_setup
chmod +x mariadb_repo_setup

После предоставления необходимых прав, нужно запустить этот скрипт и он уже сгенерирует репозиторий.

./mariadb_repo_setup

Итак, после выполнения скрипта файл mariadb.repo будет сгенерирован в директории /etc/yum.repos.d.

Заходим и смотрим, что он там намутил...

nano /etc/yum.repos.d/mariadb.repo

После генерации репозитория теперь запускаем установку самой MariaDB:

dnf install mariadb mariadb-server --allowerasing
  • для установки mysql выполняем команду dnf install mysql

Чтобы, проверить какие пакеты установились нужно использовать команду:

yum list installed | grep mariadb

Разрешаем автозапуск и запускаем СУБД:

systemctl enable mariadb --now
  • для работы с mysql меняем mariadb на mysql.

Проверьте состояние службы MariaDB, выполнив следующую команду.

systemctl status mariadb

Если у вас включен брандмауэр, тогда нужно добавить MariaDB в правило брандмауэра. Для этого выполните следующую команду.

firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload

Сразу создаем пароль для учетной записи root:

mysqladmin -u root password

Защита сервера MariaDB на CentOS 8

В качестве последнего шага нам нужно запустить безопасный сценарий установки MariaDB. Этот скрипт позаботится о пароле root, установки привилегий, удалении тестовых баз данных, запрете входа в систему с root правами.

mysql_secure_installation

Далее вводим пароль который создавали на предыдущем шаге и везде отвечаем: Y

[root@webserver ~]# 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):
OK, successfully used password, moving on...

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

You already have a root password set, so you can safely answer 'n'.

Change the root password? [Y/n] n
 ... skipping.

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!

PHP + MariaDB (MySQL)

Для возможности подключаться к базе данных скриптами PHP необходимо установить следующие модули:

dnf install php-mysqli php-mysql -y

После перезагружаем php-fpm:

systemctl restart php-fpm

И открываем наш сайт в браузере. В phpinfo появится новая секция MySQL:


* нас не должно смущать, что установили мы mariadb, а заголовок mysql. Если посмотреть в таблицу, можно увидеть ячейку Client API version, в которой указано, что используется именно mariadb.

Установка phpMyAdmin

Переходим на сайт разработчика phpMyAdmin (https://www.phpmyadmin.net/files/) и копируем ссылку на нужную нам версию, например, последнюю:

Воспользовавшись скопированной ссылкой, скачиваем архив с установочными файлами:

cd ~
wget https://files.phpmyadmin.net/phpMyAdmin/5.2.1/phpMyAdmin-5.2.1-all-languages.zip

Распаковываем скачанный архив:

unzip phpMyAdmin-*-all-languages.zip

Создаем каталог для phpmyadmin:

mkdir /usr/share/phpMyAdmin

... и переносим в него содержимое распакованного архива:

mv phpMyAdmin-*-all-languages/* /usr/share/phpMyAdmin/

Задаем владельца для каталога:

chown -R apache:apache /usr/share/phpMyAdmin

Теперь создадим для phpmyadmin отдельный виртуальный домен в NGINX:

nano /etc/nginx/conf.d/phpMyAdmin.conf

И добавим в него следующее содержимое:

server {
        listen       80;
        server_name  phpmyadmin.putyato.local;
        set $root_path /usr/share/phpMyAdmin;

        location / {
                root $root_path;
                index index.php;
        }

        location ~ \.php$ {
                fastcgi_pass unix:/run/php-fpm/www.sock;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $root_path$fastcgi_script_name;
                include fastcgi_params;
                fastcgi_param DOCUMENT_ROOT $root_path;
                fastcgi_read_timeout 300;
        }
}

* где phpmyadmin.putyato.local — адрес для виртуального домена, именно этот адрес должен быть введен в адресную строку браузера, чтобы открылся нужный сайт. Поэтому если нет возможности зарегистрировать домен и имя узла в DNS, можно воспользоваться локальным файлом hosts. /usr/share/phpMyAdmin — это каталог, в который по умолчанию устанавливается phpMyAdmin.

После перезапускаем NGINX и php-fpm:

systemctl reload nginx
systemctl restart php-fpm

И открываем в браузере наш домен, в данном примере, http://phpmyadmin.putyato.local. Откроется форма для авторизации — вводим логин root и пароль, который мы указали после установки и запуска mariadb.

Установка Memcached

Первым этапом мы установим и настроим сервис memcached. Вторым — модуль php-memcached.

Сервис memcached

Выполняем установку пакетов:

dnf install memcached libmemcached -y

Создаем или открываем на редактирование конфигурационный файл для запуска сервиса:

nano /etc/sysconfig/memcached

Приводим его к виду:

PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="512"
OPTIONS="-l 127.0.0.1 -U 0"

* где PORT указываем на каком порту будет слушать сервис кэширования; USER — пользователь, под которым должен запускаться сервис; MAXCONN — максимальное число одновременных подключений; CACHESIZE — размер под кэш в мегабайтах; OPTIONS — параметры запуска (в данном примере наш сервис будет принимать запросы только с адреса локальной петли).

После разрешаем автозапуск и запускаем сервис кэширования:

systemctl enable memcached --now

Модуль для php

Переходим на страницу загрузки memcached сайта http://pecl.php.net/package/memcached и копируем ссылку на стабильную версию memcached:

Обратите внимание, что у каждой версии пакета есть свои требования к версии PHP. Внимательно изучаем, подойдет ли версия php-memcached для нашего сервера.

Скачиваем архив, ссылку на который мы скопировали:

wget http://pecl.php.net/get/memcached-3.2.0.tgz

Устанавливаем пакеты, необходимые для сборки php-pecl-memcached:

dnf install php-devel zlib-devel make
dnf install dnf-plugins-core -y
dnf config-manager --set-enabled powertools
dnf install libmemcached-devel -y

Распаковываем скачанный архив:

tar -xvzf memcached-*.tgz

Переходим в распакованный каталог:

cd memcached-*/

Запускаем компиляцию php-расширения:

phpize

Конфигурируем исходник:

./configure

Собираем расширение:

make

Копируем созданный модуль в каталог php-модулей:

cp modules/memcached.so /usr/lib64/php/modules/

Создаем конфигурационной файл для подключения расширения:

nano /etc/php.d/20-memcached.ini
extension=memcached.so

После установки модуля перезапускаем php-fpm:

systemctl restart php-fpm

Чтобы проверить, что модуль memcached работаем, открываем наш сайт в браузере — в phpinfo должна появиться новая секция:

... или вводим команду:

php -m | grep memcached

Мы должны получить:

memcached

Установка и настройка FTP-сервера

В качестве FTP-сервера будем использовать ProFTPd, так как он позволяет авторизовываться под uid системных учетных записей.

ProFTPd можно устанавливать командой:

dnf install proftpd -y

Загружаем скрипт ftpasswd:

wget http://www.castaglia.org/proftpd/contrib/ftpasswd -P /etc/proftpd

Разрешаем запуск на выполнение скрипта:

chmod +x /etc/proftpd/ftpasswd

Создаем виртуального пользователя:

/etc/proftpd/ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=ftpwww --uid=48 --gid=48 --home=/var/www --shell=/sbin/nologin
  • где

/etc/proftpd/ftpd.passwd — путь до файла, в котором хранятся пользователи;

ftpwww — имя пользователя (логин);

uid и gid — идентификаторы пользователя и группы системной учетной записи (apache);

/var/www — домашний каталог пользователя;

/sbin/nologin — оболочка, запрещающая локальный вход пользователя в систему.

Изменим права для созданного файла с паролями:

chmod 440 /etc/proftpd/ftpd.passwd

* в противном случае, при запуске proftpd мы получим ошибку «...fatal: AuthUserFile: unable to use /etc/proftpd.d/ftpd.passwd: Operation not permitted...»

Открываем на редактирование конфигурационный файл proftpd:

nano /etc/proftpd.conf

И редактируем следующее (комментируем):

#AuthOrder ...

Создадим конфигурационный файл со своими настройками:

nano /etc/proftpd/conf.d/custom.conf

И добавим следующее:

UseIPv6 off
IdentLookups off
PassivePorts 60000 65535

RequireValidShell off
AuthUserFile /etc/proftpd/ftpd.passwd
AuthPAM off
LoadModule mod_auth_file.c
AuthOrder mod_auth_file.c

* где 60000 - 65535 — диапазон динамических портов для пассивного режима.

Разрешаем автозапуск FTP-серверу и запускаем его:

systemctl enable proftpd --now

Пробуем подключиться к серверу, использую любые FTP-клиенты, например, FileZilla, Total Commander или тот же браузер.

Это базовая и самая простая настройка ProFTPd, но если необходимо настроить TLS или хранить виртуальных пользователей в базе MySQL, читайте подробнее инструкцию по настройке ProFTPd на CentOS.

Apache (httpd)

Несмотря на то, что мы установили и настроили PHP-FPM, Apache нам понадобится, как минимум, по двум причинам. Во-первых, многие сайты используют файл .htaccess, который читает Apache. Во-вторых, последний включает большое число модулей, которые может использовать портал.

В некоторых случаях, можно обойтись без Apache, но в данной инструкции мы опишем процедуру его установки и настройки.

И так, устанавливаем httpd:

dnf install httpd -y

Заходим в настройки:

nano /etc/httpd/conf/httpd.conf

И редактируем следующее:

Listen 8080

* наш веб-сервер будет слушать на порту 8080, так как на 80 уже работает NGINX.

<IfModule dir_module>
    DirectoryIndex index.php index.html
</IfModule>

* если не указан конкретный скрипт, сначала веб-сервер пытается найти и запустить index.php, затем index.html

Добавляем:

<Directory /var/www/*/www>
    AllowOverride All
    Options Indexes ExecCGI FollowSymLinks
    Require all granted
</Directory>

* где Directory — разрешенные каталоги для запуска из apache; Options — разрешенные опции; Require — с каких IP-адресов можно открывать сайты, определенные в данном каталоге. Итого, мы разрешаем все каталоги в /var/www, но только если следующий каталог будет www; разрешаем опции Indexes (возвращает список файлов, если нет индексного файла, например, index.php), ExecCGI (разрешены сценарии CGI), FollowSymLinks (включены символические ссылки в этом каталоге); доступ для данных каталогов разрешен со всех адресов (all granted).

Проверяем синтаксис конфигурационного файла httpd:

apachectl configtest

И если получаем ответ:

Syntax OK

... разрешаем автозапуск и запускаем службу:

systemctl enable httpd
systemctl start httpd

Создаем php-файл со следующим содержимым:

nano /var/www/html/index.php
<?php phpinfo(); ?>

Открываем браузер и вводим в адресную строку IP-адрес нашего сервера и добавляем :8080 (http://<IP-адрес нашего сервера>:8080). Откроется привычная нам страница с информацией о PHP.

В разделе «PHP Variables» мы должны увидеть Apache для опции $_SERVER['SERVER_SOFTWARE']:

NGINX + Apache

Ранее нами была настроена связка nginx + php-fpm. Теперь проверяем совместную работу первого с apache.

Открываем конфигурационный файл nginx:

nano /etc/nginx/conf.d/default.conf
  • если при настройке nginx мы редактировали файл /etc/nginx/nginx.conf, то необходимо открыть его.

Находим наш настроенный location для php-fpm:

...
    location ~ \.php$ {
            fastcgi_pass unix:/run/php-fpm/www.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $root_path$fastcgi_script_name;
            include fastcgi_params;
            fastcgi_param DOCUMENT_ROOT $root_path;
    }
...

и меняем на:

...
    location ~ \.php$ {
        proxy_pass http://127.0.0.1:8080;
        proxy_redirect     off;
        proxy_set_header   Host             $host;
        proxy_set_header   X-Forwarded-Proto $scheme;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    }
...

Проверяем и перезапускаем nginx:

nginx -t
systemctl restart nginx

Пробуем открыть в браузере IP-адрес нашего сервера — должна открыться та же страница, что при проверке Apache (с добавлением 8080):

Apache Real IP

Так как все запросы на httpd приходят от NGINX, они воспринимаются как от IP-адреса 127.0.0.1. На практике, это может привести к проблемам, так как некоторым сайтам необходимы реальные адреса посетителей.

Для решения проблемы будем использовать модуль mod_rpaf. Устанавливаем набор разработчика для apache:

dnf install httpd-devel gcc unzip redhat-rpm-config -y

Переходим в каталог /usr/local/src, Скачиваем модуль, Распаковываем его, Переходим в распакованный каталог, Собираем модуль и устанавливаем его:

cd /usr/local/src
wget https://github.com/gnif/mod_rpaf/archive/stable.zip
unzip stable.zip
cd mod_rpaf-stable/
make
make install

* при возникновении ошибки ./apxs.sh: line 15: -c: command not found, необходимо поставить which командой dnf install which.

Создаем конфигурационный файл со следующим содержимым:

nano /etc/httpd/conf.d/mod_rpaf.conf
LoadModule              rpaf_module modules/mod_rpaf.so
RPAF_Enable             On
RPAF_ProxyIPs           127.0.0.1
RPAF_SetHostName        On
RPAF_SetHTTPS           On
RPAF_SetPort            On
RPAF_ForbidIfNotProxy   Off

Перезапускаем httpd:

systemctl restart httpd

Для проверки настройки открываем на редактирование созданный index-файл для httpd:

nano /var/www/html/index.php
<?php echo $_SERVER['REMOTE_ADDR'] ?>

Открываем браузер и вводим в адресную строку IP-адрес нашего сервера. Мы должны увидеть внешний адрес компьютера, с которого обращаемся к серверу.

Postfix

Устанавливаем postfix командой:

dnf install postfix -y

Теперь нам необходимо сделать несколько простых настроек:

nano /etc/postfix/main.cf

Редактируем:

...
myorigin = $mydomain
...
inet_protocols = ipv4
...

Добавляем:

smtp_generic_maps = hash:/etc/postfix/generic_map

* myorigin — имя домена, которое будет подставляться всем отправляемым сообщениям без явного указания оного; inet_protocols — задает версию IP, с которой будет работать Postfix (если на нашем сервере используется ipv6, значение параметра стоит оставить all); smtp_generic_maps указывает на карту с общими правилами пересылки.

Открываем карту пересылки:

nano /etc/postfix/generic_map

И добавляем:

@putyato.ru    no-reply@putyato.ru

* данной настройкой мы будем подставлять всем отправляемым письмам без поля FROM адрес no-reply@putyato.ru.

Создаем карту: Открываем карту пересылки:

postmap /etc/postfix/generic_map

Для применения настроек перезагружаем почтовый сервер:

systemctl restart postfix

Тюнинг веб-сервера

PHP

Открываем на редактирование следующий файл:

nano /etc/php.ini

И правим следующее:

upload_max_filesize = 512M
...
post_max_size = 512M
...
short_open_tag = On
...
date.timezone = "Europe/Moscow"

Перезапускаем php-fpm и httpd:

systemctl restart php-fpm
systemctl restart httpd

NGINX

Открываем на редактирование следующий файл:

nano /etc/nginx/nginx.conf

И правим следующее:

worker_processes  auto;

И внутри секции http добавляем:

client_max_body_size 512M;

После перезапускаем nginx:

systemctl restart nginx

Создание первого сайта

Задаем переменную, значение которой будет домен сайта:

TMP_SITE=putyato.ru
  • где putyato.ru — имя домена. Нам будет намного удобнее копировать и вставлять команды с переменной (не придется править после копипасты).

Создаем новый файл виртуального домена NGINX:

nano /etc/nginx/conf.d/$TMP_SITE.conf
  • обязательно на конце должен быть .conf, так как только такие файлы веб-сервер подгружает в конфигурацию.

И добавляем следующее содержимое. Для HTTP:

server {
    listen       80;
    server_name  putyato.ru www.putyato.ru;
    set $root_path /var/www/putyato.ru/www;

    access_log /var/www/putyato.ru/log/nginx/access_log;
    error_log /var/www/putyato.ru/log/nginx/error_log;
    
    gzip  on;
    gzip_disable "msie6";
    gzip_min_length 1000;
    gzip_vary on;
    gzip_proxied    expired no-cache no-store private auth;
    gzip_types      text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;

    root   $root_path;

    location / {
        proxy_pass http://127.0.0.1:8080/;
        proxy_redirect     off;
        proxy_set_header   Host             $host;
        proxy_set_header   X-Forwarded-Proto $scheme;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    }
    
    location ~* ^.+\.(jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|doc|docx|xls|xlsx|exe|pdf|ppt|tar|wav|bmp|rtf|js)$ {
            expires modified +1w;
    }
}
  • где putyato.ru — домен, для которого создается виртуальный домен; /var/www/putyato.ru — каталог, в котором будет размещаться сайт.
    • все запросы будут переводиться на локальный сервер, порт 8080, на котором работает apache, кроме обращений к статическим файла (jpg, png, css и так далее).
      • обратите внимание на выделения полужирным — здесь нужно подставить свои данные.

Для HTTPS:

server {
    listen 80;
    server_name putyato.ru www.putyato.ru;
    location ~ /.well-known {
        root /usr/share/nginx/html;
        allow all;
    }
    if ($uri !~ /.well-known){
        return 301 https://$host$request_uri;
    }
}

server {
    listen       443 ssl;
    ssl on;  #Если возникнет ошибка, то закомментировать эту строку.
    ssl_certificate /etc/nginx/ssl/putyato.ru/fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/putyato.ru/privkey.pem;

    server_name  putyato.ru www.putyato.ru;
    set $root_path /var/www/putyato.ru/www;

    access_log /var/www/putyato.ru/log/nginx/access_log;
    error_log /var/www/putyato.ru/log/nginx/error_log;
    
    gzip  on;
    gzip_disable "msie6";
    gzip_min_length 1000;
    gzip_vary on;
    gzip_proxied    expired no-cache no-store private auth;
    gzip_types      text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;

    root   $root_path;

    location ~ /.well-known {
        root /usr/share/nginx/html;
        allow all;
    }

    location / {
        proxy_pass http://127.0.0.1:8080/;
        proxy_redirect     off;
        proxy_set_header   Host             $host;
        proxy_set_header   X-Forwarded-Proto $scheme;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    }
    
    location ~* ^.+\.(jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|doc|docx|xls|xlsx|exe|pdf|ppt|tar|wav|bmp|rtf|js)$ {
            expires modified +1w;
    }
}
  • в первой секции server мы перенаправляем все запросы по незащищенному http на https.
    • ssl_certificate и ssl_certificate_key — пути к публичному и приватному ключам соответственно.
      • для получения бесплатного сертификата читайте статью Получение бесплатного SSL сертификата Let's Encrypt.

Теперь создаем виртуальный домен в Apache:

nano /etc/httpd/conf.d/$TMP_SITE.conf
<VirtualHost *:8080>
    Define root_domain putyato.ru
    Define root_path /var/www/putyato.ru

    ServerName ${root_domain}
    ServerAlias www.${root_domain}
    DocumentRoot ${root_path}/www

    ErrorLog     ${root_path}/log/apache/error_log
    TransferLog  ${root_path}/log/apache/access_log
</VirtualHost>

Создаем каталоги для сайта:

mkdir -p /var/www/$TMP_SITE/{www,tmp}
mkdir -p /var/www/$TMP_SITE/log/{nginx,apache}

Создаем индексный файл со следующим содержимым:

nano /var/www/$TMP_SITE/www/index.php
<?php echo "<h1>Hello from putyato.ru</h1>"; ?>

Задаем права на папки:

chown -R apache:apache /var/www/$TMP_SITE
chmod -R 775 /var/www/$TMP_SITE

Проверяем корректность настроек конфигурационных файлов:

nginx -t
apachectl configtest

Перезапускаем веб-сервер:

systemctl reload nginx
systemctl reload httpd

Открываем сайт в браузере.


При необходимости, создаем базу данных.

mysql -uroot -p
> CREATE DATABASE site1 DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
> GRANT ALL PRIVILEGES ON site1.* TO dbuser@localhost IDENTIFIED BY 'password' WITH GRANT OPTION;
  • данными sql-командами мы создаем базу данных site1 и предоставляем к ней доступ для учетной записи dbuser с паролем password. При желании сделать соединение более безопасным, можно убрать WITH GRANT OPTION.

Установка MediaWiki

Убедитесь, что ваша система соответствует требованиям к установке:

https://www.mediawiki.org/wiki/Manual:Installation_requirements/ru

Загрузите tar-файл MediaWiki с официальной страницы загрузки:

https://www.mediawiki.org/wiki/Download/ru

Распаковываем скаченный архив, на сегодняшний день последняя версия архива: mediawiki-1.40.0.zip И переносим содержимое архива на сервер в папку:

/var/www/wiki.putyato.ru/www

Настройка базы данных если требуется, но скрипт LocalSettings при первом запуске MediaWIKIэто делает автоматически.

Следующие команды создают базу данных с именем my_wiki, пользователя с именем wikiuser, и установят разрешения для пользователя в этой базе данных.

CREATE DATABASE my_wiki;
CREATE USER 'wikiuser'@'localhost' IDENTIFIED BY 'database_password';
GRANT ALL PRIVILEGES ON my_wiki.* TO 'wikiuser'@'localhost' WITH GRANT OPTION;

Запуск установочного скрипта

Далее, завершите установку MediaWiki, перейдя по URL вашей установленной MediaWiki в вашем веб-браузере: Следуйте инструкциям в Manual:Настройка скрипта.

https://www.mediawiki.org/wiki/Manual:Config_script/ru

Полученный файл LocalSettings.php переносим в корневую папку с MediaWiki:

/var/www/wiki.putyato.ru/www

Расширенные настройки файла LocalSettings.php и частые вопросы:

https://www.mediawiki.org/wiki/Manual:FAQ/ru

Можно скачать файл LocalSettings.php с моими настройками и заменить старый. Но после скачивания файла, следует в этом файле установить свой пароль на БД.

$wgDBpassword = "Указываем свой пароль на БД";
cd /var/www/wiki.putyato.ru/www
wget "https://cloud.putyato.ru/index.php/s/pSRkwEXBffXH7iQ/download/LocalSettings.php" --no-check-certificate -O LocalSettings.php

Как убрать : Заглавная страница.

Запускаем наш сайт с префиксом: ?title=MediaWiki:Mainpage

http://wiki.putyato.ru?title=MediaWiki:Mainpage

Вместо Заглавная страница, вписываем свое название.- Шпаргалка знаний.

Так же можно править и меню слева: ?title=MediaWiki:Sidebar