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

Установка Grav CMS на Fedora 30 с NGINX и SSL

• 6 min read • Инфраструктура • Обновлено 25 Nov 2025
Установка Grav CMS на Fedora 30 с NGINX и SSL
Установка Grav CMS на Fedora 30 с NGINX и SSL

TL;DR

Grav — лёгкая файловая CMS без базы данных. Это руководство показывает установку на Fedora 30 с NGINX, настройкой PHP‑FPM и (опционально) получением SSL через acme.sh и Let’s Encrypt. Включены рекомендации по безопасности, SELinux/фаерволу и пошаговые проверки.

Логотип Grav — быстрая файловая CMS

Grav — быстрая, простая и гибкая файловая CMS. Встроенная система управления пакетами позволяет легко устанавливать и обновлять плагины и темы, а также сам Grav.

Архитектура Grav использует проверенные технологии для простоты использования и расширяемости. Ключевые технологии:

  • Twig — шаблонизатор для управления интерфейсом
  • Markdown — создание контента
  • YAML — конфигурация
  • Parsedown — быстрый парсинг Markdown и Markdown Extra
  • Doctrine Cache — кеширование для производительности
  • Простой контейнер внедрения зависимостей — расширяемость и поддерживаемость
  • Symfony Event Dispatcher — обработка событий плагинов
  • Symfony Console — интерфейс CLI
  • Gregwar Image Library — динамическая обработка изображений

Основные требования

Grav специально разработан с минимальными требованиями. Контент хранится в текстовых файлах — база данных не нужна.

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

  • Веб‑сервер (Apache, Nginx, LiteSpeed и т.д.). В этом руководстве используется NGINX.
  • PHP версии 7.1.3 или выше

Предварительные требования

  • Fedora 30
  • Неразрешённый (не root) пользователь с sudo-привилегиями

Быстрая проверка системы и подготовка

Проверьте версию Fedora:

cat /etc/fedora-release
#

Установите часовой пояс (замените ‘Регион/Город’ на ваш):

timedatectl list-timezones
sudo timedatectl set-timezone 'Регион/Город'

Обновите пакеты системы:

sudo dnf update -y

Установите полезные утилиты:

sudo dnf install -y curl wget vim git unzip socat bash-completion epel-release

Важно: поддерживайте систему в актуальном состоянии и применяйте обновления безопасности.

Шаг 1 — Установка PHP и расширений

Установите PHP и необходимые расширения:

sudo dnf install -y php-cli php-fpm php-common php-curl php-gd php-json php-mbstring php-xml php-zip php-opcache php-pecl-apcu

Проверить установленные модули PHP:

php -m

ctype
curl
exif
fileinfo
. . .
. . .

Проверить версию PHP:

php --version

# PHP 7.3.17 (cli) (built: May 13 2019 18:03:04) ( NTS )
# Copyright (c) 1997-2018 The PHP Group
# Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
#     with Zend OPcache v7.2.17, Copyright (c) 1999-2018, by Zend Technologies

Запустите и включите PHP‑FPM:

sudo systemctl start php-fpm.service
sudo systemctl enable php-fpm.service

Проверьте, что сокет или порт PHP‑FPM совпадают с тем, что будет указан в конфигурации NGINX (ниже по руководству используется unix:/run/php-fpm/www.sock).

Шаг 2 — Получение сертификата через acme.sh и Let’s Encrypt (опционально)

HTTPS не обязателен, но настоятельно рекомендуется. В примере используется acme.sh — лёгкий клиент для получения сертификатов от Let’s Encrypt.

Установка acme.sh:

sudo su - root
git clone https://github.com/Neilpang/acme.sh.git
cd acme.sh
./acme.sh --install --accountemail [email protected]
source ~/.bashrc
cd ~

Проверка версии:

acme.sh --version
# v2.8.2

Получение сертификатов RSA и ECDSA (замените example.com на ваш домен):

# RSA 2048
acme.sh --issue --standalone -d example.com --keylength 2048
# ECDSA
acme.sh --issue --standalone -d example.com --keylength ec-256

Для тестирования используйте флаг –staging.

После выдачи сертификаты находятся в:

  • RSA: /home/username/example.com
  • ECDSA: /home/username/example.com_ecc

Просмотреть список сертификатов:

acme.sh --list

Создайте каталог для копирования certs, например /etc/letsencrypt:

mkdir -p /etc/letsencrypt/example.com
sudo mkdir -p /etc/letsencrypt/example.com_ecc

Установите сертификаты и укажите команду перезагрузки NGINX:

