Установка Grav CMS на Ubuntu 16.04 с PHP‑FPM и Nginx
TL;DR
Grav — файловая CMS без базы данных, быстрая и лёгкая в развёртывании. В этом руководстве пошагово показано, как установить Nginx, PHP‑FPM, Composer и настроить Grav на Ubuntu 16.04, включая советы по безопасности и проверке.
Важное: пример рассчитан на Ubuntu 16.04 и PHP 7.0 — при использовании более новых версий PHP или дистрибутивов некоторые команды и пути могут отличаться.
О чём этот материал
Это практическое руководство проведёт вас через весь процесс установки Grav CMS на Ubuntu 16.04 с использованием PHP‑FPM и Nginx. Вы получите рабочую конфигурацию виртуального хоста, рекомендации по расширениям PHP для производительности, базовые шаги по безопасности, а также чеклисты для разработчика и администратора.
Основные шаги
- Установка Nginx
- Установка и настройка PHP‑FPM и расширений (APCu, yaml)
- Установка Composer
- Загрузка и установка Grav
- Настройка виртуального хоста Nginx для Grav
- Проверка работоспособности и тестирование
Требования
- Ubuntu 16.04
- Права root (sudo)
- Командная строка с доступом в интернет
Что такое Grav в одной строке
Grav — современная файловая CMS (без БД), использующая Twig для шаблонов, Markdown для контента и YAML для конфигурации. Поддерживает плагины и темы через встроенную систему пакетов.
Шаг 1 Установка Nginx
Сначала обновим пакеты и установим Nginx из репозитория Ubuntu.
sudo apt update
sudo apt upgradeУстановите Nginx:
sudo apt install nginx -yЗапустите и включите автозапуск:
systemctl start nginx
systemctl enable nginxПроверьте, что сервер слушает порт 80:
netstat -plntu
Совет: если netstat отсутствует, установите пакет net-tools или используйте ss:
sudo apt install net-tools -y
ss -tuln | grep :80Шаг 2 Установка и настройка PHP‑FPM
Grav — PHP‑приложение, поэтому нужен PHP и рекомендуется PHP‑FPM для лучшей производительности под Nginx.
Установите PHP 7.0 и необходимые расширения:
sudo apt install -y php7.0 php7.0-fpm php7.0-cli php7.0-gd php7.0-mbstring php-pear php7.0-curl php7.0-dev php7.0-opcache php7.0-xml php7.0-zipДополнительные расширения для производительности
APCu ускоряет кеширование в памяти, yaml ускоряет парсинг конфигураций. Установка через PECL:
sudo pecl install apcuСоздайте конфигурацию расширения:
sudo vim /etc/php/7.0/mods-available/apcu.iniВставьте:
extension=apcu.soАктивируйте для FPM и CLI:
sudo ln -s /etc/php/7.0/mods-available/apcu.ini /etc/php/7.0/fpm/conf.d/20-apcu.ini
sudo ln -s /etc/php/7.0/mods-available/apcu.ini /etc/php/7.0/cli/conf.d/20-apcu.iniДля YAML сначала установите зависимости, затем расширение:
sudo apt install libyaml-dev unzip -y
sudo pecl install yaml-2.0.0
sudo vim /etc/php/7.0/mods-available/yaml.iniСодержимое yaml.ini:
extension=yaml.soАктивируйте аналогично:
sudo ln -s /etc/php/7.0/mods-available/yaml.ini /etc/php/7.0/fpm/conf.d/20-yaml.ini
sudo ln -s /etc/php/7.0/mods-available/yaml.ini /etc/php/7.0/cli/conf.d/20-yaml.iniПроверить установленные расширения:
sudo php -m | grep apcu
sudo php -m | grep yamlНастройка пула PHP‑FPM под Grav
Создайте системного пользователя, под которым будет работать сайт:
useradd -m -s /bin/bash grav
passwd gravПерейдите в каталог пула и сделайте резервную копию дефолтного конфига:
cd /etc/php/7.0/fpm/pool.d/
mv www.conf www.conf.bakСоздайте файл grav.conf с настройками пула:
vim grav.confПример содержимого:
[grav]
user = grav
group = grav
listen = /run/php/php7.0-fpm.sock
listen.owner = www-data
listen.group = www-data
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
chdir = /Перезапустите сервис и включите автозапуск:
systemctl restart php7.0-fpm
systemctl enable php7.0-fpmПроверьте сокет:
netstat -pl | grep php
Примечание: параметры pm.max_children и др. зависят от доступной памяти сервера — настройте по нагрузке.
Шаг 3 Установка Composer
Composer — менеджер зависимостей PHP, понадобится для управления пакетами в плагинах и темах.
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composerПроверьте версию:
composer --version
Шаг 4 Загрузка и установка Grav
Выполняем операции от имени пользователя grav.
su - grav
mkdir -p ~/www
cd ~/wwwСкачиваем последнюю версию и переименовываем:
wget https://getgrav.org/download/core/grav/latest
mv latest latest.zip
unzip latest.zip
mv grav/ html/Вернитесь к root и смените владельца группы на www-data:
exit
cd /home/grav/www
sudo chown -R grav:www-data html/Grav установлен в /home/grav/www/html.
Шаг 5 Настройка виртуального хоста Nginx для Grav
Создайте файл конфигурации в sites-available:
cd /etc/nginx
vim sites-available/gravВставьте конфигурацию Nginx для Grav (как в исходнике):
server {
## Define Index
#listen 80;
index index.html index.php;
## Web root and Domain Name
root /home/grav/www/html;
server_name grav.hakase-labs.co;
## Begin - Index
# for subfolders, simply adjust the rewrite:
# to use `/subfolder/index.php`
location / {
try_files $uri $uri/ /index.php?$query_string;
}
## End - Index
## Begin - PHP-FPM Configuration
location ~ \.php$ {
# Choose either a socket or TCP/IP address
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
# fastcgi_pass 127.0.0.1:9000;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
}
## End - PHP
## Begin - Security
# deny all direct access for these folders
location ~* /(.git|cache|bin|logs|backups)/.*$ { return 403; }
# deny running scripts inside core system folders
location ~* /(system|vendor)/.*\.(txt|xml|md|html|yaml|php|pl|py|cgi|twig|sh|bat)$ { return 403; }
# deny running scripts inside user folder
location ~* /user/.*\.(txt|md|yaml|php|pl|py|cgi|twig|sh|bat)$ { return 403; }
# deny access to specific files in the root folder
location ~ /(LICENSE|composer.lock|composer.json|nginx.conf|web.config|htaccess.txt|\.htaccess) { return 403; }
## End - Security
}Активируйте сайт и проверьте конфигурацию Nginx:
ln -s /etc/nginx/sites-available/grav /etc/nginx/sites-enabled/
nginx -tЕсли ошибок нет, перезапустите сервисы:
systemctl restart nginx
systemctl restart php7.0-fpm
Шаг 6 Тестирование
Откройте браузер и перейдите по адресу вашего сайта, например:
Вы должны увидеть стартовую страницу Grav:

Если страница не открывается, выполните базовые проверки:
- ping до сервера
- проверка логов Nginx: sudo tail -n 200 /var/log/nginx/error.log
- проверка прав на файлы: ls -la /home/grav/www/html
- проверка сокета PHP: ls -l /run/php/
Советы по безопасной конфигурации
- Ограничьте доступ по IP к административным разделам при помощи Nginx.
- Запретите прямой доступ к скрытым и конфигурационным файлам (см. блоки location в конфиге выше).
- Регулярно обновляйте плагины и ядро Grav через встроенный менеджер пакетов.
- Запускайте резервное копирование каталога /home/grav/www/html и конфигураций Nginx.
Проверка производительности и масштабирования
- Для небольших сайтов достаточно PHP‑FPM на сокете. При высокой нагрузке рассмотрите настройку нескольких пулов или переход на TCP‑порт.
- Включите OPCache и настроите pm.max_children в зависимости от объёма памяти.
- Используйте внешние reverse proxy/кэш (например, Varnish) или CDN для статического контента.
Когда этот подход не подходит
- Вам нужна реляционная база данных и сложные запросы — Grav не оптимален, выберите CMS с БД.
- Проект требует готовых enterprise‑функций (пользовательские роли, сложная интеграция с LDAP) — возможно, придётся дорабатывать или выбирать альтернативную систему.
Альтернативные подходы
- Использовать Apache и mod_php вместо Nginx + PHP‑FPM (проще для привычных конфигураций .htaccess, но обычно менее производительно).
- Разворачивать Grav в контейнере Docker с образами php:fpm и nginx — удобно для CI/CD и изоляции окружений.
- На современных Ubuntu использовать PHP 7.4 или 8.x с соответствующими путями модулей и конфигов.
Чеклист по ролям
Администратор:
- Установить Nginx и PHP‑FPM
- Настроить пула FPM и права пользователя
- Настроить виртуальный хост и перезапустить сервисы
Разработчик:
- Проверить отображение страниц и работоспособность тем
- Установить Composer и зависимости плагинов
- Организовать деплой контента в папку /user/pages
Оператор мониторинга:
- Настроить логи и алерты на ошибки 5xx
- Мониторить потребление памяти PHP‑FPM
Критерии приёмки
- Страница http://<ваш‑домен>/ открывается и отображает стартовую страницу Grav
- PHP‑FPM работает и отвечает через указанный unix‑сокет
- Логи ошибок Nginx не содержат критических сообщений
- Права на файлы позволяют веб‑серверу читать и, где нужно, записывать
Тесты и приёмочные сценарии
- Веб‑страница открывается на корневом URL — ожидаемый результат: HTTP 200.
- Доступ к запрещённым файлам возвращает 403.
- Загрузка изображения из /user/pages работает корректно.
- Команда composer run успешно выполняется при установке плагина.
Совместимость и миграция
- Этот гайд ориентирован на Ubuntu 16.04 и PHP 7.0. Для Ubuntu 18.04/20.04 используйте пакеты php7.2/php7.3 или php7.4 с соответствующими путями (/etc/php/7.2/…).
- При миграции проверяйте пути к сокетам и каталоги mods-available/conf.d — они могут отличаться.
Краткий глоссарий
- PHP‑FPM: менеджер процессов PHP, рекомендуемый для Nginx.
- Nginx: веб‑сервер, обслуживающий статические файлы и проксирующий PHP через FPM.
- Grav: файловая CMS без БД, хранит страницы в Markdown.
- Composer: менеджер зависимостей PHP.
Факты
- Порт по умолчанию для HTTP: 80
- Тип CMS: файловая, без базы данных
- Основные конфигурационные форматы: Markdown (контент), YAML (конфигурация)
Резюме
В руководстве показано, как последовательно установить и настроить Grav CMS на Ubuntu 16.04 с использованием Nginx и PHP‑FPM, включая необходимые расширения, виртуальный хост и базовые рекомендации по безопасности. Для продакшна рекомендуется адаптировать параметры PHP‑FPM под ресурсы сервера и настроить регулярные бэкапы.
Ссылки
- Документация Grav: https://learn.getgrav.org/
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента