Установка Grav CMS на Ubuntu 20.04 с Nginx и Let's Encrypt
Что такое Grav (одним предложением)
Grav — это лёгкая открытая CMS без базы данных, которая хранит контент в файлах и использует Twig, Markdown и YAML.
Предварительные требования
- Сервер с Ubuntu 20.04.
- Доменное имя, настроенное на IP сервера (A-запись).
- Пароль root или доступ через sudo.
Важно: перед началом убедитесь, что DNS указывает на ваш сервер и что порт 80 доступен извне (для проверки Let’s Encrypt).
План действий (кратко)
- Обновить пакеты.
- Установить Nginx, PHP и расширения.
- Настроить php.ini и перезапустить php-fpm.
- Скачать и развернуть Grav в веб-корень.
- Создать конфигурацию Nginx для сайта.
- Проверить конфигурацию и перезапустить Nginx.
- Установить Certbot и получить SSL-сертификат.
Обновление системы
Обновите списки пакетов и установите последние версии:
apt-get update -yПосле обновления можно переходить к установке сервисов.
Установка Nginx и PHP
Установите Nginx, PHP-FPM и необходимые расширения:
apt-get install nginx php php-cli php-fpm php-common php-curl php-gd php-json php-mbstring php-xml php-zip php-opcache php-apcu unzip -yПроверьте версию PHP:
php --versionОжидаемый пример вывода (на вашем сервере может быть другая версия):
PHP 7.4.3 (cli) (built: Jul 5 2021 15:13:35) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
with Zend OPcache v7.4.3, Copyright (c), by Zend TechnologiesРедактирование php.ini
Откройте конфигурационный файл PHP-FPM для правки настроек производительности и загрузки:
nano /etc/php/7.4/fpm/php.iniНайдите и измените/проверьте эти строки (оставьте значения в соответствии с потребностями сайта):
memory_limit = 256M
upload_max_filesize = 100M
max_execution_time = 360
max_input_vars = 1500
date.timezone = America/ChicagoВажно: замените date.timezone на ваш часовой пояс, например Europe/Moscow, если нужно.
Сохраните файл и перезапустите PHP-FPM:
systemctl restart php7.4-fpmУстановка Grav CMS
Перейдите в веб-корень и скачайте архив с Grav Admin:
cd /var/www/html
wget https://getgrav.org/download/core/grav-admin/1.7.17Распакуйте архив:
unzip 1.7.17Переименуйте извлечённую директорию и задайте права владельца:
mv grav-admin grav
chown -R www-data:www-data /var/www/html/gravПрава и владелец важны: веб-сервер (www-data) должен иметь доступ на запись к нужным папкам (cache, images, logs, assets, backups и т.д.).
Настройка Nginx для Grav
Создайте конфигурацию виртуального хоста для вашего домена:
nano /etc/nginx/conf.d/grav.confВставьте (или отредактируйте) следующую конфигурацию:
server {
listen 80;
server_name grav.example.com;
root /var/www/html/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.4-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
}
}Сохраните и проверьте синтаксис Nginx:
nginx -tОжидаемый вывод:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successfulПерезапустите Nginx и проверьте статус:
systemctl restart nginx
systemctl status nginxПример вывода systemd (будет отличаться в вашей системе):
? nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2021-07-09 06:45:28 UTC; 3s ago
Docs: man:nginx(8)
Process: 33099 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
...Доступ к интерфейсу Grav
После настройки откройте в браузере http://grav.example.com

Заполните логин и пароль администратора и нажмите Create User — вы будете перенаправлены в панель управления:

Конфигурация системы:

Учетные записи пользователей:

Плагины:

Инструменты и резервное копирование:

