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

Установка Grav CMS на Ubuntu 16.04 с PHP‑FPM и Nginx

• 5 min read • DevOps • Обновлено 19 Nov 2025
Установка Grav CMS на Ubuntu 16.04 — Nginx и PHP‑FPM
Установка Grav CMS на Ubuntu 16.04 — Nginx и PHP‑FPM

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

Установка Nginx и проверка прослушивания порта 80

Совет: если 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

Настройка пула PHP-FPM

Примечание: параметры pm.max_children и др. зависят от доступной памяти сервера — настройте по нагрузке.


Шаг 3 Установка Composer

Composer — менеджер зависимостей PHP, понадобится для управления пакетами в плагинах и темах.

curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer

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

composer --version

Установка Composer


Шаг 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

Активация виртуального хоста Grav


Шаг 6 Тестирование

Откройте браузер и перейдите по адресу вашего сайта, например:

http://grav.hakase-labs.co/

Вы должны увидеть стартовую страницу Grav:

Стартовая страница 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 не содержат критических сообщений
  • Права на файлы позволяют веб‑серверу читать и, где нужно, записывать

Тесты и приёмочные сценарии

  1. Веб‑страница открывается на корневом URL — ожидаемый результат: HTTP 200.
  2. Доступ к запрещённым файлам возвращает 403.
  3. Загрузка изображения из /user/pages работает корректно.
  4. Команда 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 под ресурсы сервера и настроить регулярные бэкапы.


Ссылки

Поделиться: 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 быстро