{"id":6733,"date":"2026-07-28T11:00:43","date_gmt":"2026-07-28T07:30:43","guid":{"rendered":"https:\/\/parmin.cloud\/blog\/?p=6733"},"modified":"2026-07-28T11:00:43","modified_gmt":"2026-07-28T07:30:43","slug":"%d8%a2%d9%85%d9%88%d8%b2%d8%b4-%d8%a7%d8%ac%d8%b1%d8%a7%db%8c-%d8%a8%d8%b1%d9%86%d8%a7%d9%85%d9%87%d9%87%d8%a7%db%8c-%da%af%d8%b1%d8%a7%d9%81%db%8c%da%a9%db%8c-gui-%d8%af%d8%b1-%d8%af%d8%a7","status":"publish","type":"post","link":"https:\/\/parmin.cloud\/blog\/%d8%a2%d9%85%d9%88%d8%b2%d8%b4-%d8%a7%d8%ac%d8%b1%d8%a7%db%8c-%d8%a8%d8%b1%d9%86%d8%a7%d9%85%d9%87%d9%87%d8%a7%db%8c-%da%af%d8%b1%d8%a7%d9%81%db%8c%da%a9%db%8c-gui-%d8%af%d8%b1-%d8%af%d8%a7\/","title":{"rendered":"\u0622\u0645\u0648\u0632\u0634 \u0627\u062c\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc \u06af\u0631\u0627\u0641\u06cc\u06a9\u06cc (GUI) \u062f\u0631 \u062f\u0627\u06a9\u0631 \u0648 \u062f\u0633\u062a\u0631\u0633\u06cc \u0627\u0632 \u0631\u0627\u0647 \u062f\u0648\u0631 \u0628\u0627 Caddy \u062f\u0631 \u0627\u0648\u0628\u0648\u0646\u062a\u0648 \u06f2\u06f4.\u06f0\u06f4"},"content":{"rendered":"<p data-path-to-node=\"4\">\u0628\u0627 \u0648\u062c\u0648\u062f \u0631\u0634\u062f \u0631\u0648\u0632\u0627\u0641\u0632\u0648\u0646 \u0633\u0631\u0648\u06cc\u0633\u200c\u0647\u0627\u06cc \u0627\u0628\u0631\u06cc\u060c \u0647\u0646\u0648\u0632 \u0647\u0645 \u0646\u06cc\u0627\u0632 \u0628\u0647 \u0627\u062c\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc \u0646\u06cc\u062a\u06cc\u0648 (Native) \u0648 \u062f\u0633\u06a9\u062a\u0627\u067e \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f. \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u062a\u0631\u06a9\u06cc\u0628 <b data-path-to-node=\"4\" data-index-in-node=\"125\">noVNC<\/b> \u0648 <b data-path-to-node=\"4\" data-index-in-node=\"133\">TigerVNC<\/b>\u060c \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0646\u0631\u0645\u200c\u0627\u0641\u0632\u0627\u0631\u0647\u0627\u06cc \u062f\u0633\u06a9\u062a\u0627\u067e \u0631\u0627 \u062f\u0627\u062e\u0644 \u06cc\u06a9 \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 \u062f\u0627\u06a9\u0631 \u0627\u062c\u0631\u0627 \u06a9\u0631\u062f\u0647 \u0648 \u062a\u0646\u0647\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06cc\u06a9 \u0645\u0631\u0648\u0631\u06af\u0631 \u0648\u0628 \u0628\u0647 \u0622\u0646\u200c\u0647\u0627 \u062f\u0633\u062a\u0631\u0633\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f. \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0628\u0647 \u0634\u0645\u0627 \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc\u200c\u062f\u0647\u062f \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc \u0633\u0646\u06af\u06cc\u0646 \u0631\u0627 \u0631\u0648\u06cc \u06cc\u06a9 \u0633\u0631\u0648\u0631 \u0627\u0628\u0631\u06cc \u0628\u0627 \u0645\u0646\u0627\u0628\u0639 \u0628\u0627\u0644\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f \u0648 \u0627\u0632 \u0647\u0631 \u062f\u0633\u062a\u06af\u0627\u0647\u06cc (\u062d\u062a\u06cc \u0645\u0648\u0628\u0627\u06cc\u0644 \u06cc\u0627 \u062a\u0628\u0644\u062a) \u0628\u0647 \u0622\u0646 \u0645\u062a\u0635\u0644 \u0634\u0648\u06cc\u062f.<\/p>\n<p data-path-to-node=\"5\">\u062f\u0631 \u0627\u06cc\u0646 \u0622\u0645\u0648\u0632\u0634\u060c \u0642\u0635\u062f \u062f\u0627\u0631\u06cc\u0645 \u0646\u0631\u0645\u200c\u0627\u0641\u0632\u0627\u0631 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0627\u06cc\u0645\u06cc\u0644 <b data-path-to-node=\"5\" data-index-in-node=\"47\">Mozilla Thunderbird<\/b> \u0631\u0627 \u062f\u0627\u062e\u0644 \u062f\u0627\u06a9\u0631 \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631\u06cc \u06a9\u0646\u06cc\u0645. \u0633\u067e\u0633 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0648\u0628\u200c\u0633\u0631\u0648\u0631 <b data-path-to-node=\"5\" data-index-in-node=\"121\">Caddy<\/b>\u060c \u0627\u0645\u0646\u06cc\u062a \u0622\u0646 \u0631\u0627 \u062a\u0623\u0645\u06cc\u0646 \u06a9\u0631\u062f\u0647 \u0648 \u062f\u0633\u062a\u0631\u0633\u06cc \u062a\u062d\u062a \u0648\u0628 \u0648 WebDAV \u0631\u0627 \u0628\u0631\u0627\u06cc \u0622\u0646 \u0641\u0631\u0627\u0647\u0645 \u0633\u0627\u0632\u06cc\u0645.<\/p>\n<h2 data-path-to-node=\"7\">\u067e\u06cc\u0634\u200c\u0646\u06cc\u0627\u0632\u0647\u0627<\/h2>\n<p data-path-to-node=\"8\">\u0628\u0631\u0627\u06cc \u0634\u0631\u0648\u0639 \u0627\u06cc\u0646 \u0622\u0645\u0648\u0632\u0634 \u0628\u0647 \u0645\u0648\u0627\u0631\u062f \u0632\u06cc\u0631 \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u06cc\u062f:<\/p>\n<ul data-path-to-node=\"9\">\n<li>\n<p data-path-to-node=\"9,0,0\">\u06cc\u06a9 \u0633\u0631\u0648\u0631 \u0627\u0628\u0631\u06cc <b data-path-to-node=\"9,0,0\" data-index-in-node=\"13\">\u0627\u0648\u0628\u0648\u0646\u062a\u0648 \u06f2\u06f4.\u06f0\u06f4 (Ubuntu 24.04 LTS)<\/b> \u062f\u0631 <b data-path-to-node=\"9,0,0\" data-index-in-node=\"49\">\u067e\u0627\u0631\u0645\u06cc\u0646 \u06a9\u0644\u0648\u062f<\/b> \u0628\u0627 \u062d\u062f\u0627\u0642\u0644 \u06f2 \u06af\u06cc\u06af\u0627\u0628\u0627\u06cc\u062a \u0631\u0645 \u0648 \u06f4 \u06af\u06cc\u06af\u0627\u0628\u0627\u06cc\u062a \u0641\u0636\u0627\u06cc \u0630\u062e\u06cc\u0631\u0647\u200c\u0633\u0627\u0632\u06cc.<\/p>\n<\/li>\n<li>\n<p data-path-to-node=\"9,1,0\">\u06a9\u0627\u0631\u0628\u0631 \u063a\u06cc\u0631 \u0631\u06cc\u0634\u0647 \u0628\u0627 \u062f\u0633\u062a\u0631\u0633\u06cc\u200c\u0647\u0627\u06cc <code data-path-to-node=\"9,1,0\" data-index-in-node=\"29\">sudo<\/code>.<\/p>\n<\/li>\n<li>\n<p data-path-to-node=\"9,2,0\">\u0646\u0635\u0628 \u0628\u0648\u062f\u0646 \u062f\u0627\u06a9\u0631 \u0631\u0648\u06cc \u0633\u0631\u0648\u0631 (\u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u0632 \u0631\u0627\u0647\u0646\u0645\u0627\u06cc \u0646\u0635\u0628 \u062f\u0627\u06a9\u0631 \u067e\u0627\u0631\u0645\u06cc\u0646 \u06a9\u0644\u0648\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f).<\/p>\n<\/li>\n<\/ul>\n<h2 data-path-to-node=\"11\">\u06af\u0627\u0645 \u0627\u0648\u0644 \u2014 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0645\u062f\u06cc\u0631 \u0641\u0631\u0627\u06cc\u0646\u062f Supervisord<\/h2>\n<p data-path-to-node=\"12\">\u0627\u0632 \u0622\u0646\u062c\u0627 \u06a9\u0647 \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 \u0634\u0645\u0627 \u0634\u0627\u0645\u0644 \u0686\u0646\u062f \u0628\u062e\u0634 \u0645\u062e\u062a\u0644\u0641 (\u0633\u0631\u0648\u0631 \u0646\u0645\u0627\u06cc\u0634\u060c \u0645\u062f\u06cc\u0631\u06cc\u062a \u067e\u0646\u062c\u0631\u0647\u200c\u0647\u0627\u060c \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0635\u0644\u06cc \u0648&#8230;) \u0627\u0633\u062a\u060c \u0628\u0647 \u06cc\u06a9 \u0645\u062f\u06cc\u0631\u06cc\u062a\u200c\u06a9\u0646\u0646\u062f\u0647 \u0641\u0631\u0627\u06cc\u0646\u062f (Process Manager) \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u06cc\u062f. \u062f\u0631 \u0627\u06cc\u0646 \u062c\u0627 \u0627\u0632 <b data-path-to-node=\"12\" data-index-in-node=\"164\">supervisord<\/b> \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645.<\/p>\n<p data-path-to-node=\"13\">\u0627\u0628\u062a\u062f\u0627 \u067e\u0648\u0634\u0647\u200c\u0627\u06cc \u0628\u0647 \u0646\u0627\u0645 <code data-path-to-node=\"13\" data-index-in-node=\"21\">thunderbird<\/code> \u0628\u0633\u0627\u0632\u06cc\u062f \u0648 \u0648\u0627\u0631\u062f \u0622\u0646 \u0634\u0648\u06cc\u062f:<\/p>\n<div class=\"code-block ng-tns-c1976435164-262 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\" data-hveid=\"0\" data-ved=\"0CAAQhtANahgKEwjRut2iqvKVAxUAAAAAHQAAAAAQ9QE\">\n<div class=\"formatted-code-block-internal-container ng-tns-c1976435164-262\">\n<div class=\"animated-opacity ng-tns-c1976435164-262\">\n<div class=\"code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c1976435164-262 ng-star-inserted\">\n<p><span class=\"ng-tns-c1976435164-262\">Bash<\/span><\/p>\n<div class=\"buttons ng-tns-c1976435164-262 ng-star-inserted\"><\/div>\n<\/div>\n<pre class=\"ng-tns-c1976435164-262\"><code class=\"code-container formatted ng-tns-c1976435164-262\" role=\"text\" data-test-id=\"code-content\">mkdir ~\/thunderbird\r\n<span class=\"hljs-built_in\">cd<\/span> ~\/thunderbird\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<p data-path-to-node=\"15\">\u0641\u0627\u06cc\u0644 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a <code data-path-to-node=\"15\" data-index-in-node=\"13\">supervisord.conf<\/code> \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"code-block ng-tns-c1976435164-263 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\" data-hveid=\"0\" data-ved=\"0CAAQhtANahgKEwjRut2iqvKVAxUAAAAAHQAAAAAQ9gE\">\n<div class=\"formatted-code-block-internal-container ng-tns-c1976435164-263\">\n<div class=\"animated-opacity ng-tns-c1976435164-263\">\n<div class=\"code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c1976435164-263 ng-star-inserted\">\n<p><span class=\"ng-tns-c1976435164-263\">Bash<\/span><\/p>\n<div class=\"buttons ng-tns-c1976435164-263 ng-star-inserted\"><\/div>\n<\/div>\n<pre class=\"ng-tns-c1976435164-263\"><code class=\"code-container formatted ng-tns-c1976435164-263\" role=\"text\" data-test-id=\"code-content\">nano ~\/thunderbird\/supervisord.conf\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<p data-path-to-node=\"17\">\u0628\u062e\u0634 \u0627\u0648\u0644 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0631\u0627 \u0628\u0631\u0627\u06cc \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0639\u0645\u0648\u0645\u06cc \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"code-block ng-tns-c1976435164-264 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\" data-hveid=\"0\" data-ved=\"0CAAQhtANahgKEwjRut2iqvKVAxUAAAAAHQAAAAAQ9wE\">\n<div class=\"formatted-code-block-internal-container ng-tns-c1976435164-264\">\n<div class=\"animated-opacity ng-tns-c1976435164-264\">\n<div class=\"code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c1976435164-264 ng-star-inserted\">\n<p><span class=\"ng-tns-c1976435164-264\">Ini, TOML<\/span><\/p>\n<div class=\"buttons ng-tns-c1976435164-264 ng-star-inserted\"><\/div>\n<\/div>\n<pre class=\"ng-tns-c1976435164-264\"><code class=\"code-container formatted ng-tns-c1976435164-264\" role=\"text\" data-test-id=\"code-content\"><span class=\"hljs-section\">[supervisord]<\/span>\r\n<span class=\"hljs-attr\">nodaemon<\/span>=<span class=\"hljs-literal\">true<\/span>\r\n<span class=\"hljs-attr\">pidfile<\/span>=\/tmp\/supervisord.pid\r\n<span class=\"hljs-attr\">logfile<\/span>=\/dev\/fd\/<span class=\"hljs-number\">1<\/span>\r\n<span class=\"hljs-attr\">logfile_maxbytes<\/span>=<span class=\"hljs-number\">0<\/span>\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<p data-path-to-node=\"19\">\u062f\u0631 \u0627\u06cc\u0646 \u0628\u062e\u0634 <code data-path-to-node=\"19\" data-index-in-node=\"11\">nodaemon=true<\/code> \u0642\u0631\u0627\u0631 \u062f\u0627\u062f\u0647 \u0634\u062f\u0647 \u062a\u0627 supervisord \u062f\u0631 \u067e\u06cc\u0634\u200c\u0632\u0645\u06cc\u0646\u0647 (Foreground) \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 \u0628\u0627\u0642\u06cc \u0628\u0645\u0627\u0646\u062f.<\/p>\n<p data-path-to-node=\"20\">\u0633\u067e\u0633 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0627\u062c\u0631\u0627 \u0648 \u0631\u0627\u0647\u200c\u0627\u0646\u062f\u0627\u0632\u06cc <b data-path-to-node=\"20\" data-index-in-node=\"30\">TigerVNC<\/b> (\u0633\u0631\u0648\u0631 \u062a\u0631\u06a9\u06cc\u0628\u06cc VNC \u0648 X11) \u0631\u0627 \u0628\u0647 \u0627\u062f\u0627\u0645\u0647 \u0641\u0627\u06cc\u0644 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"code-block ng-tns-c1976435164-265 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\" data-hveid=\"0\" data-ved=\"0CAAQhtANahgKEwjRut2iqvKVAxUAAAAAHQAAAAAQ-AE\">\n<div class=\"formatted-code-block-internal-container ng-tns-c1976435164-265\">\n<div class=\"animated-opacity ng-tns-c1976435164-265\">\n<div class=\"code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c1976435164-265 ng-star-inserted\">\n<p><span class=\"ng-tns-c1976435164-265\">Ini, TOML<\/span><\/p>\n<div class=\"buttons ng-tns-c1976435164-265 ng-star-inserted\"><\/div>\n<\/div>\n<pre class=\"ng-tns-c1976435164-265\"><code class=\"code-container formatted ng-tns-c1976435164-265\" role=\"text\" data-test-id=\"code-content\"><span class=\"hljs-section\">[program:x11]<\/span>\r\n<span class=\"hljs-attr\">priority<\/span>=<span class=\"hljs-number\">0<\/span>\r\n<span class=\"hljs-attr\">command<\/span>=\/usr\/bin\/Xtigervnc -desktop <span class=\"hljs-string\">\"Thunderbird\"<\/span> -localhost -rfbport <span class=\"hljs-number\">5900<\/span> -SecurityTypes None -AlwaysShared -AcceptKeyEvents -AcceptPointerEvents -AcceptSetDesktopSize -SendCutText -AcceptCutText :<span class=\"hljs-number\">0<\/span>\r\n<span class=\"hljs-attr\">autorestart<\/span>=<span class=\"hljs-literal\">true<\/span>\r\n<span class=\"hljs-attr\">stdout_logfile<\/span>=\/dev\/fd\/<span class=\"hljs-number\">1<\/span>\r\n<span class=\"hljs-attr\">stdout_logfile_maxbytes<\/span>=<span class=\"hljs-number\">0<\/span>\r\n<span class=\"hljs-attr\">redirect_stderr<\/span>=<span class=\"hljs-literal\">true<\/span>\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<p data-path-to-node=\"22\">\u0627\u06a9\u0646\u0648\u0646 \u0628\u062e\u0634 \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 <b data-path-to-node=\"22\" data-index-in-node=\"19\">easy-novnc<\/b> \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0648\u0638\u06cc\u0641\u0647 \u062a\u0628\u062f\u06cc\u0644 \u062a\u0631\u0627\u0641\u06cc\u06a9 VNC \u0628\u0647 WebSocket \u0628\u0631\u0627\u06cc \u0645\u0631\u0648\u0631\u06af\u0631 \u0631\u0627 \u0628\u0631 \u0639\u0647\u062f\u0647 \u062f\u0627\u0631\u062f:<\/p>\n<div class=\"code-block ng-tns-c1976435164-266 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\" data-hveid=\"0\" data-ved=\"0CAAQhtANahgKEwjRut2iqvKVAxUAAAAAHQAAAAAQ-QE\">\n<div class=\"formatted-code-block-internal-container ng-tns-c1976435164-266\">\n<div class=\"animated-opacity ng-tns-c1976435164-266\">\n<div class=\"code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c1976435164-266 ng-star-inserted\">\n<p><span class=\"ng-tns-c1976435164-266\">Ini, TOML<\/span><\/p>\n<div class=\"buttons ng-tns-c1976435164-266 ng-star-inserted\"><\/div>\n<\/div>\n<pre class=\"ng-tns-c1976435164-266\"><code class=\"code-container formatted ng-tns-c1976435164-266\" role=\"text\" data-test-id=\"code-content\"><span class=\"hljs-section\">[program:easy-novnc]<\/span>\r\n<span class=\"hljs-attr\">priority<\/span>=<span class=\"hljs-number\">0<\/span>\r\n<span class=\"hljs-attr\">command<\/span>=\/usr\/local\/bin\/easy-novnc --addr :<span class=\"hljs-number\">8080<\/span> --host localhost --port <span class=\"hljs-number\">5900<\/span> --<span class=\"hljs-literal\">no<\/span>-url-password --novnc-params <span class=\"hljs-string\">\"resize=remote\"<\/span>\r\n<span class=\"hljs-attr\">autorestart<\/span>=<span class=\"hljs-literal\">true<\/span>\r\n<span class=\"hljs-attr\">stdout_logfile<\/span>=\/dev\/fd\/<span class=\"hljs-number\">1<\/span>\r\n<span class=\"hljs-attr\">stdout_logfile_maxbytes<\/span>=<span class=\"hljs-number\">0<\/span>\r\n<span class=\"hljs-attr\">redirect_stderr<\/span>=<span class=\"hljs-literal\">true<\/span>\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<p data-path-to-node=\"24\">\u062d\u0627\u0644\u0627 <b data-path-to-node=\"24\" data-index-in-node=\"5\">OpenBox<\/b> \u0631\u0627 \u0628\u0647\u200c\u0639\u0646\u0648\u0627\u0646 \u0645\u062f\u06cc\u0631 \u067e\u0646\u062c\u0631\u0647 (Window Manager) \u0628\u0647 \u0641\u0627\u06cc\u0644 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f \u062a\u0627 \u0627\u0645\u06a9\u0627\u0646 \u062a\u063a\u06cc\u06cc\u0631 \u0627\u0646\u062f\u0627\u0632\u0647 \u067e\u0646\u062c\u0631\u0647\u200c\u0647\u0627 \u0648 \u062f\u0627\u0634\u062a\u0646 \u0646\u0648\u0627\u0631 \u0639\u0646\u0648\u0627\u0646 \u0641\u0631\u0627\u0647\u0645 \u0634\u0648\u062f:<\/p>\n<div class=\"code-block ng-tns-c1976435164-267 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\" data-hveid=\"0\" data-ved=\"0CAAQhtANahgKEwjRut2iqvKVAxUAAAAAHQAAAAAQ-gE\">\n<div class=\"formatted-code-block-internal-container ng-tns-c1976435164-267\">\n<div class=\"animated-opacity ng-tns-c1976435164-267\">\n<div class=\"code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c1976435164-267 ng-star-inserted\">\n<p><span class=\"ng-tns-c1976435164-267\">Ini, TOML<\/span><\/p>\n<div class=\"buttons ng-tns-c1976435164-267 ng-star-inserted\"><\/div>\n<\/div>\n<pre class=\"ng-tns-c1976435164-267\"><code class=\"code-container formatted ng-tns-c1976435164-267\" role=\"text\" data-test-id=\"code-content\"><span class=\"hljs-section\">[program:openbox]<\/span>\r\n<span class=\"hljs-attr\">priority<\/span>=<span class=\"hljs-number\">1<\/span>\r\n<span class=\"hljs-attr\">command<\/span>=\/usr\/bin\/openbox\r\n<span class=\"hljs-attr\">environment<\/span>=DISPLAY=:<span class=\"hljs-number\">0<\/span>\r\n<span class=\"hljs-attr\">autorestart<\/span>=<span class=\"hljs-literal\">true<\/span>\r\n<span class=\"hljs-attr\">stdout_logfile<\/span>=\/dev\/fd\/<span class=\"hljs-number\">1<\/span>\r\n<span class=\"hljs-attr\">stdout_logfile_maxbytes<\/span>=<span class=\"hljs-number\">0<\/span>\r\n<span class=\"hljs-attr\">redirect_stderr<\/span>=<span class=\"hljs-literal\">true<\/span>\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<p data-path-to-node=\"26\">\u062f\u0631 \u0646\u0647\u0627\u06cc\u062a\u060c \u062f\u0633\u062a\u0648\u0631 \u0627\u062c\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0635\u0644\u06cc (Thunderbird) \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"code-block ng-tns-c1976435164-268 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\" data-hveid=\"0\" data-ved=\"0CAAQhtANahgKEwjRut2iqvKVAxUAAAAAHQAAAAAQ-wE\">\n<div class=\"formatted-code-block-internal-container ng-tns-c1976435164-268\">\n<div class=\"animated-opacity ng-tns-c1976435164-268\">\n<div class=\"code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c1976435164-268 ng-star-inserted\">\n<p><span class=\"ng-tns-c1976435164-268\">Ini, TOML<\/span><\/p>\n<div class=\"buttons ng-tns-c1976435164-268 ng-star-inserted\"><\/div>\n<\/div>\n<pre class=\"ng-tns-c1976435164-268\"><code class=\"code-container formatted ng-tns-c1976435164-268\" role=\"text\" data-test-id=\"code-content\"><span class=\"hljs-section\">[program:app]<\/span>\r\n<span class=\"hljs-attr\">priority<\/span>=<span class=\"hljs-number\">1<\/span>\r\n<span class=\"hljs-attr\">environment<\/span>=DISPLAY=:<span class=\"hljs-number\">0<\/span>\r\n<span class=\"hljs-attr\">command<\/span>=\/usr\/bin\/thunderbird\r\n<span class=\"hljs-attr\">autorestart<\/span>=<span class=\"hljs-literal\">true<\/span>\r\n<span class=\"hljs-attr\">stdout_logfile<\/span>=\/dev\/fd\/<span class=\"hljs-number\">1<\/span>\r\n<span class=\"hljs-attr\">stdout_logfile_maxbytes<\/span>=<span class=\"hljs-number\">0<\/span>\r\n<span class=\"hljs-attr\">redirect_stderr<\/span>=<span class=\"hljs-literal\">true<\/span>\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<p data-path-to-node=\"28\">\u0641\u0627\u06cc\u0644 \u0631\u0627 \u0630\u062e\u06cc\u0631\u0647 \u06a9\u0631\u062f\u0647 \u0648 \u0628\u0628\u0646\u062f\u06cc\u062f.<\/p>\n<h2 data-path-to-node=\"30\">\u06af\u0627\u0645 \u062f\u0648\u0645 \u2014 \u062a\u0646\u0638\u06cc\u0645 \u0645\u0646\u0648\u06cc OpenBox<\/h2>\n<p data-path-to-node=\"31\">\u0628\u0631\u0627\u06cc \u0627\u06cc\u0646\u200c\u06a9\u0647 \u0628\u062a\u0648\u0627\u0646\u06cc\u062f \u062f\u0631 \u0635\u0648\u0631\u062a \u0646\u06cc\u0627\u0632 \u06a9\u0644\u06cc\u06a9\u200c\u0631\u0627\u0633\u062a \u06a9\u0631\u062f\u0647 \u0648 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc\u06cc \u0645\u0627\u0646\u0646\u062f \u062a\u0631\u0645\u06cc\u0646\u0627\u0644 \u06cc\u0627 \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc \u067e\u0627\u06cc\u0634 \u0633\u06cc\u0633\u062a\u0645 \u0631\u0627 \u0628\u0627\u0632 \u06a9\u0646\u06cc\u062f\u060c \u0641\u0627\u06cc\u0644 <code data-path-to-node=\"31\" data-index-in-node=\"117\">menu.xml<\/code> \u0631\u0627 \u0628\u0633\u0627\u0632\u06cc\u062f:<\/p>\n<div class=\"code-block ng-tns-c1976435164-269 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\" data-hveid=\"0\" data-ved=\"0CAAQhtANahgKEwjRut2iqvKVAxUAAAAAHQAAAAAQ_AE\">\n<div class=\"formatted-code-block-internal-container ng-tns-c1976435164-269\">\n<div class=\"animated-opacity ng-tns-c1976435164-269\">\n<div class=\"code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c1976435164-269 ng-star-inserted\">\n<p><span class=\"ng-tns-c1976435164-269\">Bash<\/span><\/p>\n<div class=\"buttons ng-tns-c1976435164-269 ng-star-inserted\"><\/div>\n<\/div>\n<pre class=\"ng-tns-c1976435164-269\"><code class=\"code-container formatted ng-tns-c1976435164-269\" role=\"text\" data-test-id=\"code-content\">nano ~\/thunderbird\/menu.xml\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<p data-path-to-node=\"33\">\u0645\u062d\u062a\u0648\u0627\u06cc \u0632\u06cc\u0631 \u0631\u0627 \u062f\u0631\u0648\u0646 \u0622\u0646 \u0642\u0631\u0627\u0631 \u062f\u0647\u06cc\u062f:<\/p>\n<div class=\"code-block ng-tns-c1976435164-270 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\" data-hveid=\"0\" data-ved=\"0CAAQhtANahgKEwjRut2iqvKVAxUAAAAAHQAAAAAQ_QE\">\n<div class=\"formatted-code-block-internal-container ng-tns-c1976435164-270\">\n<div class=\"animated-opacity ng-tns-c1976435164-270\">\n<div class=\"code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c1976435164-270 ng-star-inserted\">\n<p><span class=\"ng-tns-c1976435164-270\">XML<\/span><\/p>\n<div class=\"buttons ng-tns-c1976435164-270 ng-star-inserted\"><\/div>\n<\/div>\n<pre class=\"ng-tns-c1976435164-270\"><code class=\"code-container formatted ng-tns-c1976435164-270\" role=\"text\" data-test-id=\"code-content\"><span class=\"hljs-meta\">&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;<\/span>\r\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">openbox_menu<\/span> <span class=\"hljs-attr\">xmlns<\/span>=<span class=\"hljs-string\">\"http:\/\/openbox.org\/\"<\/span> <span class=\"hljs-attr\">xmlns:xsi<\/span>=<span class=\"hljs-string\">\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"<\/span> <span class=\"hljs-attr\">xsi:schemaLocation<\/span>=<span class=\"hljs-string\">\"http:\/\/openbox.org\/ file:\/\/\/usr\/share\/openbox\/menu.xsd\"<\/span>&gt;<\/span>\r\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">menu<\/span> <span class=\"hljs-attr\">id<\/span>=<span class=\"hljs-string\">\"root-menu\"<\/span> <span class=\"hljs-attr\">label<\/span>=<span class=\"hljs-string\">\"Openbox 3\"<\/span>&gt;<\/span>\r\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">item<\/span> <span class=\"hljs-attr\">label<\/span>=<span class=\"hljs-string\">\"Thunderbird\"<\/span>&gt;<\/span>\r\n            <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">action<\/span> <span class=\"hljs-attr\">name<\/span>=<span class=\"hljs-string\">\"Execute\"<\/span>&gt;<\/span>\r\n                <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">execute<\/span>&gt;<\/span>\/usr\/bin\/thunderbird<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">execute<\/span>&gt;<\/span>\r\n            <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">action<\/span>&gt;<\/span>\r\n        <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">item<\/span>&gt;<\/span>\r\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">item<\/span> <span class=\"hljs-attr\">label<\/span>=<span class=\"hljs-string\">\"Terminal\"<\/span>&gt;<\/span>\r\n            <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">action<\/span> <span class=\"hljs-attr\">name<\/span>=<span class=\"hljs-string\">\"Execute\"<\/span>&gt;<\/span>\r\n                <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">execute<\/span>&gt;<\/span>\/usr\/bin\/x-terminal-emulator<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">execute<\/span>&gt;<\/span>\r\n            <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">action<\/span>&gt;<\/span>\r\n        <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">item<\/span>&gt;<\/span>\r\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">item<\/span> <span class=\"hljs-attr\">label<\/span>=<span class=\"hljs-string\">\"Htop\"<\/span>&gt;<\/span>\r\n            <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">action<\/span> <span class=\"hljs-attr\">name<\/span>=<span class=\"hljs-string\">\"Execute\"<\/span>&gt;<\/span>\r\n                <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">execute<\/span>&gt;<\/span>\/usr\/bin\/x-terminal-emulator -e htop<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">execute<\/span>&gt;<\/span>\r\n            <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">action<\/span>&gt;<\/span>\r\n        <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">item<\/span>&gt;<\/span>\r\n    <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">menu<\/span>&gt;<\/span>\r\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">openbox_menu<\/span>&gt;<\/span>\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<p data-path-to-node=\"35\">\u0641\u0627\u06cc\u0644 \u0631\u0627 \u0630\u062e\u06cc\u0631\u0647 \u06a9\u0631\u062f\u0647 \u0648 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f.<\/p>\n<h2 data-path-to-node=\"37\">\u06af\u0627\u0645 \u0633\u0648\u0645 \u2014 \u0633\u0627\u062e\u062a Dockerfile \u0627\u0635\u0644\u06cc<\/h2>\n<p data-path-to-node=\"38\">\u0627\u06a9\u0646\u0648\u0646 \u0641\u0627\u06cc\u0644 <code data-path-to-node=\"38\" data-index-in-node=\"11\">Dockerfile<\/code> \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645 \u062a\u0627 \u062a\u0645\u0627\u0645 \u0628\u062e\u0634\u200c\u0647\u0627 \u0631\u0627 \u0628\u0627 \u067e\u0627\u06cc\u0647 \u0633\u06cc\u0633\u062a\u0645\u200c\u0639\u0627\u0645\u0644 \u0628\u0647\u200c\u0631\u0648\u0632 <b data-path-to-node=\"38\" data-index-in-node=\"83\">Debian Bookworm (12)<\/b> \u0633\u0627\u062e\u062a\u0627\u0631\u062f\u0647\u06cc \u06a9\u0646\u062f:<\/p>\n<div class=\"code-block ng-tns-c1976435164-271 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\" data-hveid=\"0\" data-ved=\"0CAAQhtANahgKEwjRut2iqvKVAxUAAAAAHQAAAAAQ_gE\">\n<div class=\"formatted-code-block-internal-container ng-tns-c1976435164-271\">\n<div class=\"animated-opacity ng-tns-c1976435164-271\">\n<div class=\"code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c1976435164-271 ng-star-inserted\">\n<p><span class=\"ng-tns-c1976435164-271\">Bash<\/span><\/p>\n<div class=\"buttons ng-tns-c1976435164-271 ng-star-inserted\"><\/div>\n<\/div>\n<pre class=\"ng-tns-c1976435164-271\"><code class=\"code-container formatted ng-tns-c1976435164-271\" role=\"text\" data-test-id=\"code-content\">nano ~\/thunderbird\/Dockerfile\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<p data-path-to-node=\"40\">\u0645\u062d\u062a\u0648\u0627\u06cc \u0632\u06cc\u0631 \u0631\u0627 \u062f\u0627\u062e\u0644 \u0641\u0627\u06cc\u0644 \u0628\u06af\u0630\u0627\u0631\u06cc\u062f:<\/p>\n<div class=\"code-block ng-tns-c1976435164-272 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\" data-hveid=\"0\" data-ved=\"0CAAQhtANahgKEwjRut2iqvKVAxUAAAAAHQAAAAAQ_wE\">\n<div class=\"formatted-code-block-internal-container ng-tns-c1976435164-272\">\n<div class=\"animated-opacity ng-tns-c1976435164-272\">\n<div class=\"code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c1976435164-272 ng-star-inserted\">\n<p><span class=\"ng-tns-c1976435164-272\">Dockerfile<\/span><\/p>\n<div class=\"buttons ng-tns-c1976435164-272 ng-star-inserted\"><\/div>\n<\/div>\n<pre class=\"ng-tns-c1976435164-272\"><code class=\"code-container formatted ng-tns-c1976435164-272\" role=\"text\" data-test-id=\"code-content\"><span class=\"hljs-comment\"># \u0645\u0631\u062d\u0644\u0647 \u0627\u0648\u0644: \u06a9\u0627\u0645\u067e\u0627\u06cc\u0644 easy-novnc<\/span>\r\n<span class=\"hljs-keyword\">FROM<\/span> golang:<span class=\"hljs-number\">1.22<\/span>-bookworm AS easy-novnc-build\r\n<span class=\"hljs-keyword\">WORKDIR<\/span><span class=\"bash\"> \/src<\/span>\r\n<span class=\"hljs-keyword\">RUN<\/span><span class=\"bash\"> go mod init build &amp;&amp; \\\r\n    go get github.com\/geek1011\/easy-novnc@v1.1.0 &amp;&amp; \\\r\n    go build -o \/bin\/easy-novnc github.com\/geek1011\/easy-novnc<\/span>\r\n\r\n<span class=\"hljs-comment\"># \u0645\u0631\u062d\u0644\u0647 \u062f\u0648\u0645: \u0627\u06cc\u0645\u06cc\u062c \u0627\u0635\u0644\u06cc \u0628\u0631 \u067e\u0627\u06cc\u0647 \u062f\u0628\u06cc\u0627\u0646 \u06f1\u06f2<\/span>\r\n<span class=\"hljs-keyword\">FROM<\/span> debian:bookworm\r\n\r\n<span class=\"hljs-keyword\">RUN<\/span><span class=\"bash\"> apt-get update -y &amp;&amp; \\\r\n    apt-get install -y --no-install-recommends openbox tigervnc-standalone-server supervisor gosu &amp;&amp; \\\r\n    rm -rf \/var\/lib\/apt\/lists\/* &amp;&amp; \\\r\n    mkdir -p \/usr\/share\/desktop-directories<\/span>\r\n\r\n<span class=\"hljs-keyword\">RUN<\/span><span class=\"bash\"> apt-get update -y &amp;&amp; \\\r\n    apt-get install -y --no-install-recommends lxterminal nano wget openssh-client rsync ca-certificates xdg-utils htop tar xz-utils gzip bzip2 zip unzip &amp;&amp; \\\r\n    rm -rf \/var\/lib\/apt\/lists\/*<\/span>\r\n\r\n<span class=\"hljs-keyword\">RUN<\/span><span class=\"bash\"> apt-get update -y &amp;&amp; \\\r\n    apt-get install -y --no-install-recommends thunderbird &amp;&amp; \\\r\n    rm -rf \/var\/lib\/apt\/lists\/*<\/span>\r\n\r\n<span class=\"hljs-keyword\">COPY<\/span><span class=\"bash\"> --from=easy-novnc-build \/bin\/easy-novnc \/usr\/<span class=\"hljs-built_in\">local<\/span>\/bin\/<\/span>\r\n<span class=\"hljs-keyword\">COPY<\/span><span class=\"bash\"> menu.xml \/etc\/xdg\/openbox\/<\/span>\r\n<span class=\"hljs-keyword\">COPY<\/span><span class=\"bash\"> supervisord.conf \/etc\/<\/span>\r\n<span class=\"hljs-keyword\">EXPOSE<\/span> <span class=\"hljs-number\">8080<\/span>\r\n\r\n<span class=\"hljs-keyword\">RUN<\/span><span class=\"bash\"> groupadd --gid 1000 app &amp;&amp; \\\r\n    useradd --home-dir \/data --shell \/bin\/bash --uid 1000 --gid 1000 app &amp;&amp; \\\r\n    mkdir -p \/data<\/span>\r\n<span class=\"hljs-keyword\">VOLUME<\/span><span class=\"bash\"> \/data<\/span>\r\n\r\n<span class=\"hljs-keyword\">CMD<\/span><span class=\"bash\"> [<span class=\"hljs-string\">\"sh\"<\/span>, <span class=\"hljs-string\">\"-c\"<\/span>, <span class=\"hljs-string\">\"chown app:app \/data \/dev\/stdout &amp;&amp; exec gosu app supervisord\"<\/span>]<\/span>\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<p data-path-to-node=\"42\">\u0641\u0627\u06cc\u0644 \u0631\u0627 \u0630\u062e\u06cc\u0631\u0647 \u06a9\u0631\u062f\u0647 \u0648 \u0628\u0628\u0646\u062f\u06cc\u062f.<\/p>\n<h2 data-path-to-node=\"44\">\u06af\u0627\u0645 \u0686\u0647\u0627\u0631\u0645 \u2014 \u0633\u0627\u062e\u062a \u0648 \u0627\u062c\u0631\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 \u0628\u0631\u0646\u0627\u0645\u0647<\/h2>\n<p data-path-to-node=\"45\">\u0628\u0631\u0627\u06cc \u0633\u0627\u062e\u062a \u0627\u06cc\u0645\u06cc\u062c \u0648 \u0631\u0627\u0647\u200c\u0627\u0646\u062f\u0627\u0632\u06cc \u0634\u0628\u06a9\u0647 \u0648 \u0648\u0644\u0648\u0645\u200c\u0647\u0627\u06cc \u062f\u0627\u062f\u0647\u060c \u062f\u0633\u062a\u0648\u0631\u0627\u062a \u0632\u06cc\u0631 \u0631\u0627 \u062f\u0631 \u067e\u0648\u0634\u0647 <code data-path-to-node=\"45\" data-index-in-node=\"74\">~\/thunderbird<\/code> \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"code-block ng-tns-c1976435164-273 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\" data-hveid=\"0\" data-ved=\"0CAAQhtANahgKEwjRut2iqvKVAxUAAAAAHQAAAAAQgAI\">\n<div class=\"formatted-code-block-internal-container ng-tns-c1976435164-273\">\n<div class=\"animated-opacity ng-tns-c1976435164-273\">\n<div class=\"code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c1976435164-273 ng-star-inserted\">\n<p><span class=\"ng-tns-c1976435164-273\">Bash<\/span><\/p>\n<div class=\"buttons ng-tns-c1976435164-273 ng-star-inserted\"><\/div>\n<\/div>\n<pre class=\"ng-tns-c1976435164-273\"><code class=\"code-container formatted ng-tns-c1976435164-273\" role=\"text\" data-test-id=\"code-content\"><span class=\"hljs-comment\"># \u0633\u0627\u062e\u062a \u0627\u06cc\u0645\u06cc\u062c \u062f\u0627\u06a9\u0631<\/span>\r\ndocker build -t thunderbird .\r\n\r\n<span class=\"hljs-comment\"># \u0627\u06cc\u062c\u0627\u062f \u0634\u0628\u06a9\u0647 \u0627\u062e\u062a\u0635\u0627\u0635\u06cc<\/span>\r\ndocker network create thunderbird-net\r\n\r\n<span class=\"hljs-comment\"># \u0627\u06cc\u062c\u0627\u062f \u0648\u0644\u0648\u0645 \u0628\u0631\u0627\u06cc \u0645\u0627\u0646\u062f\u06af\u0627\u0631\u06cc \u062f\u0627\u062f\u0647\u200c\u0647\u0627<\/span>\r\ndocker volume create thunderbird-data\r\n\r\n<span class=\"hljs-comment\"># \u0627\u062c\u0631\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631<\/span>\r\ndocker run --detach --restart=always --volume=thunderbird-data:\/data --net=thunderbird-net --name=thunderbird-app thunderbird\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<h2 data-path-to-node=\"48\">\u06af\u0627\u0645 \u067e\u0646\u062c\u0645 \u2014 \u062a\u0646\u0638\u06cc\u0645 \u0648\u0628\u200c\u0633\u0631\u0648\u0631 Caddy \u0628\u0631\u0627\u06cc \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u0648 WebDAV<\/h2>\n<p data-path-to-node=\"49\">\u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u0644\u0627\u06cc\u0647 \u0627\u0645\u0646\u06cc\u062a\u06cc \u0648 \u062f\u0633\u062a\u0631\u0633\u06cc \u0641\u0627\u06cc\u0644\u200c\u0647\u0627\u060c \u06cc\u06a9 \u067e\u0648\u0634\u0647 \u062c\u062f\u06cc\u062f \u0628\u0631\u0627\u06cc Caddy \u0645\u06cc\u200c\u0633\u0627\u0632\u06cc\u0645:<\/p>\n<div class=\"code-block ng-tns-c1976435164-274 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\" data-hveid=\"0\" data-ved=\"0CAAQhtANahgKEwjRut2iqvKVAxUAAAAAHQAAAAAQgQI\">\n<div class=\"formatted-code-block-internal-container ng-tns-c1976435164-274\">\n<div class=\"animated-opacity ng-tns-c1976435164-274\">\n<div class=\"code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c1976435164-274 ng-star-inserted\">\n<p><span class=\"ng-tns-c1976435164-274\">Bash<\/span><\/p>\n<div class=\"buttons ng-tns-c1976435164-274 ng-star-inserted\"><\/div>\n<\/div>\n<pre class=\"ng-tns-c1976435164-274\"><code class=\"code-container formatted ng-tns-c1976435164-274\" role=\"text\" data-test-id=\"code-content\">mkdir ~\/caddy\r\n<span class=\"hljs-built_in\">cd<\/span> ~\/caddy\r\nnano ~\/caddy\/Dockerfile\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<p data-path-to-node=\"51\">\u06a9\u062f \u0632\u06cc\u0631 \u0631\u0627 \u062f\u0627\u062e\u0644 Dockerfile \u0642\u0631\u0627\u0631 \u062f\u0647\u06cc\u062f:<\/p>\n<div class=\"code-block ng-tns-c1976435164-275 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\" data-hveid=\"0\" data-ved=\"0CAAQhtANahgKEwjRut2iqvKVAxUAAAAAHQAAAAAQggI\">\n<div class=\"formatted-code-block-internal-container ng-tns-c1976435164-275\">\n<div class=\"animated-opacity ng-tns-c1976435164-275\">\n<div class=\"code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c1976435164-275 ng-star-inserted\">\n<p><span class=\"ng-tns-c1976435164-275\">Dockerfile<\/span><\/p>\n<div class=\"buttons ng-tns-c1976435164-275 ng-star-inserted\"><\/div>\n<\/div>\n<pre class=\"ng-tns-c1976435164-275\"><code class=\"code-container formatted ng-tns-c1976435164-275\" role=\"text\" data-test-id=\"code-content\"><span class=\"hljs-keyword\">FROM<\/span> golang:<span class=\"hljs-number\">1.22<\/span>-bookworm AS caddy-build\r\n<span class=\"hljs-keyword\">WORKDIR<\/span><span class=\"bash\"> \/src<\/span>\r\n<span class=\"hljs-keyword\">RUN<\/span><span class=\"bash\"> <span class=\"hljs-built_in\">echo<\/span> <span class=\"hljs-string\">'module caddy'<\/span> &gt; go.mod &amp;&amp; \\\r\n    <span class=\"hljs-built_in\">echo<\/span> <span class=\"hljs-string\">'require github.com\/caddyserver\/caddy\/v2 v2.8.4'<\/span> &gt;&gt; go.mod &amp;&amp; \\\r\n    <span class=\"hljs-built_in\">echo<\/span> <span class=\"hljs-string\">'require github.com\/mholt\/caddy-webdav v0.0.0-20220622150212-3200ed430030'<\/span> &gt;&gt; go.mod<\/span>\r\n<span class=\"hljs-keyword\">RUN<\/span><span class=\"bash\"> <span class=\"hljs-built_in\">echo<\/span> <span class=\"hljs-string\">'package main'<\/span> &gt; caddy.go &amp;&amp; \\\r\n    <span class=\"hljs-built_in\">echo<\/span> <span class=\"hljs-string\">'import caddycmd \"github.com\/caddyserver\/caddy\/v2\/cmd\"'<\/span> &gt;&gt; caddy.go &amp;&amp; \\\r\n    <span class=\"hljs-built_in\">echo<\/span> <span class=\"hljs-string\">'import _ \"github.com\/caddyserver\/caddy\/v2\/modules\/standard\"'<\/span> &gt;&gt; caddy.go &amp;&amp; \\\r\n    <span class=\"hljs-built_in\">echo<\/span> <span class=\"hljs-string\">'import _ \"github.com\/mholt\/caddy-webdav\"'<\/span> &gt;&gt; caddy.go &amp;&amp; \\\r\n    <span class=\"hljs-built_in\">echo<\/span> <span class=\"hljs-string\">'func main() { caddycmd.Main() }'<\/span> &gt;&gt; caddy.go<\/span>\r\n<span class=\"hljs-keyword\">RUN<\/span><span class=\"bash\"> go build -o \/bin\/caddy .<\/span>\r\n\r\n<span class=\"hljs-keyword\">FROM<\/span> debian:bookworm\r\n<span class=\"hljs-keyword\">RUN<\/span><span class=\"bash\"> apt-get update -y &amp;&amp; \\\r\n    apt-get install -y --no-install-recommends gosu ca-certificates &amp;&amp; \\\r\n    rm -rf \/var\/lib\/apt\/lists\/*<\/span>\r\n<span class=\"hljs-keyword\">COPY<\/span><span class=\"bash\"> --from=caddy-build \/bin\/caddy \/usr\/<span class=\"hljs-built_in\">local<\/span>\/bin\/<\/span>\r\n<span class=\"hljs-keyword\">COPY<\/span><span class=\"bash\"> Caddyfile \/etc\/<\/span>\r\n<span class=\"hljs-keyword\">EXPOSE<\/span> <span class=\"hljs-number\">8080<\/span>\r\n\r\n<span class=\"hljs-keyword\">RUN<\/span><span class=\"bash\"> groupadd --gid 1000 app &amp;&amp; \\\r\n    useradd --home-dir \/data --shell \/bin\/bash --uid 1000 --gid 1000 app &amp;&amp; \\\r\n    mkdir -p \/data<\/span>\r\n<span class=\"hljs-keyword\">VOLUME<\/span><span class=\"bash\"> \/data<\/span>\r\n<span class=\"hljs-keyword\">WORKDIR<\/span><span class=\"bash\"> \/data<\/span>\r\n<span class=\"hljs-keyword\">CMD<\/span><span class=\"bash\"> [<span class=\"hljs-string\">\"sh\"<\/span>, <span class=\"hljs-string\">\"-c\"<\/span>, <span class=\"hljs-string\">\"chown app:app \/data &amp;&amp; exec gosu app \/usr\/local\/bin\/caddy run -adapter caddyfile -config \/etc\/Caddyfile\"<\/span>]<\/span>\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<p data-path-to-node=\"53\">\u0630\u062e\u06cc\u0631\u0647 \u06a9\u0631\u062f\u0647 \u0648 \u062d\u0627\u0644\u0627 \u0641\u0627\u06cc\u0644 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a <code data-path-to-node=\"53\" data-index-in-node=\"31\">Caddyfile<\/code> \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"code-block ng-tns-c1976435164-276 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\" data-hveid=\"0\" data-ved=\"0CAAQhtANahgKEwjRut2iqvKVAxUAAAAAHQAAAAAQgwI\">\n<div class=\"formatted-code-block-internal-container ng-tns-c1976435164-276\">\n<div class=\"animated-opacity ng-tns-c1976435164-276\">\n<div class=\"code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c1976435164-276 ng-star-inserted\">\n<p><span class=\"ng-tns-c1976435164-276\">Bash<\/span><\/p>\n<div class=\"buttons ng-tns-c1976435164-276 ng-star-inserted\"><\/div>\n<\/div>\n<pre class=\"ng-tns-c1976435164-276\"><code class=\"code-container formatted ng-tns-c1976435164-276\" role=\"text\" data-test-id=\"code-content\">nano ~\/caddy\/Caddyfile\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<p data-path-to-node=\"55\">\u06a9\u062f\u0647\u0627\u06cc \u0632\u06cc\u0631 \u0631\u0627 \u0642\u0631\u0627\u0631 \u062f\u0647\u06cc\u062f:<\/p>\n<div class=\"code-block ng-tns-c1976435164-277 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\" data-hveid=\"0\" data-ved=\"0CAAQhtANahgKEwjRut2iqvKVAxUAAAAAHQAAAAAQhAI\">\n<div class=\"formatted-code-block-internal-container ng-tns-c1976435164-277\">\n<div class=\"animated-opacity ng-tns-c1976435164-277\">\n<div class=\"code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c1976435164-277 ng-star-inserted\">\n<p><span class=\"ng-tns-c1976435164-277\">Plaintext<\/span><\/p>\n<div class=\"buttons ng-tns-c1976435164-277 ng-star-inserted\"><\/div>\n<\/div>\n<pre class=\"ng-tns-c1976435164-277\"><code class=\"code-container formatted ng-tns-c1976435164-277\" role=\"text\" data-test-id=\"code-content\">{\r\n    order webdav last\r\n}\r\n:8080 {\r\n    log\r\n    root * \/data\r\n    reverse_proxy thunderbird-app:8080\r\n\r\n    handle_path \/files\/* {         \r\n        file_server browse\r\n    }\r\n    redir \/files \/files\/\r\n\r\n    handle \/webdav\/* {\r\n        webdav {             \r\n            prefix \/webdav         \r\n        }\r\n    }\r\n    redir \/webdav \/webdav\/\r\n\r\n    basicauth \/* {\r\n        {env.APP_USERNAME} {env.APP_PASSWORD_HASH}\r\n    }\r\n}\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<p data-path-to-node=\"57\">\u062d\u0627\u0644\u0627 \u0627\u06cc\u0645\u06cc\u062c Caddy \u0631\u0627 \u0628\u0633\u0627\u0632\u06cc\u062f:<\/p>\n<div class=\"code-block ng-tns-c1976435164-278 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\" data-hveid=\"0\" data-ved=\"0CAAQhtANahgKEwjRut2iqvKVAxUAAAAAHQAAAAAQhQI\">\n<div class=\"formatted-code-block-internal-container ng-tns-c1976435164-278\">\n<div class=\"animated-opacity ng-tns-c1976435164-278\">\n<div class=\"code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c1976435164-278 ng-star-inserted\">\n<p><span class=\"ng-tns-c1976435164-278\">Bash<\/span><\/p>\n<div class=\"buttons ng-tns-c1976435164-278 ng-star-inserted\"><\/div>\n<\/div>\n<pre class=\"ng-tns-c1976435164-278\"><code class=\"code-container formatted ng-tns-c1976435164-278\" role=\"text\" data-test-id=\"code-content\">docker build -t thunderbird-caddy .\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<p data-path-to-node=\"59\">\u0628\u0631\u0627\u06cc \u0647\u0634 \u06a9\u0631\u062f\u0646 \u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u062e\u0648\u062f (\u0628\u0647 \u062c\u0627\u06cc <code data-path-to-node=\"59\" data-index-in-node=\"34\">mypass<\/code> \u0631\u0645\u0632 \u062f\u0644\u062e\u0648\u0627\u0647 \u0628\u0646\u0648\u06cc\u0633\u06cc\u062f) \u062f\u0633\u062a\u0648\u0631 \u0632\u06cc\u0631 \u0631\u0627 \u0628\u0632\u0646\u06cc\u062f:<\/p>\n<div class=\"code-block ng-tns-c1976435164-279 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\" data-hveid=\"0\" data-ved=\"0CAAQhtANahgKEwjRut2iqvKVAxUAAAAAHQAAAAAQhgI\">\n<div class=\"formatted-code-block-internal-container ng-tns-c1976435164-279\">\n<div class=\"animated-opacity ng-tns-c1976435164-279\">\n<div class=\"code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c1976435164-279 ng-star-inserted\">\n<p><span class=\"ng-tns-c1976435164-279\">Bash<\/span><\/p>\n<div class=\"buttons ng-tns-c1976435164-279 ng-star-inserted\"><\/div>\n<\/div>\n<pre class=\"ng-tns-c1976435164-279\"><code class=\"code-container formatted ng-tns-c1976435164-279\" role=\"text\" data-test-id=\"code-content\">docker run --rm -it thunderbird-caddy caddy hash-password -plaintext <span class=\"hljs-string\">'mypass'<\/span>\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<p data-path-to-node=\"61\">\u062e\u0631\u0648\u062c\u06cc \u0647\u0634 \u0634\u062f\u0647 \u0631\u0627 \u06a9\u067e\u06cc \u06a9\u0646\u06cc\u062f. \u062d\u0627\u0644\u0627 \u0633\u0631\u0648\u06cc\u0633 \u0648\u0628\u200c\u0633\u0631\u0648\u0631 \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f (\u0628\u0647 \u062c\u0627\u06cc <code data-path-to-node=\"61\" data-index-in-node=\"66\">myuser<\/code> \u0646\u0627\u0645\u200c\u06a9\u0627\u0631\u0628\u0631\u06cc \u0648 \u0628\u0647 \u062c\u0627\u06cc <code data-path-to-node=\"61\" data-index-in-node=\"93\">mypass-hash<\/code> \u0647\u0634 \u0645\u0631\u062d\u0644\u0647 \u0642\u0628\u0644 \u0631\u0627 \u0628\u06af\u0630\u0627\u0631\u06cc\u062f):<\/p>\n<div class=\"code-block ng-tns-c1976435164-280 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\" data-hveid=\"0\" data-ved=\"0CAAQhtANahgKEwjRut2iqvKVAxUAAAAAHQAAAAAQhwI\">\n<div class=\"formatted-code-block-internal-container ng-tns-c1976435164-280\">\n<div class=\"animated-opacity ng-tns-c1976435164-280\">\n<div class=\"code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c1976435164-280 ng-star-inserted\">\n<p><span class=\"ng-tns-c1976435164-280\">Bash<\/span><\/p>\n<div class=\"buttons ng-tns-c1976435164-280 ng-star-inserted\"><\/div>\n<\/div>\n<pre class=\"ng-tns-c1976435164-280\"><code class=\"code-container formatted ng-tns-c1976435164-280\" role=\"text\" data-test-id=\"code-content\">docker run --detach --restart=always --volume=thunderbird-data:\/data --net=thunderbird-net --name=thunderbird-web --env=APP_USERNAME=<span class=\"hljs-string\">\"myuser\"<\/span> --env=APP_PASSWORD_HASH=<span class=\"hljs-string\">\"mypass-hash\"<\/span> --publish=8080:8080 thunderbird-caddy\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<blockquote data-path-to-node=\"63\">\n<p data-path-to-node=\"63,0\"><b data-path-to-node=\"63,0\" data-index-in-node=\"0\">\u0646\u06a9\u062a\u0647 \u062c\u0647\u062a \u0628\u0647\u0628\u0648\u062f \u0633\u0631\u0639\u062a \u0648 \u0631\u0641\u0639 \u062a\u062d\u0631\u06cc\u0645\u200c\u0647\u0627:<\/b><\/p>\n<p data-path-to-node=\"63,1\">\u0627\u06af\u0631 \u0642\u0635\u062f \u062f\u0627\u0631\u06cc\u062f \u062f\u0627\u06a9\u0631 \u0631\u0648\u06cc \u0633\u0631\u0648\u0631 \u0627\u0628\u0631\u06cc \u067e\u0627\u0631\u0645\u06cc\u0646 \u06a9\u0644\u0648\u062f \u0628\u0627 \u0628\u0627\u0644\u0627\u062a\u0631\u06cc\u0646 \u0633\u0631\u0639\u062a \u0627\u06cc\u0645\u06cc\u062c\u200c\u0647\u0627 \u0631\u0627 \u062f\u0627\u0646\u0644\u0648\u062f \u06a9\u0646\u062f\u060c \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0622\u062f\u0631\u0633 \u0645\u06cc\u0631\u0648\u0631\u0647\u0627\u06cc \u0627\u062e\u062a\u0635\u0627\u0635\u06cc \u067e\u0627\u0631\u0645\u06cc\u0646 \u06a9\u0644\u0648\u062f \u0631\u0627 \u062f\u0631 \u0641\u0627\u06cc\u0644 <code data-path-to-node=\"63,1\" data-index-in-node=\"141\">\/etc\/docker\/daemon.json<\/code> \u0628\u0647\u200c\u0635\u0648\u0631\u062a \u0632\u06cc\u0631 \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"code-block ng-tns-c1976435164-281 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\" data-hveid=\"0\" data-ved=\"0CAAQhtANahgKEwjRut2iqvKVAxUAAAAAHQAAAAAQiAI\">\n<div class=\"formatted-code-block-internal-container ng-tns-c1976435164-281\">\n<div class=\"animated-opacity ng-tns-c1976435164-281\">\n<div class=\"code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c1976435164-281 ng-star-inserted\">\n<p><span class=\"ng-tns-c1976435164-281\">JSON<\/span><\/p>\n<div class=\"buttons ng-tns-c1976435164-281 ng-star-inserted\"><\/div>\n<\/div>\n<pre class=\"ng-tns-c1976435164-281\"><code class=\"code-container formatted ng-tns-c1976435164-281\" role=\"text\" data-test-id=\"code-content\">{\r\n  <span class=\"hljs-attr\">\"registry-mirrors\"<\/span>: [\r\n    <span class=\"hljs-string\">\"https:\/\/hub.cr.parmincloud.ir\"<\/span>,\r\n    <span class=\"hljs-string\">\"https:\/\/ghcr.cr.parmincloud.ir\"<\/span>,\r\n    <span class=\"hljs-string\">\"https:\/\/k8s.cr.parmincloud.ir\"<\/span>,\r\n    <span class=\"hljs-string\">\"https:\/\/quay.cr.parmincloud.ir\"<\/span>,\r\n    <span class=\"hljs-string\">\"https:\/\/gcr.cr.parmincloud.ir\"<\/span>\r\n  ]\r\n}\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/blockquote>\n<h2 data-path-to-node=\"65\">\u06af\u0627\u0645 \u0634\u0634\u0645 \u2014 \u062a\u0633\u062a \u0648 \u0627\u062a\u0635\u0627\u0644 \u0628\u0647 \u0628\u0631\u0646\u0627\u0645\u0647<\/h2>\n<p data-path-to-node=\"66\">\u06f1. \u0645\u0631\u0648\u0631\u06af\u0631 \u062e\u0648\u062f \u0631\u0627 \u0628\u0627\u0632 \u06a9\u0631\u062f\u0647 \u0648 \u0628\u0647 \u0622\u062f\u0631\u0633 <code data-path-to-node=\"66\" data-index-in-node=\"36\">http:\/\/your_server_ip:8080<\/code> \u0628\u0631\u0648\u06cc\u062f.<\/p>\n<p data-path-to-node=\"67\">\u06f2. \u0646\u0627\u0645\u200c\u06a9\u0627\u0631\u0628\u0631\u06cc \u0648 \u0631\u0645\u0632\u0639\u0628\u0648\u0631 \u062a\u0639\u06cc\u06cc\u0646\u200c\u0634\u062f\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0631\u062f\u0647 \u0648 \u0631\u0648\u06cc <b data-path-to-node=\"67\" data-index-in-node=\"53\">Connect<\/b> \u06a9\u0644\u06cc\u06a9 \u06a9\u0646\u06cc\u062f.<\/p>\n<p data-path-to-node=\"68\">\u06f3. \u0645\u062d\u06cc\u0637 \u06af\u0631\u0627\u0641\u06cc\u06a9\u06cc Thunderbird \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f \u06a9\u0647 \u0628\u0647\u200c\u0635\u0648\u0631\u062a \u062e\u0648\u062f\u06a9\u0627\u0631 \u0628\u0627 \u0627\u0628\u0639\u0627\u062f \u0645\u0631\u0648\u0631\u06af\u0631 \u0634\u0645\u0627 \u0647\u0645\u0627\u0647\u0646\u06af \u0645\u06cc\u200c\u06af\u0631\u062f\u062f.<\/p>\n<ul data-path-to-node=\"69\">\n<li>\n<p data-path-to-node=\"69,0,0\"><b data-path-to-node=\"69,0,0\" data-index-in-node=\"0\">\u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 \u0641\u0627\u06cc\u0644\u200c\u0647\u0627 \u0627\u0632 \u0645\u0631\u0648\u0631\u06af\u0631:<\/b> \u0622\u062f\u0631\u0633 <code data-path-to-node=\"69,0,0\" data-index-in-node=\"34\">http:\/\/your_server_ip:8080\/files\/<\/code><\/p>\n<\/li>\n<li>\n<p data-path-to-node=\"69,1,0\"><b data-path-to-node=\"69,1,0\" data-index-in-node=\"0\">\u0627\u062a\u0635\u0627\u0644 \u067e\u0631\u0648\u062a\u06a9\u0644 WebDAV:<\/b> \u0622\u062f\u0631\u0633 <code data-path-to-node=\"69,1,0\" data-index-in-node=\"26\">http:\/\/your_server_ip:8080\/webdav\/<\/code><\/p>\n<\/li>\n<\/ul>\n<h2 data-path-to-node=\"71\">\u062c\u0645\u0639\u200c\u0628\u0646\u062f\u06cc<\/h2>\n<p data-path-to-node=\"72\">\u0634\u0645\u0627 \u0628\u0627 \u0645\u0648\u0641\u0642\u06cc\u062a \u062a\u0648\u0627\u0646\u0633\u062a\u06cc\u062f \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u06af\u0631\u0627\u0641\u06cc\u06a9\u06cc \u0631\u0627 \u062f\u0627\u062e\u0644 \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 \u062f\u0627\u06a9\u0631 \u0627\u062c\u0631\u0627 \u06a9\u0631\u062f\u0647 \u0648 \u0628\u0627 \u0648\u0628\u200c\u0633\u0631\u0648\u0631 Caddy \u062f\u0633\u062a\u0631\u0633\u06cc \u0627\u0645\u0646 \u062a\u062d\u062a \u0648\u0628 \u0628\u0631\u0627\u06cc \u0622\u0646 \u0641\u0631\u0627\u0647\u0645 \u06a9\u0646\u06cc\u062f. \u0627\u06cc\u0646 \u0631\u0648\u0634 \u0628\u0631\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631\u06cc \u06a9\u0631\u062f\u0646 \u0633\u0627\u06cc\u0631 \u0646\u0631\u0645\u200c\u0627\u0641\u0632\u0627\u0631\u0647\u0627\u06cc \u062f\u0633\u06a9\u062a\u0627\u067e \u0644\u06cc\u0646\u0648\u06a9\u0633 \u0645\u0627\u0646\u0646\u062f GIMP\u060c \u067e\u0644\u062a\u0641\u0631\u0645\u200c\u0647\u0627\u06cc \u0645\u0647\u0646\u062f\u0633\u06cc \u06cc\u0627 \u062d\u062a\u06cc \u0627\u062c\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc \u0648\u06cc\u0646\u062f\u0648\u0632\u06cc \u0628\u0627 Wine \u0631\u0648\u06cc <b data-path-to-node=\"72\" data-index-in-node=\"262\">\u0633\u0631\u0648\u0631\u0647\u0627\u06cc \u0627\u0628\u0631\u06cc \u067e\u0627\u0631\u0645\u06cc\u0646 \u06a9\u0644\u0648\u062f<\/b> \u06a9\u0627\u0645\u0644\u0627\u064b \u0642\u0627\u0628\u0644 \u062a\u0639\u0645\u06cc\u0645 \u0648 \u06a9\u0627\u0631\u0628\u0631\u062f\u06cc \u0627\u0633\u062a.<\/p>\n<p data-path-to-node=\"72\">\u0627\u0632 \u0647\u0645\u0631\u0627\u0647\u06cc \u0634\u0645\u0627 \u0628\u0627 <strong><a href=\"https:\/\/parmin.cloud\/\">\u067e\u0627\u0631\u0645\u06cc\u0646 \u06a9\u0644\u0648\u062f<\/a><\/strong> \u0633\u067e\u0627\u0633\u06af\u0632\u0627\u0631\u06cc\u0645.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0628\u0627 \u0648\u062c\u0648\u062f \u0631\u0634\u062f \u0631\u0648\u0632\u0627\u0641\u0632\u0648\u0646 \u0633\u0631\u0648\u06cc\u0633\u200c\u0647\u0627\u06cc \u0627\u0628\u0631\u06cc\u060c \u0647\u0646\u0648\u0632 \u0647\u0645 \u0646\u06cc\u0627\u0632 \u0628\u0647 \u0627\u062c\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc \u0646\u06cc\u062a\u06cc\u0648 (Native) \u0648 \u062f\u0633\u06a9\u062a\u0627\u067e \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f. \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u062a\u0631\u06a9\u06cc\u0628 noVNC \u0648 TigerVNC\u060c \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0646\u0631\u0645\u200c\u0627\u0641\u0632\u0627\u0631\u0647\u0627\u06cc \u062f\u0633\u06a9\u062a\u0627\u067e \u0631\u0627 \u062f\u0627\u062e\u0644 \u06cc\u06a9 \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 \u062f\u0627\u06a9\u0631 \u0627\u062c\u0631\u0627 \u06a9\u0631\u062f\u0647 \u0648 \u062a\u0646\u0647\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06cc\u06a9 \u0645\u0631\u0648\u0631\u06af\u0631 \u0648\u0628 \u0628\u0647 \u0622\u0646\u200c\u0647\u0627 \u062f\u0633\u062a\u0631\u0633\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f. \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0628\u0647 \u0634\u0645\u0627 \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc\u200c\u062f\u0647\u062f \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc &hellip;<\/p>\n","protected":false},"author":9,"featured_media":6734,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[258,142,215],"tags":[],"class_list":["post-6733","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ubuntu","category-142","category-server"],"_links":{"self":[{"href":"https:\/\/parmin.cloud\/blog\/wp-json\/wp\/v2\/posts\/6733","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/parmin.cloud\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/parmin.cloud\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/parmin.cloud\/blog\/wp-json\/wp\/v2\/users\/9"}],"replies":[{"embeddable":true,"href":"https:\/\/parmin.cloud\/blog\/wp-json\/wp\/v2\/comments?post=6733"}],"version-history":[{"count":0,"href":"https:\/\/parmin.cloud\/blog\/wp-json\/wp\/v2\/posts\/6733\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/parmin.cloud\/blog\/wp-json\/wp\/v2\/media\/6734"}],"wp:attachment":[{"href":"https:\/\/parmin.cloud\/blog\/wp-json\/wp\/v2\/media?parent=6733"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/parmin.cloud\/blog\/wp-json\/wp\/v2\/categories?post=6733"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/parmin.cloud\/blog\/wp-json\/wp\/v2\/tags?post=6733"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}