Установка Grav CMS на Debian 9 с Nginx и Let’s Encrypt

Grav — это быстрая, простая и гибкая файловая веб-платформа. Она следует принципам flat-file CMS, но отличается собственной философией проектирования. Grav включает мощную систему управления пакетами для установки и обновления плагинов, тем и самого ядра.
Архитектура Grav построена на проверенных технологиях, что делает систему простой в использовании и лёгкой для расширения. К ключевым технологиям относятся:
- Twig — шаблонизатор для гибкого управления интерфейсом;
- Markdown — для удобного создания контента;
- YAML — для простых конфигураций;
- Parsedown — быстрый парсер Markdown и Markdown Extra;
- Doctrine Cache — слой кеширования для повышения производительности;
- Pimple DI Container — контейнер зависимостей для расширяемости;
- Symfony Event Dispatcher — обработка событий плагинов;
- Symfony Console — CLI-инструменты;
- Gregwar Image Library — динамическая обработка изображений.
Основные требования
- Веб-сервер: Nginx (в инструкции используется Nginx). Альтернативы: Apache, LiteSpeed, IIS.
- PHP 7.1.3 или выше и расширения: curl, ctype, dom, gd, json, mbstring, openssl, session, simplexml, xml, zip. Дополнительно: apcu и opcache по желанию.
Что нужно подготовить
- Сервер с Debian 9.
- Непользователь root; учётная запись с sudo-привилегиями.
Первичные шаги
Проверьте версию Debian:
lsb_release -ds
# Debian GNU/Linux 9.9 (stretch)Настройте часовой пояс:
sudo dpkg-reconfigure tzdataОбновите пакеты ОС:
sudo apt update && sudo apt upgrade -yУстановите основные инструменты администрирования:
sudo apt install -y curl wget vim git unzip socat apt-transport-httpsШаг 1 — установка PHP и расширений
Grav требует PHP 7.1+. В репозитории Debian 9 доступен PHP 7.0/7.1, поэтому мы добавим репозиторий SURY для версии 7.2 (пример). Выполните:
sudo apt install apt-transport-https lsb-release ca-certificates
sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php.list
sudo apt updateУстановите PHP 7.2 и нужные модули:
sudo apt install -y php7.2 php7.2-cli php7.2-fpm php7.2-common php7.2-curl php7.2-gd php7.2-json php7.2-mbstring php7.2-xml php7.2-zip php7.2-opcache php-apcuПроверьте версию PHP:
php --version
# Пример вывода:
# PHP 7.2.18-1+0~20190503103213.21+stretch~1.gbp101320 (cli) (built: May 3 2019 10:32:13) ( NTS )PHP-FPM на Debian 9 запускается и включается автоматически. После установки можно переходить к SSL-настройке.
Шаг 2 — установка acme.sh и получение сертификата Let’s Encrypt (опционально)
HTTPS не обязателен, но настоятельно рекомендуется. В этой инструкции мы используем acme.sh — лёгкий клиент на shell без зависимости от Python/Node.
Установите acme.sh и зарегистрируйте почту аккаунта:
sudo mkdir /etc/letsencrypt
sudo git clone https://github.com/Neilpang/acme.sh.git
cd acme.sh
sudo ./acme.sh --install --home /etc/letsencrypt --accountemail [email protected]
cd ~Проверьте версию acme.sh:
/etc/letsencrypt/acme.sh --version
# v2.8.0Запросите сертификаты RSA и ECDSA для вашего домена (замените example.com на ваш домен):
# RSA 2048
sudo /etc/letsencrypt/acme.sh --issue --standalone --home /etc/letsencrypt -d example.com --keylength 2048
# ECDSA
sudo /etc/letsencrypt/acme.sh --issue --standalone --home /etc/letsencrypt -d example.com --keylength ec-256После успешного выполнения сертификаты и ключи будут расположены:
- RSA: /etc/letsencrypt/example.com
- ECDSA: /etc/letsencrypt/example.com_ecc
Совет: для автоматического обновления и установки в Nginx используйте опции –install-cert и укажите пути.
Шаг 3 — установка и настройка Nginx
Установите Nginx:
sudo apt install -y nginxПроверьте версию:
nginx -v
# nginx version: nginx/1.10.3Создайте файл конфигурации виртуального хоста:
sudo vim /etc/nginx/sites-available/grav.confВставьте в него следующее (подставьте ваш server_name и root при необходимости):
server {
listen 80;
server_name example.com;
root /var/www/grav;
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:/var/run/php/php7.2-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
}
}Активируйте сайт и проверьте конфигурацию:
sudo ln -s /etc/nginx/sites-available/grav.conf /etc/nginx/sites-enabled
sudo nginx -t
sudo systemctl reload nginx.serviceЕсли вы получили сертификаты в шаге 2, настройте блок server для HTTPS: добавьте listen 443 ssl; пути к .crt и .key из /etc/letsencrypt/example.com — проверьте права и владелец файлов.
Important: не забывайте защитить конфиденциальные директории и файлы, как показано в конфигурации выше.
Шаг 4 — установка Grav CMS
Создайте корневую папку сайта:
sudo mkdir -p /var/www/gravПередайте права вашему пользователю (замените {your_user} на реальный логин):
sudo chown -R {your_user}:{your_user} /var/www/gravПерейдите в папку сайта и загрузите пакет Grav Admin (версия в примере — 1.6.9). Обновите URL при необходимости.
cd /var/www/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После распаковки установите владельца www-data для работы веб-сервера:
sudo chown -R www-data:www-data /var/www/gravNOTE: проверяйте официальную страницу загрузок Grav на предмет новых релизов.
Шаг 5 — завершение настройки Grav
Откройте сайт в браузере по вашему домену. Должна появиться страница для создания административного аккаунта Grav. Создайте пользователя и нажмите кнопку “Create User”:

