NoctisNode
← PanduanSelf-hosting2026-10-239 menit

Stack self-hosting untuk VPS kecil: apa yang muat di RAM 2 GB dan 4 GB

Stack self-hosted awal yang realistis di VPS kecil: Docker Compose, Caddy, Vaultwarden, Uptime Kuma, dan Forgejo, anggaran RAM per layanan, backup, dan dasar-dasar keamanan.

Singkatnya: VPS 2 GB dengan nyaman menjalankan inti self-hosted berupa Caddy (reverse proxy HTTPS), Vaultwarden (kata sandi), Uptime Kuma (monitoring), dan Forgejo (git) di bawah Docker Compose, dengan pemakaian RAM sekitar 0,6 hingga 1 GB. Tambahkan Nextcloud dan Anda butuh 4 GB; pilih tool yang lebih ringan seperti Syncthing atau File Browser dan 2 GB tetap cukup.

Panduan ini memberikan file Compose yang berfungsi, anggaran RAM per layanan, dan dua hal yang paling sering dilewatkan setup self-hosted sampai terlambat: backup off-site dan permukaan jaringan yang dikunci rapat. Perintah mengasumsikan Debian 12/13 atau Ubuntu 24.04 dengan Docker Engine dan plugin Compose yang dipasang dari repositori resmi Docker.

Anggaran RAM per layanan

Angka-angka ini adalah memori resident umum saat idle hingga pemakaian ringan untuk satu sampai lima pengguna dengan SQLite jika didukung. Puncak saat upgrade, git clone repositori besar, atau preview Nextcloud bisa lebih tinggi, jadi sisakan setidaknya 20% ruang dan tambahkan file swap 1 hingga 2 GB.

LayananPeranRAM umumCatatan
OS + sshd + journaldSistem dasar150–250 MBDebian atau Ubuntu minimal
Docker Engine + containerdRuntime container80–120 MBBiaya tetap memakai container
CaddyReverse proxy, HTTPS otomatis20–50 MBSatu binary, tanpa database
VaultwardenServer kata sandi kompatibel Bitwarden20–60 MBDitulis dengan Rust, SQLite
Uptime KumaMonitoring uptime dan sertifikat100–200 MBNode.js; bertambah seiring jumlah monitor
ForgejoHosting git, issue, hook CI150–300 MBGo, SQLite cukup untuk tim kecil
Nextcloud + MariaDB + RedisFile, kalender, kontak600 MB–1,2 GBWorker PHP-FPM paling dominan
SyncthingSinkronisasi file, tanpa suite web50–150 MBAlternatif Nextcloud yang lebih ringan
File BrowserPengelola file web20–40 MBUnggah dan bagikan file lewat HTTPS
RadicaleCalDAV dan CardDAV30–50 MBKalender dan kontak tanpa Nextcloud

Memilih ukuran VPS

Stack inti (Caddy, Vaultwarden, Uptime Kuma, Forgejo) plus sistem dasar berada di sekitar 0,6 hingga 1 GB, yang muat di server 2 vCPU / 2 GB dengan ruang untuk Syncthing dan Radicale. Nextcloud dengan MariaDB dan Redis mendorong total ke sekitar 1,5 hingga 2,2 GB, sehingga 4 GB adalah minimum realistis jika Anda menginginkan suite lengkap plus semua yang lain. Disk juga penting: repositori Forgejo dan file yang disinkronkan terus bertambah, sedangkan layanannya sendiri hanya butuh beberapa GB.

Di NoctisNode, paket Pulse (2 vCPU, RAM 2 GB, NVMe 40 GB, $10 per 28 hari) cukup untuk stack inti, dan Umbra (4 vCPU, 4 GB, NVMe 60 GB, $15 per 28 hari) cukup untuk inti plus Nextcloud. Keduanya KVM dengan root penuh dan IPv4 dedicated, dan bisa dibayar dengan Monero atau kripto lain. Tidak ada bagian panduan ini yang bergantung pada penyedia.

File Docker Compose

Hanya Caddy yang mem-publish port web; aplikasi hanya dapat dijangkau melalui network Compose internal. Forgejo juga mem-publish port 2222 untuk git lewat SSH, sehingga OpenSSH host tetap di port-nya sendiri. Set `FORGEJO_TAG` di file `.env` ke versi mayor Forgejo terkini dan ganti domain contoh dengan record DNS Anda sendiri.

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

