Alpine Linux हमारी सबसे छोटी इमेज है। हमारे सर्वरों पर नया Alpine 3.21 खाली बैठे 55 MB RAM और 153 MB डिस्क ले रहा था, जबकि Ubuntu 24.04 ने 313 MB और 2.7 GB लिए। इसके बदले आप जाने-पहचाने टूल छोड़ते हैं। Alpine में apt की जगह apk, sudo की जगह doas, systemd की जगह OpenRC और glibc की जगह musl है।
नीचे दिए कदम वही पहले दस मिनट हैं जो Debian या Ubuntu पर होते हैं, बस Alpine के हिसाब से। प्रकाशित करने से पहले हमने हर कमांड अपनी Alpine 3.21 इमेज पर चलाई, और इनमें से दो ने पहली बार हमें उलझा दिया। डैशबोर्ड वाले पासवर्ड से root के रूप में लॉग इन करें।
1. अपडेट करें, फिर एक बार रीबूट करें
apk update && apk upgrade
uname -r
ls /lib/modules
आपके सर्वर ने पहली बार बूट होते ही उपलब्ध अपडेट इंस्टॉल कर लिए हैं, इसलिए apk upgrade के पास आमतौर पर ज़्यादा काम नहीं बचता। इसकी जगह आख़िरी दो लाइनें देखें। अगर उस पहले अपडेट में नया कर्नेल आया था, तो चल रहे कर्नेल (uname -r) के मॉड्यूल अब डिस्क पर नहीं हैं। मॉड्यूल लोड करने वाली हर चीज़ रीबूट तक फ़ेल होगी। हमारे टेस्ट सर्वर पर फ़ायरवॉल इंस्टॉल करते समय यह आया: ERROR: Couldn't determine iptables version। अगर दोनों वर्ज़न अलग हैं, तो अभी रीबूट करें:
reboot
हमारा टेस्ट सर्वर एक मिनट से कम में लौट आया।
2. ऐसा यूज़र बनाएँ जो लॉग इन कर सके
adduser -D deploy
passwd deploy
adduser deploy wheel
passwd न छोड़ें। adduser -D अकाउंट बिना पासवर्ड के बनाता है, Alpine उसे लॉक्ड मान लेता है, और sshd लॉक्ड अकाउंट को सही की के साथ भी मना कर देता है। हमारे टेस्ट में इकलौता सुराग /var/log/messages की यह लाइन थी:
User deploy not allowed because account is locked
पासवर्ड आगे भी काम आएगा: doas यही पूछेगा।
अगर सर्वर ऑर्डर करते समय आपने SSH की जोड़ी थी, तो वह root की authorized_keys में है। उसे नए यूज़र के लिए कॉपी करें:
install -d -m 700 -o deploy -g deploy /home/deploy/.ssh
install -m 600 -o deploy -g deploy /root/.ssh/authorized_keys /home/deploy/.ssh/authorized_keys
अभी की नहीं है? अपने कंप्यूटर पर एक बनाएँ और उसका पब्लिक हिस्सा /home/deploy/.ssh/authorized_keys में चिपकाएँ।
3. doas से पासवर्ड पुछवाएँ
Alpine में sudo की जगह doas है, और हमारी इमेज इसे पहले से wheel ग्रुप के लिए खोल देती है। /etc/doas.d/wheel.conf में नियम permit nopass :wheel है, यानी wheel का कोई भी सदस्य बिना कुछ टाइप किए root बन जाता है। इसे बदलें ताकि यह पासवर्ड पूछे और फिर कुछ मिनट याद रखे:
echo 'permit persist :wheel' > /etc/doas.d/wheel.conf
अब doas apk add nano वैसे ही चलता है जैसे Ubuntu पर sudo apt install nano।
4. SSH: सिर्फ़ की, root नहीं
sshd /etc/ssh/sshd_config.d/ की फ़ाइलें नाम के क्रम से पढ़ता है और हर सेटिंग के लिए पहली मिली वैल्यू रखता है। हमारी इमेज में पहली फ़ाइल 00-eqvps.conf है, जो root और पासवर्ड से लॉगिन की इजाज़त देती है ताकि पहले दिन आप अंदर आ सकें। इसकी सामग्री बदल दें:
cat > /etc/ssh/sshd_config.d/00-eqvps.conf <<'EOF'
PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
EOF
sshd -t && rc-service sshd restart
sshd -T | grep -E '^(permitrootlogin|passwordauthentication|kbdinteractiveauthentication) '
Alpine पर तीसरी लाइन मायने रखती है। इमेज में OpenSSH का PAM वाला बिल्ड है, और सिर्फ़ पहली दो लाइनों के साथ हमारा टेस्ट सर्वर अब भी keyboard-interactive लॉगिन दे रहा था। तीनों लाइनों के साथ बिना की के लॉगिन की कोशिश को यह मिलता है:
Permission denied (publickey).
root सेशन खुला रखें। दूसरे टर्मिनल में जाँचें कि ssh deploy@YOUR.SERVER.IP चलता है (NAT प्लान पर -p और डैशबोर्ड वाला निजी पोर्ट जोड़ें) और doas id पासवर्ड स्वीकार करता है।
5. फ़ायरवॉल: ufw
ufw community रिपॉज़िटरी में है, जो हमारी इमेज में चालू है:
apk add ufw
ufw limit 22/tcp
ufw --force enable
rc-update add ufw default
ufw status
limit SSH को आने देता है, पर लगातार बहुत से कनेक्शन खोलने वाले को धीमा कर देता है। यहाँ rc-update ज़रूरी है, क्योंकि जब तक आप फ़ायरवॉल को runlevel में न जोड़ें, OpenRC रीबूट के बाद उसे शुरू नहीं करता। रीबूट के बाद हमारा सर्वर Status: active के साथ लौटा। NAT प्लान पर SSH को पोर्ट 22 पर ही रहने दें: आपका निजी बाहरी पोर्ट सर्वर के अंदर 22 पर फ़ॉरवर्ड होता है। अपने IPv4 वाले प्लान पर वेब पोर्ट तब खोलें जब ज़रूरत हो (ufw allow 80/tcp, ufw allow 443/tcp)। बाकी ufw गाइड में है।
6. cron और रोज़ाना अपडेट चालू करें
नया Alpine सर्वर cron बिल्कुल नहीं चलाता। इसे चालू करें:
rc-update add crond default
rc-service crond start
Alpine में root का crontab पहले से /etc/periodic/daily की हर चीज़ रात 02:00 बजे चलाता है। वहाँ एक अपडेट स्क्रिप्ट रखें:
cat > /etc/periodic/daily/apk-upgrade <<'EOF'
#!/bin/sh
apk upgrade --update-cache --no-progress >> /var/log/apk-auto.log 2>&1
EOF
chmod +x /etc/periodic/daily/apk-upgrade
run-parts --test /etc/periodic/daily
आख़िरी कमांड वे स्क्रिप्ट दिखाती है जिन्हें cron चलाएगा, और आपकी स्क्रिप्ट सूची में होनी चाहिए। इस तरह आपको 3.21 के सुधार मिलते रहते हैं। Alpine की अगली रिलीज़ पर जाना अलग, हाथ से किया जाने वाला कदम है। कर्नेल अपडेट को अब भी रीबूट चाहिए: कदम 1 वाली uname -r / ls /lib/modules जाँच समय-समय पर दोहराते रहें।
7. एक टेबल में OpenRC
अगर आप systemd जानते हैं, तो ज़्यादातर बदलाव यही है:
| काम | systemd | Alpine (OpenRC) |
|---|---|---|
| सर्विस शुरू करें | systemctl start nginx | rc-service nginx start |
| बूट पर शुरू करें | systemctl enable nginx | rc-update add nginx default |
| स्थिति | systemctl status nginx | rc-service nginx status |
| क्या चल रहा है | systemctl list-units | rc-status |
| सिस्टम लॉग | journalctl | /var/log/messages |
8. Docker, और वह पोर्ट जिसे ufw नहीं रोकता
Alpine, Docker के लिए अच्छा होस्ट है क्योंकि सिस्टम ख़ुद लगभग रास्ते में नहीं आता:
apk add docker docker-cli-compose
rc-update add docker default
rc-service docker start
docker run --rm hello-world
हमारे सर्वर पर डाउनलोड समेत इसमें 12 सेकंड लगे। Docker डेमन चलने पर इस्तेमाल हो रही मेमोरी 57 MB से 124 MB हो गई।
एक जाल जो सिर्फ़ Alpine का नहीं है: Docker अपने फ़ायरवॉल नियम ख़ुद लिखता है। जब ufw सिर्फ़ SSH की इजाज़त दे रहा था, हमने nginx को -p 8080:80 के साथ चलाया और सर्वर के बाहर से पोर्ट 8080 पर उस तक पहुँच गए। ufw ने नहीं रोका। अगर किसी कंटेनर तक सिर्फ़ उसी सर्वर के reverse proxy से पहुँचना है, तो उसे localhost पर पब्लिश करें:
docker run -d -p 127.0.0.1:8080:80 nginx:alpine
कौन-सा प्लान
Alpine लगभग पूरी RAM आपके अपने सॉफ़्टवेयर के लिए छोड़ता है। Nano प्लान (2 vCPU, 1 GB, 15 GB, $3/महीना) एक छोटी सर्विस या कुछ कंटेनरों के लिए काफ़ी है। यह NAT प्लान है, इसलिए SSH एक निजी पोर्ट से आता है। अगर पोर्ट 80 और 443 इंटरनेट के लिए खुले चाहिए, तो Nano-IP में $8/महीना पर अपना IPv4 है। भारी Docker स्टैक के लिए Micro $5/महीना में 2 GB देता है।
Alpine 3.21 Alpine VPS पेज पर है और VPS के हर Linux प्लान पर उपलब्ध है। भुगतान Base, Ethereum या Polygon नेटवर्क पर USDT, USDC या ETH में होता है, बिना पहचान पत्र और कार्ड के।
टिप्पणियाँ
अभी तक कोई टिप्पणी नहीं। पहले बनें।