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

Как разместить сайт на Raspberry Pi

7 min read Self‑host Обновлено 27 Dec 2025
Разместить сайт на Raspberry Pi быстро
Разместить сайт на Raspberry Pi быстро

Крупный план логотипа Raspberry Pi на плате первого поколения.

К чему готовиться

  • Минимальные требования: Raspberry Pi (любая модель кроме Zero подходит для небольшого сайта). Для лучшей производительности — Pi 4.
  • ОС: Raspberry Pi OS (32‑bit или 64‑bit, в зависимости от образа Docker/контейнеров).
  • Сеть: стабильный интернет и доступ к настройкам роутера (перенаправление портов).
  • Домен: регистратор с поддержкой API или динамического DNS (например, Cloudflare).

Обзор архитектуры (что куда идёт)

  • Docker на Raspberry Pi — контейнеры запускают все сервисы.
  • Nginx Proxy Manager — публичный прокси и менеджер SSL (порт 80/443 снаружи перенаправляются на него).
  • ddclient — обновляет DNS-запись домена при смене внешнего IP.
  • Ghost — CMS/блог на Node.js; использует базу данных MySQL/MariaDB.
  • Резервное копирование и мониторинг — рекомендовано Uptime‑Kuma и регулярные бекапы БД и файлов.

Почему не нужен самый новый Pi

Вы можете начать с Pi 3B или Pi 4. Pi 3B вполне запустит Ghost и MySQL для небольшой аудитории; Pi 4 ускорит старт контейнеров и поднимет отклик при нагрузке. Если ожидаете тысячи одновременных пользователей — стоит рассмотреть более мощный сервер или виртуальную машину в дата‑центре.

Важно: Raspberry Pi Zero лучше не использовать для публичного сайта, он ограничен по сети и памяти.

Raspberry Pi 4 Model B с палитрой характеристик и платой.

Шаг 1 — Подготовьте Raspberry Pi и ОС

  1. Скачайте и установите Raspberry Pi OS (рекомендую 64‑bit, если планируете работать с современными контейнерами).
  2. Обновите систему:
sudo apt update && sudo apt upgrade -y
sudo reboot
  1. Настройте статический локальный IP для Pi в настройках роутера или через dhcpcd.conf — это упростит маршрутизацию и управление портами.

Шаг 2 — Установка Docker и Docker Compose

Docker — основа вашей платформы. Установите официальным способом для Debian/Raspberry Pi OS.

# Установка Docker (официальный скрипт)
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
# Добавьте пользователя в группу docker
sudo usermod -aG docker $USER
# Выйдите и войдите снова или перезагрузите

Установите docker-compose-plugin или docker-compose v2 (в новых системах docker compose как плагин доступен):

sudo apt install -y docker-compose-plugin
# Или если нужен бинарный docker-compose v1:
# sudo apt install -y docker-compose

Совет: включите таймзону и синхронизацию времени (ntp), это важно для SSL и логов.

Шаг 3 — Рекомендуемое ПО для управления контейнерами

  • Portainer — удобный веб‑интерфейс для управления Docker. Полезно при отладке.
  • Альтернатива: чистый docker compose из командной строки.

Пример быстрого запуска Portainer:

docker volume create portainer_data
docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest

Шаг 4 — Регистрация домена и Dynamic DNS

Выберите регистратор, поддерживающий API. Я использую Cloudflare из‑за их гибкой зоны DNS и бесплатного функционала.

  1. Зарегистрируйте домен или используйте существующий.
  2. Настройте учетные данные API: в Cloudflare — создайте API token с правами редактирования DNS для нужной зоны.
  3. Для автоматизации DNS используйте ddclient (есть контейнер) или другое решение, поддерживаемое вашим регистратором.

Пример минимальной конфигурации ddclient.conf (адаптируйте под ваш провайдер и токен):

protocol=cloudflare
ssl=yes
zone=example.com
ttl=1
use=web, web=checkip.dyndns.com/
server=api.cloudflare.com
login=your-email@example.com
password='API_TOKEN'
example.com
@, www, blog
  • zone — ваш домен.
  • password — API Token.
  • Укажите записи, которые хотите обновлять (@ — корень, www, blog и т.д.).

В Docker Compose вы добавите контейнер ddclient с монтированием файла ddclient.conf.

Шаг 5 — Docker Compose: шаблон для стека

Ниже — упрощённый пример docker-compose.yml, который разворачивает Nginx Proxy Manager, ddclient, Ghost и MySQL. Перед запуском замените пароли, переменные окружения и пути.