Защита сайта через Let’s Encrypt (Certbot)
Установите Certbot с плагином для Nginx:
apt-get install python3-certbot-nginx -yЗапустите Certbot и выдайте сертификат для домена:
certbot --nginx -d grav.example.comВ процессе вас попросят указать email и согласиться с условиями. В конце предложат автоматически перенаправлять HTTP на HTTPS — обычно для новых сайтов выбирайте перенаправление (Redirect).
Пример интерактивной сессии и типичный итоговый вывод приведены в исходной инструкции. После успешного завершения сертификат будет сохранён в /etc/letsencrypt/live/grav.example.com/.
Важно: Certbot настраивает cron/systemd для автоматического обновления сертификатов. Проверьте работу команды “certbot renew –dry-run”.
Критерии приёмки
- Сайт доступен по HTTPS: https://grav.example.com
- На странице установки можно создать администратора и войти в панель.
- Файлы сертификата присутствуют: /etc/letsencrypt/live/grav.example.com/fullchain.pem и privkey.pem
- Nginx конфигурация проходит проверку nginx -t без ошибок.
Отладка и распространённые ошибки
- Nginx не стартует: выполните nginx -t, затем journalctl -u nginx -b для логов.
- Ошибка FastCGI: проверьте путь к сокету php7.4-fpm.sock и что php-fpm работает: systemctl status php7.4-fpm.
- Проблемы с правами: chown -R www-data:www-data /var/www/html/grav и проверьте права для папок cache и logs.
- Certbot не смог пройти проверку: убедитесь, что порт 80 открыт и домен указывает на сервер.
Когда этот подход не подходит
- Вам нужна масштабируемая, шардированная CMS с БД и большими нагрузками — лучше рассмотреть WordPress в связке с БД и балансировкой нагрузки.
- Требуются сложные транзакционные возможности и реляционные связи между сущностями — Grav не предназначен для этого.
Рекомендации по безопасности
- Регулярно обновляйте пакеты: apt-get update && apt-get upgrade.
- Настройте брандмауэр (ufw): разрешите 22 (или SSH порт), 80 и 443, закройте всё лишнее.
- Сделайте резервные копии каталога /var/www/html/grav и /etc/letsencrypt.
- Ограничьте доступ к административной панели по IP или используйте двухфакторную аутентификацию (если плагин доступен).
- Минимизируйте права: веб-процессу нужен доступ только к необходимым каталогам.
Чек-лист ролей
DevOps / Системный администратор:
- Подготовил сервер и DNS.
- Установил Nginx, PHP-FPM и Certbot.
- Настроил SSL и автоматическое продление.
- Настроил бэкапы и мониторинг.
Веб-разработчик:
- Убедился в корректной работе шаблонов Twig.
- Проверил загрузку медиа и обработку изображений.
- Настроил плагины, не нарушающие безопасность.
Контент-менеджер:
- Создал учётную запись администратора.
- Заполнил тестовое содержимое в Markdown.
- Проверил отображение страниц и меню.
Мини-методология развёртывания (быстрая шпаргалка)
- Обновление: apt-get update -y && apt-get upgrade -y
- Установка: apt-get install nginx php-fpm …
- Настройка PHP: изменить php.ini и перезапустить php-fpm
- Развёртывание Grav: wget, unzip, chown
- Nginx: создать конфиг, nginx -t, systemctl restart nginx
- SSL: apt-get install certbot, certbot –nginx -d your.domain
Однострочный глоссарий
- Grav: CMS без БД на основе файлов.
- Nginx: веб-сервер и обратный прокси.
- PHP-FPM: менеджер процессов PHP.
- Certbot: клиент для Let’s Encrypt.
Короткое резюме
Вы установили Grav CMS на Ubuntu 20.04, настроили Nginx и PHP-FPM, развернули сайт в /var/www/html/grav и защитили его SSL-сертификатом от Let’s Encrypt. Проверьте доступ по HTTPS и настройте регулярные бэкапы и обновления.
Важно: изменяйте конфигурации под потребности вашей среды и всегда проверяйте работу обновлений на тестовом стенде.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента