Установка 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.
Архитектура 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:
exitImportant: Если сервер находится за 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.9NOTE: версия 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
Создайте администратора через веб‑форму:

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

Резервное копирование и обновления
- Используйте встроенную систему резервного копирования тем/плагинов или делайте бэкап каталога /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 (высокоуровневый)
- Сделать бэкап /var/www/grav и конфигов.
- Остановить NGINX (при необходимости) или переключить на режим обслуживания.
- Распаковать новую версию в отдельную директорию.
- Перенести пользовательские темы/плагины и проверить конфиги.
- Применить права и контексты SELinux.
- Перезапустить службы и выполнить smoke‑тесты.
- Откат при проблемах из бэкапа.
Фактическая сводка (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 и настройки фаервола. Тестируйте и делайте бэкапы перед обновлениями.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента