NoctisNode
← PoradnikiSelf-hosting2026-10-239 min

Stos self-hosting na małym VPS: co zmieści się w 2 GB i 4 GB RAM

Realistyczny startowy stos self-hosted na małym VPS: Docker Compose, Caddy, Vaultwarden, Uptime Kuma i Forgejo, budżet RAM na usługę, kopie zapasowe i podstawy bezpieczeństwa.

Krótko: VPS z 2 GB swobodnie uruchomi podstawowy stos self-hosted złożony z Caddy (reverse proxy z HTTPS), Vaultwarden (hasła), Uptime Kuma (monitoring) i Forgejo (git) w Docker Compose, zużywając około 0,6–1 GB RAM. Jeśli dodasz Nextcloud, potrzebujesz 4 GB; jeśli wybierzesz lżejsze narzędzia, takie jak Syncthing czy File Browser, 2 GB nadal wystarczą.

Ten poradnik daje działający plik Compose, budżet RAM dla każdej usługi i dwie rzeczy, które większość konfiguracji self-hosted pomija, dopóki nie jest za późno: kopie zapasowe poza serwerem i ograniczoną powierzchnię sieciową. Polecenia zakładają Debian 12/13 lub Ubuntu 24.04 z Docker Engine i wtyczką Compose zainstalowanymi z oficjalnego repozytorium Dockera.

Budżet RAM na usługę

Wartości to typowa pamięć rezydentna przy bezczynności lub lekkim użyciu dla od jednego do pięciu użytkowników, z SQLite tam, gdzie jest obsługiwany. Szczyty podczas aktualizacji, klonowania dużych repozytoriów git czy generowania podglądów w Nextcloud mogą być wyższe, więc zostaw co najmniej 20% zapasu i dodaj plik swap 1–2 GB.

UsługaRolaTypowe RAMUwagi
OS + sshd + journaldSystem bazowy150–250 MBDebian lub Ubuntu minimal
Docker Engine + containerdŚrodowisko kontenerów80–120 MBStały koszt używania kontenerów
CaddyReverse proxy, automatyczny HTTPS20–50 MBPojedyncza binarka, bez bazy danych
VaultwardenSerwer haseł zgodny z Bitwarden20–60 MBNapisany w Rust, SQLite
Uptime KumaMonitoring dostępności i certyfikatów100–200 MBNode.js; rośnie z liczbą monitorów
ForgejoHosting git, issues, hooki CI150–300 MBGo, SQLite wystarczy dla małych zespołów
Nextcloud + MariaDB + RedisPliki, kalendarz, kontakty600 MB–1,2 GBDominują workery PHP-FPM
SyncthingSynchronizacja plików, bez pakietu webowego50–150 MBLżejsza alternatywa dla Nextcloud
File BrowserWebowy menedżer plików20–40 MBWysyłanie i udostępnianie plików przez HTTPS
RadicaleCalDAV i CardDAV30–50 MBKalendarz i kontakty bez Nextcloud

Dobór rozmiaru VPS

Podstawowy stos (Caddy, Vaultwarden, Uptime Kuma, Forgejo) plus system bazowy to około 0,6–1 GB, co mieści się na serwerze 2 vCPU / 2 GB z miejscem na Syncthing i Radicale. Nextcloud z MariaDB i Redis podnosi sumę do około 1,5–2,2 GB, więc 4 GB to realistyczne minimum, jeśli chcesz pełny pakiet plus całą resztę. Liczy się też dysk: repozytoria Forgejo i synchronizowane pliki rosną, a same usługi potrzebują tylko kilku GB.

W NoctisNode plan Pulse (2 vCPU, 2 GB RAM, 40 GB NVMe, $10 za 28 dni) mieści podstawowy stos, a Umbra (4 vCPU, 4 GB, 60 GB NVMe, $15 za 28 dni) — podstawowy stos plus Nextcloud. Oba to KVM z pełnym rootem i dedykowanym IPv4 i można za nie zapłacić w Monero lub innych kryptowalutach. Nic w tym poradniku nie zależy od dostawcy.

Plik Docker Compose

Tylko Caddy publikuje porty webowe; aplikacje są osiągalne wyłącznie przez wewnętrzną sieć Compose. Forgejo publikuje też port 2222 dla git przez SSH, dzięki czemu OpenSSH hosta zostaje na własnym porcie. Ustaw `FORGEJO_TAG` w pliku `.env` na bieżącą główną wersję Forgejo i zastąp przykładowe domeny własnymi rekordami 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
# }

