छोटे VPS के लिए सेल्फ़-होस्टिंग स्टैक: 2 GB और 4 GB RAM में क्या आता है
छोटे VPS पर व्यावहारिक सेल्फ़-होस्टेड स्टार्टर स्टैक: Docker Compose, Caddy, Vaultwarden, Uptime Kuma और Forgejo, हर सर्विस का RAM बजट, बैकअप और सुरक्षा की बुनियादी बातें।
संक्षेप में: 2 GB VPS पर Docker Compose के तहत Caddy (HTTPS reverse proxy), Vaultwarden (पासवर्ड), Uptime Kuma (मॉनिटरिंग) और Forgejo (git) का सेल्फ़-होस्टेड कोर आराम से चलता है, लगभग 0.6 से 1 GB RAM में। Nextcloud जोड़ना हो तो 4 GB चाहिए; Syncthing या File Browser जैसे हल्के टूल चुनें तो 2 GB भी काफ़ी है।
यह गाइड एक काम करने वाली Compose फ़ाइल, हर सर्विस का RAM बजट, और वे दो चीज़ें देता है जिन्हें ज़्यादातर selfhosted सेटअप तब तक नज़रअंदाज़ करते हैं जब तक बहुत देर न हो जाए: off-site बैकअप और कसकर बंद किया गया नेटवर्क सरफ़ेस। कमांड्स मानती हैं कि Debian 12/13 या Ubuntu 24.04 पर Docker की आधिकारिक repository से Docker Engine और Compose plugin इंस्टॉल हैं।
हर सर्विस का RAM बजट
आँकड़े एक से पाँच उपयोगकर्ताओं के लिए, जहाँ समर्थित हो वहाँ SQLite के साथ, idle से हल्के उपयोग तक की सामान्य resident memory हैं। अपग्रेड, बड़ी repositories के git clone या Nextcloud previews के दौरान peaks ज़्यादा हो सकते हैं, इसलिए कम से कम 20% गुंजाइश छोड़ें और 1 से 2 GB की swap फ़ाइल जोड़ें।
| सर्विस | भूमिका | सामान्य RAM | टिप्पणी |
|---|---|---|---|
| OS + sshd + journald | बेस सिस्टम | 150–250 MB | Debian या Ubuntu minimal |
| Docker Engine + containerd | कंटेनर runtime | 80–120 MB | कंटेनर इस्तेमाल करने की स्थायी लागत |
| Caddy | Reverse proxy, ऑटोमैटिक HTTPS | 20–50 MB | एक बाइनरी, कोई डेटाबेस नहीं |
| Vaultwarden | Bitwarden-संगत पासवर्ड सर्वर | 20–60 MB | Rust में लिखा, SQLite |
| Uptime Kuma | अपटाइम और सर्टिफ़िकेट मॉनिटरिंग | 100–200 MB | Node.js; monitors की संख्या के साथ बढ़ता है |
| Forgejo | Git होस्टिंग, issues, CI hooks | 150–300 MB | Go, छोटी टीमों के लिए SQLite ठीक है |
| Nextcloud + MariaDB + Redis | फ़ाइलें, कैलेंडर, संपर्क | 600 MB–1.2 GB | PHP-FPM workers सबसे ज़्यादा लेते हैं |
| Syncthing | फ़ाइल सिंक, कोई वेब सूट नहीं | 50–150 MB | Nextcloud का हल्का विकल्प |
| File Browser | वेब फ़ाइल मैनेजर | 20–40 MB | HTTPS पर फ़ाइलें अपलोड और शेयर करें |
| Radicale | CalDAV और CardDAV | 30–50 MB | Nextcloud के बिना कैलेंडर और संपर्क |
VPS का आकार चुनना
कोर स्टैक (Caddy, Vaultwarden, Uptime Kuma, Forgejo) और बेस सिस्टम मिलाकर लगभग 0.6 से 1 GB होता है, जो 2 vCPU / 2 GB सर्वर में Syncthing और Radicale की जगह के साथ आ जाता है। MariaDB और Redis के साथ Nextcloud कुल को लगभग 1.5 से 2.2 GB तक ले जाता है, इसलिए पूरा सूट और बाकी सब चाहिए तो 4 GB व्यावहारिक न्यूनतम है। डिस्क भी मायने रखती है: Forgejo repositories और सिंक की गई फ़ाइलें बढ़ती हैं, जबकि सर्विसेज़ को खुद कुछ ही 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 और dedicated IPv4 के साथ, और इनका भुगतान Monero या दूसरे क्रिप्टो में किया जा सकता है। इस गाइड में कुछ भी प्रोवाइडर पर निर्भर नहीं है।
Docker Compose फ़ाइल
केवल Caddy वेब पोर्ट publish करता है; ऐप्स तक केवल आंतरिक Compose नेटवर्क से पहुँचा जा सकता है। Forgejo, SSH पर git के लिए पोर्ट 2222 भी publish करता है, ताकि होस्ट का OpenSSH अपने पोर्ट पर रहे। `.env` फ़ाइल में `FORGEJO_TAG` को Forgejo के मौजूदा major वर्ज़न पर सेट करें और उदाहरण वाले डोमेन अपने 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
# }स्टैक चालू करना
- 01.`vault`, `status` और `git` के A (और AAAA) रिकॉर्ड सर्वर के IP पर पॉइंट करें, ताकि Caddy पहली बार शुरू होते ही सर्टिफ़िकेट ले सके।
- 02.`/srv/stack` बनाएँ, उसमें `compose.yaml`, `Caddyfile` और `.env` रखें, और `docker compose up -d` चलाएँ।
- 03.Forgejo URL खोलें और इंस्टॉलर पूरा करें; इसके ज़रिए बनाया गया पहला खाता एडमिन बनता है, क्योंकि पब्लिक रजिस्ट्रेशन बंद है।
- 04.अपना Vaultwarden खाता बनाएँ, फिर `SIGNUPS_ALLOWED` को `"false"` पर सेट करें और `docker compose up -d` दोबारा चलाएँ। जब तक आप Argon2-hashed `ADMIN_TOKEN` सेट न करें, एडमिन पैनल बंद रखें।
- 05.शुरू होते ही Uptime Kuma का एडमिन यूज़र बनाएँ, क्योंकि तब तक सेटअप पेज किसी के लिए भी खुला रहता है।
- 06.हर सर्विस और सर्टिफ़िकेट की समाप्ति के लिए monitors जोड़ें, बेहतर हो कि किसी दूसरी लोकेशन से, क्योंकि उसी सर्वर पर चलने वाला monitor अपनी ही outage की रिपोर्ट नहीं कर सकता।
Note · Caddy अपने-आप HTTPS संभालता है। Headers, rate limits और ज़्यादा जटिल routing के लिए Caddy reverse proxy गाइड देखें।
ऐसे बैकअप जो सच में restore हों
रखने लायक सब कुछ `/srv/stack` में है: SQLite डेटाबेस, Forgejo repositories, Caddy सर्टिफ़िकेट और आपका config। प्रोवाइडर snapshots पर भरोसा न करें; restic से अपनी encrypted, off-site कॉपी रखें, जैसा restic बैकअप गाइड में बताया गया है।
सर्विस के लिखते समय कॉपी की गई SQLite फ़ाइलें असंगत हो सकती हैं। छोटे सर्वर पर सबसे आसान सुरक्षित तरीका है बैकअप के एक मिनट के लिए स्टैक रोक देना। अगर आप MariaDB के साथ Nextcloud जोड़ते हैं, तो restic चलाने से पहले `mariadb-dump` से डेटाबेस dump करें। कम से कम एक बार किसी अस्थायी डायरेक्टरी में restore की जाँच करें; जिस बैकअप को आपने कभी restore नहीं किया, वह सिर्फ़ अनुमान है।
#!/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: केवल keys, root पासवर्ड लॉगिन नहीं, चाहें तो non-standard पोर्ट; [SSH hardening गाइड](/guides/ssh-hardening) देखें।
- ▹फ़ायरवॉल से जुड़ी सावधानी: Docker के publish किए पोर्ट `ufw` नियमों को bypass कर देते हैं, क्योंकि Docker अपनी iptables/nftables chains लिखता है। केवल वही publish करें जो पब्लिक होना ज़रूरी है (80, 443, 2222) और डेटाबेस या एडमिन पोर्ट कभी publish न करें।
- ▹अपडेट: होस्ट के लिए `unattended-upgrades` चालू करें, और `docker compose pull && docker compose up -d` ऐसे शेड्यूल पर चलाएँ जिसका आप सच में पालन करें।
- ▹रजिस्ट्रेशन: Vaultwarden और Forgejo में पब्लिक साइन-अप बंद रखें; इसके बजाय यूज़र्स को आमंत्रित करें।
- ▹डिस्क encryption: `/srv` को [encrypted root](/guides/luks-encrypted-root) पर रखें ताकि कॉपी की गई डिस्क इमेज से कुछ पता न चले; रिमोट सर्वर पर [SSH पर LUKS रिमोट अनलॉक](/guides/luks-remote-unlock-ssh) इस्तेमाल करें, और [LUKS2 vs LUKS1](/guides/luks2-vs-luks1) में समझाए गए LUKS2 फ़ॉर्मैट को प्राथमिकता दें।
- ▹Secrets: `.env` और Vaultwarden डेटा डायरेक्टरी केवल root के लिए पढ़ने योग्य होनी चाहिए (`chmod 600`/`700`)।
अक्सर पूछे जाने वाले सवाल
Qसेल्फ़-होस्टिंग के लिए कितनी RAM चाहिए?
ACaddy, Vaultwarden, Uptime Kuma और Forgejo का कोर सेल्फ़-होस्टेड स्टैक OS और Docker सहित लगभग 0.6 से 1 GB में चलता है, इसलिए 2 GB VPS काफ़ी है। MariaDB और Redis के साथ Nextcloud जोड़ने पर 4 GB व्यावहारिक न्यूनतम बन जाता है।
Qक्या 2 GB VPS पर Nextcloud चला सकते हैं?
Aचलता है, लेकिन दूसरी सर्विसेज़ के साथ गुंजाइश बहुत कम रहती है और previews या सिंक के उछाल में धीमा हो जाता है। 2 GB पर Syncthing के साथ File Browser और Radicale, मेमोरी के एक छोटे हिस्से में फ़ाइलें, कैलेंडर और संपर्क संभाल लेते हैं।
Qक्या Vaultwarden को सेल्फ़-होस्ट करना सुरक्षित है?
AVaultwarden केवल end-to-end encrypted vault डेटा स्टोर करता है, इसलिए सर्वर compromise होने पर plaintext पासवर्ड सीधे उजागर नहीं होते। साइन-अप बंद रखें, एडमिन पैनल बंद या hashed token से सुरक्षित रखें, नियमित अपडेट करें और उसकी डेटा डायरेक्टरी का बैकअप लें।
Qselfhosted Docker स्टैक के लिए सबसे अच्छा reverse proxy कौन-सा है?
Aछोटे सेटअप के लिए Caddy सबसे आसान है, क्योंकि यह config की कुछ लाइनों से अपने-आप HTTPS सर्टिफ़िकेट लेता और रिन्यू करता है। Nginx और Traefik भी काम करते हैं, लेकिन उनमें ज़्यादा कॉन्फ़िगरेशन लगता है।
Qक्या ufw, Docker कंटेनरों की रक्षा करता है?
Aडिफ़ॉल्ट रूप से नहीं। Docker के `ports:` विकल्प से publish किए गए पोर्ट ufw को bypass करते हैं क्योंकि Docker अपने फ़ायरवॉल नियम जोड़ता है, इसलिए केवल वही पोर्ट publish करें जो पब्लिक होने चाहिए।