Установка и настройка 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 и так далее).
- обратите внимание на выделения полужирным — здесь нужно подставить свои данные.
- все запросы будут переводиться на локальный сервер, порт 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.
- ssl_certificate и ssl_certificate_key — пути к публичному и приватному ключам соответственно.
Теперь создаем виртуальный домен в 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