После создания учётной записи установка завершена.
Критерии приёмки
- Сайт доступен по HTTP (порт 80) и/или HTTPS (порт 443).
- Главная страница Grav отображается без ошибок PHP.
- В админке можно создать пользователя и войти.
- Статические файлы (CSS/JS) загружаются корректно.
- Конфигурация Nginx закрывает доступ к чувствительным файлам и папкам.
Чек-листы по ролям
Sysadmin:
- Обновил систему и установил PHP-FPM, Nginx.
- Настроил сертификаты и автоматическое обновление certs.
- Настроил права и резервное копирование /var/www/grav.
Разработчик:
- Проверил шаблон Twig и работу Markdown.
- Убедился, что кешировка и opcache работают.
- Протестировал плагины в staging перед production.
Контент-менеджер:
- Создал административного пользователя.
- Проверил редактор страниц и загрузку изображений.
Быстрый факт-бокс
- Минимальный PHP: 7.1.3
- Рекомендуемые расширения: gd, json, mbstring, zip
- Примерная минимальная установка пакетов: 10–15 пакетов (зависит от набора расширений)
- Стандартный путь установки: /var/www/grav
Альтернативные подходы
- Apache: используйте файл .htaccess и модуль php-fpm через proxy_fcgi;
- Docker: официальный образ Grav позволяет изолировать окружение и упростить деплой;
- Управляемый хостинг: многие провайдеры поддерживают Grav без ручной настройки сервера.
Когда этот план не подойдёт: если вы используете Windows-сервер или у вас уже настроен другой веб-сервер с нестандартной архитектурой — рассмотрите Docker или PaaS-решения.
Безопасность и рекомендации по эксплуатации
- Обновляйте Grav и плагины регулярно через панель администратора или CLI.
- Настройте бэкапы файлов и конфигураций / базы данных (если используются внешние сервисы).
- Закройте доступ к административным директориям по IP при возможности.
- Следите за сроком действия сертификатов и автоматизируйте их обновление.
Короткий план обновлений (mini-методология)
- Сделать резервную копию /var/www/grav и конфигураций Nginx.
- В режиме теста обновить Grav и плагины на staging.
- Прогнать smoke-тесты (главная страница, админка, статические ресурсы).
- Если всё хорошо — обновить production и мониторить логи 24 часа.
Быстрое руководство по устранению неполадок
- 502 Bad Gateway: проверьте статус php7.2-fpm и путь unix-сокета в Nginx.
- 403 на файлы: проверьте правила location в конфигурации Nginx и права на файловой системе.
- Белый экран/500: включите логи Grav (logs/) и системные логи /var/log/nginx/error.log и /var/log/php7.2-fpm.log.
Часто задаваемые вопросы
Q: Можно ли установить Grav без SSL? A: Да, Grav работает без HTTPS. Однако лучше использовать HTTPS для защиты трафика и админ-панели.
Q: Как обновлять сертификаты acme.sh? A: Acme.sh сам создаёт cron- или systemd-задание при установке. Проверьте /etc/letsencrypt и логи acme.sh.
Полезные ссылки
Итого: следуя этим шагам, вы получите рабочую установку Grav на Debian 9 с Nginx и при необходимости с автоматическим получением сертификатов Let’s Encrypt. После установки уделите внимание регулярным обновлениям, бэкапам и настройкам безопасности.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента