SSD Nodes Learn
मार्गदर्शक Matt Connorद्वारे Matt Connor · अपडेटेड 2026-07-25

VPS वर Claude Code tmux मध्ये कसा चालवायचा

SSH खंडित झाल्यावर एजंट मरतो कारण shell ला SIGHUP मिळतो. tmux आत Claude Code चालवल्यास सत्र टिकून राहते. VPS सेटअप आणि अपेक्षित अपयशांची माहिती दिली आहे.

समस्या लॅपटॉपच्या लिडमध्ये आहे, CLI मध्ये नाही

Claude Code तुमच्या लॅपटॉपवर व्यवस्थित चालते, पण तुम्ही लिड बंद केल्यावर समस्या सुरू होते: SSH सत्र संपते, shell ला SIGHUP मिळते, आणि त्याबरोबर चालू असलेला एजंटही मरतो. असा एजंट चालू असतो जो चाचणी चालवण्यास तीन मिनिटे झाली होती. CLI अशा मशीनवर चालवा जे कधीही निद्रावस्थेत जात नाही. ते terminal multiplexer च्या आत चालवा, ज्याचे प्रोसेसेस तुमच्या SSH सत्राचे children नाहीत. हाच तो संपूर्ण उपाय आहे — आणि यात महत्त्वाचा भाग tmux आहे, installation नाही.

हे पान त्या सर्व्हरचे व्यवस्थापन कसे करायचे याबद्दल आहे, ज्यावर तुम्ही एजंट चालू ठेवता. तुमच्याकडे असा Linux सर्व्हर नसेल जो नेहमी चालू ठेवता येईल, तर यातील काहीही लागू होणार नाही. हीच एकमेव खरी पूर्वअट आहे.

tmux प्रत्यक्षात काय करते

तुम्ही SSH करून आत आल्यावर, sshd एक shell फोर्क करते आणि त्याला एक pseudo-terminal देते. त्या shell मधून तुम्ही जे काही सुरू करता ते सर्व त्याचे चाइल्ड असते. कनेक्शन खंडित झाल्यास कर्नल pty खंडित करते, shell ला SIGHUP मिळते, आणि ते आपल्या चाइल्ड प्रोसेसना थांबवते. त्यामुळे दीर्घकाळ चालणाऱ्या फोरग्राउंड प्रोसेस बंद पडतात.

tmux मालकी उलटी करते. तुम्ही टाईप करता ती tmux कमांड हे एक थिन क्लायंट असते, जे एका unix socket वरून तुमच्या टर्मिनलपासून वेगळे चालणाऱ्या tmux serverशी बोलते. सत्रात असलेली shell त्या server ची चाइल्ड असते, sshd ची नाही. SSH कनेक्शन बंद केल्यास क्लायंड निघून जाते, पण server, सत्र आणि कार्यरत असलेला एजंट चालू राहतात. पुन्हा कनेक्ट करा, tmux attach, आणि तुम्ही त्याच shell मध्ये त्याच scrollback सह परत आला आहात. nohup हे हँगअपमध्येही टिकून राहते, पण तुम्हाला परत येण्याचा मार्ग देत नाही — तुम्ही बॅकग्राउंडमधील TUI ला पुन्हा जोडू शकत नाही. Claude Code हे इंटरअ‍ॅक्टिव्ह आहे; tmux (किंवा screen) हे योग्य साधन आहे.

पेटीचे आकारमान ठरवणे

CLI हा Node process आहे; हे संगणकाची क्षमता भरत नाही. संगणकाची क्षमता ती गोष्ट भरते जी agent तुमच्यासाठी चालवतो: एक build, संपूर्ण test suite, tsc, language server, Docker मधील database. आकारमान CLI साठी नव्हे तर toolchain साठी ठरवा. Swap जोडा, जरी तुम्ही ते कधीच वापरण्याची योजना करत नसलात तरीही — ते एका hard OOM kill ला slow build मध्ये रूपांतरित करते:

sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

