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

Установка 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
Автор
Редакция

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

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

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

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

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

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

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

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

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

Установка Apache Cassandra на CentOS 8
Базы данных

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

Почему Ethernet медленнее Wi‑Fi и как это исправить
Networking

Почему Ethernet медленнее Wi‑Fi и как это исправить