Docker, SSL и 100 баллов Google Speed: Превращаем «голый» контейнер в нормальный сайт GRAV CMS. Часть 3
В прошлых сериях мы с вами сделали страшное: подняли свой сайт на CMS Grav внутри Docker-контейнера. Это было дешево (99 рублей, Карл!), сердито и быстро.
Но у нас осталась одна проблема. Наш сайт болтался в интернете «голым» — на 80-м порту, без HTTPS. В 2026 году браузеры смотрят на такие сайты как на прокаженных, помечая их обидным «Not Secure». Да и Google такие ресурсы, мягко говоря, недолюбливает.
Сегодня мы будем наводить красоту:
- Спрячем Grav за обратным прокси (Reverse Proxy).
- Прикрутим бесплатные SSL-сертификаты, которые сами обновляются (потому что лень — двигатель прогресса).
- Настроим базовое техническое SEO, чтобы поисковики перестали нас игнорировать.
- И, конечно, похвастаемся «зеленой зоной» в Google PageSpeed.
Шаг 1. Хирургическое вмешательство в Docker Compose
Раньше наш Grav нагло смотрел в интернет портом 80:80. Это работало, но если мы хотим SSL, нам нужен посредник. Кто-то, кто будет встречать гостей, проверять документы (сертификаты) и провожать к столику.
В мире Docker лучшим дворецким для ленивых админов является Nginx Proxy Manager (NPM). У него есть веб-морда, он сам дружит с Let’s Encrypt, и мне не надо писать километровые конфиги Nginx руками в vi.
Заходим на сервер (привет, MobaXterm, мой верный друг) и открываем наш docker-compose.yml.
Нам нужно сделать две вещи:
- Убрать прямой проброс портов у Grav.
- Добавить сервис npm (Nginx Proxy Manager) и объединить их общей внутренней сетью.
Было просто, стало надежно. Вот как выглядит мой конфиг теперь:
Запускаем всё это дело командой docker compose up -d. Видим, как Docker радостно качает слои и поднимает контейнеры.
Шаг 2. Получаем «Зеленый замок» (SSL) за 3 клика
Теперь самое приятное. Вместо того чтобы мучиться с консольным certbot, прописывать кроны и бояться, что через 3 месяца сертификат протухнет, мы идем в админку NPM.
Она висит на 81-м порту. Заходим, меняем дефолтные пароли (мы же не халатные админы, верно?) и видим пустую панель.
Нажимаем "0 Proxy Hosts", далее "Add Proxy Host". Тут всё интуитивно, даже если вы видели Linux только в кино про хакеров:
- Вбиваем наш домен (myisa.ru).
- Указываем, куда пересылать трафик: имя контейнера grav и порт 80.
- Включаем галочки Block Common Exploits (мелочь, а приятно).
А теперь магия. Вкладка SSL. Выбираем «Request a new Certificate», ставим галку Force SSL (чтобы всех принудительно кидало на HTTPS) и соглашаемся с правилами.
Жмем Save. Nginx Proxy Manager сам стучится в Let's Encrypt, доказывает, что домен наш, получает сертификат и прописывает его. Всё. Сайт открывается по HTTPS.
Шаг 3. Техническое SEO: Делаем вид, что мы рады роботам
Сайт работает, замок зеленый. Но для поисковых систем наш сайт — это черный ящик. Надо дать им карту и инструкции.
В Grav (в отличие от некоторых CMS на букву W) это делается через плагины, которые не кладут базу данных при установке.
Идем в админку Grav -> Plugins. Нам нужен джентльменский набор:
- Sitemap — генерирует карту сайта.
- Social & SEO Meta Tags — чтобы ссылки в Телеграме выглядели красиво, а не как набор символов.
После установки Sitemap у нас автоматически появляется раздел sitemap. Но поисковик сам его не найдет, если мы ему не скажем. Для этого нужен файл-вахтер — robots.txt.
В Grav он уже есть просто добавим в него строку
Sitemap: https://myisa.ru/sitemap
Теперь любая страница нашего сайта имеет правильные мета-теги, а Яндекс с Гуглом знают, какие страницы индексировать.
Шаг 4. Момент истины: Google PageSpeed
Ради чего мы вообще связывались с Grav, а не ставили тяжелый WordPress? Ради скорости. Grav работает на файлах, ему не нужно делать сто запросов к базе данных, чтобы отдать заголовок страницы.
Я закончил настройку, включил HTTP/2 в Nginx Proxy Manager (галочка, которую мы ставили ранее, помните?) и пошел в Google PageSpeed Insights.
Барабанная дробь...
100 баллов на компьютерах. На дешёвом VPS за 99 рублей. С SSL шифрованием и Docker-прослойкой.
Итог
Что мы имеем на выходе третьей части:
- Безопасность: Весь трафик шифруется, порты закрыты, работает Reverse Proxy.
- Удобство: Сертификаты обновляются сами, админка Grav летает.
- SEO: Технический минимум выполнен, сайт готов к индексации.
- Скорость: Максимально возможная.
Вся эта конструкция потребляет минимум ресурсов сервера (Debian 11 кушает совсем немного), легко переносится (просто скопируйте папку с volume) и не требует постоянного внимания.
Системный администратор доволен. Google доволен. Бюджет (99р) цел.
P.S. В следующих статьях (если я не поленюсь) расскажу, как прикрутить сюда VS Code вместо админки. Настроим Remote SSH для написания статей прямо в редакторе кода. Не переключайтесь.