NoctisNode
← ГайдыSelf-hosting2026-10-239 мин

Self-hosting стек для небольшого VPS: что влезает в 2 GB и 4 GB RAM

Реалистичный стартовый self-hosted стек на небольшом VPS: Docker Compose, Caddy, Vaultwarden, Uptime Kuma и Forgejo, бюджет RAM на каждый сервис, бэкапы и основы безопасности.

Коротко: на VPS с 2 GB спокойно работает self-hosted ядро из Caddy (HTTPS reverse proxy), Vaultwarden (пароли), Uptime Kuma (мониторинг) и Forgejo (git) под Docker Compose — примерно 0,6–1 GB RAM. Если добавить Nextcloud, нужно 4 GB; с более лёгкими инструментами вроде Syncthing или File Browser хватит и 2 GB.

В этом руководстве — рабочий Compose-файл, бюджет RAM на каждый сервис и две вещи, которые большинство self-hosted установок откладывают, пока не станет поздно: бэкапы вне сервера и закрытая сетевая поверхность. Команды рассчитаны на Debian 12/13 или Ubuntu 24.04 с Docker Engine и плагином Compose из официального репозитория Docker.

Бюджет RAM на каждый сервис

Цифры — типичная резидентная память от простоя до лёгкой нагрузки для одного–пяти пользователей с SQLite там, где он поддерживается. Пики при обновлениях, клонировании больших git-репозиториев или генерации превью в Nextcloud бывают выше, поэтому оставьте не меньше 20% запаса и добавьте swap-файл на 1–2 GB.

СервисРольТипичная RAMПримечания
ОС + sshd + journaldБазовая система150–250 MBМинимальный Debian или Ubuntu
Docker Engine + containerdСреда выполнения контейнеров80–120 MBФиксированная цена использования контейнеров
CaddyReverse proxy, автоматический HTTPS20–50 MBОдин бинарник, без базы данных
VaultwardenСервер паролей, совместимый с Bitwarden20–60 MBНаписан на Rust, SQLite
Uptime KumaМониторинг доступности и сертификатов100–200 MBNode.js; растёт с числом мониторов
ForgejoGit-хостинг, задачи, CI-хуки150–300 MBGo, SQLite достаточно для небольших команд
Nextcloud + MariaDB + RedisФайлы, календарь, контакты600 MB–1.2 GBОсновной расход — воркеры PHP-FPM
SyncthingСинхронизация файлов, без веб-пакета50–150 MBБолее лёгкая альтернатива Nextcloud
File BrowserВеб-файловый менеджер20–40 MBЗагрузка и раздача файлов по HTTPS
RadicaleCalDAV и CardDAV30–50 MBКалендарь и контакты без Nextcloud

Выбор размера VPS

Базовый стек (Caddy, Vaultwarden, Uptime Kuma, Forgejo) вместе с системой занимает около 0,6–1 GB, что помещается на сервер 2 vCPU / 2 GB с запасом для Syncthing и Radicale. Nextcloud с MariaDB и Redis поднимает итог примерно до 1,5–2,2 GB, поэтому 4 GB — реалистичный минимум, если хотите полный пакет плюс всё остальное. Важен и диск: репозитории Forgejo и синхронизируемые файлы растут, тогда как самим сервисам нужно всего несколько GB.

В NoctisNode тариф Pulse (2 vCPU, 2 GB RAM, 40 GB NVMe, $10 за 28 дней) вмещает базовый стек, а Umbra (4 vCPU, 4 GB, 60 GB NVMe, $15 за 28 дней) — базовый стек плюс Nextcloud. Оба — KVM с полным root и выделенным IPv4, оплачиваются в Monero или другой крипте. Ничто в этом руководстве не зависит от провайдера.

Файл Docker Compose

Веб-порты публикует только Caddy; приложения доступны исключительно через внутреннюю сеть Compose. Forgejo дополнительно публикует порт 2222 для git по SSH, так что OpenSSH хоста остаётся на своём порту. Задайте `FORGEJO_TAG` в файле `.env` равным текущей мажорной версии Forgejo и замените примерные домены своими DNS-записями.

# /srv/stack/compose.yaml
services:
  caddy:
    image: caddy:2
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
      - "443:443/udp"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile:ro
      - ./caddy/data:/data
      - ./caddy/config:/config

  vaultwarden:
    image: vaultwarden/server:latest
    restart: unless-stopped
    environment:
      DOMAIN: "https://vault.example.com"
      SIGNUPS_ALLOWED: "true"   # set to "false" after creating your account
    volumes:
      - ./vaultwarden:/data

  uptime-kuma:
    image: louislam/uptime-kuma:2
    restart: unless-stopped
    volumes:
      - ./uptime-kuma:/app/data

  forgejo:
    image: codeberg.org/forgejo/forgejo:${FORGEJO_TAG}
    restart: unless-stopped
    environment:
      USER_UID: "1000"
      USER_GID: "1000"
      FORGEJO__service__DISABLE_REGISTRATION: "true"
    volumes:
      - ./forgejo:/data
    ports:
      - "2222:22"

# /srv/stack/Caddyfile
# vault.example.com {
#     reverse_proxy vaultwarden:80
# }
# status.example.com {
#     reverse_proxy uptime-kuma:3001
# }
# git.example.com {
#     reverse_proxy forgejo:3000
# }

Запуск

  1. 01.Направьте A- (и AAAA-) записи для `vault`, `status` и `git` на IP сервера, чтобы Caddy смог получить сертификаты при первом запуске.
  2. 02.Создайте `/srv/stack`, положите туда `compose.yaml`, `Caddyfile` и `.env` и выполните `docker compose up -d`.
  3. 03.Откройте URL Forgejo и завершите установщик; первый созданный через него аккаунт становится администратором, так как публичная регистрация отключена.
  4. 04.Создайте свой аккаунт в Vaultwarden, затем установите `SIGNUPS_ALLOWED` в `"false"` и снова выполните `docker compose up -d`. Оставьте админ-панель отключённой, если не задали `ADMIN_TOKEN`, захэшированный Argon2.
  5. 05.Создайте администратора Uptime Kuma сразу после запуска, потому что до этого страница настройки открыта для всех.
  6. 06.Добавьте мониторы для каждого сервиса и для срока действия сертификатов, в идеале со второй точки, ведь монитор на том же сервере не сообщит о собственном падении.

Note · Caddy обрабатывает HTTPS автоматически. Про заголовки, ограничение запросов и более сложную маршрутизацию см. руководство по Caddy как reverse proxy.

Бэкапы, которые действительно восстанавливаются

Всё, что стоит сохранить, лежит в `/srv/stack`: базы SQLite, репозитории Forgejo, сертификаты Caddy и ваши конфиги. Не рассчитывайте на снапшоты провайдера; держите собственную зашифрованную копию вне сервера через restic, как описано в руководстве по бэкапам restic.

Файлы SQLite, скопированные во время записи сервисом, могут оказаться несогласованными. Самый простой безопасный подход на небольшом сервере — остановить стек на ту минуту, что идёт бэкап. Если добавите Nextcloud с MariaDB, делайте дамп базы через `mariadb-dump` перед запуском restic. Хотя бы раз проверьте восстановление во временный каталог: бэкап, который вы ни разу не восстанавливали, — это догадка.

#!/bin/sh
# /usr/local/sbin/stack-backup (run nightly from cron or a systemd timer)
# needs RESTIC_REPOSITORY and RESTIC_PASSWORD_FILE in the environment
cd /srv/stack || exit 1
docker compose stop
rc=0
restic backup /srv/stack --tag stack || rc=$?
docker compose start
[ "$rc" -eq 0 ] || exit "$rc"
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune

Основы безопасности

  • ▹SSH: только ключи, без входа root по паролю, при желании нестандартный порт; см. [руководство по защите SSH](/guides/ssh-hardening).
  • ▹Оговорка про файрвол: порты, опубликованные Docker, обходят правила `ufw`, потому что Docker пишет собственные цепочки iptables/nftables. Публикуйте только то, что должно быть публичным (80, 443, 2222), и никогда не публикуйте порты баз данных и админок.
  • ▹Обновления: включите `unattended-upgrades` для хоста и запускайте `docker compose pull && docker compose up -d` по расписанию, которого вы действительно придерживаетесь.
  • ▹Регистрация: держите публичную регистрацию выключенной в Vaultwarden и Forgejo; приглашайте пользователей.
  • ▹Шифрование диска: разместите `/srv` на [зашифрованном root](/guides/luks-encrypted-root), чтобы скопированный образ диска ничего не раскрыл; на удалённом сервере используйте [удалённую разблокировку LUKS по SSH](/guides/luks-remote-unlock-ssh) и предпочитайте формат LUKS2, описанный в статье [LUKS2 против LUKS1](/guides/luks2-vs-luks1).
  • ▹Секреты: `.env` и каталог данных Vaultwarden должны быть доступны только root (`chmod 600`/`700`).

FAQ

QСколько RAM нужно для self-hosting?

AБазовый self-hosted стек из Caddy, Vaultwarden, Uptime Kuma и Forgejo занимает около 0,6–1 GB вместе с ОС и Docker, так что VPS с 2 GB достаточно. С Nextcloud, MariaDB и Redis практический минимум — 4 GB.

QМожно ли запустить Nextcloud на VPS с 2 GB?

AЗапустится, но вместе с другими сервисами запаса почти не останется, и при генерации превью или всплесках синхронизации он будет тормозить. На 2 GB Syncthing плюс File Browser и Radicale покрывают файлы, календарь и контакты за малую долю памяти.

QБезопасно ли самому хостить Vaultwarden?

AVaultwarden хранит только данные хранилища со сквозным шифрованием, поэтому взлом сервера не раскрывает пароли в открытом виде напрямую. Держите регистрацию выключенной, админ-панель отключённой или защищённой хэшированным токеном, регулярно обновляйтесь и бэкапьте каталог данных.

QКакой reverse proxy лучше для self-hosted Docker-стека?

AДля небольших установок проще всего Caddy: он автоматически получает и продлевает HTTPS-сертификаты по нескольким строкам конфига. Nginx и Traefik тоже подойдут, но требуют больше настройки.

QЗащищает ли ufw Docker-контейнеры?

AПо умолчанию нет. Порты, опубликованные через опцию `ports:` в Docker, обходят ufw, потому что Docker вставляет собственные правила файрвола, — публикуйте только те порты, которые должны быть публичными.

Self-hosting стек для небольшого VPS: что влезает в 2 GB и 4 GB RAM · NoctisNode