VPS वर DeepSeek Harness खाजगीपणे कसे चालवावे
Linux VPS वर DeepSeek Harness install करा, npm version pin करा, plugin काय करू शकते ते समजा आणि SSH tunnel वापरून port 3080 वरील web UI सुरक्षितपणे उघडा.
DeepSeek Harness म्हणजे काय
DeepSeek Harness (dsh) हा Node.js agent runtime आहे. तो VPS (virtual private server) वर चालवता येतो. तो सुरक्षितपणे चालवण्यासाठी त्याला 127.0.0.1 शी bind करा आणि browser मधून SSH (secure shell) tunnel द्वारे त्याच्यापर्यंत पोहोचा. तो terminal मध्ये न चालता 3080 पोर्टवर web UI (user interface) उपलब्ध करून देतो. हा web server स्वतःचा कोणताही password मागत नाही. त्यामुळे 3080 पोर्ट सार्वजनिक केल्यास, तो शोधणाऱ्या कोणत्याही व्यक्तीला तुमच्या Linux user म्हणून files वाचता आणि commands चालवता येतात.
DeepSeek ने ते 13 August 2026 रोजी MIT licence अंतर्गत @deepseek-ai/dsh या npm package म्हणून release केले. प्रकल्प स्वतःचे वर्णन developer preview असे करतो आणि compatibility-breaking changes अपेक्षित असल्याचे नमूद करतो. खाली दिलेला प्रत्येक version number August 2026 मधील snapshot आहे. त्यामुळे महत्त्वाच्या server वर यातील काहीही copy करण्यापूर्वी repository तपासा.
या संपूर्ण design मध्ये एकच कल्पना मध्यवर्ती आहे: प्रत्येक गोष्ट plugin आहे. Model adapter, tool registry, session log, sandbox, scheduler आणि agent loop स्वतः हे सर्व plugins एका shared context मध्ये load होतात. यापैकी कोणतेही plugin बदलता येते. Plugins केवळ सजावट म्हणून जोडले जातील असा कोणताही privileged core नाही. Harness वापरून पाहण्यासारखा का आहे, हे यामुळे स्पष्ट होते. तसेच वास्तविक धोका नेमका कुठे आहे, हेही याच रचनेत दिसते.
Harness हे model नाही
Harness agent loop चालवतो. Reasoning दुसरीकडे असलेल्या model मध्ये होते. त्यामुळे API (application programming interface) key किंवा तुम्ही स्वतः host केलेल्या model endpoint चा पत्ता दिल्याशिवाय काहीही कार्य करत नाही.
हे UI मध्ये Settings आणि त्यानंतर Models अंतर्गत configure करता येते. Catalog मध्ये मोठ्या API providers साठी (DeepSeek, OpenAI, Anthropic) तयार cards आहेत. त्यामध्ये key paste करा. "Add a custom provider" हा उपयुक्त पर्याय आहे. त्यामध्ये provider ID, display name, base URL, API protocol आणि credential द्यावे लागतात. हा OpenAI-compatible protocol वापरतो. त्यामुळे तो protocol लागू करणारा कोणताही gateway किंवा local server वापरता येतो. Custom providers model list स्वतः भरण्यासाठी OpenAI-compatible GET /models endpoint देखील query करू शकतात.
यामुळे त्याच VPS वरील model कडे harness निर्देशित करता येतो. Ollama http://127.0.0.1:11434/v1/ येथे OpenAI-compatible API उपलब्ध करून देतो. API key field मध्ये कोणतीही string द्यावी लागते. Convention नुसार ollama वापरले जाते, कारण हे field आवश्यक आहे आणि नंतर त्याकडे दुर्लक्ष केले जाते. तुमच्या VPS मध्ये बसणारा लहान model agent चालवण्यासाठी पुरेसा आहे का, हा अधिक कठीण प्रश्न आहे. Local model server म्हणून Ollama आणि vLLM मधील फरक याचे उत्तर ठरवतो आणि त्यासाठी तुमच्या RAM पैकी किती भाग लागेल हे निश्चित करतो.
UI मध्ये टाइप केलेल्या keys पुन्हा दाखवल्या जात नाहीत. Harness त्या $DSH_HOME/.credentials.yaml मध्ये साठवतो आणि settings.yaml मध्ये फक्त credential reference ठेवतो. $DSH_HOME चे default मूल्य ~/.dsh आहे. त्या file कडे password file म्हणून पाहा, कारण ती तशीच आहे: ती वाचू शकणारी कोणतीही व्यक्ती तुमचा API budget खर्च करू शकते.
इंस्टॉल करण्यापूर्वी आवश्यक गोष्टी
- SSH प्रवेशासह Ubuntu 24.04 किंवा सध्याचे दुसरे Linux चालणारा VPS
- 22.x मालिकेतील Node.js 22.19 किंवा त्यानंतरची आवृत्ती, किंवा Node.js 24 आणि त्यावरील आवृत्ती. प्रोजेक्टची build आणि चाचणी याच आवृत्त्यांच्या आधारे केली जाते.
rootनसलेले सामान्य user account, कारण agent प्रक्रिया सुरू करणाऱ्या user च्या अधिकारांनी shell commands चालवतो.- plugins इंस्टॉल करायचे असल्यास PATH वर
pnpmउपलब्ध असणे आवश्यक आहे, कारण plugin command ते वापरून पुढील command चालवतो. - firewall आणि provider च्या स्वतंत्र network firewall दोन्हींवर port 3080 बंद असणे
Ubuntu चे स्वतःचे nodejs package harness ला आवश्यक असलेल्या आवृत्तीपेक्षा जुने आहे. त्यामुळे apt install nodejs वापरण्याऐवजी Node NodeSource किंवा nvm मधून इंस्टॉल करा. VPS नुकताच तयार केला असल्यास, इतर कोणतेही काम करण्यापूर्वी SSH hardening करणे यासाठी दहा मिनिटे देणे उपयुक्त ठरते, कारण तुम्ही वापरणार असलेला tunnel त्यामागील SSH server इतकाच सुरक्षित असतो.
VPS वर DeepSeek Harness स्थापित करा आणि एका आवृत्तीवर निश्चित करा
node --version
npx @deepseek-ai/dsh@0.1.0-rc.6 webnpx पॅकेज डाउनलोड करते आणि त्याची dsh बायनरी चालवते. web हे --profile web चे alias आहे. ते browser application सुरू करते आणि प्रक्रिया ज्या पत्त्यावर listening करत आहे तो दाखवते. Default http://127.0.0.1:3080 आहे.
आवृत्ती निश्चित करा. npx @deepseek-ai/dsh web चालवताना त्या क्षणी latest tag ज्या आवृत्तीकडे निर्देश करत असेल ती आवृत्ती resolve करते. प्रकल्पाने यापूर्वीच अनेक release candidates जारी केले आहेत आणि breaking changes येणार असल्याचे सांगितले आहे. 13 August 2026 रोजी latest ज्या आवृत्तीकडे निर्देश करत होते ती आवृत्ती 0.1.0-rc.6 आहे. निश्चित केलेल्या आवृत्तीमुळे आज तयार केलेला box पुढील महिन्यातही त्याच प्रकारे कार्य करतो. त्यामुळे upgrade हा अपघाताने आढळणारी गोष्ट न राहता तुम्ही घेतलेला निर्णय ठरतो.
दैनंदिन वापरासाठी प्रत्येक वेळी पुन्हा resolve करण्याऐवजी ते एकदाच स्थापित करा.
npm install -g @deepseek-ai/dsh@0.1.0-rc.6
dsh --profile web --helpही दुसरी ओळ चालवणे उपयुक्त आहे, कारण launcher आणि web app यांच्याकडे स्वतंत्र flag sets आहेत. dsh --help launcher चे स्वतःचे options दाखवते. dsh --profile web --help web application स्वीकारत असलेले flags दाखवते. यामध्ये --port, --host आणि पुन्हा वापरता येणारा --trusted-host समाविष्ट आहेत.
आता ते कोणत्या पत्त्यावर listening करत आहे याची खात्री करा.
ss -tlnp | grep 3080local address column मध्ये 127.0.0.1:3080 दिसले पाहिजे. त्याऐवजी 0.0.0.0:3080 दिसत असल्यास UI इंटरनेटवरून पोहोचण्याजोगा आहे. पुढील कोणतीही कृती करण्यापूर्वी प्रक्रिया थांबवा.
3080 पोर्ट कधीही सार्वजनिक का करू नये
Web server मध्ये authentication layer नाही. त्याच्या configuration मध्ये listen host आणि listen port दिलेले असतात; एवढाच त्याचा संपूर्ण access surface आहे. Non-loopback deployment साठी access control हे स्वतंत्र trusted-host setting द्वारे नियंत्रित केले जाते. ते login screen नाही.
आता त्या पोर्टच्या मागे काय आहे ते पाहा. Agent workspace मधील files संपादित करतो आणि shell commands चालवतो. तुमची provider credentials त्याच्याजवळ disk वर साठवलेली असतात. त्यामुळे उघडा 3080 पोर्ट म्हणजे chat interface असलेला remote shell आहे. तो सेवा सुरू करणाऱ्या user च्या अधिकारांनी चालतो आणि त्याच्याशी तुमची API key जोडलेली असते. यासाठी कोणालाही exploit ची गरज नाही. त्यांना फक्त पोर्ट नंबर हवा असतो. Host online झाल्यानंतर काही तासांत scanners हे पोर्ट नंबर शोधतात.
CLI (command line interface) देखील हेच मानते. 0.1.0-rc.6 पासून ते जाणीवपूर्वक --host 0.0.0.0 support करत नाही आणि सुरू होण्याऐवजी usage error देऊन बाहेर पडते. हा नकार सुरक्षा वैशिष्ट्य आहे. त्यामुळे तो काढून टाकणारा patch शोधू नका.
Tunnel योग्य नसल्यास आणखी दोन deployment पद्धती योग्य आहेत. Box private overlay network वर ठेवा. त्यामुळे त्याला फक्त तुमची स्वतःची devices route करू शकतील असा address मिळतो. self-hosted Headscale control server हेच उपलब्ध करून देते. किंवा port 3080 पर्यंत request पोहोचण्यापूर्वी authentication करणाऱ्या reverse proxy समोर ते ठेवा. उदाहरणार्थ, Authentik single sign-on server forward auth करू शकतो. त्यासमोर authentication नसलेला reverse proxy हा security control नाही. तो फक्त अधिक लांब URL आहे.
SSH tunnel द्वारे web UI वर प्रवेश करा
ही कमांड server वर नव्हे, तर आपल्या laptop वर चालवा.
ssh -N -L 3080:127.0.0.1:3080 you@your-server-L आपल्या laptop वर port 3080 उघडते आणि त्यावर येणारे सर्व connections encrypted SSH session मधून forward करते. 127.0.0.1:3080 हा भाग server वर resolve होतो. त्यामुळे connection loopback वरून harness पर्यंत पोहोचते, जणू आपण त्या machine वरच बसलेले आहात. -N मुळे remote shell सुरू होत नाही, कारण आपल्याला फक्त forwarding हवे आहे.
यानंतर आपल्या local browser मध्ये http://127.0.0.1:3080 उघडा. आपल्या laptop वर port 3080 आधीच वापरात असल्यास डावीकडील number बदला: ssh -N -L 3180:127.0.0.1:3080 you@your-server. त्यानंतर http://127.0.0.1:3180 उघडा. डावीकडील number local आहे आणि उजवीकडील number server वरील आहे. त्यामुळे फक्त डावीकडील number बदलायचा आहे.
ते ~/.ssh/config मध्ये जतन करा आणि ते पुन्हा टाइप करणे थांबवा.
Host dsh
HostName 203.0.113.10
User deploy
IdentityFile ~/.ssh/id_ed25519
LocalForward 3080 127.0.0.1:3080यानंतर ssh -N dsh tunnel सुरू करते. Browser मध्ये connection refused असा संदेश आल्यास tunnel सुरू असू शकतो; मात्र दुसऱ्या बाजूला काहीही listening नसते. कारण harness सुरू आहे किंवा नाही याची पर्वा न करता SSH port forward करते. ss command वापरून server तपासा.
तुम्ही logout केल्यानंतर harness चालू ठेवा
npx command तुमच्या shell सोबत बंद होतो. systemd user service सुरू राहते आणि crash किंवा reboot नंतर harness पुन्हा सुरू करते.
loginctl enable-linger $USER
mkdir -p ~/.config/systemd/user
command -v dshenable-linger महत्त्वाचे आहे, कारण तुमचे शेवटचे session संपल्यानंतर user services सामान्यतः बंद होतात. त्यामुळे enable-linger शिवाय tunnel बंद करताच harness बंद होतो. command -v dsh ने दाखवलेला absolute path घ्या आणि तो unit मध्ये ठेवा, कारण systemd तुमचा login shell तयार करत असलेला PATH शोधत नाही.
[Unit]
Description=DeepSeek Harness web UI
After=network-online.target
[Service]
Type=simple
WorkingDirectory=%h/projects/site
ExecStart=/usr/local/bin/dsh web
Restart=on-failure
RestartSec=5
[Install]
WantedBy=default.targetWorkingDirectory केवळ स्वरूपासाठी नाही. dsh process invoking directory चा default filesystem location म्हणून वापर करतो. त्यामुळे चुकीच्या ठिकाणी सुरू केलेल्या service मुळे agent ला चुकीचे default workspace मिळते. Workspace तुम्ही UI मध्ये तरीही निवडू शकता.
systemctl --user daemon-reload
systemctl --user enable --now dsh
systemctl --user status dshसुरू होण्यास नकार देणाऱ्या unit मध्ये जवळजवळ नेहमी चुकीचा ExecStart path किंवा binary ला न स्वीकारता येणारी Node version असते. कोणती अडचण आहे हे journalctl --user -u dsh -n 50 सांगते. हीच पद्धत VPS वर कोणताही coding agent चालू ठेवण्यासाठी लागू होते आणि failure modes सारखेच असतात.
प्लगइनला काय करण्याची अनुमती असते
प्लगइन हे असे मॉड्यूल असते जे shared context मध्ये सेवा, typed events आणि पूर्ववत करता येणारे परिणाम उपलब्ध करून देते. खालील extension points बारकाईने समजून घेणे महत्त्वाचे आहे:
ctx.llmवर model provider नोंदणी करणेctx.toolsवर model-facing tools जोडणेctx.shellमागील shell backend उपलब्ध करून देणेctx.fsमागील filesystem access किंवा policy उपलब्ध करून देणेctx.commandsवर human commands नोंदणी करणेctx.jobsद्वारे background work चालवणेctx.sandboxbackend वापरून निर्माण केलेल्या processes भोवती wrapper लावणेagent/*आणिtools/*events द्वारे requests आणि tool calls मध्ये हस्तक्षेप करणे- durable session state वाढवणे
ctx.agentsद्वारे UI नियंत्रित करणे
ही यादी आक्रमणकर्त्याच्या दृष्टीने वाचा. प्लगइन filesystem layer आणि shell layer पुरवू शकते. तसेच मॉडेलने केलेल्या प्रत्येक tool call च्या मध्ये ते कार्य करू शकते. प्लगइन आणि या extension points यांच्या मध्ये कोणताही permission dialog नसतो, कारण प्लगइन हा इतर सर्व घटकांसोबत त्याच process मध्ये लोड होणारा सामान्य Node code असतो. प्लगइन install करणे म्हणजे तुमच्या agent च्या permissions सह अपरिचित व्यक्तीचा code चालवणे होय. तुमच्या agent चे permissions म्हणजे तुमच्या Unix user चे permissions.
तुम्ही VPS वरील agent शी MCP server जोडता, तेव्हा घेतलेला हा त्याच प्रकारचा trust decision आहे; येथे MCP म्हणजे model context protocol. म्हणूनच VPS वर coding agent सुरक्षितपणे चालवणे हे मॉडेलपासून नव्हे, तर agent कोणत्या account अंतर्गत चालतो यापासून सुरू होते. तसेच npm supply chain attacks सर्व्हरवर इतके गंभीर परिणाम का करतात हेही यामुळे स्पष्ट होते: install step हाच breach असतो आणि कोणताही prompt दिसत नाही.
प्लगइन कुठून येतात
प्लगइन profile मध्ये असतात. Profile म्हणजे $DSH_HOME अंतर्गत साठवलेली नाव असलेली composition आहे. $DSH_HOME चे default मूल्य ~/.dsh आहे. प्रत्येक profile directory मध्ये ते install करणारे out-of-tree plugins असतात. CLI तुमचे arguments थेट pnpm कडे forward करून त्यांचे व्यवस्थापन करते. यासाठी profile directory working directory म्हणून वापरली जाते.
dsh plugin --profile web add github:deepseek-harness/turtle-ui
dsh plugin --profile web remove turtle-uiArguments pnpm पर्यंत कोणताही बदल न होता पोहोचत असल्यामुळे add, remove, update आणि why कोणत्याही pnpm project प्रमाणेच कार्य करतात. Plugin हा npm package किंवा GitHub reference असू शकतो. pnpm आधीच PATH वर उपलब्ध असणे आवश्यक आहे. Node 22 आणि त्यानंतरच्या आवृत्त्यांमध्ये corepack enable pnpm तेथे ठेवते.
Discovery साठी GitHub topic वापरला जातो. Plugin authors त्यांच्या repository ला dsh-plugin topic जोडतात. उपलब्ध plugins शोधण्यासाठी तो topic browse करा. Topic म्हणजे author स्वतःच्या repository ला लावतो ते label. त्याचे review कोणी करत नाही आणि त्यावर कोणी signature करत नाही. Topic page मध्ये stars नुसार ranking होते. Stars लोकप्रियता दर्शवतात, सुरक्षितता नाही.
चार सवयींमुळे हे व्यवस्थापित करणे सोपे राहते. Install करण्यापूर्वी source वाचा, कारण बहुतेक plugins दहा मिनिटांत वाचून समजण्याइतके लहान असतात. Branch track करण्याऐवजी exact version किंवा commit pin करा. काहीही अन्य मालकीचे नसलेल्या user कडून harness चालवा. हा harness अशा VPS वर चालवा, जो आवश्यक असल्यास पुन्हा build करण्याची तुमची तयारी असेल. Agent साठी स्वतंत्र API key आणि स्वतंत्र spending limit द्या. Production services वापरत असलेल्या key पासून ती वेगळी ठेवा.
एक design निवडण्यापूर्वी designs ची तुलना करायची असल्यास, Omnigent multi-agent harness हीच समस्या वेगळ्या structure ने सोडवते. Plugins वापरात आल्यानंतर त्यातील trade-offs स्पष्ट दिसतात.
प्रथम कोणती गोष्ट बिघडते
Node खूप जुने आहे. हा प्रकल्प Node 22.19 आणि 22.x मालिकेतील त्यानंतरच्या आवृत्त्या किंवा Node 24 आणि त्यावरील आवृत्त्यांना लक्ष्य करतो; CI मध्ये त्यांची चाचणी केली जाते. जुना runtime startup वेळी अपयशी ठरतो, कारण कोडमध्ये त्याच्याकडे उपलब्ध नसलेली syntax आणि APIs वापरलेली असतात. इतर काहीही करण्यापूर्वी node --version चालवा.
Port 3080 आधीच वापरात आहे. दुसरा harness, मागे राहिलेली process किंवा 3080 वापरणारे दुसरे application यापैकी कोणतेही कारण असू शकते. ss -tlnp | grep 3080 वापरून ते शोधा. त्यानंतर ते थांबवा किंवा dsh web --port 3180 वापरून harness दुसऱ्या ठिकाणी सुरू करा. --port web app साठी आहे, त्यामुळे ते web नंतर वापरावे.
Browser tunnel मधून connect होऊ शकत नाही. तुम्ही server च्या public address वर नव्हे, तर 127.0.0.1 वर browse केले आहे याची खात्री करा, कारण forwarded port फक्त तुमच्या laptop वर उपलब्ध असतो. त्यानंतर harness server वर listening करत आहे का ते तपासा. SSH दूरच्या टोकाला काहीही उत्तर देत नसले तरी forward तयार करते.
dsh plugin त्वरित अपयशी ठरते. हा command pnpm भोवतीचा wrapper आहे. त्यामुळे pnpm binary उपलब्ध नसल्यास कोणतेही plugin काम सुरू होण्यापूर्वीच command थांबतो.
Agent ला तुमचा project दिसत नाही. Workspace चे default process ज्या directory मधून सुरू झाले त्या directory वर असते. त्यामुळे एखाद्या unit चे WorkingDirectory तुमचे home directory असल्यास agent ला तुमचे home directory मिळते. UI मध्ये workspace निवडा किंवा unit दुरुस्त करून ते reload करा.
FAQ
DeepSeek Harness वेब UI port 3080 वर सार्वजनिक करणे सुरक्षित आहे का?
नाही. वेब सर्व्हरमध्ये स्वतःची login व्यवस्था नाही. त्यामागील agent प्रक्रिया सुरू करणाऱ्या user च्या अधिकारांनी files संपादित करतो आणि shell commands चालवतो. तुमची provider API key त्याच disk वर साठवली जाते. Listener 127.0.0.1 वरच ठेवा आणि SSH tunnel द्वारे त्याच्यापर्यंत पोहोचा. Private overlay network किंवा port पर्यंत पोहोचण्यापूर्वी प्रत्येक request चे authentication करणारा reverse proxy देखील वापरता येतो. Version 0.1.0-rc.6 पासून CLI --host 0.0.0.0 नाकारतो आणि usage error सह बंद होतो. यावरून authors या पद्धतीबद्दल काय मत ठेवतात ते स्पष्ट होते.
मला DeepSeek API key आवश्यक आहे का, की local model वापरता येईल?
दोन्हीपैकी कोणताही पर्याय चालतो, कारण harness हे model नसून runtime आहे. Settings आणि त्यानंतर Models मध्ये जाऊन catalog provider card मध्ये key paste करता येते. किंवा "Add a custom provider" निवडून OpenAI-compatible protocol स्वीकारणारा base URL देता येतो. Local Ollama server http://127.0.0.1:11434/v1/ वर प्रतिसाद देतो आणि API key field मध्ये कोणतीही string स्वीकारतो. Keys $DSH_HOME/.credentials.yaml मध्ये साठवल्या जातात. त्याचे default मूल्य ~/.dsh/.credentials.yaml आहे.
DeepSeek Harness plugin install केल्यावर त्या plugin ला प्रत्यक्षात काय मिळते?
Harness चालवणाऱ्या account चे permissions. Plugin हा त्याच process मध्ये load केलेला Node code असतो. त्याच्या extension points मध्ये shell backend, filesystem layer, tool registry आणि प्रत्येक tool call भोवतीचे events यांचा समावेश असतो. Plugin स्वतः sandbox पुरवत नसेल, तर या interfaces पासून plugin ला वेगळे ठेवणारी कोणतीही sandbox व्यवस्था नसते. Install करण्यापूर्वी source वाचा. Harness अशा user म्हणून चालवा ज्याच्या मालकीच्या कोणत्याही महत्त्वाच्या वस्तू नाहीत.
मी कोणती version install करावी? ती पुढेही चालू राहील का?
अचूक version install करा. उदाहरणार्थ, npx @deepseek-ai/dsh@0.1.0-rc.6 web. 13 August 2026 रोजी latest tag याच version कडे निर्देश करत होता. Project स्वतःला developer preview म्हणतो आणि compatibility-breaking changes अपेक्षित असल्याचे सांगतो. त्यामुळे unpinned command एका दिवसापासून दुसऱ्या दिवसापर्यंत वेगळ्या प्रकारे वागू शकतो. Upgrade करण्यापूर्वी repository तपासा. Version 0 ने सुरू असताना config keys आणि plugin interfaces बदलण्याची शक्यता गृहीत धरा.