Küçük bir VPS için self-hosting stack'i: 2 GB ve 4 GB RAM'e neler sığar
Küçük bir VPS'te gerçekçi bir self-hosted başlangıç stack'i: Docker Compose, Caddy, Vaultwarden, Uptime Kuma ve Forgejo, servis başına RAM bütçesi, yedekler ve temel güvenlik.
Kısaca: 2 GB'lık bir VPS, Docker Compose altında Caddy (HTTPS reverse proxy), Vaultwarden (şifreler), Uptime Kuma (izleme) ve Forgejo'dan (git) oluşan self-hosted bir çekirdeği yaklaşık 0,6 ile 1 GB RAM kullanarak rahatça çalıştırır. Nextcloud eklerseniz 4 GB istersiniz; Syncthing veya File Browser gibi daha hafif araçlar seçerseniz 2 GB hâlâ yeterlidir.
Bu rehber çalışan bir Compose dosyası, servis başına bir RAM bütçesi ve çoğu self-hosted kurulumun iş işten geçene kadar atladığı iki şeyi sunuyor: sunucu dışı yedekler ve kilitlenmiş bir ağ yüzeyi. Komutlar, Docker'ın resmî deposundan Docker Engine ve Compose eklentisi kurulmuş Debian 12/13 veya Ubuntu 24.04 varsayar.
Servis başına RAM bütçesi
Rakamlar, desteklenen yerlerde SQLite ile bir ila beş kullanıcı için boşta ile hafif kullanım arasındaki tipik resident bellek değerleridir. Yükseltmeler, büyük depoların git clone'ları veya Nextcloud önizlemeleri sırasındaki zirveler daha yüksek olabilir; bu yüzden en az %20 pay bırakın ve 1 ila 2 GB'lık bir swap dosyası ekleyin.
| Servis | Görev | Tipik RAM | Notlar |
|---|---|---|---|
| OS + sshd + journald | Temel sistem | 150–250 MB | Debian veya Ubuntu minimal |
| Docker Engine + containerd | Container runtime | 80–120 MB | Container kullanmanın sabit maliyeti |
| Caddy | Reverse proxy, otomatik HTTPS | 20–50 MB | Tek binary, veritabanı yok |
| Vaultwarden | Bitwarden uyumlu şifre sunucusu | 20–60 MB | Rust ile yazılmış, SQLite |
| Uptime Kuma | Uptime ve sertifika izleme | 100–200 MB | Node.js; monitör sayısıyla büyür |
| Forgejo | Git hosting, issue'lar, CI hook'ları | 150–300 MB | Go, küçük ekipler için SQLite yeterli |
| Nextcloud + MariaDB + Redis | Dosyalar, takvim, kişiler | 600 MB–1.2 GB | PHP-FPM worker'ları baskındır |
| Syncthing | Dosya senkronizasyonu, web paketi yok | 50–150 MB | Daha hafif Nextcloud alternatifi |
| File Browser | Web dosya yöneticisi | 20–40 MB | HTTPS üzerinden dosya yükleme ve paylaşma |
| Radicale | CalDAV ve CardDAV | 30–50 MB | Nextcloud olmadan takvim ve kişiler |
VPS boyutunu seçmek
Çekirdek stack (Caddy, Vaultwarden, Uptime Kuma, Forgejo) artı temel sistem yaklaşık 0,6 ile 1 GB'a denk gelir; bu da Syncthing ve Radicale'e yer bırakarak 2 vCPU / 2 GB'lık bir sunucuya sığar. MariaDB ve Redis ile Nextcloud toplamı yaklaşık 1,5 ile 2,2 GB'a çıkarır, dolayısıyla tam paketi ve diğer her şeyi istiyorsanız gerçekçi minimum 4 GB'tır. Disk de önemlidir: Forgejo depoları ve senkronize dosyalar büyür, servislerin kendileri ise yalnızca birkaç GB gerektirir.
NoctisNode'da Pulse planı (2 vCPU, 2 GB RAM, 40 GB NVMe, 28 gün için $10) çekirdek stack'e, Umbra (4 vCPU, 4 GB, 60 GB NVMe, 28 gün için $15) ise çekirdek artı Nextcloud'a uyar. Her ikisi de tam root ve dedicated IPv4'lü KVM'dir ve Monero veya diğer kriptolarla ödenebilir. Bu rehberdeki hiçbir şey sağlayıcıya bağlı değildir.
Docker Compose dosyası
Yalnızca Caddy web portlarını yayınlar; uygulamalara yalnızca dahili Compose ağı üzerinden erişilebilir. Forgejo ayrıca SSH üzerinden git için 2222 portunu yayınlar, böylece hosttaki OpenSSH kendi portunda kalır. Bir `.env` dosyasında `FORGEJO_TAG`'i güncel Forgejo ana sürümüne ayarlayın ve örnek alan adlarını kendi DNS kayıtlarınızla değiştirin.
# /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
# }Ayağa kaldırmak
- 01.Caddy'nin ilk başlatmada sertifika alabilmesi için `vault`, `status` ve `git` için A (ve AAAA) kayıtlarını sunucunun IP'sine yönlendirin.
- 02.`/srv/stack` oluşturun, `compose.yaml`, `Caddyfile` ve `.env` dosyalarını oraya koyun ve `docker compose up -d` çalıştırın.
- 03.Forgejo URL'sini açın ve kurulumu tamamlayın; herkese açık kayıt devre dışı olduğu için kurulum üzerinden oluşturduğunuz ilk hesap admin olur.
- 04.Vaultwarden hesabınızı oluşturun, ardından `SIGNUPS_ALLOWED`'u `"false"` yapın ve `docker compose up -d`'yi tekrar çalıştırın. Argon2 ile hash'lenmiş bir `ADMIN_TOKEN` ayarlamadıysanız admin panelini devre dışı bırakın.
- 05.Uptime Kuma admin kullanıcısını başlatmanın hemen ardından oluşturun, çünkü siz oluşturana kadar kurulum sayfası herkese açıktır.
- 06.Her servis ve sertifika bitiş tarihi için monitörler ekleyin, ideal olarak ikinci bir konumdan; aynı sunucudaki bir monitör kendi kesintisini bildiremez.
Note · Caddy HTTPS'i otomatik olarak yönetir. Header'lar, rate limit'ler ve daha karmaşık yönlendirme için bkz. Caddy reverse proxy rehberi.
Gerçekten geri yüklenebilen yedekler
Saklamaya değer her şey `/srv/stack` altında yaşar: SQLite veritabanları, Forgejo depoları, Caddy sertifikaları ve yapılandırmanız. Sağlayıcı snapshot'larına güvenmeyin; restic yedekleme rehberinde anlatıldığı gibi restic ile kendi şifreli, sunucu dışı kopyanızı tutun.
Bir servis yazarken kopyalanan SQLite dosyaları tutarsız olabilir. Küçük bir sunucuda en basit güvenli yaklaşım, yedeğin sürdüğü bir dakika boyunca stack'i durdurmaktır. MariaDB ile Nextcloud eklerseniz restic çalışmadan önce veritabanını `mariadb-dump` ile dökün. En az bir kez geçici bir dizine geri yüklemeyi test edin; hiç geri yüklemediğiniz bir yedek yalnızca bir tahmindir.
#!/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 --pruneTemel güvenlik
- ▹SSH: yalnızca anahtar, root şifresiyle giriş yok, isteğe bağlı olarak standart dışı bir port; bkz. [SSH sıkılaştırma rehberi](/guides/ssh-hardening).
- ▹Firewall uyarısı: Docker'ın yayınladığı portlar `ufw` kurallarını atlar, çünkü Docker kendi iptables/nftables zincirlerini yazar. Yalnızca herkese açık olması gerekenleri (80, 443, 2222) yayınlayın ve veritabanı veya admin portlarını asla yayınlamayın.
- ▹Güncellemeler: host için `unattended-upgrades`'i etkinleştirin ve `docker compose pull && docker compose up -d`'yi gerçekten uyduğunuz bir takvimle çalıştırın.
- ▹Kayıt: Vaultwarden ve Forgejo'da herkese açık kaydı kapalı tutun; bunun yerine kullanıcıları davet edin.
- ▹Disk şifreleme: kopyalanmış bir disk imajının hiçbir şey açığa çıkarmaması için `/srv`'yi [şifreli bir root](/guides/luks-encrypted-root) üzerine koyun; uzak bir sunucuda [SSH ile LUKS uzaktan kilit açma](/guides/luks-remote-unlock-ssh) kullanın ve [LUKS2 ve LUKS1](/guides/luks2-vs-luks1) yazısında açıklanan LUKS2 formatını tercih edin.
- ▹Gizli bilgiler: `.env` ve Vaultwarden veri dizini yalnızca root tarafından okunabilir olmalıdır (`chmod 600`/`700`).
SSS
QSelf-hosting için ne kadar RAM gerekir?
ACaddy, Vaultwarden, Uptime Kuma ve Forgejo'dan oluşan çekirdek bir self-hosted stack, OS ve Docker dahil yaklaşık 0,6 ile 1 GB'ta çalışır; dolayısıyla 2 GB'lık bir VPS yeterlidir. MariaDB ve Redis ile Nextcloud eklemek pratik minimumu 4 GB yapar.
Q2 GB'lık bir VPS'te Nextcloud çalıştırabilir miyim?
AÇalışır, ama diğer servislerle birlikte çok az pay bırakır ve önizlemeler veya senkronizasyon patlamaları sırasında yavaşlar. 2 GB'ta Syncthing artı File Browser ve Radicale, belleğin çok küçük bir kısmıyla dosyaları, takvimi ve kişileri karşılar.
QVaultwarden'ı self-host etmek güvenli mi?
AVaultwarden yalnızca uçtan uca şifrelenmiş vault verilerini saklar, bu yüzden sunucunun ele geçirilmesi düz metin şifreleri doğrudan açığa çıkarmaz. Kaydı kapalı tutun, admin panelini devre dışı bırakın veya hash'lenmiş bir token ile koruyun, düzenli güncelleyin ve veri dizinini yedekleyin.
QSelf-hosted bir Docker stack'i için en iyi reverse proxy hangisi?
AKüçük kurulumlar için en kolayı Caddy'dir, çünkü birkaç satır yapılandırmayla HTTPS sertifikalarını otomatik olarak alır ve yeniler. Nginx ve Traefik de çalışır ama daha fazla yapılandırma gerektirir.
Qufw Docker container'larını korur mu?
AVarsayılan olarak hayır. Docker'ın `ports:` seçeneğiyle yayınlanan portlar ufw'yi atlar, çünkü Docker kendi firewall kurallarını ekler; bu yüzden yalnızca herkese açık olması gereken portları yayınlayın.