Ваш личный интернет-актив за копейки: запускаем сайт на Grav + Docker, который живёт дольше некоторых дедлайнов
Хотите запустить блог или сайт-визитку, но не хотите превращать это в вторую работу с ночными созвонами “почему опять не открывается”? Здесь — практичный способ собрать быстрый веб-ресурс, который не требует отдельного сисадмина, работает на дешёвом железе и принадлежит вам. Мы используем Docker и Grav CMS, чтобы изначально построить фундамент, который легко развернуть и так же легко обслуживать — без драм и героизма.
Философия “лёгкого старта”
Запуск сайта часто выглядит так, будто вам предлагают выбрать ипотеку: “А вы точно уверены, что вам нужен именно этот стек на ближайшие 15 лет?”В итоге люди либо откладывают запуск, либо запускают “как-нибудь”, а потом живут в режиме: “главное — ничего не трогать”.
Идея другая: мы сразу проектируем систему так, чтобы вы оставались свободны.
Что даёт архитектура “Grav внутри Docker”:
- Быстрый старт: от покупки сервера до работающего сайта — короткая дистанция без обрядов посвящения.
- Низкий бюджет: не нужны тарифы “с заботой о базе данных”, потому что мы не кормим сервер лишними сущностями.
- Мобильность: переезд — это не спецоперация, а обычная переносимость папок (и да, это может сделать человек, который не читает man на ночь).
Почему это работает на слабом железе
Мы берём Grav CMS: это flat-file подход, где контент живёт в файлах, а не в отдельной базе данных.Docker, в свою очередь, упаковывает всё окружение в контейнер — как чемодан, который не задаёт вопросов и не требует “ещё одну зависимость”.
Практический эффект:
- Подойдёт самый простой VPS, где есть Linux и возможность запускать контейнеры.
- Можно запустить и на маленьком домашнем сервере (даже если он “на Celeron и вере в лучшее”).
- А если не хочется открывать порты наружу — используете, например, Cloudflare Tunnel и живёте спокойнее (пока не вспомните, сколько у вас паролей и где они лежат).
Практика: строим цифровой дом
Берём образ от LinuxServer.io и делаем главное правильно: отделяем движок от данных.Движок — расходник. Данные — актив. (Актив — это то, что вы не хотите потерять из‑за одного неосторожного “обновил и всё пропало”.)
Шаг 1. Создаём папку проекта
mkdir -p my-website
cd my-website
Шаг 2. Пишем docker-compose.yml
Создаём docker-compose.yml. Это не “программирование”, это просто короткая инструкция: “Запусти мне сайт и складывай важное в отдельное место”.
---
services:
grav:
image: lscr.io/linuxserver/grav:latest
container_name: my-grav-site
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Moscow
volumes:
- ./site-data:/config
ports:
- 80:80
restart: unless-stopped
Шаг 3. Запуск
bashdocker compose up -d
Через короткое время у вас поднимется сайт, а рядом появится папка site-data — там будет жизнь: страницы, плагины, настройки.
Почему вынесенные данные — это не “дополнительная сложность”, а психотерапия
Вот ключевая мысль статьи: мы строим систему так, чтобы в любой момент времени можно было:
- обновить контейнер без потери данных,
- сделать резервную копию без магии,
- перенести сайт на другой сервер без “давайте неделю подумаем”.
Когда данные вынесены, контейнер становится временным и заменяемым.Это удобно: контейнер можно пересоздать хоть десять раз, а контент останется (и ваше давление тоже).
Сценарий “переезд возможен всегда”, но не обязателен
Мы не живём в ожидании переезда. Мы просто строим так, чтобы переезд был лёгким, если вдруг понадобится.Не потому что “всё сломается”, а потому что жизнь любит сюрпризы, а сюрпризы лучше встречать с папкой бэкапов, а не с глазами “я всё делал по памяти”.
Технически это выглядит так:
- архивируем папку проекта (где docker-compose.yml и site-data),
- переносим на новый сервер,
- запускаем "docker compose up -d".
И всё. Без повторной настройки “с нуля” и без ощущения, что вы снова сдаёте экзамен, который не готовили.
Итог
Мы получили стартовую точку для личного бренда или небольшого проекта:
- дешёвый хостинг (Linux + Docker — и поехали),
- минимум ручной поддержки,
- контроль над данными,
- возможность в любой момент спокойно мигрировать или масштабироваться.
В следующей статье: подключаем домен/HTTPS, делаем базовую SEO-настройку и превращаем это в рабочий инструмент, а не “сайт, который есть, но его никто не видит”.
Техническая заметка: в контейнере linuxserver/grav каталог /config используется как точка для хранения персистентных данных, поэтому маппинг volume — центральная часть схемы.