version: '3.7'
services:
  nginx-proxy-manager:
    image: jc21/nginx-proxy-manager:latest
    restart: unless-stopped
    ports:
      - 8080:80   # web UI
      - 4443:443  # SSL
    environment:
      DB_MYSQL_HOST: db
      DB_MYSQL_PORT: 3306
      DB_MYSQL_USER: npm
      DB_MYSQL_PASSWORD: npm_password
    volumes:
      - ./nginx/data:/data
      - ./nginx/letsencrypt:/etc/letsencrypt
  ddclient:
    image: linuxserver/ddclient
    restart: unless-stopped
    volumes:
      - ./ddclient/ddclient.conf:/config/ddclient.conf
  ghost-db:
    image: mariadb:10.6
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: your_root_password
      MYSQL_DATABASE: ghost
      MYSQL_USER: ghost
      MYSQL_PASSWORD: ghost_db_password
    volumes:
      - ./mysql:/var/lib/mysql
  ghost-server:
    image: ghost:latest
    restart: unless-stopped
    environment:
      url: https://yourdomain.com
      database__client: mysql
      database__connection__host: ghost-db
      database__connection__user: ghost
      database__connection__password: ghost_db_password
      database__connection__database: ghost
    volumes:
      - ./ghost/content:/var/lib/ghost/content
    depends_on:
      - ghost-db
networks:
  default:
    driver: bridge

Ключевые шаги перед запуском:

  • Замените yourdomain.com в ghost-server.environment.url.
  • Выберите и сгенерируйте устойчивые пароли для MySQL и NPM.
  • Подумайте о размещении томов на отдельном диске или USB‑накопителе для долговечности.

Шаг 6 — Настройка Nginx Proxy Manager

  1. Откройте веб‑интерфейс Nginx Proxy Manager (по умолчанию порт 8080 на хосте).
  2. Создайте Proxy Host для домена:
    • Domain Names: yourdomain.com
    • Scheme: http
    • Forward Hostname / IP: локальный IP вашего Pi
    • Forward Port: 2368 (по умолчанию Ghost)
  3. На вкладке SSL запросите сертификат Let’s Encrypt (введите email).
  4. Включите опции HSTS и редирект HTTP→HTTPS по необходимости.

Шаг 7 — Порт‑форвардинг на роутере

Чтобы сайт был доступен из интернета, настройте проброс портов на роутере:

  • Внешний порт 80 → внутренний порт 8080 (IP Raspberry Pi).
  • Внешний порт 443 → внутренний порт 4443 (IP Raspberry Pi).

Если ваш провайдер блокирует порт 80/443 — обсудите с ним варианты, используйте Cloudflare Spectrum (платно) или альтернативные порты + прокси.

Совет: вместо проброса 80/443 можно использовать Cloudflare в «reverse proxy» режиме и скрыть реальный IP сервера — это повышает безопасность.

Шаг 8 — Запуск и проверка

  1. Запустите стек:
docker compose up -d
  1. Проверьте логи:
docker compose logs -f nginx-proxy-manager
docker compose logs -f ghost-server
docker compose logs -f ghost-db
  1. Подождите: первые запуски MySQL и Ghost могут занять 10–20 минут на слабом Pi.
  2. Проверяйте доступность сайта локально и извне.

Отладка: типичные проблемы и решения

  • Ghost не запускается: проверьте логи контейнера и убедитесь, что БД доступна и пароли совпадают.
  • SSL не выдаётся: убедитесь в корректном пробросе портов 80/443 и что Cloudflare (если включён) не скрывает нужных заголовков.
  • DDNS не обновляет запись: проверьте ddclient.conf, токен Cloudflare и логи контейнера ddclient.

Безопасность и надёжность

  • Обновления: регулярно обновляйте ОС и контейнеры.
  • Резервное копирование: делайте бекапы папки ghost/content и дампа базы данных (mysqldump).
  • Фаервол: настройте ufw или iptables, откройте только нужные порты.
  • Защита доступа: смените дефолтные порты интерфейсов управления и установите сложные пароли.

Пример базовой настройки ufw:

sudo apt install ufw
sudo ufw allow from 192.168.0.0/24 to any port 22 proto tcp
sudo ufw allow 8080/tcp
sudo ufw allow 4443/tcp
sudo ufw enable

Резервные копии: простая методика

  1. Дамп базы данных раз в день:
docker exec -t ghost-db mysqldump -u root -p'your_root_password' ghost > ghost_db_backup_$(date +%F).sql
  1. Архив контента Ghost:
tar -czvf ghost_content_backup_$(date +%F).tar.gz ./ghost/content
  1. Переносите архивы на удалённое хранилище (S3, rsync на другой сервер или внешний диск).

Мониторинг

  • Uptime‑Kuma: лёгкий мониторинг статуса сайта, уведомления (Telegram/Email).
  • Локальные логи: храните и анализируйте логи Docker/NGINX при помощи ротации логов.