Disk देखील लक्ष ठेवा: repos, node_modules आणि Docker images लवकर साठतात. आणि जर toolchain, containers पलीकडे जाऊन पूर्ण virtual machines पर्यंत पोहोचले — एक KVM guest, एक local Kubernetes node — तर तुम्ही खरेदी करण्यापूर्वी तपासा की plan CPU virtualisation extensions उपलब्ध करतो, कारण VPS वर nested virtualization चालवणे ही गोष्ट provider तुमच्यासाठी सक्षम करतो, guest च्या आतून तुम्ही स्वतः सुरू करत नाही.

प्रथम एक non-root वापरकर्ता

स्वतःचा स्वतंत्र home सह एक विशिष्ट वापरकर्ता तयार करा, आणि तुमची public key योग्य ठिकाणी ठेवा:

sudo adduser --disabled-password --gecos "" agent
sudo install -d -m 700 -o agent -g agent /home/agent/.ssh
sudo cp ~/.ssh/authorized_keys /home/agent/.ssh/authorized_keys
sudo chown agent:agent /home/agent/.ssh/authorized_keys
sudo chmod 600 /home/agent/.ssh/authorized_keys

हेतूपूर्वक, agent हा sudo गटात नाही. जर सिस्टम पॅकेज आवश्यक असेल, तर तुम्ही ते स्थापित करा. हा एकच निर्णय बहुतांश मार्ग बंद करतो ज्यांद्वारे एखादी चुकीची shell command होस्टला नष्ट करू शकते.

सतत चालू ठेवलेल्या सर्व्हरसाठी SSH सुरक्षितता