Menjalankannya

  1. 01.Arahkan record A (dan AAAA) untuk `vault`, `status`, dan `git` ke IP server, agar Caddy dapat memperoleh sertifikat saat pertama kali dijalankan.
  2. 02.Buat `/srv/stack`, taruh `compose.yaml`, `Caddyfile`, dan `.env` di sana, lalu jalankan `docker compose up -d`.
  3. 03.Buka URL Forgejo dan selesaikan installer; akun pertama yang Anda buat melaluinya menjadi admin, karena pendaftaran publik dinonaktifkan.
  4. 04.Buat akun Vaultwarden Anda, lalu set `SIGNUPS_ALLOWED` ke `"false"` dan jalankan `docker compose up -d` lagi. Biarkan panel admin nonaktif kecuali Anda mengatur `ADMIN_TOKEN` yang di-hash dengan Argon2.
  5. 05.Buat user admin Uptime Kuma segera setelah dijalankan, karena halaman setup terbuka untuk siapa saja sampai Anda melakukannya.
  6. 06.Tambahkan monitor untuk setiap layanan dan untuk kedaluwarsa sertifikat, idealnya dari lokasi kedua, karena monitor di server yang sama tidak bisa melaporkan gangguannya sendiri.

Note · Caddy menangani HTTPS secara otomatis. Untuk header, rate limit, dan routing yang lebih kompleks, lihat panduan reverse proxy Caddy.

Backup yang benar-benar bisa dipulihkan

Semua yang layak disimpan berada di `/srv/stack`: database SQLite, repositori Forgejo, sertifikat Caddy, dan konfigurasi Anda. Jangan mengandalkan snapshot penyedia; simpan salinan terenkripsi dan off-site milik Anda sendiri dengan restic, seperti dijelaskan di panduan backup restic.

File SQLite yang disalin saat layanan sedang menulis bisa tidak konsisten. Cara aman paling sederhana di server kecil adalah menghentikan stack selama semenit proses backup berlangsung. Jika Anda menambahkan Nextcloud dengan MariaDB, dump database dengan `mariadb-dump` sebelum restic dijalankan. Uji restore ke direktori sementara setidaknya sekali; backup yang belum pernah dipulihkan hanyalah tebakan.

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

Dasar-dasar keamanan

  • ▹SSH: hanya kunci, tanpa login kata sandi root, opsional port non-standar; lihat [panduan hardening SSH](/guides/ssh-hardening).
  • ▹Catatan firewall: port yang di-publish Docker melewati aturan `ufw`, karena Docker menulis chain iptables/nftables sendiri. Publish hanya yang harus publik (80, 443, 2222) dan jangan pernah mem-publish port database atau admin.
  • ▹Pembaruan: aktifkan `unattended-upgrades` untuk host, dan jalankan `docker compose pull && docker compose up -d` sesuai jadwal yang benar-benar Anda patuhi.
  • ▹Pendaftaran: matikan pendaftaran publik di Vaultwarden dan Forgejo; undang pengguna sebagai gantinya.
  • ▹Enkripsi disk: letakkan `/srv` di [root terenkripsi](/guides/luks-encrypted-root) agar image disk yang disalin tidak mengungkap apa pun; di server jarak jauh gunakan [remote unlock LUKS lewat SSH](/guides/luks-remote-unlock-ssh), dan pilih format LUKS2 yang dijelaskan di [LUKS2 vs LUKS1](/guides/luks2-vs-luks1).
  • ▹Rahasia: `.env` dan direktori data Vaultwarden sebaiknya hanya dapat dibaca root (`chmod 600`/`700`).

FAQ

QBerapa RAM yang dibutuhkan untuk self-hosting?

AStack self-hosted inti berisi Caddy, Vaultwarden, Uptime Kuma, dan Forgejo berjalan di sekitar 0,6 hingga 1 GB termasuk OS dan Docker, jadi VPS 2 GB sudah cukup. Menambahkan Nextcloud dengan MariaDB dan Redis menjadikan 4 GB sebagai minimum praktis.

QBisakah saya menjalankan Nextcloud di VPS 2 GB?

ABisa berjalan, tetapi bersama layanan lain ruang tersisanya sedikit dan menjadi lambat saat preview atau lonjakan sinkronisasi. Di 2 GB, Syncthing plus File Browser dan Radicale mencakup file, kalender, dan kontak dengan sebagian kecil memori.

QApakah Vaultwarden aman untuk di-self-host?

AVaultwarden hanya menyimpan data vault yang terenkripsi end-to-end, sehingga server yang disusupi tidak langsung mengekspos kata sandi dalam bentuk teks biasa. Matikan pendaftaran, biarkan panel admin nonaktif atau dilindungi token yang di-hash, perbarui secara rutin, dan backup direktori datanya.

QApa reverse proxy terbaik untuk stack Docker self-hosted?

ACaddy paling mudah untuk setup kecil karena memperoleh dan memperbarui sertifikat HTTPS secara otomatis hanya dengan beberapa baris konfigurasi. Nginx dan Traefik juga bisa, tetapi butuh konfigurasi lebih banyak.

QApakah ufw melindungi container Docker?

ATidak secara default. Port yang di-publish dengan opsi `ports:` Docker melewati ufw karena Docker menyisipkan aturan firewall sendiri, jadi publish hanya port yang memang harus publik.

Stack self-hosting untuk VPS kecil: apa yang muat di RAM 2 GB dan 4 GB · NoctisNode