Альтернативные подходы

  • Статический сайт + SSG (Hugo, Jekyll) с Caddy: если у вас блог без динамики, статический сайт проще и легче по ресурсам.
  • WordPress: если нужен каталог плагинов и e‑commerce, но WordPress требует больше ресурсов и обслуживания.
  • Хостинг у провайдера: если требуется высокая доступность и масштабируемость, иногда VPS или managed‑хостинг дешевле по времени и надежнее.

Когда это не сработает (ограничения и риски)

  • Если у вас нестабильный или часто меняющийся внешний IP и регистратор не поддерживает DDNS.
  • Если трафик большой, Pi может не справиться — потребуется миграция на VPS/облачную платформу.
  • Если провайдер блокирует порты или запрещает публичные серверы — потребуется обходное решение или аренда VPS.

Миграция с общего хостинга на Pi: советы

  • Экспортируйте контент (экспорт Ghost) и базу данных.
  • Проверьте версии Ghost и MariaDB (совместимость).
  • Тестируйте локально на Pi перед перенаправлением DNS.

Критерии приёмки

  • Сайт доступен по HTTPS извне.
  • Let’s Encrypt выдал валидный сертификат.
  • Ghost подключён к рабочей базе данных, контент отображается корректно.
  • Автообновление DNS работает при смене IP (ddclient лог показывает успешное обновление).
  • Резервные копии БД и контента выполняются и проверены.

Контрольный список перед запуском

  • Зарегистрирован домен и создан API token.
  • Raspberry Pi настроен с статическим локальным IP.
  • Docker и docker compose установлены.
  • Docker Compose файл настроен (пароли/URL).
  • Nginx Proxy Manager настроен, SSL получен.
  • Порт‑форвардинг настроен на роутере.
  • Настроены бекапы и мониторинг.

Короткая проверка при проблемах (runbook)

  1. Проверить статус контейнеров: docker compose ps.
  2. Посмотреть логи проблемного контейнера: docker compose logs -f
  3. Проверить доступность порта: curl -I http://localhost:2368
  4. Проверить DNS: dig yourdomain.com +short и сравнить с внешним IP.
  5. Проверить ddclient: логи и конфигурацию.

Примеры конфигураций для безопасности

  • Отключите root SSH‑вход и используйте ключи SSH.
  • Используйте fail2ban для защиты интерфейсов админки.

Короткая галерея крайних случаев

  • При частых сбоях SD-карты — используйте SSD по USB3 (для Pi 4) или регулярную замену и резервные копии.
  • Если провайдер не даёт публичный IPv4 — используйте IPv6 или туннелирование (например, cloudflare туннель).

Интерфейс администрирования Ghost: список публикаций и меню управления.

Полезные команды и сниппеты (cheat sheet)

  • Запуск стека: docker compose up -d
  • Остановка: docker compose down
  • Просмотр логов: docker compose logs -f
  • Дамп БД: docker exec -t ghost-db mysqldump -u root -p'password' ghost > backup.sql

Заключение

Размещение сайта на Raspberry Pi — отличный способ сохранить контроль над инфраструктурой, научиться управлять сервисами и сэкономить на хостинге. Для небольших проектов такая платформа даёт гибкость и достаточную производительность. Следуйте шагам: подготовьте Pi и Docker, настройте DDNS, разверните Nginx Proxy Manager и Ghost, обеспечьте безопасность и резервы.

Итоговые рекомендации:

  • Начните с небольшой нагрузки и тестовой аудитории;
  • Автоматизируйте бэкапы с первого дня;
  • Планируйте масштабирование на VPS, если трафик вырастет.

Дополнительно: рассмотрите установку Uptime‑Kuma для мониторинга доступности и оповещений.


Сводка: если вы выполнили все шаги этой инструкции, ваш сайт на Ghost должен быть доступен по HTTPS, DNS автоматически обновляться, а сервисы — управляться через Docker. Удачи в запуске!

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Как компилировать и устанавливать пакеты из исходников
Linux

Как компилировать и устанавливать пакеты из исходников

Установка QEMU/KVM на Ubuntu
Виртуализация

Установка QEMU/KVM на Ubuntu

Восстановление удалённых файлов в Teams
Microsoft Teams

Восстановление удалённых файлов в Teams

Как отформатировать USB в exFAT для Windows и Mac
Технологии

Как отформатировать USB в exFAT для Windows и Mac

Как пользоваться Hide My Email на iPhone и iPad
Руководство

Как пользоваться Hide My Email на iPhone и iPad

Добавить Google Календарь в Outlook быстро
Календарь

Добавить Google Календарь в Outlook быстро