Селф-хостинг приложений на VPS: архитектура, потребление RAM и с чего начать
Руководство по выбору приложений для селф-хостинга на VPS с Docker. Реальные данные потребления памяти для 10+ приложений, комбинации для тарифов 4 ГБ и 8 ГБ, и фреймворк для выбора первого приложения.
У тебя есть VPS. Может, только что получил, а может, уже запустил пару сервисов и хочешь больше. В любом случае вопрос один: что на нём запустить и хватит ли ресурсов?
Это руководство отвечает на этот вопрос. Оно описывает архитектуру self-hosted стека приложений, даёт реальные цифры потребления памяти, измеренные на VPS 4 vCPU/8 ГБ, и предлагает матрицу решений для выбора первого (или следующего) приложения. Никаких списков названий. Никаких теоретических догадок. Только данные и план.
Предварительные требования: Это руководство предполагает, что Docker и обратный прокси уже установлены. Если нет, начни с Docker в продакшене на VPS: что ломается и как это починить для установки Docker, Docker Compose и Caddy или Traefik на Debian 12 или Ubuntu 24.04. Основы Docker Compose описаны в [-> docker-compose-multi-service-vps].
Почему селф-хостинг на VPS, а не на домашнем сервере?
VPS даёт круглосуточный хостинг с публичным IPv4-адресом, без CGNAT, без счетов за электричество и без необходимости обслуживать железо. Управляемые провайдером снапшоты обеспечивают аварийное восстановление. VPS 4 vCPU/8 ГБ комфортно тянет 5-8 Docker-приложений за несколько евро в месяц. Твой домашний интернет падает — VPS продолжает работать.
Сравнение VPS с домашним сервером для селф-хостинга:
| Фактор | VPS | Домашний сервер |
|---|---|---|
| Публичный IP | Включён, статический | Часто за CGNAT. Нужны обходные решения с туннелями. |
| Аптайм | SLA 99,9%+, резервное питание | Зависит от провайдера и электросети |
| Канал | Симметричный, обычно 1 Гбит/с+ | Асимметричный. Аплинк — узкое место. |
| Обслуживание железа | Проблема провайдера | Твоя проблема. Отказы дисков, шум вентиляторов, перегрев. |
| Электричество | Включено в цену | 20-60 EUR/год за небольшой сервер 24/7 |
| Снапшоты/бэкапы | В один клик, управляются провайдером | Сам строишь и тестируешь пайплайн бэкапов |
| Начальная стоимость | От ~4 EUR/мес | 200-500+ EUR за Mini PC или NAS |
| Физический доступ | Нет. Только SSH. | Полный доступ. Подходит для USB-устройств, ZFS-массивов. |
Домашний сервер имеет смысл, если нужно локальное хранилище (ZFS-массивы, NAS), USB-оборудование (Zigbee-стики, SDR-приёмники) или хочешь изучить администрирование на голом железе. Для всего остального VPS проще и дешевле для старта.
Большинство домашних провайдеров теперь используют Carrier-Grade NAT, а значит ты делишь публичный IP с десятками других абонентов. Проброс портов невозможен. Входящие соединения невозможны. Твои self-hosted приложения невидимы в интернете. Обходные пути есть (Cloudflare Tunnels, WireGuard-релеи через VPS), но они добавляют сложности и зависимость от внешнего сервиса. VPS обходит проблему полностью: ты получаешь выделенный публичный IPv4, управляешь DNS, и входящий трафик просто работает.
Если хочешь и то, и другое — используй VPS как публичную точку входа и WireGuard-туннель обратно к домашнему серверу для приватных сервисов. Но для большинства self-hosted приложений VPS хватает.
Как выглядит self-hosted стек приложений?
Self-hosted стек на VPS следует многоуровневой архитектуре: обратный прокси стоит спереди, маршрутизируя HTTPS-трафик к контейнерам приложений. Каждое приложение подключается к своей базе данных (или использует встроенный SQLite). Слой бэкапов делает снапшоты по расписанию.
Internet
│
▼
┌─────────────────────────────┐
│ Reverse Proxy (Caddy) │ Port 443 ← only public port
│ TLS termination + routing │
└──────┬──────┬──────┬────────┘
│ │ │
▼ ▼ ▼
┌─────┐ ┌─────┐ ┌─────┐
│App 1│ │App 2│ │App 3│ Docker containers
└──┬──┘ └──┬──┘ └──┬──┘
│ │ │
▼ ▼ ▼
┌─────┐ ┌─────┐ ┌─────┐
│ DB │ │ DB │ │SQLite│ PostgreSQL, Redis, or embedded
└─────┘ └─────┘ └─────┘
│
▼
┌─────────────────┐
│ Backup Layer │ Restic, borgmatic, or provider snapshots
│ (scheduled) │
└─────────────────┘
Ключевые решения:
- Обратный прокси: Caddy автоматически получает TLS-сертификаты без конфигурации. Traefik интегрируется с Docker-лейблами для автоматического обнаружения сервисов. Оба работают. Caddy проще для новичков.
- База данных: Многие лёгкие приложения (Vaultwarden, Uptime Kuma, Beszel) используют встроенный SQLite. Отдельный контейнер с БД не нужен. Более тяжёлые приложения (Immich, Plausible, Gitea) требуют PostgreSQL.
- Бэкапы: Снапшоты провайдера покрывают весь диск. Для бэкапов на уровне приложений используй Restic или borgmatic на удалённый таргет (S3-совместимое хранилище или второй VPS).
- Сеть: Все контейнеры приложений находятся во внутренней Docker-сети. Только обратный прокси выставляет порты 80 и 443. Приложения никогда не привязываются к публичным интерфейсам напрямую.
Подробно эта архитектура описана в Docker в продакшене на VPS: что ломается и как это починить.
Сколько RAM реально потребляют self-hosted приложения?
Меньше, чем ты думаешь. Большинство популярных self-hosted приложений в простое потребляют менее 200 МБ. Исключения — приложения с функциями машинного обучения (Immich) или встроенными аналитическими движками (Plausible с ClickHouse).
Цифры ниже — это RSS-память в простое/при лёгком использовании из docker stats, измеренная на VPS Virtua Cloud 4 vCPU/8 ГБ с Debian 12. Пиковые значения — типичные всплески при активном использовании (загрузка фото, OCR документов, выполнение воркфлоу).
| Приложение | Что заменяет | RAM в простое | RAM пиковая | Хранилище/мес | База данных |
|---|---|---|---|---|---|
| Vaultwarden | Bitwarden, 1Password | ~25 МБ | ~50 МБ | Минимум | SQLite |
| Uptime Kuma | UptimeRobot, Pingdom | ~100 МБ | ~170 МБ | Минимум | SQLite |
| Beszel | Datadog (базовый) | ~50 МБ | ~80 МБ | Минимум | Встроенная |
| Gitea | GitHub (приватные репо) | ~150 МБ | ~300 МБ | ~50 МБ/репо | PostgreSQL или SQLite |
| n8n | Zapier, Make | ~100 МБ | ~500 МБ+ | Зависит от воркфлоу | PostgreSQL |
| Paperless-ngx | Картотека | ~300 МБ | ~1 ГБ | ~5 МБ/документ | PostgreSQL + Redis |
| Nextcloud | Google Drive, Dropbox | ~250 МБ | ~512 МБ | Зависит от файлов | PostgreSQL + Redis |
| Coolify | Vercel, Railway | ~500 МБ | ~1,2 ГБ | Зависит от деплоев | PostgreSQL (в комплекте) |
| Plausible | Google Analytics | ~400 МБ | ~1,5 ГБ | ~100 МБ/1М просмотров | PostgreSQL + ClickHouse |
| Immich | Google Photos | ~800 МБ | ~2,5 ГБ | ~3 ГБ/1000 фото | PostgreSQL + Redis |
Несколько замечаний к этим цифрам:
- Immich с включённым машинным обучением (детекция лиц/объектов) требует 4-6 ГБ всего. Цифры выше — с включённым, но простаивающим ML. При массовом импорте фото ожидай 3-4 ГБ. Можно отключить ML и снизить потребление до ~400 МБ, но потеряешь умный поиск и распознавание лиц.
- Plausible: потребление RAM зависит от объёма трафика. ClickHouse любит память. Для сайта с менее чем 100 000 просмотров/месяц цифры выше актуальны. Для высоконагруженных сайтов нужно больше.
- n8n в простое лёгкий, но сложные воркфлоу с большими JSON-пейлоадами или AI-интеграциями дают резкие всплески. AI-агентные воркфлоу могут потреблять 200 МБ+ за одно выполнение.
- Paperless-ngx всплескивает при OCR. Установи
PAPERLESS_WEBSERVER_WORKERS=1в Docker, чтобы сэкономить ~150 МБ, если ты единственный пользователь.
Какое приложение развернуть на VPS первым?
Начни с Vaultwarden. Потребляет 25 МБ RAM, разворачивается за 10 минут, заменяет платный менеджер паролей, которым ты пользуешься каждый день, и заставляет тебя правильно настроить TLS. Эта настройка TLS (обратный прокси + DNS + сертификаты) — фундамент, который нужен каждому следующему self-hosted приложению. Одно приложение, три выигрыша: приватность, экономия и переиспользуемая инфраструктура.
Матрица решений для расстановки приоритетов:
| Приложение | Влияние на приватность | Сложность установки | Заменяемый SaaS | Мин. RAM |
|---|---|---|---|---|
| Vaultwarden | Очень высокое (пароли) | Низкая (10 мин) | Bitwarden/1Password | 128 МБ |
| Immich | Высокое (личные фото) | Средняя (30 мин) | Google Photos | 2 ГБ (4 ГБ с ML) |
| Paperless-ngx | Высокое (документы, удостоверения) | Средняя (20 мин) | Картотека + приложения-сканеры | 512 МБ |
| Plausible | Среднее (аналитика посетителей) | Средне-высокая (25 мин) | Google Analytics | 1 ГБ |
| Uptime Kuma + Beszel | Низкое (мониторинг инфры) | Низкая (10 мин) | UptimeRobot + Datadog | 256 МБ |
| Gitea | Среднее (исходный код) | Низкая (15 мин) | Приватные репо GitHub | 256 МБ |
| n8n | Среднее (данные воркфлоу) | Средняя (20 мин) | Zapier, Make | 512 МБ |
| Coolify | Низкое (инструмент деплоя) | Средняя (20 мин) | Vercel, Railway | 1 ГБ |
Влияние на приватность — самая веская причина для селф-хостинга. Твои пароли, фотографии и отсканированные документы — самые чувствительные данные, с которыми ты работаешь ежедневно. Хранить их на чужом сервере — значит доверять чужой безопасности, чужой юрисдикции и чужой устойчивости бизнеса. На собственном VPS в Европе эти данные остаются под твоим контролем и под защитой GDPR.
Туториалы по каждому приложению — по ссылкам в конце этого руководства.
Что можно запустить на VPS 4 ГБ vs 8 ГБ?
VPS 4 ГБ тянет солидный персональный стек. VPS 8 ГБ справляется со всем, что нужно соло-разработчику или небольшой команде. Цифры ниже учитывают обратный прокси (~30 МБ), накладные расходы Docker и саму ОС (~300-400 МБ занято).
VPS 4 ГБ (~3,2 ГБ доступно для приложений)
| Комбинация | Общий RAM в простое | Запас |
|---|---|---|
| Vaultwarden + Uptime Kuma + Beszel + Gitea | ~325 МБ | ~2,9 ГБ |
| Vaultwarden + Paperless-ngx + Uptime Kuma | ~425 МБ | ~2,8 ГБ |
| Vaultwarden + n8n + Beszel + Gitea | ~325 МБ | ~2,9 ГБ |
| Vaultwarden + Nextcloud + Uptime Kuma | ~375 МБ | ~2,8 ГБ |
Эти комбинации оставляют достаточно запаса для пиковых нагрузок. Даже когда Paperless-ngx подскакивает до 1 ГБ при OCR, место остаётся. Избегай Immich с ML или Plausible на 4 ГБ, если это не единственное приложение.
VPS 8 ГБ (~7 ГБ доступно для приложений)
| Комбинация | Общий RAM в простое | Запас |
|---|---|---|
| Vaultwarden + Immich + Uptime Kuma + Beszel | ~975 МБ | ~6 ГБ |
| Vaultwarden + Plausible + Gitea + Paperless-ngx + Beszel | ~925 МБ | ~6 ГБ |
| Vaultwarden + Coolify + Uptime Kuma + n8n | ~725 МБ | ~6,3 ГБ |
| Все лёгкие (Vaultwarden + Gitea + Uptime Kuma + Beszel + n8n + Paperless-ngx) | ~725 МБ | ~6,3 ГБ |
На 8 ГБ можно комфортно запустить Immich с ML рядом с тремя-четырьмя лёгкими приложениями. Можно запустить и Plausible с ClickHouse без беспокойства о нехватке памяти. Это оптимальная точка для персонального self-hosting сетапа.
Про пиковые нагрузки: RAM в простое — это то, что ты закладываешь при планировании, но пики — это то, что роняет сервер. Paperless-ngx скачет при OCR. Immich скачет при импорте фото с ML-классификацией. n8n скачет при выполнении воркфлоу с большими пейлоадами. Колонка «Запас» выше — это твоя подушка безопасности. Если запас падает ниже 1 ГБ, есть риск, что Linux OOM killer прибьёт контейнер в самый неподходящий момент. Держи как минимум 1,5 ГБ запаса для любого стека с Immich или Plausible.
Для VPS Virtua Cloud с 4 vCPU и 8 ГБ RAM на NVMe-хранилище смотри актуальные тарифы. Площадка во Франкфурте размещает твои данные в ЕС под немецким законодательством о защите данных.
Каким self-hosted приложениям нужен европейский хостинг?
Любое приложение, хранящее персональные данные, выигрывает от европейского хостинга под защитой GDPR. Но некоторые приложения работают с данными, где вопрос юрисдикции становится критичным.
Высокий приоритет для хостинга в ЕС:
- Vaultwarden хранит каждый твой пароль. Утечка здесь катастрофична. Европейский хостинг означает, что применяются требования GDPR об уведомлении о нарушениях.
- Immich содержит личные фотографии, часто с лицами членов семьи. Данные распознавания лиц — это биометрические данные по статье 9 GDPR. Особая категория. Дополнительная защита.
- Paperless-ngx хранит сканы удостоверений личности, налоговые документы, контракты. Одни из самых чувствительных персональных данных, которые у тебя есть.
Средний приоритет:
- Plausible собирает аналитику посетителей. Он спроектирован с приоритетом приватности (без куки, без персональных данных), но данные всё равно принадлежат твоим посетителям.
- Gitea может содержать проприетарный исходный код. Не персональные данные как таковые, но интеллектуальная собственность, которую ты хочешь контролировать.
- n8n: воркфлоу часто обрабатывают данные из множества сервисов. Слой автоматизации видит всё.
Более низкий приоритет:
- Uptime Kuma / Beszel хранят данные мониторинга. Никаких персональных данных, если только ты не мониторишь эндпоинты, которые их содержат.
- Coolify — инструмент деплоя. Он работает с твоим кодом, но не хранит данные конечных пользователей.
Если ты европейская компания или обрабатываешь данные граждан ЕС, хостинг этих приложений на VPS в Германии (или другой стране ЕС) упрощает соответствие GDPR. Ты контролируешь данные. Ты знаешь, где они. Ты решаешь, у кого есть доступ.
Как поддерживать self-hosted приложения в безопасности и актуальном состоянии?
Селф-хостинг означает, что ты — сисадмин. Это цена за контроль. Вот практики, которые не обсуждаются:
Файрвол в первую очередь. Перед деплоем любого приложения настрой ufw, разрешив только SSH (порт 22) и HTTPS (порт 443). Заблокируй всё остальное. Это описано в Docker в продакшене на VPS: что ломается и как это починить.
TLS везде. Твой обратный прокси (Caddy или Traefik) выполняет терминацию TLS. Каждое приложение получает HTTPS. Без исключений. Никаких «добавлю TLS потом». Caddy автоматически получает сертификаты Let's Encrypt.
Обновления. Еженедельно проверяй обновления образов контейнеров. Загружай новые образы, пересоздавай контейнеры:
docker compose pull
docker compose up -d
Для критических обновлений безопасности (Vaultwarden, любое интернет-доступное приложение) подпишись на GitHub-релизы проекта или RSS-ленту. Релизы Vaultwarden и Релизы Immich — хорошие примеры.
Бэкапы. Тестируй их. Бэкап, который ты ни разу не восстанавливал, — это не бэкап. Используй снапшоты провайдера для полного восстановления диска и Restic или borgmatic для бэкапов на уровне приложений на удалённое хранилище. Настрой расписание через cron или systemd timer. Проверяй ежемесячно.
Управление секретами. Никогда не хардкодь пароли в docker-compose.yml. Используй файл .env с правами chmod 600:
openssl rand -base64 32 > /dev/null # example: generate a strong password
# docker-compose.yml
services:
app:
env_file: .env
# .env (chmod 600, owned by root)
DB_PASSWORD=<generated-password>
SECRET_KEY=<generated-key>
Мониторинг. Запусти Uptime Kuma для проверки внешних эндпоинтов и Beszel для метрик на уровне контейнеров (CPU, RAM, диск на контейнер). Оба легковесные и дают видимость до того, как проблемы превратятся в аварии. См. Самостоятельный хостинг Uptime Kuma и Beszel на VPS с Docker Compose.
Знание своих логов. Знай, где твои логи. Docker-контейнеры по умолчанию пишут логи в stdout. Смотри их через:
docker compose logs -f --tail=50 <service-name>
Для системных сервисов (обратный прокси, если работает нативно, SSH, файрвол) используй journalctl:
journalctl -u caddy -f
Когда что-то ломается, первым делом смотри логи. Не Stack Overflow. Не Reddit. Логи.
Что дальше?
Каждое приложение из матрицы решений выше имеет отдельный туториал с полными конфигурациями Docker Compose, настройкой обратного прокси, бэкапами и харденингом:
| Приложение | Туториал |
|---|---|
| Vaultwarden (пароли) | Самостоятельный хостинг Vaultwarden на VPS с Docker Compose |
| Immich (фото) | Самостоятельный хостинг Immich на VPS с Docker Compose |
| Plausible (аналитика) | Самостоятельный хостинг Plausible Analytics на VPS с Docker Compose |
| Uptime Kuma + Beszel (мониторинг) | Самостоятельный хостинг Uptime Kuma и Beszel на VPS с Docker Compose |
| Coolify vs Dokploy (PaaS) | Coolify vs Dokploy: какой self-hosted PaaS выбрать для VPS? |
| Paperless-ngx (документы) | Самостоятельный хостинг Paperless-ngx на VPS с Docker Compose |
| Gitea (хостинг Git) | Самостоятельный хостинг Gitea на VPS с Docker Compose |
Если Docker и обратный прокси ещё не настроены, начни здесь: Docker в продакшене на VPS: что ломается и как это починить. Это руководство охватывает Debian 12 и Ubuntu 24.04, устанавливает Docker с Compose, настраивает Caddy как обратный прокси с автоматическим TLS, поднимает файрвол и создаёт непривилегированного пользователя для деплоя. Всё в этом руководстве построено на этом фундаменте.
Готовы попробовать?
Разверните свой сервер за секунды. Linux, Windows или FreeBSD. →