[{"data":1,"prerenderedAt":691},["ShallowReactive",2],{"doc-\u002Fdocs\u002Fworkstations\u002Fmanagement":3},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"body":10,"_type":685,"_id":686,"_source":687,"_file":688,"_stem":689,"_extension":690},"\u002Fworkstations\u002Fmanagement","workstations",false,"","Lifecycle & Storage Management","Managing workstation states, live resource reallocation, host folder browsing, and safe storage lifecycles.",{"type":11,"children":12,"toc":672},"root",[13,21,34,38,45,50,226,229,235,240,343,346,352,364,373,380,464,467,473,483,491,497,508,554,557,563,576],{"type":14,"tag":15,"props":16,"children":18},"element","h1",{"id":17},"lifecycle-storage-management",[19],{"type":20,"value":8},"text",{"type":14,"tag":22,"props":23,"children":24},"p",{},[25,32],{"type":14,"tag":26,"props":27,"children":29},"code",{"className":28},[],[30],{"type":20,"value":31},"webtop-manage",{"type":20,"value":33}," provides comprehensive lifecycle management for containerized workstations, allowing developers to dynamically adjust hardware limits, browse host directories, and manage persistent storage.",{"type":14,"tag":35,"props":36,"children":37},"hr",{},[],{"type":14,"tag":39,"props":40,"children":42},"h2",{"id":41},"workstation-power-controls",[43],{"type":20,"value":44},"⚡ Workstation Power Controls",{"type":14,"tag":22,"props":46,"children":47},{},[48],{"type":20,"value":49},"From the main dashboard card, you can perform instant state modifications:",{"type":14,"tag":51,"props":52,"children":53},"table",{},[54,79],{"type":14,"tag":55,"props":56,"children":57},"thead",{},[58],{"type":14,"tag":59,"props":60,"children":61},"tr",{},[62,69,74],{"type":14,"tag":63,"props":64,"children":66},"th",{"align":65},"left",[67],{"type":20,"value":68},"Action",{"type":14,"tag":63,"props":70,"children":71},{"align":65},[72],{"type":20,"value":73},"API Route",{"type":14,"tag":63,"props":75,"children":76},{"align":65},[77],{"type":20,"value":78},"Description",{"type":14,"tag":80,"props":81,"children":82},"tbody",{},[83,110,151,176,201],{"type":14,"tag":59,"props":84,"children":85},{},[86,96,105],{"type":14,"tag":87,"props":88,"children":89},"td",{"align":65},[90],{"type":14,"tag":91,"props":92,"children":93},"strong",{},[94],{"type":20,"value":95},"Start",{"type":14,"tag":87,"props":97,"children":98},{"align":65},[99],{"type":14,"tag":26,"props":100,"children":102},{"className":101},[],[103],{"type":20,"value":104},"POST \u002Fapi\u002Finstances\u002F{id}\u002Fstart",{"type":14,"tag":87,"props":106,"children":107},{"align":65},[108],{"type":20,"value":109},"Boots the container and binds host ports.",{"type":14,"tag":59,"props":111,"children":112},{},[113,121,130],{"type":14,"tag":87,"props":114,"children":115},{"align":65},[116],{"type":14,"tag":91,"props":117,"children":118},{},[119],{"type":20,"value":120},"Stop",{"type":14,"tag":87,"props":122,"children":123},{"align":65},[124],{"type":14,"tag":26,"props":125,"children":127},{"className":126},[],[128],{"type":20,"value":129},"POST \u002Fapi\u002Finstances\u002F{id}\u002Fstop",{"type":14,"tag":87,"props":131,"children":132},{"align":65},[133,135,141,143,149],{"type":20,"value":134},"Sends a graceful ",{"type":14,"tag":26,"props":136,"children":138},{"className":137},[],[139],{"type":20,"value":140},"SIGTERM",{"type":20,"value":142}," (10s timeout) followed by ",{"type":14,"tag":26,"props":144,"children":146},{"className":145},[],[147],{"type":20,"value":148},"SIGKILL",{"type":20,"value":150},".",{"type":14,"tag":59,"props":152,"children":153},{},[154,162,171],{"type":14,"tag":87,"props":155,"children":156},{"align":65},[157],{"type":14,"tag":91,"props":158,"children":159},{},[160],{"type":20,"value":161},"Restart",{"type":14,"tag":87,"props":163,"children":164},{"align":65},[165],{"type":14,"tag":26,"props":166,"children":168},{"className":167},[],[169],{"type":20,"value":170},"POST \u002Fapi\u002Finstances\u002F{id}\u002Frestart",{"type":14,"tag":87,"props":172,"children":173},{"align":65},[174],{"type":20,"value":175},"Restarts the container with zero configuration changes.",{"type":14,"tag":59,"props":177,"children":178},{},[179,187,196],{"type":14,"tag":87,"props":180,"children":181},{"align":65},[182],{"type":14,"tag":91,"props":183,"children":184},{},[185],{"type":20,"value":186},"Pause",{"type":14,"tag":87,"props":188,"children":189},{"align":65},[190],{"type":14,"tag":26,"props":191,"children":193},{"className":192},[],[194],{"type":20,"value":195},"POST \u002Fapi\u002Finstances\u002F{id}\u002Fpause",{"type":14,"tag":87,"props":197,"children":198},{"align":65},[199],{"type":20,"value":200},"Freezes container cgroups, freeing 100% CPU cycles while keeping state in RAM.",{"type":14,"tag":59,"props":202,"children":203},{},[204,212,221],{"type":14,"tag":87,"props":205,"children":206},{"align":65},[207],{"type":14,"tag":91,"props":208,"children":209},{},[210],{"type":20,"value":211},"Unpause",{"type":14,"tag":87,"props":213,"children":214},{"align":65},[215],{"type":14,"tag":26,"props":216,"children":218},{"className":217},[],[219],{"type":20,"value":220},"POST \u002Fapi\u002Finstances\u002F{id}\u002Funpause",{"type":14,"tag":87,"props":222,"children":223},{"align":65},[224],{"type":20,"value":225},"Resumes frozen container processes instantly.",{"type":14,"tag":35,"props":227,"children":228},{},[],{"type":14,"tag":39,"props":230,"children":232},{"id":231},"live-zero-downtime-resource-allocation",[233],{"type":20,"value":234},"⚡ Live Zero-Downtime Resource Allocation",{"type":14,"tag":22,"props":236,"children":237},{},[238],{"type":20,"value":239},"You can live-adjust CPU and Memory limits on a running workstation without restarting or disconnecting active desktop sessions:",{"type":14,"tag":241,"props":242,"children":243},"ol",{},[244,257,323],{"type":14,"tag":245,"props":246,"children":247},"li",{},[248,250,255],{"type":20,"value":249},"Click the ",{"type":14,"tag":91,"props":251,"children":252},{},[253],{"type":20,"value":254},"Settings & Credentials",{"type":20,"value":256}," icon (⚙️) on any instance card.",{"type":14,"tag":245,"props":258,"children":259},{},[260,262,267,269],{"type":20,"value":261},"Under ",{"type":14,"tag":91,"props":263,"children":264},{},[265],{"type":20,"value":266},"Live Resource Limits",{"type":20,"value":268},", modify:\n",{"type":14,"tag":270,"props":271,"children":272},"ul",{},[273,299],{"type":14,"tag":245,"props":274,"children":275},{},[276,281,283,289,291,297],{"type":14,"tag":91,"props":277,"children":278},{},[279],{"type":20,"value":280},"CPU Cores",{"type":20,"value":282},": Quota in fractional cores (e.g. ",{"type":14,"tag":26,"props":284,"children":286},{"className":285},[],[287],{"type":20,"value":288},"2.0",{"type":20,"value":290}," cores, ",{"type":14,"tag":26,"props":292,"children":294},{"className":293},[],[295],{"type":20,"value":296},"0",{"type":20,"value":298}," = Uncapped).",{"type":14,"tag":245,"props":300,"children":301},{},[302,307,309,315,317,322],{"type":14,"tag":91,"props":303,"children":304},{},[305],{"type":20,"value":306},"Memory Limit",{"type":20,"value":308},": Allocation in megabytes (e.g. ",{"type":14,"tag":26,"props":310,"children":312},{"className":311},[],[313],{"type":20,"value":314},"4096MB",{"type":20,"value":316},", ",{"type":14,"tag":26,"props":318,"children":320},{"className":319},[],[321],{"type":20,"value":296},{"type":20,"value":298},{"type":14,"tag":245,"props":324,"children":325},{},[326,328,333,335,341],{"type":20,"value":327},"Click ",{"type":14,"tag":91,"props":329,"children":330},{},[331],{"type":20,"value":332},"Apply Live Resource Allocation",{"type":20,"value":334},". The daemon calls Docker's cgroup update API (",{"type":14,"tag":26,"props":336,"children":338},{"className":337},[],[339],{"type":20,"value":340},"POST \u002Fapi\u002Finstances\u002F{id}\u002Fresources",{"type":20,"value":342},") immediately.",{"type":14,"tag":35,"props":344,"children":345},{},[],{"type":14,"tag":39,"props":347,"children":349},{"id":348},"visual-host-directory-browser",[350],{"type":20,"value":351},"📁 Visual Host Directory Browser",{"type":14,"tag":22,"props":353,"children":354},{},[355,357,362],{"type":20,"value":356},"When attaching workspace folders or bind mounts, click ",{"type":14,"tag":91,"props":358,"children":359},{},[360],{"type":20,"value":361},"Browse",{"type":20,"value":363}," to open the interactive filesystem browser:",{"type":14,"tag":365,"props":366,"children":368},"pre",{"code":367},"┌─────────────────────────────────────────────────────────────┐\n│ Browse Host Directory                                       │\n│ [🖥️ Desktop] [📁 Documents] [💻 C: Drive] [👤 User]          │\n├─────────────────────────────────────────────────────────────┤\n│ [⬆️ Up]  \u002Fworkspace\u002Fprojects\u002Ffullstack-app                  │\n├─────────────────────────────────────────────────────────────┤\n│ 📁 .git\u002F                                                    │\n│ 📁 src\u002F                                                     │\n│ 📁 tests\u002F                                                   │\n│ 📄 package.json                                             │\n│ 📄 README.md                                                │\n├─────────────────────────────────────────────────────────────┤\n│ [Cancel]                              [Select This Folder]  │\n└─────────────────────────────────────────────────────────────┘\n",[369],{"type":14,"tag":26,"props":370,"children":371},{"__ignoreMap":7},[372],{"type":20,"value":367},{"type":14,"tag":374,"props":375,"children":377},"h3",{"id":376},"security-path-containment",[378],{"type":20,"value":379},"Security & Path Containment",{"type":14,"tag":270,"props":381,"children":382},{},[383,395],{"type":14,"tag":245,"props":384,"children":385},{},[386,388,394],{"type":20,"value":387},"The gateway automatically sanitizes input using ",{"type":14,"tag":26,"props":389,"children":391},{"className":390},[],[392],{"type":20,"value":393},"filepath.Clean",{"type":20,"value":150},{"type":14,"tag":245,"props":396,"children":397},{},[398,400,411,413,419,420,426,427,433,434,440,441,447,448,454,456,462],{"type":20,"value":399},"Sensitive operating system structures (",{"type":14,"tag":401,"props":402,"children":404},"a",{"href":403},"\u002Fdocs\u002Fsecurity\u002Fsandboxing-and-hardening",[405],{"type":14,"tag":26,"props":406,"children":408},{"className":407},[],[409],{"type":20,"value":410},"IsForbiddenPath",{"type":20,"value":412},") like ",{"type":14,"tag":26,"props":414,"children":416},{"className":415},[],[417],{"type":20,"value":418},"\u002Fetc",{"type":20,"value":316},{"type":14,"tag":26,"props":421,"children":423},{"className":422},[],[424],{"type":20,"value":425},"\u002Fproc",{"type":20,"value":316},{"type":14,"tag":26,"props":428,"children":430},{"className":429},[],[431],{"type":20,"value":432},"\u002Fsys",{"type":20,"value":316},{"type":14,"tag":26,"props":435,"children":437},{"className":436},[],[438],{"type":20,"value":439},"\u002Froot\u002F.ssh",{"type":20,"value":316},{"type":14,"tag":26,"props":442,"children":444},{"className":443},[],[445],{"type":20,"value":446},"id_rsa",{"type":20,"value":316},{"type":14,"tag":26,"props":449,"children":451},{"className":450},[],[452],{"type":20,"value":453},"docker.sock",{"type":20,"value":455},", and Windows ",{"type":14,"tag":26,"props":457,"children":459},{"className":458},[],[460],{"type":20,"value":461},"System32",{"type":20,"value":463}," are strictly restricted from navigation and mounting.",{"type":14,"tag":35,"props":465,"children":466},{},[],{"type":14,"tag":39,"props":468,"children":470},{"id":469},"storage-architecture-mounts",[471],{"type":20,"value":472},"💾 Storage Architecture & Mounts",{"type":14,"tag":22,"props":474,"children":475},{},[476,481],{"type":14,"tag":26,"props":477,"children":479},{"className":478},[],[480],{"type":20,"value":31},{"type":20,"value":482}," uses a two-tier storage layout to separate system configuration from project data:",{"type":14,"tag":365,"props":484,"children":486},{"code":485},"┌─────────────────────────────────────────────────────────────────┐\n│ Workstation Container                                           │\n│                                                                 │\n│  \u002Fconfig           ──► Named Volume: workstation-\u003Cname>-config   │\n│                        (User profile, XFCE\u002FKDE settings, fonts) │\n│                                                                 │\n│  \u002Fconfig\u002Fworkspace ──► Named Volume: workstation-\u003Cname>-data     │\n│                        OR Host Folder: \u002Fpath\u002Fto\u002Fhost\u002Fproject    │\n└─────────────────────────────────────────────────────────────────┘\n",[487],{"type":14,"tag":26,"props":488,"children":489},{"__ignoreMap":7},[490],{"type":20,"value":485},{"type":14,"tag":374,"props":492,"children":494},{"id":493},"attaching-additional-storage",[495],{"type":20,"value":496},"Attaching Additional Storage",{"type":14,"tag":22,"props":498,"children":499},{},[500,502,506],{"type":20,"value":501},"Open the ",{"type":14,"tag":91,"props":503,"children":504},{},[505],{"type":20,"value":254},{"type":20,"value":507}," dialog to dynamically mount:",{"type":14,"tag":270,"props":509,"children":510},{},[511,521],{"type":14,"tag":245,"props":512,"children":513},{},[514,519],{"type":14,"tag":91,"props":515,"children":516},{},[517],{"type":20,"value":518},"Existing Docker Volumes",{"type":20,"value":520},": Pick from auto-detected Docker volumes on the host.",{"type":14,"tag":245,"props":522,"children":523},{},[524,529,531,537,539,545,547,552],{"type":14,"tag":91,"props":525,"children":526},{},[527],{"type":20,"value":528},"Host Directory Binds",{"type":20,"value":530},": Map any host path to custom container mount points (e.g. ",{"type":14,"tag":26,"props":532,"children":534},{"className":533},[],[535],{"type":20,"value":536},"\u002Fmnt\u002Fdatasets",{"type":20,"value":538}," or ",{"type":14,"tag":26,"props":540,"children":542},{"className":541},[],[543],{"type":20,"value":544},"\u002Fconfig\u002Fworkspace\u002Frepo",{"type":20,"value":546},") with optional ",{"type":14,"tag":91,"props":548,"children":549},{},[550],{"type":20,"value":551},"Read-Only",{"type":20,"value":553}," enforcement.",{"type":14,"tag":35,"props":555,"children":556},{},[],{"type":14,"tag":39,"props":558,"children":560},{"id":559},"️-safe-deletion-lifecycle",[561],{"type":20,"value":562},"🗑️ Safe Deletion Lifecycle",{"type":14,"tag":22,"props":564,"children":565},{},[566,568,574],{"type":20,"value":567},"When deleting an instance (",{"type":14,"tag":26,"props":569,"children":571},{"className":570},[],[572],{"type":20,"value":573},"DELETE \u002Fapi\u002Finstances\u002F{id}",{"type":20,"value":575},"):",{"type":14,"tag":270,"props":577,"children":578},{},[579,604,637,654],{"type":14,"tag":245,"props":580,"children":581},{},[582,595,597,602],{"type":14,"tag":91,"props":583,"children":584},{},[585,587,593],{"type":20,"value":586},"Default Deletion (",{"type":14,"tag":26,"props":588,"children":590},{"className":589},[],[591],{"type":20,"value":592},"delete_volume=false",{"type":20,"value":594},")",{"type":20,"value":596},":\nDestroys the container and removes its dedicated bridge network, but ",{"type":14,"tag":91,"props":598,"children":599},{},[600],{"type":20,"value":601},"preserves all named volumes",{"type":20,"value":603}," on the host. If you provision an instance with the same name later, your profile and workspace remain intact.",{"type":14,"tag":245,"props":605,"children":606},{},[607,619,621,627,629,635],{"type":14,"tag":91,"props":608,"children":609},{},[610,612,618],{"type":20,"value":611},"Wipe Data Deletion (",{"type":14,"tag":26,"props":613,"children":615},{"className":614},[],[616],{"type":20,"value":617},"delete_volume=true",{"type":20,"value":594},{"type":20,"value":620},":\nPermanently deletes the persistent Docker volumes (",{"type":14,"tag":26,"props":622,"children":624},{"className":623},[],[625],{"type":20,"value":626},"workstation-\u003Cname>-config",{"type":20,"value":628}," and ",{"type":14,"tag":26,"props":630,"children":632},{"className":631},[],[633],{"type":20,"value":634},"workstation-\u003Cname>-data",{"type":20,"value":636},").",{"type":14,"tag":245,"props":638,"children":639},{},[640,645,647,652],{"type":14,"tag":91,"props":641,"children":642},{},[643],{"type":20,"value":644},"Host Bind Protection",{"type":20,"value":646},":\nHost directory bind mounts are ",{"type":14,"tag":91,"props":648,"children":649},{},[650],{"type":20,"value":651},"never",{"type":20,"value":653}," deleted from your host hard drive upon container deletion; only the container's mount pointer is removed.",{"type":14,"tag":245,"props":655,"children":656},{},[657,662,664,670],{"type":14,"tag":91,"props":658,"children":659},{},[660],{"type":20,"value":661},"Orphan Network Sweeps",{"type":20,"value":663},":\nAny dedicated bridge network labeled ",{"type":14,"tag":26,"props":665,"children":667},{"className":666},[],[668],{"type":20,"value":669},"webtop.owner: \u003Cname>",{"type":20,"value":671}," is destroyed upon deletion, leaving zero orphan Docker networks behind.",{"title":7,"searchDepth":673,"depth":673,"links":674},3,[675,677,678,681,684],{"id":41,"depth":676,"text":44},2,{"id":231,"depth":676,"text":234},{"id":348,"depth":676,"text":351,"children":679},[680],{"id":376,"depth":673,"text":379},{"id":469,"depth":676,"text":472,"children":682},[683],{"id":493,"depth":673,"text":496},{"id":559,"depth":676,"text":562},"markdown","content:2.workstations:2.management.md","content","2.workstations\u002F2.management.md","2.workstations\u002F2.management","md",1787169590133]