# RSA
acme.sh --install-cert -d example.com --cert-file /etc/letsencrypt/example.com/cert.pem --key-file /etc/letsencrypt/example.com/private.key --fullchain-file /etc/letsencrypt/example.com/fullchain.pem --reloadcmd "sudo systemctl reload nginx.service"
# ECC/ECDSA
acme.sh --install-cert -d example.com --ecc --cert-file /etc/letsencrypt/example.com_ecc/cert.pem --key-file /etc/letsencrypt/example.com_ecc/private.key --fullchain-file /etc/letsencrypt/example.com_ecc/fullchain.pem --reloadcmd "sudo systemctl reload nginx.service"

Примечание: acme.sh автоматически обновляет сертификаты (обычно каждые 60 дней перед истечением). После получения сертификатов выйдите из root:

exit

Important: Если сервер находится за NAT/фаерволом, откройте порты 80/443 для валидации и доступа.

Шаг 3 — Установка и настройка NGINX

Установите NGINX:

sudo dnf install -y nginx

Проверка версии NGINX:

nginx -v
# nginx version: nginx/1.14.2

Запустите и включите NGINX:

sudo systemctl start nginx.service
sudo systemctl enable nginx.service

Создайте конфигурацию для Grav: откройте файл /etc/nginx/conf.d/grav.conf и вставьте следующее (замените example.com и пути сертификатов при необходимости):

server {
  listen 80;
  listen 443 ssl;

  server_name example.com;
  root /var/www/grav;

  ssl_certificate /etc/letsencrypt/example.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/example.com/private.key;
  ssl_certificate /etc/letsencrypt/example.com_ecc/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/example.com_ecc/private.key;

  index index.html index.php;

  location / {
    try_files $uri $uri/ /index.php?$query_string;
  }

  location ~* /(\.git|cache|bin|logs|backup|tests)/.*$ { return 403; }
  location ~* /(system|vendor)/.*\.(txt|xml|md|html|yaml|yml|php|pl|py|cgi|twig|sh|bat)$ { return 403; }
  location ~* /user/.*\.(txt|md|yaml|yml|php|pl|py|cgi|twig|sh|bat)$ { return 403; }
  location ~ /(LICENSE\.txt|composer\.lock|composer\.json|nginx\.conf|web\.config|htaccess\.txt|\.htaccess) { return 403; }

  location ~ \.php$ {
    fastcgi_pass unix:/run/php-fpm/www.sock;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
  }

}

Проверьте синтаксис конфигурации:

sudo nginx -t

Перезагрузите NGINX:

sudo systemctl reload nginx.service

Советы по безопасности NGINX:

  • Отключите server_tokens: в nginx.conf поставьте server_tokens off;.
  • Добавьте заголовки безопасности (Content-Security-Policy, X-Content-Type-Options, X-Frame-Options и т.д.).
  • Ограничьте доступ к административным разделам через IP (при необходимости).

Учтите SELinux и фаервол (firewalld)

На Fedora SELinux по умолчанию включён. При проблемах с доступом к файлам/сокету PHP‑FPM проверьте контексты SELinux:

sudo restorecon -R -v /var/www/grav
sudo chcon -t httpd_sys_rw_content_t -R /var/www/grav

Если используете unix-сокет PHP‑FPM, убедитесь в правильных контекстах для сокета: /run/php-fpm/www.sock.

Откройте порты в firewalld:

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

Шаг 4 — Установка Grav CMS

Создайте document root:

sudo mkdir -p /var/www/grav

Измените владельца на текущего пользователя (в примере — johndoe):

sudo chown -R johndoe:johndoe /var/www/grav

Перейдите в папку:

cd /var/www/grav

Скачайте и распакуйте Grav:

wget https://getgrav.org/download/core/grav-admin/1.6.9
unzip 1.6.9
mv grav-admin/* . && mv grav-admin/.* .
rm -rf grav-admin 1.6.9

NOTE: версия 1.6.9 актуальна на момент написания и может измениться. Проверяйте сайт Grav для актуальной версии.

Смените владельца на nginx:

sudo chown -R nginx:nginx /var/www/grav

Настройте PHP‑FPM: откройте /etc/php-fpm.d/www.conf и поставьте user/group в nginx:

user = nginx
group = nginx

Перезапустите PHP‑FPM:

sudo systemctl restart php-fpm.service

Создайте директорию для сессий и смените владельца:

sudo mkdir -p /var/lib/php/session/ && sudo chown -R nginx:nginx /var/lib/php/session/

Откройте в браузере http://example.com и следуйте инструкции. Для доступа в админку добавьте /admin в URL.

Шаг 5 — Завершение настройки Grav

Создайте администратора через веб‑форму:

Форма создания администратора Grav

После создания вы будете перенаправлены в панель управления:

Панель управления Grav CMS

Резервное копирование и обновления

  • Используйте встроенную систему резервного копирования тем/плагинов или делайте бэкап каталога /var/www/grav и конфигураций NGINX и PHP.
  • Для обновлений Grav смотрите в админке или используйте CLI (bin/gpm) если требуется.

Отладка и проверка работоспособности

Короткий чек‑лист проверки:

  • NGINX отвечает на 80/443
  • PHP‑FPM запущен и сокет/порт совпадает с конфигом
  • Правильные права и владельцы в /var/www/grav
  • SELinux не блокирует доступ (journalctl / audit logs)
  • Сертификаты находятся в /etc/letsencrypt и NGINX использует их

Полезные команды для диагностики:

systemctl status nginx php-fpm
sudo journalctl -u php-fpm -e
sudo journalctl -u nginx -e
sudo nginx -t
curl -I https://example.com

Частые проблемы и решения

  • 502 Bad Gateway: проверьте сокет/порт PHP‑FPM и права доступа к сокету.
  • 403 Forbidden: проверьте права файлов и SELinux контексты.
  • SSL ошибки: проверьте пути к сертификатам и обновления acme.sh.

Альтернативы и расширения

  • Apache вместо NGINX: при желании замените конфигурацию на Apache + mod_php/ php-fpm.
  • Контейнеризация: запускайте Grav в Docker для изоляции (официальные или кастомные образы).
  • CDN и кэширование: используйте Cloudflare, Varnish или другие CDN для ускорения.

Критерии приёмки

  • Сайт на example.com возвращает 200 OK на главную страницу и 200 на /admin после логина.
  • Все статические ресурсы загружаются, а PHP страницы обрабатываются без ошибок.
  • SSL корректно установлен (если применимо) и цепочка сертификатов полная.
  • Автоматическое обновление сертификатов прошло успешно или настроено.

Ролевые чек‑листы

  • Системный администратор:

    • Обновил систему и установил пакеты
    • Настроил SELinux и firewalld
    • Настроил автоперезагрузку служб
  • Веб‑разработчик:

    • Проверил шаблоны Twig и разрешения файлов
    • Настроил виртуальные хосты и конфигурации NGINX
  • Контент‑менеджер:

    • Создал администратора и проверил доступ к /admin
    • Импортировал/создал страницы в Markdown

Тест‑кейсы и приёмочные проверки

  • Открыть / — получить 200 OK и корректный HTML
  • Открыть /admin — доступна форма логина
  • Войти в админку, создать новую страницу — страница видна публично
  • Проверить SSL через SSL Labs или curl -vI https://example.com

Быстрый SOP: развертывание новой версии Grav (высокоуровневый)

  1. Сделать бэкап /var/www/grav и конфигов.
  2. Остановить NGINX (при необходимости) или переключить на режим обслуживания.
  3. Распаковать новую версию в отдельную директорию.
  4. Перенести пользовательские темы/плагины и проверить конфиги.
  5. Применить права и контексты SELinux.
  6. Перезапустить службы и выполнить smoke‑тесты.
  7. Откат при проблемах из бэкапа.

Фактическая сводка (Fact box)

  • Требуемый PHP: >= 7.1.3
  • Порты: 80 (HTTP), 443 (HTTPS)
  • Место сертификатов в примере: /etc/letsencrypt
  • Автообновление certs: acme.sh (обычно каждые ~60 дней обновление)

Краткое руководство по безопасности

  • Используйте HTTPS и HSTS при необходимости.
  • Ограничьте доступ к панели /admin по IP, если возможно.
  • Минимизируйте привилегии: файлы от имени nginx, а управление — через sudo-пользователя.
  • Регулярно проверяйте обновления Grav, плагинов и PHP‑пакетов.

Когда этот подход не подходит

  • Если у вас высокая динамическая нагрузка и требуется масштабирование в несколько узлов — рассмотрите использование внешней базы данных/кластеризации и CDN.
  • Если нужна транзакционная база данных для контента — Grav может не подойти (это файловая CMS).

Примеры альтернатив

  • Apache + mod_php/php-fpm
  • Docker/Kubernetes с автоскейлингом
  • Другие CMS: WordPress, Drupal (если нужна сложная модель данных)

Диаграмма принятия решения (SSL или нет)

flowchart TD
  A[Начало] --> B{Есть ли публичный домен?}
  B -- Да --> C{Нужен ли HTTPS?}
  B -- Нет --> D[Оставить HTTP для локальной разработки]
  C -- Да --> E[Установить acme.sh и получить сертификат] --> F[Настроить NGINX для SSL]
  C -- Нет --> G[Оставить HTTP и включить редирект при будущем решении]
  F --> H[Проверить автоматическое обновление сертификатов]
  H --> I[Готово]
  G --> I
  D --> I

Ссылки

Итог

Grav — удобная файловая CMS, которую легко развернуть на Fedora 30 с NGINX и PHP‑FPM. Опционально вы можете добавить HTTPS с помощью acme.sh и Let’s Encrypt. Обратите внимание на права файлов, SELinux и настройки фаервола. Тестируйте и делайте бэкапы перед обновлениями.

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

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

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро