Гид по технологиям

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

8 min read Серверы Обновлено 18 Oct 2025
Установка MediaWiki на CentOS 7 с Nginx и SSL
Установка 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 — Короткая методология развертывания

  1. Подготовка системы (обновление, репозитории)
  2. Установка компонентов LEMP: Nginx → PHP-FPM → MariaDB
  3. Загрузка кода MediaWiki и установка зависимостей
  4. Получение SSL (Let’s Encrypt) и настройка Nginx виртуального хоста
  5. Веб-инсталляция MediaWiki и проверка
  6. Финальная безопасность и обслуживание

Шаг 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 с портами и процессами Nginx

Важно: если 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

Вывод netstat для php-fpm и сокета

Примечание по 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;

Создана база и пользователь MariaDB

Важно: используйте сложный пароль. Для удалённого доступа задавайте хост и права ограниченно.


Шаг 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 установил зависимости 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.

Процесс получения сертификата Let's Encrypt

После успешного получения сертификат появится в /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

Совет: используйте nginx -T для вывода всех конфигураций и быстрого поиска конфликтов.


Шаг 7 — Веб-инсталляция MediaWiki

Откройте в браузере http://wiki.hakase-labs.co — вы будете переадресованы на HTTPS. Нажмите “Set up the wiki”.

Начало веб-инсталляции MediaWiki

Шаги инсталлятора:

  1. Выбор языка — English (en) или другой.

Выбор языка

  1. Проверка окружения — убедитесь, что все проверки пройдены.

Проверка окружения

  1. Ввод данных базы: mediawikidb, user mediawiki, пароль mypassword.

Конфигурация базы данных

  1. Оставьте остальные настройки по умолчанию, задайте админа и email.

Создание администратора

  1. Дождитесь завершения установки и скачайте LocalSettings.php.

Установка завершена, скачать 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” — сайт должен открыться.

Успешно установлен MediaWiki


Шаг 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.

Vector skin активирована


Проверки и критерии приёмки

Ключевые проверки перед сдачей в эксплуатацию:

  • Доступность сайта по 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 клиент, замените команду на соответствующую вашему клиенту.


Типичные ошибки и способы их устранения

  1. Неправильные права доступа (ошибки 500 при попытке записи)

    • Проверить владельца: chown -R nginx:nginx /var/www/mediawiki
    • Проверить SELinux: setenforce 0 для отладки; затем настроить контексты
  2. PHP-FPM не отвечает (502 Bad Gateway)

    • Убедитесь, что fastcgi_pass указывает на существующий сокет (/run/php-fpm/php-fpm.sock)
    • Проверьте статус: systemctl status php-fpm и логи /var/log/php-fpm/*
  3. Ошибки certbot (validation failed)

    • Проверьте, что домен указывает на сервер и порт 80 открыт
    • Временно остановите Nginx (если выбран standalone режим) или используйте webroot метод
  4. 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.

Источник и дополнительная документация:

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Chrome: не загружается расширение — как исправить
Техподдержка

Chrome: не загружается расширение — как исправить

Автоматизация FTP‑загрузок в Windows
Администрирование

Автоматизация FTP‑загрузок в Windows

Как снизить пинг в Rocket League
Гайды

Как снизить пинг в Rocket League

Потеря пакетов в FFXIV: как исправить лаги
Игры

Потеря пакетов в FFXIV: как исправить лаги

Защитите данные Android перед ремонтом
Мобильная безопасность

Защитите данные Android перед ремонтом

Преобразовать формулу в значение в Excel 2013
Excel

Преобразовать формулу в значение в Excel 2013