Uruchomienie

  1. 01.Skieruj rekordy A (i AAAA) dla `vault`, `status` i `git` na IP serwera, aby Caddy mógł uzyskać certyfikaty przy pierwszym starcie.
  2. 02.Utwórz `/srv/stack`, umieść tam `compose.yaml`, `Caddyfile` i `.env` i uruchom `docker compose up -d`.
  3. 03.Otwórz adres Forgejo i dokończ instalator; pierwsze konto utworzone przez niego staje się administratorem, bo publiczna rejestracja jest wyłączona.
  4. 04.Utwórz konto w Vaultwarden, następnie ustaw `SIGNUPS_ALLOWED` na `"false"` i ponownie uruchom `docker compose up -d`. Zostaw panel administracyjny wyłączony, chyba że ustawisz `ADMIN_TOKEN` zahashowany Argon2.
  5. 05.Utwórz użytkownika administratora Uptime Kuma zaraz po starcie, bo do tego czasu strona konfiguracji jest otwarta dla każdego.
  6. 06.Dodaj monitory dla każdej usługi i wygasania certyfikatów, najlepiej z drugiej lokalizacji, bo monitor na tym samym serwerze nie zgłosi własnej awarii.

Note · Caddy obsługuje HTTPS automatycznie. Nagłówki, limity żądań i bardziej złożony routing opisuje poradnik o reverse proxy w Caddy.

Kopie zapasowe, które naprawdę da się odtworzyć

Wszystko, co warto zachować, znajduje się w `/srv/stack`: bazy SQLite, repozytoria Forgejo, certyfikaty Caddy i Twoja konfiguracja. Nie licz na snapshoty dostawcy; trzymaj własną zaszyfrowaną kopię poza serwerem za pomocą restic, jak opisano w poradniku o kopiach zapasowych restic.

Pliki SQLite skopiowane w trakcie zapisu przez usługę mogą być niespójne. Najprostsze bezpieczne podejście na małym serwerze to zatrzymanie stosu na minutę, którą zajmuje kopia. Jeśli dodasz Nextcloud z MariaDB, zrzuć bazę przez `mariadb-dump` przed uruchomieniem restic. Przynajmniej raz przetestuj odtwarzanie do katalogu tymczasowego; kopia, której nigdy nie odtworzyłeś, to tylko przypuszczenie.

#!/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

Podstawy bezpieczeństwa

  • ▹SSH: tylko klucze, bez logowania roota hasłem, opcjonalnie niestandardowy port; zobacz [poradnik o hardeningu SSH](/guides/ssh-hardening).
  • ▹Uwaga na firewall: porty publikowane przez Dockera omijają reguły `ufw`, bo Docker zapisuje własne łańcuchy iptables/nftables. Publikuj tylko to, co musi być publiczne (80, 443, 2222), i nigdy nie publikuj portów baz danych ani paneli administracyjnych.
  • ▹Aktualizacje: włącz `unattended-upgrades` dla hosta i uruchamiaj `docker compose pull && docker compose up -d` według harmonogramu, którego faktycznie się trzymasz.
  • ▹Rejestracja: wyłącz publiczne rejestracje w Vaultwarden i Forgejo; zamiast tego zapraszaj użytkowników.
  • ▹Szyfrowanie dysku: umieść `/srv` na [zaszyfrowanym root](/guides/luks-encrypted-root), aby skopiowany obraz dysku niczego nie ujawnił; na zdalnym serwerze użyj [zdalnego odblokowania LUKS przez SSH](/guides/luks-remote-unlock-ssh) i wybierz format LUKS2 opisany w [LUKS2 vs LUKS1](/guides/luks2-vs-luks1).
  • ▹Sekrety: `.env` i katalog danych Vaultwarden powinny być czytelne tylko dla roota (`chmod 600`/`700`).

FAQ

QIle RAM potrzebuję do self-hostingu?

APodstawowy stos self-hosted z Caddy, Vaultwarden, Uptime Kuma i Forgejo działa w około 0,6–1 GB łącznie z systemem i Dockerem, więc VPS z 2 GB wystarczy. Dodanie Nextcloud z MariaDB i Redis czyni 4 GB praktycznym minimum.

QCzy mogę uruchomić Nextcloud na VPS z 2 GB?

AUruchomi się, ale obok innych usług zostawia mało zapasu i zwalnia przy generowaniu podglądów lub skokach synchronizacji. Na 2 GB Syncthing plus File Browser i Radicale obsłużą pliki, kalendarz i kontakty za ułamek pamięci.

QCzy self-hosting Vaultwarden jest bezpieczny?

AVaultwarden przechowuje tylko dane sejfu zaszyfrowane end-to-end, więc przejęcie serwera nie ujawnia bezpośrednio haseł w postaci jawnej. Wyłącz rejestracje, zostaw panel administracyjny wyłączony lub chroniony zahashowanym tokenem, regularnie aktualizuj i rób kopię jego katalogu danych.

QJaki reverse proxy jest najlepszy dla stosu self-hosted w Dockerze?

ACaddy jest najprostszy dla małych konfiguracji, bo automatycznie uzyskuje i odnawia certyfikaty HTTPS przy kilku linijkach konfiguracji. Nginx i Traefik też działają, ale wymagają więcej konfiguracji.

QCzy ufw chroni kontenery Dockera?

ADomyślnie nie. Porty publikowane opcją `ports:` Dockera omijają ufw, bo Docker wstawia własne reguły firewalla, więc publikuj tylko porty, które powinny być publiczne.

Stos self-hosting na małym VPS: co zmieści się w 2 GB i 4 GB RAM · NoctisNode