Установка MediaWiki на CentOS 7 с Nginx и SSL

Важно: инструкция рассчитана на CentOS 7 с правами root. Перед началом сделайте бэкап важных данных и проверьте, что у вас есть статический публичный DNS-запись для домена в конфигурации Let’s Encrypt.
О чём эта статья
- Краткий обзор задач и требуемых компонентов
- Пошаговая установка: Nginx, PHP-FPM (PHP 7.0), MariaDB, MediaWiki
- Генерация и установка SSL через Let’s Encrypt
- Настройка virtual host в Nginx и финальная веб-инсталляция MediaWiki
- Дополнительно: безопасность, автоматическое продление сертификата, проверка работоспособности и распространённые ошибки
Целевые варианты запроса
- установка MediaWiki на CentOS 7
- MediaWiki Nginx CentOS 7 LEMP
- развернуть MediaWiki с SSL
- установка PHP-FPM MariaDB MediaWiki
Перед началом — требования
- Сервер с CentOS 7, доступ под root или sudo-пользователь
- Домен, указывающий на IP сервера (нужен для Let’s Encrypt)
- Открытые порты 80 и 443 в фаерволе
- Рекомендуется: snapshot или резервная копия системы перед изменениями
Шаг 0 — Короткая методология развертывания
- Подготовка системы (обновление, репозитории)
- Установка компонентов LEMP: Nginx → PHP-FPM → MariaDB
- Загрузка кода MediaWiki и установка зависимостей
- Получение SSL (Let’s Encrypt) и настройка Nginx виртуального хоста
- Веб-инсталляция MediaWiki и проверка
- Финальная безопасность и обслуживание
Шаг 1 — Установка Nginx на CentOS 7
На CentOS 7 пакет Nginx обычно доступен через EPEL. Обновите систему и добавьте репозиторий EPEL:
yum -y update
yum -y install epel-release
Установите Nginx и включите автозапуск:
yum -y install nginx
systemctl start nginx
systemctl enable nginx
Проверьте, что сервер слушает порты (HTTP/HTTPS):
netstat -plntu
Важно: если netstat не установлен, используйте ss:
ss -plntu
Если сервер размещается за NAT/облачным балансировщиком, убедитесь, что проброшены порты 80/443.
Шаг 2 — Установка и настройка PHP-FPM (PHP 7.0)
MediaWiki 1.30 совместима с PHP 7.0. В примере используются пакеты из репозитория webtatic.
Добавьте webtatic и установите PHP со всеми нужными расширениями:
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
yum -y install ImageMagick php70w-fpm php70w-intl php70w-xml php70w-curl php70w-gd php70w-mbstring php70w-mysql php70w-cli php70w-pear php70w-pecl-apcu
Настройте PHP-FPM и php.ini:
vim /etc/php.ini
Найдите и измените:
cgi.fix_pathinfo=0
Это предотвращает проблемы с обработкой путей.
Отредактируйте пул www в PHP-FPM:
vim /etc/php-fpm.d/www.conf
Установите пользователя и группу на nginx и слушаемый сокет:
user = nginx
group = nginx
listen = /run/php-fpm/php-fpm.sock
listen.owner = nginx
listen.group = nginx
listen.mode = 0660
Разрешите переменным окружения:
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
Создайте директорию для сессий и задайте права:
mkdir -p /var/lib/php/session/
chown -R nginx:nginx /var/lib/php/session/
Запустите PHP-FPM и включите автозапуск:
systemctl start php-fpm
systemctl enable php-fpm
Проверьте наличие сокета:
netstat -pl | grep php
Примечание по SELinux: если на сервере включён SELinux, нужно добавить контексты для сокета и /var/www, либо временно переключить SELinux в permissive при отладки. Лучше настроить контексты: chcon -R -t httpd_sys_rw_content_t /var/www/mediawiki и соответствующие правила для сокета.
Шаг 3 — Установка и настройка MariaDB
MediaWiki может работать с MySQL/MariaDB. Установим MariaDB:
yum -y install mariadb mariadb-server
systemctl start mariadb
systemctl enable mariadb
Запустите безопасную настройку:
mysql_secure_installation
Ответьте утвердительно на изменения (установка root-пароля, удаление анонимных пользователей, удаление тестовой БД).
Создайте базу и пользователя для MediaWiki (замените mediawikidb, mediawiki, mypassword на свои значения):
mysql -u root -p
# в MySQL shell:
create database mediawikidb;
grant all privileges on mediawikidb.* to mediawiki@'localhost' identified by 'mypassword';
flush privileges;
exit;
Важно: используйте сложный пароль. Для удалённого доступа задавайте хост и права ограниченно.
Шаг 4 — Скачивание и подготовка MediaWiki
Установите git и composer, создайте директорию для кода и склонируйте репозиторий:
yum -y install git zip unzip composer
mkdir -p /var/www/mediawiki
git clone https://gerrit.wikimedia.org/r/p/mediawiki/core.git /var/www/mediawiki
cd /var/www/mediawiki
composer install --no-dev
После установки зависимостей поменяйте владельца на nginx:
chown -R nginx:nginx /var/www/mediawiki
Если composer долго выполняется или падает, проверьте версию PHP и лимиты памяти (php.ini: memory_limit).
Шаг 5 — Получение SSL от Let’s Encrypt
MediaWiki рекомендуется запускать исключительно по HTTPS. Используем certbot (в старой системе пакет назывался letsencrypt) для получения бесплатного сертификата.
Установите клиент certbot (в CentOS 7 пакет называется letsencrypt в старых репозиториях):
yum -y install letsencrypt
systemctl stop nginx
Разрешите HTTP/HTTPS в Firewalld:
firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent
firewall-cmd --reload
Запустите получение сертификата:
letsencrypt certonly
Выберите временный способ проверки (1 — временный web-сервер) и укажите email, согласие с TOS и домен wiki.example.com.
После успешного получения сертификат появится в /etc/letsencrypt/live/yourdomain/. Протестируйте SSL вручную при необходимости.
Автоматическое продление: certbot обычно устанавливает cron для продления. Можно протестировать dry-run:
letsencrypt renew --dry-run
Если используется старый пакет letsencrypt, рассмотрите установку certbot из EPEL или snap для актуальности.
Шаг 6 — Конфигурация виртуального хоста Nginx для MediaWiki
Создайте файл конфигурации /etc/nginx/conf.d/mediawiki.conf и вставьте блок ниже. Обязательно замените wiki.hakase-labs.co на ваш домен и пути к сертификатам на фактические.
# HTTP Request will be Redirected to the HTTPS
server {
listen 80;
listen [::]:80;
server_name wiki.hakase-labs.co;
return 301 https://$host$request_uri;
}
# HTTPS Configuration
server {
listen 443 ssl;
listen [::]:443;
server_name wiki.hakase-labs.co;
root /var/www/mediawiki;
index index.php;
autoindex off;
# SSL Certificate Configuration
ssl_certificate /etc/letsencrypt/live/wiki.hakase-labs.co/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/wiki.hakase-labs.co/privkey.pem;
client_max_body_size 5m;
client_body_timeout 60;
location / {
try_files $uri $uri/ @rewrite;
}
location @rewrite {
rewrite ^/(.*)$ /index.php?title=$1&$args;
}
location ^~ /maintenance/ {
return 403;
}
# PHP-FPM Configuration Nginx
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
try_files $uri /index.php;
expires max;
log_not_found off;
}
location = /_.gif {
expires max;
empty_gif;
}
location ^~ ^/(cache|includes|maintenance|languages|serialized|tests|images/deleted)/ {
deny all;
}
location ^~ ^/(bin|docs|extensions|includes|maintenance|mw-config|resources|serialized|tests)/ {
internal;
}
# Security for 'image' directory
location ~* ^/images/.*.(html|htm|shtml|php)$ {
types { }
default_type text/plain;
}
# Security for 'image' directory
location ^~ /images/ {
try_files $uri /index.php;
}
}
Проверьте конфигурацию и перезапустите Nginx:
nginx -t
systemctl restart nginx
Совет: используйте nginx -T для вывода всех конфигураций и быстрого поиска конфликтов.
Шаг 7 — Веб-инсталляция MediaWiki
Откройте в браузере http://wiki.hakase-labs.co — вы будете переадресованы на HTTPS. Нажмите “Set up the wiki”.
Шаги инсталлятора:
- Выбор языка — English (en) или другой.
- Проверка окружения — убедитесь, что все проверки пройдены.
- Ввод данных базы: mediawikidb, user mediawiki, пароль mypassword.
- Оставьте остальные настройки по умолчанию, задайте админа и email.
- Дождитесь завершения установки и скачайте LocalSettings.php.
После скачивания загрузите файл на сервер в /var/www/mediawiki:
scp LocalSettings.php [email protected]:/var/www/mediawiki/
chown -R nginx:nginx /var/www/mediawiki
Примечание: в исходном руководстве использовалась команда chown www-data:www-data; на CentOS по умолчанию пользователь веб-сервера — nginx. Убедитесь, что права соответствуют используемой системе.
Вернитесь в браузер и нажмите “enter your wiki” — сайт должен открыться.
Шаг 8 — Установка и включение темы Vector
Клонируйте тему в папку skins и включите её в LocalSettings.php:
cd /var/www/mediawiki/skins/
sudo git clone https://gerrit.wikimedia.org/r/mediawiki/skins/Vector
chown -R nginx:nginx /var/www/mediawiki/skins/
vim /var/www/mediawiki/LocalSettings.php
Добавьте в конец файла:
wfLoadSkin( 'Vector' );
Обновите страницу в браузере — вы увидите тему Vector.
Проверки и критерии приёмки
Ключевые проверки перед сдачей в эксплуатацию:
- Доступность сайта по HTTPS: https://yourdomain/ открывается без предупреждений
- Авторизация администратора работает, можно создавать страницы
- Записи в базе создаются и читаются корректно
- Логи Nginx и PHP не содержат повторяющихся критических ошибок
- Сертификат Let’s Encrypt успешно продлевается в dry-run
Критерии приёмки:
- Главная страница и несколько тестовых статей успешно созданы
- Бекап базы данных и каталога MediaWiki настроены
- Права файлов соответствуют nginx:nginx и не позволяют записи для всех
Безопасность и эксплуатация
Рекомендации по безопасности:
- Ограничьте доступ к /var/www/mediawiki только нужным пользователям
- Включите автоматическое продление сертификата (cron или systemd timer)
- Настройте SELinux правильно или задокументируйте его отключение
- Настройте регулярные резервные копии БД и каталога images/
- Отключите доступ к административным скриптам извне (location internal в nginx уже есть)
Как добавить автообновление Let’s Encrypt (пример для certbot):
Добавьте cron-задание (проверка два раза в день):
0 2,14 * * * /usr/bin/certbot renew --quiet --renew-hook "systemctl reload nginx"
Если используете старый letsencrypt клиент, замените команду на соответствующую вашему клиенту.
Типичные ошибки и способы их устранения
Неправильные права доступа (ошибки 500 при попытке записи)
- Проверить владельца: chown -R nginx:nginx /var/www/mediawiki
- Проверить SELinux: setenforce 0 для отладки; затем настроить контексты
PHP-FPM не отвечает (502 Bad Gateway)
- Убедитесь, что fastcgi_pass указывает на существующий сокет (/run/php-fpm/php-fpm.sock)
- Проверьте статус: systemctl status php-fpm и логи /var/log/php-fpm/*
Ошибки certbot (validation failed)
- Проверьте, что домен указывает на сервер и порт 80 открыт
- Временно остановите Nginx (если выбран standalone режим) или используйте webroot метод
Composer выдаёт ошибки зависимостей
- Проверьте версию PHP и расширения — установите требуемые модули
- Увеличьте memory_limit в php.ini
Резервное копирование и обновление
Резервная стратегия:
- Полный дамп базы: mysqldump mediawikidb > mediawikidb-YYYYMMDD.sql
- Архив каталога: tar -czf mediawiki-www-YYYYMMDD.tar.gz /var/www/mediawiki
- Храните бекапы оффсайт и проверяйте их восстановление регулярно
Обновление MediaWiki:
- Перед обновлением: создайте бекап базы и файлов
- Обновите код через git pull, затем composer install
- Ознакомьтесь с Release Notes на mediawiki.org
Роли и чек-листы (кто за что отвечает)
Администратор сервера:
- Установка Nginx, PHP-FPM, MariaDB
- Настройка брандмауэра и SELinux
- Настройка резервного копирования
DevOps / Поддержка приложения:
- Установка и обновление MediaWiki
- Настройка расширений и тем
- Обновление зависимостей composer
Security / Ответственный за безопасность:
- Настройка HTTPS и автопродления сертификатов
- Мониторинг логов и уязвимостей
- Периодические аудиты прав доступа
Тестовые сценарии и приёмка
- Открыть главную страницу по HTTPS (ожидаемый результат: 200 OK)
- Создать и отредактировать страницу, сохранить — изменения отображаются
- Проверить, что /images/ не исполняет PHP (ожидаемый результат: текстовый вывод)
- Выполнить certbot renew –dry-run (ожидаемый результат: успешный прогон)
Альтернативные подходы и миграция
- Apache вместо Nginx: используйте LAMP и mod_php (или php-fpm через mod_proxy_fcgi). Apache проще для mod_rewrite и .htaccess, но Nginx эффективнее по ресурсам.
- Docker: контейнеризация MediaWiki упрощает переносимость и управление зависимостями. Официальные образы MediaWiki и MariaDB доступны.
- SQLite: для небольших вики можно использовать SQLite вместо MariaDB — проще, но ограничено масштабируемостью.
Проверка производительности и SLI/SLO (рекомендации)
- SLI: процент успешных HTTP 200 по HTTPS > 99.5%
- SLO: среднее время ответа для главной страницы < 500 ms при нормальной нагрузке
- Мониторинг: используйте Prometheus + Grafana или готовые облачные решения для метрик и алертов
Быстрая памятка команд
- Установить Nginx: yum -y install nginx
- Запустить PHP-FPM: systemctl start php-fpm
- Создать базу: mysql -u root -p
- Склонировать MediaWiki: git clone https://gerrit.wikimedia.org/r/p/mediawiki/core.git /var/www/mediawiki
- Получить сертификат: letsencrypt certonly
Короткий глоссарий (одна строка)
- Nginx: легковесный HTTP-сервер и reverse proxy.
- PHP-FPM: FastCGI Process Manager для выполнения PHP.
- MariaDB: форк MySQL, совместимая СУБД.
- certbot/letsencrypt: клиент для получения бесплатных SSL сертификатов.
Итоги
Установка MediaWiki на CentOS 7 с Nginx включает подготовку LEMP-стека, настройку PHP-FPM, создание базы MariaDB, загрузку MediaWiki, получение SSL от Let’s Encrypt и конфигурацию виртуального хоста Nginx. После установки обязательно:
- Проверить права и SELinux
- Настроить автопродление сертификатов
- Организовать резервное копирование и мониторинг
Если возникнут ошибки, начните с проверки логов: /var/log/nginx/error.log, /var/log/php-fpm/error.log, /var/log/messages и логов MariaDB.
Источник и дополнительная документация:
Похожие материалы

Перезагрузка термостата Nest — быстро

Как скачать и использовать YouTube TV из Индии

Включение модулей протоколов WiKID

Исправить сбой драйвера дисплея после обновления

Установка Apache Cassandra на CentOS 8