दिवसभर सार्वजनिक इंटरनेटवर उपलब्ध असलेल्या आणि तुमचा एजंट व सोर्स कोड साठवलेल्या मशीनवर पासवर्ड प्रमाणीकरण हा टाळण्यासारखा धोका आहे. ते बंद करा. Ubuntu 24.04 आणि Debian 13 वर, /etc/ssh/sshd_config मध्ये /etc/ssh/sshd_config.d/*.conf समाविष्ट आहे, म्हणून मुख्य कॉन्फिगरेशन फाईल संपादित न करता एक नवीन फाईल त्यात टाका:

# /etc/ssh/sshd_config.d/10-hardening.conf
PasswordAuthentication no
KbdInteractiveAuthentication no
PermitRootLogin no

तपासा आणि पुन्हा लोड करा — चालू सत्र उघडे ठेवून दुसऱ्या टर्मिनलवरून एक नवीन सत्र तपासा:

sudo sshd -t && sudo systemctl restart ssh

Ubuntu 24.04 वर एक तपशील: sshd सॉकेट-अॅक्टिव्हेटेड आहे. प्रमाणीकरण सेटिंग्ज systemctl restart ssh वर लागू होतात, पण ऐकणारे Port बदलल्यास systemctl daemon-reload आणि ssh.socket रीस्टार्ट करणे आवश्यक आहे.

त्यानंतर फायरवॉल. फायरवॉल सक्षम करण्यापूर्वी SSH ला परवानगी द्या, अन्यथा तुम्ही स्वतःलाच बाहेर लॉक कराल:

sudo ufw allow OpenSSH
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw enable

fail2ban स्थापित करा, पण ते तुम्हाला काय देते हे स्पष्टपणे समजून घ्या: पासवर्ड प्रमाणीकरण बंद केल्यावर ब्रूट फोर्स हल्ला यशस्वी होऊच शकत नाही — हे फक्त अयशस्वी प्रयत्न तुमच्या जर्नलमधून बाहेर ठेवते.

# /etc/fail2ban/jail.local
[sshd]
enabled = true
backend = systemd
maxretry = 5
bantime = 1h

शेवटी, sudo apt install unattended-upgrades आणि sudo dpkg-reconfigure -plow unattended-upgrades सह पॅचिंग आपोआप करा. tmux सोबतच्या परस्परसंवादाकडे लक्ष द्या: Unattended-Upgrade::Automatic-Reboot सक्षम केल्यास कर्नल अपडेट सर्व्हर रीबूट करते आणि सर्व सत्रे बंद होतात. ते बंद ठेवा आणि जेव्हा काहीही चालू नसेल तेव्हा स्वतःच्या वेळेनुसार रीबूट करा.

Ubuntu वर Node.js आणि Claude Code प्रस्थापित करा

Claude Code हा एक Node CLI आहे, म्हणून तुम्हाला एक अद्ययावत Node आवश्यक आहे. वितरण पॅकेज बहुतेक वेळा मागे असते; Ubuntu आणि Debian वर NodeSource हा सामान्य मार्ग आहे, आणि ते स्वाक्षरी केलेले रेपॉजिटरी देते (apt-key नाही — ते साधन गेले आहे):

curl -fsSL https://deb.nodesource.com/setup_24.x | sudo -E bash -
sudo apt install -y nodejs
node --version

आता लोक ज्या भागात चूक करतात: CLI ला तुमच्या agent वापरकर्ता म्हणून प्रस्थापित करा, sudo npm -g सह कधीच नाही. root-मालकीचा जागतिक प्रीफिक्स नंतर परवानगी त्रुटी निर्माण करतो आणि npm कॅशेमध्ये root-मालकीची फाइल्स सोडतो. आधी npm चा प्रीफिक्स वापरकर्त्याच्या होम डिरेक्टरीकडे निर्देशित करा:

mkdir -p ~/.npm-global
npm config set prefix ~/.npm-global
echo 'export PATH="$HOME/.npm-global/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
npm install -g @anthropic-ai/claude-code
claude --version

हा export ~/.bashrc मध्ये जातो, ~/.profile मध्ये नाही, आणि तो फाइलच्या शीर्षाजवळ असलेल्या "If not running interactively, don't do anything" या गार्डच्या वर असावा: tmux कदाचित non-login शेल सुरू करते, जे ~/.bashrc वाचतात आणि ~/.profile वगळतात — ~/.profile फक्त login शेलसाठी चालते. nvm सारख्या व्हर्जन व्यवस्थापकाद्वारे प्रति-वापरकर्ता Node हे समान गोष्ट साध्य करते; दोन्ही प्रकारे उद्दिष्ट हेच आहे की npm install -g ला sudo ची कधीच गरज नसावी. npm तरीही ठीक काम करते, किंवा Anthropic चे मूळ प्रस्थापन स्क्रिप्ट वापरा, जे सध्या दस्तऐवजीकृत डिफॉल्ट आहे. तुम्ही पेस्ट करण्यापूर्वी Anthropic चे प्रस्थापन दस्तऐवज तपासा — प्रस्थापन पद्धती बदलतात.

एखाद्या रेपॉजिटरीमध्ये ते सुरू करण्यासाठी claude चालवा. पहि्या चालीमध्ये तुम्हाला प्रमाणीकरणातून मार्गदर्शन करते; हेडलेस बॉक्समध्ये ब्राउझर नसतो, म्हणून हा प्रवाह तुम्हाला तुमच्या स्वतःच्या मशीनवर उघडण्यासाठी एक URL आणि टर्मिनलवर परत आणण्यासाठी एक कोड देतो. (वातावरणातील API की हा दुसरा मार्ग आहे.) विहित मार्गाने, ते क्रेडेन्शियल आता सर्व्हरवर आहे — ज्याकडे आपण आता लोक जे वगळतात त्या भागाकडे येतो.

स्फोट परिघ (blast radius) संभाषण

शेल प्रवेश असलेला एजंट म्हणजे एक शेल. तो ज्या वापरकर्त्याच्या अधीन चालतो, त्या वापरकर्त्याला जे वाचता येते ते सर्व काही तो वाचू शकतो, आणि त्या वापरकर्त्याला जिथे पुश करता येते तिथे तो पुश करू शकतो. हे साधनाची टीका नाही, तर त्याची व्याख्या आहे — आणि म्हणूनच ते ज्या खात्याअंतर्गत चालते, ते खाते कोणत्याही वैयक्तिक सेटिंगपेक्षा जास्त महत्त्वाचे आहे.

  • समर्पित, अविशेषाधिकार असलेला वापरकर्ता. कोणताही sudo गट नाही, तुमच्या स्वतःच्या खात्यासोबत सामायिक केलेला होम डिरेक्टरी नाही.
  • बॉक्सवर उत्पादन (production) क्रेडेन्शियल्स नाहीत. प्रॉड की धारण करणारा कोणताही ~/.aws/credentials नाही, उत्पादनातून कॉपी करून आणलेला कोणताही .env नाही, महत्त्वाच्या गोष्टींवर लेखन प्रवेश असलेला डेटाबेस पासवर्ड नाही. एजंटला स्टेजिंग किंवा फक्त-वाचन (read-only) क्रेडेन्शियल द्या.
  • व्याप्तीसीमित (Scoped) टोकन्स. एका रिपॉझिटरीपुरते मर्यादित असलेला बारक्या दर्जाचा GitHub टोकन; फक्त वाचन प्रवेश पुरेसा असल्यास एक डिप्लॉय की.

Claude Code हा एक फ्लॅग देतो जो त्याच्या परवानगी सूचना पूर्णपणे वगळतो. लॅपटॉपवर, एखाद्या टाकाऊ प्रकल्पावर, हे ठरवणे तुमच्या हाती आहे. टोकन्स धारण करणाऱ्या सर्व्हरवर, ते चुकीच्या समजलेल्या सूचना आणि git push --force यांच्यामधील शेवटचा अडथळा दूर करते. तो फ्लॅग प्रत्यक्षात काय बदलतो, आणि त्यासह चालणाऱ्या एजंटला कसे नियंत्रित करावे, हे अंतर्निर्मित सँडबॉक्सपासून ते टाकाऊ VPS पर्यंत, सर्व्हरवर Claude Code सुरक्षितपणे चालवणे यात स्पष्ट केले आहे.

डिप्लॉय की आणि SSH एजंट फॉरवर्डिंग

git ला तुमच्या लॅपटॉपवरील की वापरता यावी म्हणून ती ssh -A करणे लाभदायक वाटते. हे काय अधिकार देते ते समजून घ्या: एजंट फॉरवर्डिंग तुमच्या स्थानिक SSH एजंटचे सॉकेट बॉक्सवर त्या वापरकर्त्याच्या अधीन चालणाऱ्या प्रक्रियांना उघडे करते. agent म्हणून चालणारी कोणतीही गोष्ट — एजंटसह — तुमच्या कीला तो पोहोचू शकेल अशा कोणत्याही होस्टसाठी स्वाक्षरी करण्याची विनंती करू शकते, जोपर्यंत तुम्ही जोडलेले असता. हे "git ला हा एक रिपॉझिटरी पुल करू दे" यापेक्षा खूपच जास्त आहे.

त्याऐवजी सर्व्हरवर एक की तयार करा, तिला प्रति-रिपॉझिटरी डिप्लॉय की म्हणून नोंदणी करा (फक्त एजंटला पुश करायचे असल्यास लेखन प्रवेश), आणि एक git ओळख (identity) सेट करा जेणेकरून बॉक्सवरून आलेले कमिट्स ओळखण्यायोग्य असतील:

ssh-keygen -t ed25519 -C "agent deploy key" -f ~/.ssh/id_ed25519_repo
cat ~/.ssh/id_ed25519_repo.pub   # paste into the repo's Deploy Keys
git config --global user.name "Agent (build box)"
git config --global user.email "agent@example.com"

tmux कार्यप्रवाह

ते इंस्टॉल करा (sudo apt install tmux), नंतर एक किमान ~/.tmux.conf:

set -g mouse on
set -g history-limit 50000
set -g default-terminal "tmux-256color"

दैनिक वापरासाठी चार आदेश पुरे:

tmux new -A -s claude     # attach to session "claude", creating it if absent
# ...run `claude` inside it, work normally...
# Ctrl-b then d           -> detach; everything keeps running
tmux ls                   # list sessions
tmux attach -t claude     # reattach, from this machine or any other
tmux kill-session -t claude

tmux new -A -s claude हा आदेश लक्षात ठेवा — जर सत्र अस्तित्वात असेल तर ते जोडते आणि नसेल तर ते तयार करते, म्हणून एकाच आदेश दिवसाची सुरुवात आणि थांबल्यानंतर पुन्हा सुरू करणे, हे दोन्ही काम करतो. त्याला अलायस द्या. सत्राच्या आत, Ctrl-b c एक विंडो उघडते, Ctrl-b n आणि Ctrl-b p त्या बदलतात, आणि Ctrl-b [ मागे स्क्रोल करण्यासाठी कॉपी मोडमध्ये प्रवेश करते (q बाहेर पडते).

जी सत्रे तुम्ही कधीच बंद करत नाही, त्याबद्दल एक गोष्ट जाणून घ्या: एजंट प्रत्येक वळणावर संपूर्ण संभाषण पुन्हा पाठवते, म्हणून एक आठवडा चालू ठेवण्यापूर्वी एक दीर्घकाळ टिकून असलेले Claude Code सत्र त्याचे टोकन कशावर खर्च करते हे वाचा.

अपयशाच्या पद्धती

"माझा सत्र गेला." tmux ls हे no server running on /tmp/tmux-1000/default छापते. याचा अर्थ जवळजवळ नेहमी असा असतो की ही प्रक्रिया tmux मध्ये कधीच नव्हती — तुम्ही SSH करून आत आलात, claude थेट चालवले, आणि जोडणी तुटल्यामुळे ते बंद झाले. पुनर्प्राप्त करण्यासारखे काही नाही. हे टाळण्याची सवय: tmux new -A -s <project> हा प्रत्येक लॉगिननंतरचा पहिला कमांड असावा.

पटल एका लहान चौकोनात आकुंचन पावते. tmux सत्राचा आकार सर्वात लहान जोडलेल्या क्लायंटनुसार ठरवते, त्यामुळे दुसऱ्या मशीनवरून जोडलेला जुना क्लायंट प्रदर्शन दाबतो. जोडताना इतरांना बाहेर काढा: tmux attach -d -t claude.

एक बिल्ड Killed छापते. एकच शब्द, स्टॅक ट्रेस नाही. sudo dmesg -T | grep -i -E 'out of memory|killed process' सह खात्री करा — कर्नल OOM किलरने सर्वात मोठी प्रक्रिया निवडली. Node मधून तुम्हाला त्याऐवजी FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory दिसू शकते. निराकरणाच्या क्रमानुसार: स्वॅप जोडा (वरीलप्रमाणे), चाचणी आणि कंपायलर पॅरललिझम मर्यादित करा, Node चा हीप NODE_OPTIONS=--max-old-space-size=... सह वाढवा, किंवा VPS चा आकार वाढवा. OOM किलर बिल्डऐवजी tmux सर्व्हर निवडू शकतो, तेव्हा तुमचा सत्रही जातो; जर systemd-oomd चालू असेल, तर ते संपूर्ण युजर स्लाइस बंद करू शकते आणि त्याच परिणाम होतो.

npm error code EACCES / permission denied, mkdir '/usr/lib/node_modules/...'. रूट-मालकीच्या प्रिफिक्समध्ये ग्लोबल इंस्टॉलेशन. वरील ~/.npm-global प्रिफिक्स वापरा. जर तुम्ही एखाद्या वेळी sudo npm चालवले असेल, तर तुम्हाला Your cache folder contains root-owned files देखील दिसू शकते — sudo chown -R $(id -u):$(id -g) ~/.npm सह दुरुस्त करा.

claude: command not found — पण फक्त कधीकधी. तुमचा PATH एक्सपोर्ट "जर इंटरअॅक्टिव्हली चालू नसेल, तर काही करू नका" या गार्डच्या खाली ~/.bashrc मध्ये आहे, त्यामुळे नॉन-इंटरअॅक्टिव्ह शेल ते वगळतात. एक्सपोर्ट त्या गार्डच्या वर हलवा आणि ते ~/.bashrc मध्ये ठेवा, ~/.profile मध्ये नाही: tmux नॉन-लॉगिन शेल सुरू करू शकते, जे ~/.bashrc वाचतात आणि ~/.profile ला कधीच हात लावत नाहीत.

जोडल्यानंतर गुंतागुंतीचे रंग. TERM मध्ये जुळणी नाही — वरील default-terminal ओळ हेच निराकरण आहे.

रीबूटनंतर सत्र गायब होतात. हा दोष नाही: tmux सर्व्हर एक प्रक्रिया आहे, आणि रीबूट ती संपवते. uptime तपासा.

हे वाढत असताना काय बिघडते

अधिक प्रकल्प. प्रत्येक repo साठी एक tmux session, त्याच नावाने; tmux ls मग तुमचा डॅशबोर्ड असतो. नाव देण्याची शिस्त न ठेवल्यास तुम्हाला session 0, 1, 2 मिळतात. पोर्ट त्याच प्रकारे विखुरतात — सहा repo सर्व :3000 हवे असणे हा त्या बिंदू आहे जेथे हाताने पोर्ट देणे थांबवून Docker Compose अंतर्गत एकाधिक अॅप्सना होस्टनावानुसार राउट करणारा Traefik रिव्हर्स प्रॉक्सी ला डिस्पॅचिंग करू द्या.

अधिक लोक. tmux socket प्रति-वापरकर्ता असतात, म्हणून एकाच बॉक्सवरील दोन डेव्हलपर्स प्रत्येकाला स्वतःचा tmux सर्व्हर मिळतो आणि ते एकमेकांचे session पाहू शकत नाहीत. एका सामायिक socketवर एक session सामायिक केल्यास प्रत्येकजण एकाच Unix वापरकर्ता म्हणून एकाच shell मध्ये टाईप करतो, त्यातून निर्माण होणारे ऑडिट आणि परवानगीचे परिणाम त्यासोबत येतात. वेगळे वापरकर्ते हे कंटाळवाणे पण योग्य उत्तर आहे.

पहारा न ठेवलेले काम. tmux हे तुम्ही जोडता त्या इंटरअॅक्टिव्ह session साठी आहे. वेळापत्रकानुसार चालणारी आणि कोणी पहात नसलेली कामे systemd unit आणि timer मध्ये सामावतात, जिथे त्यांना विनामूल्य लॉगिंग, रीस्टार्ट धोरण आणि बूट टिकून राहणे मिळते. cron-स्वरूपाचे काम चालवण्यासाठी tmux कडे हात लावणे हे लक्षण आहे की ते काम सर्व्हिस बनू इच्छिते.

शेवटची एक टीप: agent जे dev सर्व्हर सुरू करतो ते 0.0.0.0 ऐवजी 127.0.0.1 ला बांधा, आणि ufw मध्ये पोर्ट उघडण्याऐवजी त्यांपर्यंत SSH tunnel (ssh -L 3000:127.0.0.1:3000 agent@your-server) वरून पोहोचा. एकदा तुम्ही अर्ध्या डझन पोर्ट फॉरवर्ड करत असाल, किंवा फोन आणि लॅपटॉप दोघेही एकाच वेळी प्रीव्ह्यू पाहू इच्छित असतील, तर त्यांच्या पुढे एक VPS वर स्वयं-होस्ट केलेला WireGuard VPN ठेवा: dev सर्व्हर एका खाजगी इंटरफेसला बांधतात, आणि ufw सार्वजनिक इंटरफेसकडून सर्वकाही नकारत राहतो. फायरवॉल फक्त तेव्हाच मदत करतो जेव्हा तुम्ही त्यात भोक पाडणे थांबवता.

Claude Code हा एकमेव पर्याय नाही: VPS वर कोडिंग AI agent चालवणे Aider आणि Goose चे सुद्धा मूल्यमापन करते.

FAQ

SSH कनेक्शन बंद झाल्यानंतर Claude Code चालू राहते का?

फक्त तुम्ही ते tmux आत सुरू केल्यासच. SSH shell मधून थेट सुरू केलेला प्रोसेस त्या shell चा चाइल्ड असतो आणि कनेक्शन गेल्यावर pty सोबत मरतो. tmux आत shell डिटॅच झालेल्या tmux सर्व्हरचा भाग असते, म्हणून एजंट काम सुरू ठेवतो आणि tmux attach तुम्हाला त्याच scrollback मध्ये परत नेते. प्रत्येक लॉगिननंतर tmux new -A -s <project> ही पहिली कमांड करा आणि ही समस्या नाहीशी होते.

मला CLI sudo npm install -g सोबत इंस्टॉल करावे का?

नाही. root-मालकीचा ग्लोबल प्रिफिक्स नंतरच्या इंस्टॉलेशनवर EACCES त्रुटी देतो आणि npm कॅशेत root-मालकीची फाइल्स तयार करतो. npm चा प्रिफिक्स ~/.npm-global वर सेट करा (किंवा nvm सारखा व्हर्जन मॅनेजर वापरा), अनप्रिव्हिलेज्ड agent युजर म्हणून इंस्टॉल करा, आणि ~/.bashrc मधून PATH वर ~/.npm-global/bin एक्सपोर्ट करा, इंटरअॅक्टिव्ह गार्डच्या वर. तुम्ही आधीच sudo npm एकदा चालवले असल्यास, sudo chown -R $(id -u):$(id -g) ~/.npm सह कॅशे दुरुस्त करा.

एजंट चालवणाऱ्या सर्व्हरवर ssh -A एजंट फॉरवर्डिंग सुरक्षित आहे का?

ते कामाला आवश्यक असलेल्यापेक्षा खूप जास्त परवानगी देते. फॉरवर्डिंग तुमचा लोकल SSH एजंट सॉकेट त्या युजर म्हणून चालणाऱ्या प्रत्येक प्रोसेसला दिसतो, म्हणून तुम्ही कनेक्टेड असेपर्यंत सर्व्हरवरील कोणताही प्रोसेस तुमच्या कीला त्याच्या पोहोचण्याजोग्या प्रत्येक होस्टसाठी साइन करण्यास सांगू शकतो. सर्व्हरवर ed25519 की तयार करा आणि तिला प्रति-रिपॉझिटरी डिप्लॉय की म्हणून नोंदवा, फक्त एजंटला खरंच पुश करावे लागल्यासच राईट अॅक्सेस द्या.

माझा बिल्ड फक्त Killed का प्रिंट करतो?

स्टॅक ट्रेसशिवाय एकच शब्द म्हणजे कर्नल OOM किलर. ते sudo dmesg -T | grep -i -E 'out of memory|killed process' सह खात्री करा; Node मधून तुम्हाला त्याऐवजी JavaScript heap out of memory दिसू शकते. दुरुस्ती क्रमाने करा: स्वॅपफाइल जोडा, टेस्ट आणि कंपायलर पॅरललिझम थोपवा, NODE_OPTIONS=--max-old-space-size=... वाढवा, नंतर VPS चा आकार वाढवा. लक्षात ठेवा की OOM किलर बिल्डऐवजी tmux सर्व्हरला निवडू शकतो, ज्यामुळे तुमचा संपूर्ण सेशन बंद होऊ शकतो.

tmux की systemd सर्व्हिस?

tmux इंटरअॅक्टिव्ह सेशन्ससाठी योग्य आहे ज्याला तुम्ही कनेक्ट करता, पाहता आणि त्यात टाइप करता, जे एजंट सेशन अगदी तसेच असते. वेळापत्रकानुसार चालणारे आणि कोणी पाहत नसलेले काम systemd युनिट आणि टायमरमध्ये असावे, जिथे लॉगिंग, रीस्टार्ट पॉलिसी आणि बूट सर्व्हायव्हल मोफत मिळते. तुम्ही cron सारखे काम चालवण्यासाठी tmux वापरत असाल, तर ते काम सर्व्हिस बनवायचे आहे.