Linux सर्वर मैनेज करने के लिए सबसे अच्छे टूल्स
SSH config, tmux, Ansible और Zabbix जैसे टूल्स का उपयोग करके अपने सर्वर मैनेज करें। सर्वर की संख्या के आधार पर सही टूल चुनें, सेटअप समय जानें और हर टूल की मुख्य तकनीकी समस्या समझें।
आप क्या बना रहे हैं
यह कोई एक टूल नहीं, बल्कि एक छोटा स्टैक है, जिसे आपके पास मौजूद सर्वर की संख्या के आधार पर चुना गया है। सर्वर की वह संख्या ही एकमात्र महत्वपूर्ण इनपुट है, और यही वह बात है जिसे "Linux server management tools" की हर सूची नजरअंदाज कर देती है। सबसे आम गलती चार VPS के लिए 200 सर्वर वाला समाधान अपनाना है, जिसमें आप सर्वर के बजाय टूल को मैनेज करने में ही पूरा महीना बिता देते हैं। दूसरी आम गलती यह है कि अठारह सर्वर वाला व्यक्ति अभी भी हर एक सर्वर पर मैन्युअल रूप से SSH कर रहा है और "एक ही" बदलाव को अठारह अलग-अलग तरीकों से लागू कर रहा है।
इसलिए, यह गाइड सर्वर की संख्या के आधार पर व्यवस्थित है: 2 से 5 सर्वर, 5 से 20 सर्वर, और 20 से अधिक सर्वर। इसके साथ ही इसमें वह महत्वपूर्ण परत भी शामिल है जो हर स्तर पर लागू होती है और जिसे कोई नहीं लिखता: एक इन्वेंट्री, कीज़ (keys) की स्वच्छता, प्रवेश का एक निश्चित तरीका, और ऐसे बैकअप जिन्हें आपने वास्तव में रिस्टोर करके देखा है। प्रत्येक टूल के लिए आपको तीन चीजें मिलेंगी: यह किसका स्थान लेता है, सेटअप में लगने वाला समय (मिनटों में), और वह एक तकनीकी समस्या जो वास्तव में परेशान करती है। मैंने पंद्रह वर्षों तक एक VPS होस्ट चलाया है; नीचे दी गई सूची वही है जो रात के 2 बजे आने वाली आउटेज (outage) के दौरान भी काम करती है, न कि वह जो केवल डेमो में अच्छी दिखती है।
पूर्व-आवश्यकताएँ और व्यावहारिक सावधानियाँ
आपको प्रत्येक सर्वर पर key-based SSH को पहले से ही कार्यशील रखना होगा (यदि आप अभी भी पासवर्ड टाइप कर रहे हैं, तो पहले उसे ठीक करें; इसमें दस मिनट लगते हैं और नीचे दी गई हर चीज़ keys पर आधारित है), एक sudo user जो root न हो, और ऐसे सर्वर जो वर्तमान OS वर्ज़न पर चल रहे हों। यहाँ दिए गए commands Ubuntu 24.04 के लिए हैं, लेकिन apt को छोड़कर कोई भी चीज़ विशेष रूप से Ubuntu तक सीमित नहीं है।
टूल्स के उपयोग से पहले दो ईमानदार चेतावनियाँ। पहली, टूल्स का अत्यधिक फैलाव (tool sprawl) स्वयं में एक प्रबंधन समस्या है: आपके द्वारा इंस्टॉल किया गया प्रत्येक agent हर सर्वर पर patch करने के लिए एक अतिरिक्त daemon बन जाता है, इसलिए किसी नए टूल को जोड़ने का आधार यह होना चाहिए कि "यह उस मैन्युअल काम को बदलता है जो मैंने इस सप्ताह किया है," न कि यह कि "यह उपयोगी लग रहा है।" दूसरी, यहाँ दी गई हर चीज़ free software है और वास्तविक लागत setup में लगने वाला समय है, इसीलिए प्रत्येक टूल के साथ मिनटों में एक अनुमान दिया गया है; जहाँ अनुमान में एक दोपहर (afternoon) लिखा हो, उस पर विश्वास करें।
2 से 5 सर्वर: ~/.ssh/config वह सबसे कम आंका गया टूल है जो आपके पास पहले से है
यह किन चीजों की जगह लेता है: IP addresses की टेक्स्ट फाइल, shell-history की खुदाई (ssh 203.0 फिर Ctrl-R दबाकर प्रार्थना करना), और हमेशा -p 2222 -i ~/.ssh/other_key टाइप करना। सेटअप लागत: 15 मिनट, केवल एक बार। समस्या: पुराने multiplexing sockets, जिसके बारे में नीचे बताया गया है।
इस स्तर पर आपको किसी अतिरिक्त सॉफ्टवेयर की आवश्यकता नहीं है; आपको बस उस क्लाइंट की जरूरत है जो आपके पास पहले से है, जिसे आपको सही ढंग से कॉन्फ़िगर करना है। ~/.ssh/config हर सर्वर को एक शब्द के नाम में बदल देता है और राउटिंग को एन्कोड कर देता है ताकि आपको इसके बारे में दोबारा न सोचना पड़े:
Host *
ServerAliveInterval 30
ControlMaster auto
ControlPath ~/.ssh/cm-%r@%h-%p
ControlPersist 10m
Host bastion
HostName 10.0.0.10
User matt
Host web1
HostName 10.8.0.11
User matt
ProxyJump bastion
Host db1
HostName 10.8.0.12
User matt
Port 2222
ProxyJump bastionतीन सेटिंग्स सारा काम करती हैं। ProxyJump कनेक्शन को एक ही हॉप में बैस्टियन (bastion) के माध्यम से रूट करता है, इसलिए किसी कैफे से ssh db1 करने पर वह पारदर्शी रूप से bastion के माध्यम से टनल हो जाता है। इसमें agent forwarding की जरूरत नहीं, न ही ProxyCommand जैसे जटिल कमांड्स की, और प्राइवेट सर्वर्स को कभी भी पब्लिक SSH पोर्ट्स की आवश्यकता नहीं होती (इस पर अधिक जानकारी क्रॉस-कटिंग सेक्शन में दी गई है)। ControlMaster auto के साथ ControlPersist एक ही TCP सेशन पर कनेक्शन को multiplex करता है, इसलिए उसी होस्ट के लिए दूसरा और उसके बाद का हर ssh, scp, या rsync बिना renegotiation के तुरंत कनेक्ट हो जाता है। जब Ansible का उपयोग होता है, तो यह अंतर बहुत महत्वपूर्ण हो जाता है। और चूंकि scp, rsync, और Ansible सभी इसी फाइल को पढ़ते हैं, इसलिए यहाँ परिभाषित हर नाम हर जगह काम करता है।
समस्या: मास्टर कनेक्शन अपनी उपयोगिता से अधिक समय तक जीवित रह सकता है, और इसके दो प्रकार के फेलियर मोड अलग दिखते हैं। जब सर्वर रीबूट होता है या आपका Wi-Fi डिस्कनेक्ट होता है, तो मास्टर प्रोसेस एक डेड TCP सेशन को पकड़े रहती है जिसका उसे अभी पता नहीं चला है, और अगला ssh web1 एक ऐसे सॉकेट पर चुपचाप हैंग हो जाता है जो कहीं नहीं जाता। इसके अलावा, sshd प्रति कनेक्शन सेशन की संख्या को 10 तक सीमित करता है (sshd_config में MaxSessions), इसलिए एक ही होस्ट के लिए ग्यारहवां multiplexed सेशन यह एरर देता है:
mux_client_request_session: session request failed: Session open refused by peerदोनों का समाधान एक ही है: ssh -O exit web1 मास्टर को समाप्त कर देता है, और अगला कनेक्शन एक नया सेशन शुरू करता है। आप कभी-कभी ControlSocket /home/matt/.ssh/cm-matt@10.8.0.11-22 already exists, disabling multiplexing भी देख सकते हैं, यह हानिरहित है: दो सेशन्स के बीच रेस हुई, और कनेक्शन अभी भी काम करता है, बस वह multiplexed नहीं है।
इस स्तर पर दो साथी उपयोगी हैं। हर सर्वर पर tmux का उपयोग nohup की जगह लेता है, जिससे Wi-Fi डिस्कनेक्ट होने पर काम खोने का डर नहीं रहता और "मैं अपना लैपटॉप बंद नहीं कर सकता, माइग्रेशन चल रहा है" जैसी स्थिति नहीं आती। सेटअप लागत: sudo apt install -y tmux, दो मिनट, साथ ही tmux new -s work और tmux attach -t work की मसल मेमोरी। इसमें समस्या नेस्टिंग की है: tmux के अंदर tmux आपके प्रीफिक्स की (prefix key) को दबा देता है, इसलिए इसे या तो सर्वर पर चलाएं या लैपटॉप पर, दोनों पर नहीं। यदि आप लंबे समय तक चलने वाले एजेंट सेशन्स का उपयोग करते हैं, तो यह दोगुना महत्वपूर्ण हो जाता है। यह VPS पर tmux में Claude Code चलाने के समान पैटर्न है, जहां सेशन को SSH कनेक्शन से अधिक समय तक जीवित रहना पड़ता है।
एक साझा alias फाइल हर बॉक्स पर अपने बारह पसंदीदा वन-लाइनर्स को दोबारा टाइप करने की आवश्यकता को खत्म कर देती है। एक .bash_aliases को git रिपॉजिटरी में रखें और इसे हर सर्वर पर पुल करें। समस्या: जैसे ही आप इसे किसी एक सर्वर पर सीधे एडिट करते हैं (रिपॉजिटरी के बजाय), यह सिंक से बाहर हो जाता है। यह आपको पहली बार अनुभव कराता है कि अगला टियर क्यों अस्तित्व में है।
5 से 20 सर्वर: config as code, वरना drift जीत जाएगा
पाँच सर्वर से अधिक होने पर, "मैं इसे हर बॉक्स पर खुद कर लूँगा" एक तरीका नहीं, बल्कि खुद से बोला गया झूठ बन जाता है। इस स्तर पर सभी टूल्स एक ही दुश्मन पर हमला करते हैं: drift।
Ansible होस्टनेम पर चलने वाले shell loop, "new server setup" नाम के उस wiki पेज जो तीन कदम पुराना है, और यह चिंता कि क्या web3 को वास्तव में fix मिला है या नहीं, इन सबको बदल देता है। सेटअप लागत: पहले working playbook तक पहुँचने में 30 मिनट, आपके लैपटॉप या management बॉक्स पर sudo apt install -y ansible (apt आपको पुराना Ansible release देता है, जो यहाँ सब कुछ के लिए ठीक है; ट्यूटोरियल का pipx रूट आपको current versions देता है), सर्वर पर कोई agent नहीं, सब कुछ आपके द्वारा पहले से बनाए गए SSH config पर चलता है। यह इस पेज का सबसे बड़ा single upgrade है, और पूरा walkthrough Ansible first-playbook ट्यूटोरियल में है; यहाँ उस inventory का स्वरूप है जो इसे काम करने योग्य बनाता है:
[web]
web1 ansible_host=10.8.0.11
web2 ansible_host=10.8.0.12
[db]
db1 ansible_host=10.8.0.21 ansible_port=2222
[all:vars]
ansible_user=matt
ansible_ssh_common_args='-o ProxyJump=bastion'चूंकि Ansible OpenSSH binary का उपयोग करता है, इसलिए पिछले सेक्शन में आपने जो ~/.ssh/config लिखा था वह पहले से ही लागू होता है, web1 जैसे bare नामों की inventory बिना किसी vars के काम करेगी। ऊपर दिए गए vars inventory को आत्मनिर्भर बनाते हैं, जो उस दिन काम आता है जब आप इसे अपने लैपटॉप के अलावा किसी अन्य मशीन से चलाते हैं।
इसे ansible all -i inventory.ini -m ping के साथ टेस्ट करें; एक सही परिणाम हर होस्ट के लिए हरे रंग में "ping": "pong" प्रिंट करेगा। जो विफलता आपको सबसे पहले मिलेगी वह ऐसी दिखेगी:
web1 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh: matt@10.8.0.11: Permission denied (publickey).",
"unreachable": true
}यह Ansible की समस्या नहीं है, साधारण ssh matt@10.8.0.11 भी उसी तरह विफल होता है। हमेशा पहले SSH को ठीक करें; Ansible केवल अपने नीचे की लेयर जितना ही स्वस्थ है। इसके अलावा एक और समस्या: Ansible को आपकी मशीन पर और ping सहित लगभग हर module के लिए सर्वर पर भी Python की आवश्यकता होती है, इसलिए एक बहुत ही minimal image /usr/bin/python3: not found का उत्तर दे सकती है। एक apt install python3 और यह आपको फिर कभी परेशान नहीं करेगा; bare images के पूरे बेड़े के लिए, raw module, जो उन कुछ में से एक है जिन्हें remote पर Python की आवश्यकता नहीं है, वह आपके लिए उस install को चला सकता है।
unattended-upgrades आपको उस व्यक्ति के रूप में बदल देता है जो N सर्वर्स पर security patches लागू करता है। Stock Ubuntu Server 24.04 इसे पहले से इंस्टॉल करके भेजता है और सामान्यतः security updates के लिए पहले से enabled होता है, इसलिए यहाँ काम इंस्टॉल करना नहीं, बल्कि verify करना है:
cat /etc/apt/apt.conf.d/20auto-upgradesदोनों लाइनों का अंत "1" पर होना चाहिए। कुछ minimal और cloud images इसे बंद करके भेजती हैं, और यदि आपकी image ने ऐसा किया है तो sudo dpkg-reconfigure -plow unattended-upgrades उस फाइल को rewrite कर देता है। सेटअप लागत: प्रति सर्वर जाँचने में दो मिनट, या उन सभी के लिए एक Ansible task। समस्या: डिफ़ॉल्ट रूप से यह कभी reboot नहीं होता है, इसलिए kernel security updates तब तक आधे-अधूरे लागू रहते हैं जब तक आप ऐसा नहीं करते, समर्पित unattended-upgrades गाइड automatic reboots, क्या patch करना है यह चुनने, और इसके logs को पढ़ने को कवर करती है।
Centralized monitoring ग्राहक से पता चलने की स्थिति को बदल देती है, जो अब तक की सबसे महंगी monitoring प्रणाली है। दो टूल्स, कब उपयोग करें इस पर एक-एक लाइन: Uptime Kuma "क्या यह चल रहा है?" का उत्तर देता है, HTTP, TCP, और ping चेक के साथ किसी भी चीज़ के लिए alerts देता है, और Docker में दस मिनट लेता है; Zabbix "क्या यह गिरने वाला है?" का उत्तर देता है, हर होस्ट पर agent के माध्यम से disk, memory, और CPU trends बताता है, और वास्तव में एक दोपहर का समय लेता है। Kuma के साथ शुरुआत करें; Zabbix तब जोड़ें जब "चल रहा है लेकिन धीमा है" (up but degraded) आपको नुकसान पहुँचाने लगे। दोनों के लिए समस्या placement की है, और यह इतना महत्वपूर्ण है कि यह नीचे दी गई गलतियों के सेक्शन में सबसे पहले आता है।
एक web panel, केवल यदि आवश्यक हो। Webmin यह याद रखने की जगह ले लेता है कि Ubuntu चीज़ों को कहाँ रखता है, और एक मिश्रित-कौशल वाली टीम या ऐसे सर्वर के लिए जिसे आप साल में दो बार छूते हैं, यह वास्तव में उपयोगी है; सेटअप दस मिनट का है। समस्या यह है कि यह port 10000 पर सुनने वाला एक root-equivalent web application है, और इंटरनेट लगातार इसे स्कैन करता रहता है। यदि आप इसे चलाते हैं, तो इसे localhost या VPN address पर bind करें, कभी भी public interface पर 0.0.0.0 पर नहीं। और यदि आप panel का उपयोग इसलिए कर रहे हैं क्योंकि SSH धीमा लगता है, तो पहले पिछला सेक्शन फिर से पढ़ें; ~/.ssh/config और Ansible एक बार कॉन्फ़िगर हो जाने पर किसी भी panel से तेज़ हैं।
20+ सर्वर: जहाँ यह गाइड वास्तव में समाप्त होती है
बीस सर्वर से अधिक होने पर आप एक फ्लीट (fleet) चला रहे होते हैं, और टूलचेन का स्वरूप बदल जाता है: Terraform या OpenTofu का उपयोग करें ताकि सर्वर reproducible हों, cloud-init या golden images का उपयोग करें ताकि एक बॉक्स को रिपेयर करने के बजाय उसे बदला जा सके, pull-based कॉन्फ़िगरेशन या CI पाइपलाइनों का उपयोग करें जो आपका Ansible चलाती हैं क्योंकि लैपटॉप से push करना अब स्केल नहीं होता, और वास्तविक secrets management का उपयोग करें। Ansible खुद बीस सर्वर पर विफल नहीं होता, कई संस्थान इसे सैकड़ों नोड्स पर चलाते हैं, लेकिन इसके आसपास की कार्यप्रणालियों को सख्त होना चाहिए, और यह इस साइट द्वारा लिखे गए लेख से भिन्न विषय है। यदि आप उस स्केल पर हैं, तो नीचे दिया गया अनुभाग अभी भी आपके लिए है, क्योंकि इन्वेंट्री, कीज़ (keys) और एक्सेस अनुशासन बिल्कुल वही चीजें हैं जिन्हें फ्लीट टूलिंग यह मानकर चलती है कि आपके पास पहले से मौजूद हैं।
वह परत जिसे कोई नहीं लिखता
चार अभ्यास हर फ्लीट आकार पर लागू होते हैं, और इन्हें छोड़ना ही वह कारण है कि सर्वर की संख्या वास्तव में जितनी है, उससे कहीं अधिक भारी महसूस होती है।
एक इन्वेंट्री फ़ाइल, यहाँ तक कि एक टेक्स्ट फ़ाइल भी। जिस क्षण आपके पास तीन सर्वर हों, लिख लें: नाम, IP, प्रदाता, उस पर क्या चलता है, और उसका अस्तित्व क्यों है। git repo में एक servers.md ठीक है; ऊपर दी गई Ansible इन्वेंट्री बेहतर है क्योंकि यह निष्पादन योग्य (executable) दस्तावेज़ीकरण है। यह किसे प्रतिस्थापित करती है: रात के 2 बजे उठने वाले सवाल "रुको, 10.0.0.40 क्या है?" को। सेटअप लागत: दस मिनट। समस्या: यह केवल तभी काम करती है जब सर्वर बनाना और लाइन जोड़ना एक ही कार्य हो, कभी भी दो अलग-अलग कार्य नहीं।
की (Key) स्वच्छता: अभी रोटेशन करें, जब समस्या हो तो SSH CA का उपयोग करें। गणना करें कि आपकी कीज़ कहाँ रहती हैं (आपकी तरफ cat ~/.ssh/*.pub, प्रत्येक सर्वर की तरफ ~/.ssh/authorized_keys), पुराने लैपटॉप और पूर्व सहयोगियों को हटा दें, और किसी भी ऐसी पुरानी चीज़ को रोटेट करें जिसके बारे में आप यह नहीं कह सकते कि वह कहाँ-कहाँ रही है। एक SSH सर्टिफिकेट अथॉरिटी, स्थिर कीज़ के बजाय अल्पकालिक हस्ताक्षरित सर्टिफिकेट, एक परिपक्व समाधान है, लेकिन ईमानदार सलाह यह है कि दस सर्वर से नीचे, Ansible के माध्यम से अनुशासित authorized_keys प्रबंधन आपको 10% प्रयास में 90% लाभ देता है।
अंदर आने का एक रास्ता, बीस नहीं। प्रत्येक सार्वजनिक SSH पोर्ट हमले की सतह (attack surface) को N गुना बढ़ा देता है। जो पैटर्न स्केल होता है: एक बैशन होस्ट, या बेहतर, एक WireGuard VPN जिसे आप नियंत्रित करते हैं, और बाकी सभी सर्वरों का SSH केवल उनके निजी पते पर बाउंड होना चाहिए। ऊपर कॉन्फ़िगरेशन में ProxyJump लाइनें पहले से ही इस आकार को मानती हैं। जो कुछ भी सार्वजनिक रहना चाहिए, उस पर सामान्य प्रक्रिया के रूप में fail2ban होना चाहिए। सेटअप लागत: एक घंटा, केवल एक बार। समस्या: पोर्ट 22 को हर जगह बंद करने से पहले यह सत्यापित करें कि आपका बैकअप (प्रदाता का कंसोल एक्सेस) काम करता है, बाद में नहीं।
बैकअप जिन्हें रिस्टोर करके परखा गया हो। एक अपरीक्षित बैकअप केवल एक परिकल्पना है। आप जो भी तंत्र उपयोग करें, प्रदाता स्नैपशॉट, restic, या किसी दूसरे बॉक्स पर rsync, जो उपकरण वास्तव में मायने रखता है वह कैलेंडर प्रविष्टि है जहाँ आप एक सर्वर को एक नए VPS पर रिस्टोर करते हैं और पुष्टि करते हैं कि वह बूट होता है और सेवा प्रदान करता है। होस्टिंग के पंद्रह वर्षों में मैंने जो भी बैकअप की डरावनी कहानियाँ सुनी हैं, उनमें यह वाक्यांश शामिल है "हमारे पास बैकअप थे।"
गलतियाँ
मल्टी-सर्वर स्केल पर विफलता के कारण टूल की खराबी नहीं, बल्कि आदतें होती हैं। इनमें से चार आदतें लगभग हर समस्या के लिए जिम्मेदार हैं।
Snowflake सर्वर। प्रत्येक सर्वर को मैन्युअल रूप से कॉन्फ़िगर किया गया है, वे थोड़े अलग हैं, और कोई भी उन्हें फिर से नहीं बना सकता। आपको इसका पता डिस्क फेलियर के दौरान चलता है। इसका समाधान उबाऊ है: हर बदलाव Ansible के माध्यम से होना चाहिए, या कम से कम उस सर्वर के इन्वेंट्री दस्तावेज़ में जोड़ा जाना चाहिए। यदि आप आज दोपहर तक नोट्स से किसी सर्वर को फिर से नहीं बना सकते, तो वह एक ऐसा तकनीकी कर्ज (technical debt) है जिसकी समय-सीमा आप तय नहीं कर सकते।
"अस्थायी" फ़ायरवॉल होल। किसी चीज़ को डीबग करने के लिए ufw allow 5432 का उपयोग किया जाता है, और अठारह महीने बाद भी Postgres इंटरनेट पर खुला रहता है। प्रत्येक बॉक्स पर sudo ufw status numbered के साथ ऑडिट करें, या एक बार में ansible all -i inventory.ini -a "ufw status numbered" --become चलाएं, और ऐसी किसी भी चीज़ को हटा दें जिसका आपके पास वर्तमान कारण नहीं है। यदि कोई नियम वास्तव में अस्थायी है, तो उसे बंद करने से पहले संबंधित ufw delete को उसी tmux विंडो में रखें।
निगरानी (monitoring) उसी सर्वर पर होस्ट करना जिसकी निगरानी की जा रही है। यदि Uptime Kuma उसी सर्वर पर चलता है जिसकी वह निगरानी करता है, तो "सब कुछ डाउन है" वाला अलर्ट भी डाउन हो जाएगा। आपने दुनिया के सबसे कम कुशल डेटासेंटर का एक छोटा और हास्यास्पद संस्करण बना लिया है। मॉनिटरिंग को एक अलग विफलता डोमेन (failure domain) में रहना चाहिए: किसी अन्य प्रदाता पर एक सस्ता VPS इसका क्लासिक उत्तर है, या कम से कम एक बाहरी फ्री-टियर चेक जो 'वॉचर' की निगरानी करे।
हर जगह Root SSH। पूरे फ्लीट में एक साझा root key का मतलब है कि एक लीक हुआ लैपटॉप सब कुछ खतरे में डाल देता है, और कोई ऑडिट ट्रेल यह नहीं बताता कि किसने क्या किया। प्रत्येक होस्ट पर प्रति-व्यक्ति उपयोगकर्ता, sudo, और /etc/ssh/sshd_config में PermitRootLogin no का उपयोग करें। यह फिर से, टाइपिंग में शाम बिताने के बजाय केवल तीन लाइन का Ansible टास्क है।
जब फ्लीट कुछ सर्वरों से अधिक हो जाए, तो आपका पहला Ansible playbook दोहराव वाले कार्यों को स्वचालित कर देता है।
FAQ
कई Linux servers को manage करने के लिए सबसे अच्छा मुफ्त टूल कौन सा है?
2 से 5 servers के लिए, एक अच्छी तरह से लिखा गया ~/.ssh/config और tmux किसी भी अन्य install किए जाने वाले टूल से बेहतर है। लगभग पांच servers से ऊपर, Ansible मानक समाधान है: यह agentless है, मुफ्त है, आपके मौजूदा SSH पर चलता है, और server setup को git में फाइलों के रूप में बदल देता है। up/down अलर्टिंग के लिए Uptime Kuma जोड़ें; इस गाइड में बताए गए सभी टूल्स मुफ्त सॉफ्टवेयर हैं।
क्या मैं Ansible के बिना कई Linux servers को manage कर सकता हूँ?
हाँ, लगभग पांच servers से कम के लिए, एक अच्छा SSH config, एक साझा alias फाइल और अनुशासन पर्याप्त हैं, और बहुत से लोग वर्षों तक इसी तरह काम करते हैं। इससे आगे, Ansible का विकल्प "कुछ नहीं" नहीं है, बल्कि undocumented drift है: अठारह servers, जिनमें से प्रत्येक को हाथ से थोड़ा अलग तरीके से configure किया गया है। यदि Ansible भारी लगता है, तो एक ऐसे playbook से शुरुआत करें जो केवल authorized_keys और unattended-upgrades को manage करता है; केवल इतना ही सीखने की मेहनत को सार्थक बना देता है।
मैं एक ही समय में कई Linux servers पर एक ही command कैसे चलाऊं?
ansible all -i inventory.ini -a "uptime" इसका साफ-सुथरा समाधान है और इसके लिए किसी playbook की आवश्यकता नहीं है, बस inventory फाइल चाहिए। इंटरैक्टिव साइड-बाय-साइड काम के लिए, tmux setw synchronize-panes on के साथ हर pane में keystrokes broadcast कर सकता है, लेकिन इसे केवल एक ट्रिक मानें, क्योंकि production servers पर इंटरैक्टिव commands broadcast करना एक टाइपो को N गुना बड़ी खराबी में बदल सकता है।
क्या मुझे Linux servers को manage करने के लिए Webmin जैसे control panel की आवश्यकता है?
आवश्यकता नहीं है, क्योंकि जो काम एक पैनल करता है, SSH और Ansible उसे अधिक पुनरावृत्ति (reproducibly) के साथ करते हैं। Webmin तब उपयोगी होता है जब अलग-अलग कौशल स्तर के लोग एक ही बॉक्स को manage करते हैं, या जब आप किसी server को इतनी कम बार छूते हैं कि config paths को फिर से खोजना समय की बर्बादी बन जाता है। यदि आप इसे चलाते हैं, तो इसे root-equivalent वेब ऐप की तरह ही मानें: इसे localhost या VPN address पर bind करें, कभी भी public interface पर नहीं।
एक व्यक्ति वास्तव में कितने Linux servers को manage कर सकता है?
हाथ से administration करने पर, दस से कम servers पर ही गुणवत्ता गिरने लगती है। config as code, स्वचालित patching और केंद्रीकृत निगरानी के साथ, एक सतर्क व्यक्ति 20 से 50 servers को पार्ट-टाइम जॉब के रूप में चला सकता है; बाधा यह नहीं है कि routine देखभाल कितनी है, बल्कि यह है कि कुछ नया कितनी बार खराब होता है। जो संख्या मायने रखती है वह प्रति admin servers की संख्या नहीं, बल्कि प्रति admin 'snowflakes' (अद्वितीय/असंगत configurations) की संख्या है: इसे शून्य के करीब रखें और आप बहुत अधिक servers संभाल पाएंगे।