{"id":6724,"date":"2026-07-27T11:00:43","date_gmt":"2026-07-27T07:30:43","guid":{"rendered":"https:\/\/parmin.cloud\/blog\/?p=6724"},"modified":"2026-07-27T11:00:43","modified_gmt":"2026-07-27T07:30:43","slug":"%da%86%da%af%d9%88%d9%86%d9%87-%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%b1%d8%a7-%d8%a8%d8%a7-%d8%af%d8%a7%da%a9%d8%b1","status":"publish","type":"post","link":"https:\/\/parmin.cloud\/blog\/%da%86%da%af%d9%88%d9%86%d9%87-%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%b1%d8%a7-%d8%a8%d8%a7-%d8%af%d8%a7%da%a9%d8%b1\/","title":{"rendered":"\u0686\u06af\u0648\u0646\u0647 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc \u06af\u0631\u0627\u0641\u06cc\u06a9\u06cc (GUI) \u0631\u0627 \u0628\u0627 \u062f\u0627\u06a9\u0631 \u0648 Caddy \u0627\u062c\u0631\u0627 \u0648 \u0627\u0632 \u0631\u0627\u0647 \u062f\u0648\u0631 \u062f\u0633\u062a\u0631\u0633\u06cc \u067e\u06cc\u062f\u0627 \u06a9\u0646\u06cc\u0645\u061f"},"content":{"rendered":"<div class=\"container\">\n<div id=\"model-response-message-contentr_e269f80df2857972\" class=\"markdown markdown-main-panel enable-luminous-fast-follows enable-updated-hr-color md-content stronger\" dir=\"rtl\" aria-live=\"off\">\n<p data-path-to-node=\"4\">\u0628\u0627 \u0648\u062c\u0648\u062f \u0631\u0634\u062f \u0631\u0648\u0632\u0627\u0641\u0632\u0648\u0646 \u062e\u062f\u0645\u0627\u062a \u0627\u0628\u0631\u06cc \u0648 \u0648\u0628\u200c\u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646\u200c\u0647\u0627\u060c \u0647\u0646\u0648\u0632 \u0647\u0645 \u0628\u0633\u06cc\u0627\u0631\u06cc \u0627\u0632 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631\u062f\u06cc \u0646\u06cc\u0627\u0632\u0645\u0646\u062f \u0645\u062d\u06cc\u0637 \u06af\u0631\u0627\u0641\u06cc\u06a9\u06cc \u062f\u0633\u06a9\u062a\u0627\u067e (GUI) \u0647\u0633\u062a\u0646\u062f.<\/p>\n<p data-path-to-node=\"5\">\u0628\u0627 \u062a\u0631\u06a9\u06cc\u0628 <b data-path-to-node=\"5\" data-index-in-node=\"9\">noVNC<\/b> \u0648 <b data-path-to-node=\"5\" data-index-in-node=\"17\">TigerVNC<\/b>\u060c \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc \u062f\u0633\u06a9\u062a\u0627\u067e \u062f\u0628\u06cc\u0627\u0646 \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 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u06cc\u06a9 \u0645\u0631\u0648\u0631\u06af\u0631 \u0648\u0628 (\u0628\u062f\u0648\u0646 \u0646\u06cc\u0627\u0632 \u0628\u0647 \u0646\u0635\u0628 \u0647\u06cc\u0686 \u0646\u0631\u0645\u200c\u0627\u0641\u0632\u0627\u0631 \u062c\u0627\u0646\u0628\u06cc) \u0628\u0647 \u0622\u0646\u200c\u0647\u0627 \u062f\u0633\u062a\u0631\u0633\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f. \u0647\u0645\u0686\u0646\u06cc\u0646\u060c \u0627\u062c\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0648\u06cc \u0633\u0631\u0648\u0631 \u0627\u0628\u0631\u06cc <b data-path-to-node=\"5\" data-index-in-node=\"226\">\u067e\u0627\u0631\u0645\u06cc\u0646 \u06a9\u0644\u0648\u062f<\/b> \u0628\u0647 \u0634\u0645\u0627 \u0627\u06cc\u0646 \u0627\u0645\u06a9\u0627\u0646 \u0631\u0627 \u0645\u06cc\u200c\u062f\u0647\u062f \u06a9\u0647 \u0627\u0632 \u0645\u0646\u0627\u0628\u0639 \u067e\u0631\u062f\u0627\u0632\u0634\u06cc \u0648 \u0633\u062e\u062a\u200c\u0627\u0641\u0632\u0627\u0631\u06cc \u0642\u0648\u06cc\u200c\u062a\u0631 \u0633\u0631\u0648\u0631 \u0628\u0647\u0631\u0647\u200c\u0645\u0646\u062f \u0634\u0648\u06cc\u062f.<\/p>\n<p data-path-to-node=\"6\">\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=\"6\" data-index-in-node=\"47\">Mozilla Thunderbird<\/b> \u0631\u0627 \u062f\u0627\u062e\u0644 \u062f\u0627\u06a9\u0631 \u062f\u0628\u06cc\u0627\u0646 \u06f1\u06f2 \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631\u06cc \u06a9\u0631\u062f\u0647 \u0648 \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=\"6\" data-index-in-node=\"131\">Caddy<\/b>\u060c \u0627\u0645\u0646\u06cc\u062a \u0648 \u062f\u0633\u062a\u0631\u0633\u06cc \u0648\u0628 \u0622\u0646 \u0631\u0627 \u062a\u0623\u0645\u06cc\u0646 \u06a9\u0646\u06cc\u0645.<\/p>\n<p data-path-to-node=\"7\">\u062f\u0631 \u067e\u0627\u06cc\u0627\u0646 \u0627\u06cc\u0646 \u0631\u0627\u0647\u0646\u0645\u0627\u060c \u0634\u0645\u0627 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \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 \u0645\u0631\u0648\u0631\u06af\u0631 \u062e\u0648\u062f \u0648\u0635\u0644 \u0634\u062f\u0647 \u0648 \u0628\u0627 Thunderbird \u06a9\u0627\u0631 \u06a9\u0646\u06cc\u062f. \u0647\u0645\u0686\u0646\u06cc\u0646 \u0628\u0647\u200c\u0635\u0648\u0631\u062a \u0627\u062e\u062a\u06cc\u0627\u0631\u06cc \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u0632 \u0637\u0631\u06cc\u0642 \u067e\u0631\u0648\u062a\u06a9\u0644 <b data-path-to-node=\"7\" data-index-in-node=\"167\">WebDAV<\/b> \u0628\u0647 \u0641\u0627\u06cc\u0644\u200c\u0647\u0627\u06cc \u062f\u0627\u062e\u0644 \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 \u062f\u0633\u062a\u0631\u0633\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f.<\/p>\n<h2 data-path-to-node=\"9\">\u067e\u06cc\u0634\u200c\u0646\u06cc\u0627\u0632\u0647\u0627<\/h2>\n<p data-path-to-node=\"10\">\u0642\u0628\u0644 \u0627\u0632 \u0634\u0631\u0648\u0639\u060c \u0628\u0647 \u0645\u0648\u0627\u0631\u062f \u0632\u06cc\u0631 \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u06cc\u062f:<\/p>\n<ol start=\"1\" data-path-to-node=\"11\">\n<li>\n<p data-path-to-node=\"11,0,0\"><b data-path-to-node=\"11,0,0\" data-index-in-node=\"0\">\u06cc\u06a9 \u0633\u0631\u0648\u0631 \u0627\u0628\u0631\u06cc \u0628\u0627 \u0633\u06cc\u0633\u062a\u0645\u200c\u0639\u0627\u0645\u0644 \u062f\u0628\u06cc\u0627\u0646 \u06f1\u06f2 (Debian 12)<\/b> \u062f\u0631 \u067e\u0627\u0631\u0645\u06cc\u0646 \u06a9\u0644\u0648\u062f (\u067e\u06cc\u0634\u0646\u0647\u0627\u062f \u0645\u06cc\u200c\u0634\u0648\u062f \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 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u062f).<\/p>\n<\/li>\n<li>\n<p data-path-to-node=\"11,1,0\">\u06cc\u06a9 \u06a9\u0627\u0631\u0628\u0631 \u063a\u06cc\u0631 root \u0628\u0627 \u062f\u0633\u062a\u0631\u0633\u06cc\u200c\u0647\u0627\u06cc <code data-path-to-node=\"11,1,0\" data-index-in-node=\"32\">sudo<\/code>.<\/p>\n<\/li>\n<li>\n<p data-path-to-node=\"11,2,0\">\u0646\u0635\u0628 \u0628\u0648\u062f\u0646 <b data-path-to-node=\"11,2,0\" data-index-in-node=\"9\">\u062f\u0627\u06a9\u0631 (Docker)<\/b> \u0631\u0648\u06cc \u0633\u0631\u0648\u0631.<\/p>\n<\/li>\n<\/ol>\n<blockquote data-path-to-node=\"12\">\n<p data-path-to-node=\"12,0\"><b data-path-to-node=\"12,0\" data-index-in-node=\"0\">\u0646\u06a9\u062a\u0647 \u0645\u0647\u0645 \u0628\u0631\u0627\u06cc \u0646\u0635\u0628 \u062f\u0627\u06a9\u0631 \u0631\u0648\u06cc \u0633\u0631\u0648\u0631\u0647\u0627\u06cc \u067e\u0627\u0631\u0645\u06cc\u0646 \u06a9\u0644\u0648\u062f:<\/b> \u062c\u0647\u062a \u0646\u0635\u0628 \u0633\u0631\u06cc\u0639\u200c\u062a\u0631 \u0648 \u0639\u0628\u0648\u0631 \u0627\u0632 \u062a\u062d\u0631\u06cc\u0645\u200c\u0647\u0627\u060c \u0647\u0646\u06af\u0627\u0645 \u0627\u0641\u0632\u0648\u062f\u0646 \u0645\u062e\u0627\u0632\u0646 \u062f\u0627\u06a9\u0631 \u0628\u0647 \u0633\u06cc\u0633\u062a\u0645\u200c\u0639\u0627\u0645\u0644 \u062f\u0628\u06cc\u0627\u0646\u060c \u0627\u0632 \u0645\u06cc\u0631\u0648\u0631\u0647\u0627\u06cc \u0632\u06cc\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f:<\/p>\n<ul data-path-to-node=\"12,1\">\n<li>\n<p data-path-to-node=\"12,1,0,0\"><b data-path-to-node=\"12,1,0,0\" data-index-in-node=\"0\">\u06a9\u0644\u06cc\u062f GPG \u062f\u0627\u06a9\u0631:<\/b> <code data-path-to-node=\"12,1,0,0\" data-index-in-node=\"15\">[https:\/\/docker-ce.parmincloud.ir\/gpg](https:\/\/docker-ce.parmincloud.ir\/gpg)<\/code><\/p>\n<\/li>\n<li>\n<p data-path-to-node=\"12,1,1,0\"><b data-path-to-node=\"12,1,1,0\" data-index-in-node=\"0\">\u0622\u062f\u0631\u0633 \u0645\u062e\u0632\u0646 (Repo):<\/b> <code data-path-to-node=\"12,1,1,0\" data-index-in-node=\"18\">[https:\/\/docker-ce.parmincloud.ir\/](https:\/\/docker-ce.parmincloud.ir\/)<\/code><\/p>\n<\/li>\n<\/ul>\n<\/blockquote>\n<h2 data-path-to-node=\"14\">\u06af\u0627\u0645 \u0627\u0648\u0644 \u2014 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0645\u062f\u06cc\u0631 \u0641\u0631\u0622\u06cc\u0646\u062f (supervisord)<\/h2>\n<p data-path-to-node=\"15\">\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 \u0633\u0631\u0648\u06cc\u0633 \u0647\u0645\u200c\u0632\u0645\u0627\u0646 (\u0633\u0631\u0648\u0631 \u06af\u0631\u0627\u0641\u06cc\u06a9\u06cc\u060c \u0645\u0631\u0648\u0631\u06af\u0631 \u0648\u0628\u060c \u0645\u062f\u06cc\u0631\u06cc\u062a \u067e\u0646\u062c\u0631\u0647 \u0648 \u062e\u0648\u062f \u0628\u0631\u0646\u0627\u0645\u0647) \u0627\u0633\u062a\u060c \u0628\u0647 \u06cc\u06a9 \u0627\u0628\u0632\u0627\u0631 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0641\u0631\u0622\u06cc\u0646\u062f \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u06cc\u0645. \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0627\u0632 <b data-path-to-node=\"15\" data-index-in-node=\"158\">supervisord<\/b> \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645.<\/p>\n<p data-path-to-node=\"16\">\u0627\u0628\u062a\u062f\u0627 \u067e\u0648\u0634\u0647\u200c\u0627\u06cc \u0628\u0647 \u0646\u0627\u0645 <code data-path-to-node=\"16\" 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-347 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\" data-hveid=\"0\" data-ved=\"0CAAQhtANahgKEwiQ_NHm_e-VAxUAAAAAHQAAAAAQrQI\">\n<div class=\"formatted-code-block-internal-container ng-tns-c1976435164-347\">\n<div class=\"animated-opacity ng-tns-c1976435164-347\">\n<div class=\"code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c1976435164-347 ng-star-inserted\"><span class=\"ng-tns-c1976435164-347\">Bash<\/span><\/p>\n<div class=\"buttons ng-tns-c1976435164-347 ng-star-inserted\"><\/div>\n<\/div>\n<pre class=\"ng-tns-c1976435164-347\"><code class=\"code-container formatted ng-tns-c1976435164-347\" 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=\"18\">\u06cc\u06a9 \u0641\u0627\u06cc\u0644 \u0628\u0647 \u0646\u0627\u0645 <code data-path-to-node=\"18\" data-index-in-node=\"15\">supervisord.conf<\/code> \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"code-block ng-tns-c1976435164-348 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\" data-hveid=\"0\" data-ved=\"0CAAQhtANahgKEwiQ_NHm_e-VAxUAAAAAHQAAAAAQrgI\">\n<div class=\"formatted-code-block-internal-container ng-tns-c1976435164-348\">\n<div class=\"animated-opacity ng-tns-c1976435164-348\">\n<div class=\"code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c1976435164-348 ng-star-inserted\"><span class=\"ng-tns-c1976435164-348\">Bash<\/span><\/p>\n<div class=\"buttons ng-tns-c1976435164-348 ng-star-inserted\"><\/div>\n<\/div>\n<pre class=\"ng-tns-c1976435164-348\"><code class=\"code-container formatted ng-tns-c1976435164-348\" 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=\"20\">\u06a9\u062f\u0647\u0627\u06cc \u0632\u06cc\u0631 \u0631\u0627 \u062f\u0631\u0648\u0646 \u0641\u0627\u06cc\u0644 \u0642\u0631\u0627\u0631 \u062f\u0647\u06cc\u062f:<\/p>\n<div class=\"code-block ng-tns-c1976435164-349 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\" data-hveid=\"0\" data-ved=\"0CAAQhtANahgKEwiQ_NHm_e-VAxUAAAAAHQAAAAAQrwI\">\n<div class=\"formatted-code-block-internal-container ng-tns-c1976435164-349\">\n<div class=\"animated-opacity ng-tns-c1976435164-349\">\n<div class=\"code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c1976435164-349 ng-star-inserted\"><span class=\"ng-tns-c1976435164-349\">Ini, TOML<\/span><\/p>\n<div class=\"buttons ng-tns-c1976435164-349 ng-star-inserted\"><\/div>\n<\/div>\n<pre class=\"ng-tns-c1976435164-349\"><code class=\"code-container formatted ng-tns-c1976435164-349\" 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\r\n<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\r\n<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\r\n<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\r\n<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><\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<h3 data-path-to-node=\"22\">\u0627\u06cc\u0646 \u0628\u062e\u0634\u200c\u0647\u0627 \u0686\u0647 \u06a9\u0627\u0631\u06cc \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u200c\u062f\u0647\u0646\u062f\u061f<\/h3>\n<ul data-path-to-node=\"23\">\n<li>\n<p data-path-to-node=\"23,0,0\"><b data-path-to-node=\"23,0,0\" data-index-in-node=\"0\"><code data-path-to-node=\"23,0,0\" data-index-in-node=\"0\">[supervisord]<\/code><\/b>: \u06af\u0632\u06cc\u0646\u0647 <code data-path-to-node=\"23,0,0\" data-index-in-node=\"21\">nodaemon=true<\/code> \u0628\u0627\u0639\u062b \u0645\u06cc\u200c\u0634\u0648\u062f \u0641\u0631\u0622\u06cc\u0646\u062f \u0627\u0635\u0644\u06cc \u062f\u0631 foreground \u062f\u0627\u06a9\u0631 \u0628\u0627\u0642\u06cc \u0628\u0645\u0627\u0646\u062f \u0648 \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 \u062e\u0627\u0645\u0648\u0634 \u0646\u0634\u0648\u062f.<\/p>\n<\/li>\n<li>\n<p data-path-to-node=\"23,1,0\"><b data-path-to-node=\"23,1,0\" data-index-in-node=\"0\"><code data-path-to-node=\"23,1,0\" data-index-in-node=\"0\">[program:x11]<\/code><\/b>: \u0627\u062c\u0631\u0627\u06a9\u0646\u0646\u062f\u0647 <b data-path-to-node=\"23,1,0\" data-index-in-node=\"25\">TigerVNC<\/b> \u0627\u0633\u062a \u06a9\u0647 \u0645\u062d\u06cc\u0637 \u0646\u0645\u0627\u06cc\u0634 \u06af\u0631\u0627\u0641\u06cc\u06a9\u06cc (X11 Display) \u0631\u0627 \u0631\u0648\u06cc \u067e\u0648\u0631\u062a\u06cc \u0627\u06cc\u0632\u0648\u0644\u0647 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc\u200c\u06a9\u0646\u062f.<\/p>\n<\/li>\n<li>\n<p data-path-to-node=\"23,2,0\"><b data-path-to-node=\"23,2,0\" data-index-in-node=\"0\"><code data-path-to-node=\"23,2,0\" data-index-in-node=\"0\">[program:easy-novnc]<\/code><\/b>: \u06cc\u06a9 \u0627\u0628\u0632\u0627\u0631 \u0633\u0628\u06a9 \u0627\u0633\u062a \u06a9\u0647 \u067e\u0631\u0648\u062a\u06a9\u0644 VNC \u0631\u0627 \u0628\u0647 <b data-path-to-node=\"23,2,0\" data-index-in-node=\"59\">WebSocket<\/b> \u062a\u0628\u062f\u06cc\u0644 \u0645\u06cc\u200c\u06a9\u0646\u062f \u062a\u0627 \u062f\u0631 \u0645\u0631\u0648\u0631\u06af\u0631 \u0642\u0627\u0628\u0644 \u0646\u0645\u0627\u06cc\u0634 \u0628\u0627\u0634\u062f. \u067e\u0627\u0631\u0627\u0645\u062a\u0631 <code data-path-to-node=\"23,2,0\" data-index-in-node=\"120\">resize=remote<\/code> \u0628\u0627\u0639\u062b \u0645\u06cc\u200c\u0634\u0648\u062f \u0631\u0632\u0648\u0644\u0648\u0634\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0647\u200c\u0637\u0648\u0631 \u062e\u0648\u062f\u06a9\u0627\u0631 \u0628\u0627 \u0627\u0646\u062f\u0627\u0632\u0647 \u067e\u0646\u062c\u0631\u0647 \u0645\u0631\u0648\u0631\u06af\u0631 \u0634\u0645\u0627 \u062a\u0646\u0638\u06cc\u0645 \u0634\u0648\u062f.<\/p>\n<\/li>\n<li>\n<p data-path-to-node=\"23,3,0\"><b data-path-to-node=\"23,3,0\" data-index-in-node=\"0\"><code data-path-to-node=\"23,3,0\" data-index-in-node=\"0\">[program:openbox]<\/code><\/b>: \u0645\u062f\u06cc\u0631 \u067e\u0646\u062c\u0631\u0647\u200c\u0647\u0627 (Window Manager) \u0627\u0633\u062a \u062a\u0627 \u0645\u062d\u06cc\u0637 \u062f\u0627\u0631\u0627\u06cc \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc \u06a9\u0645\/\u0628\u0632\u0631\u06af \u06a9\u0631\u062f\u0646 \u067e\u0646\u062c\u0631\u0647 \u0648 \u0646\u0648\u0627\u0631 \u0639\u0646\u0648\u0627\u0646 \u0628\u0627\u0634\u062f.<\/p>\n<\/li>\n<li>\n<p data-path-to-node=\"23,4,0\"><b data-path-to-node=\"23,4,0\" data-index-in-node=\"0\"><code data-path-to-node=\"23,4,0\" data-index-in-node=\"0\">[program:app]<\/code><\/b>: \u0627\u062c\u0631\u0627\u06cc \u062e\u0648\u062f \u0646\u0631\u0645\u200c\u0627\u0641\u0632\u0627\u0631 Thunderbird \u0631\u0648\u06cc \u0646\u0645\u0627\u06cc\u0634\u06af\u0631 \u0645\u062c\u0627\u0632\u06cc <code data-path-to-node=\"23,4,0\" data-index-in-node=\"65\">:0<\/code>.<\/p>\n<\/li>\n<\/ul>\n<h2 data-path-to-node=\"25\">\u06af\u0627\u0645 \u062f\u0648\u0645 \u2014 \u062a\u0646\u0638\u06cc\u0645 \u0645\u0646\u0648\u06cc OpenBox<\/h2>\n<p data-path-to-node=\"26\">\u0628\u0631\u0627\u06cc \u0627\u06cc\u0646\u200c\u06a9\u0647 \u0628\u062a\u0648\u0627\u0646\u06cc\u062f \u062f\u0631 \u0645\u062d\u06cc\u0637 \u06af\u0631\u0627\u0641\u06cc\u06a9\u06cc \u0631\u0627\u0633\u062a\u200c\u06a9\u0644\u06cc\u06a9 \u06a9\u0631\u062f\u0647 \u0648 \u0628\u0647 \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc\u06cc \u0645\u0627\u0646\u0646\u062f \u062a\u0631\u0645\u06cc\u0646\u0627\u0644 \u06cc\u0627 \u0645\u062f\u06cc\u0631\u06cc\u062a \u067e\u0631\u062f\u0627\u0632\u0646\u062f\u0647\u200c\u0647\u0627 \u062f\u0633\u062a\u0631\u0633\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f\u060c \u0641\u0627\u06cc\u0644 \u0645\u0646\u0648 \u0631\u0627 \u062a\u0646\u0638\u06cc\u0645 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645:<\/p>\n<div class=\"code-block ng-tns-c1976435164-350 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\" data-hveid=\"0\" data-ved=\"0CAAQhtANahgKEwiQ_NHm_e-VAxUAAAAAHQAAAAAQsAI\">\n<div class=\"formatted-code-block-internal-container ng-tns-c1976435164-350\">\n<div class=\"animated-opacity ng-tns-c1976435164-350\">\n<div class=\"code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c1976435164-350 ng-star-inserted\"><span class=\"ng-tns-c1976435164-350\">Bash<\/span><\/p>\n<div class=\"buttons ng-tns-c1976435164-350 ng-star-inserted\"><\/div>\n<\/div>\n<pre class=\"ng-tns-c1976435164-350\"><code class=\"code-container formatted ng-tns-c1976435164-350\" 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=\"28\">\u06a9\u062f\u0647\u0627\u06cc \u0632\u06cc\u0631 \u0631\u0627 \u062f\u0627\u062e\u0644 \u0622\u0646 \u0642\u0631\u0627\u0631 \u062f\u0647\u06cc\u062f:<\/p>\n<div class=\"code-block ng-tns-c1976435164-351 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\" data-hveid=\"0\" data-ved=\"0CAAQhtANahgKEwiQ_NHm_e-VAxUAAAAAHQAAAAAQsQI\">\n<div class=\"formatted-code-block-internal-container ng-tns-c1976435164-351\">\n<div class=\"animated-opacity ng-tns-c1976435164-351\">\n<div class=\"code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c1976435164-351 ng-star-inserted\"><span class=\"ng-tns-c1976435164-351\">XML<\/span><\/p>\n<div class=\"buttons ng-tns-c1976435164-351 ng-star-inserted\"><\/div>\n<\/div>\n<pre class=\"ng-tns-c1976435164-351\"><code class=\"code-container formatted ng-tns-c1976435164-351\" 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><\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<h2 data-path-to-node=\"31\">\u06af\u0627\u0645 \u0633\u0648\u0645 \u2014 \u0633\u0627\u062e\u062a Dockerfile<\/h2>\n<p data-path-to-node=\"32\">\u0627\u06a9\u0646\u0648\u0646 \u0641\u0627\u06cc\u0644 \u0627\u0635\u0644\u06cc \u0633\u0627\u062e\u062a \u0627\u06cc\u0645\u06cc\u062c \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645. \u0646\u0633\u062e\u0647 \u067e\u0627\u06cc\u062f\u0627\u0631 <b data-path-to-node=\"32\" data-index-in-node=\"65\">Debian 12 (Bookworm)<\/b> \u0648 \u0645\u06cc\u0631\u0648\u0631\u0647\u0627\u06cc \u062f\u0627\u062e\u0644\u06cc \u067e\u0627\u0631\u0645\u06cc\u0646 \u06a9\u0644\u0648\u062f \u0631\u0627 \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u0645\u0631\u062d\u0644\u0647 \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0631\u062f\u0647\u200c\u0627\u06cc\u0645.<\/p>\n<div class=\"code-block ng-tns-c1976435164-352 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\" data-hveid=\"0\" data-ved=\"0CAAQhtANahgKEwiQ_NHm_e-VAxUAAAAAHQAAAAAQsgI\">\n<div class=\"formatted-code-block-internal-container ng-tns-c1976435164-352\">\n<div class=\"animated-opacity ng-tns-c1976435164-352\">\n<div class=\"code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c1976435164-352 ng-star-inserted\"><span class=\"ng-tns-c1976435164-352\">Bash<\/span><\/p>\n<div class=\"buttons ng-tns-c1976435164-352 ng-star-inserted\"><\/div>\n<\/div>\n<pre class=\"ng-tns-c1976435164-352\"><code class=\"code-container formatted ng-tns-c1976435164-352\" 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=\"34\">\u06a9\u062f \u0632\u06cc\u0631 \u0631\u0627 \u062f\u0631\u0648\u0646 \u0622\u0646 \u06a9\u067e\u06cc \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"code-block ng-tns-c1976435164-353 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\" data-hveid=\"0\" data-ved=\"0CAAQhtANahgKEwiQ_NHm_e-VAxUAAAAAHQAAAAAQswI\">\n<div class=\"formatted-code-block-internal-container ng-tns-c1976435164-353\">\n<div class=\"animated-opacity ng-tns-c1976435164-353\">\n<div class=\"code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c1976435164-353 ng-star-inserted\"><span class=\"ng-tns-c1976435164-353\">Dockerfile<\/span><\/p>\n<div class=\"buttons ng-tns-c1976435164-353 ng-star-inserted\"><\/div>\n<\/div>\n<pre class=\"ng-tns-c1976435164-353\"><code class=\"code-container formatted ng-tns-c1976435164-353\" role=\"text\" data-test-id=\"code-content\"><span class=\"hljs-comment\"># \u0645\u0631\u062d\u0644\u0647 \u06f1: \u0633\u0627\u062e\u062a easy-novnc \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Golang \u0648 \u0645\u06cc\u0631\u0648\u0631\u0647\u0627\u06cc \u067e\u0627\u0631\u0645\u06cc\u0646 \u06a9\u0644\u0648\u062f<\/span>\r\n<span class=\"hljs-keyword\">FROM<\/span> hub.cr.parmincloud.ir\/library\/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\r\n<span class=\"hljs-comment\"># \u062a\u0646\u0638\u06cc\u0645 \u0645\u06cc\u0631\u0648\u0631 Go \u0648 \u0633\u0627\u062e\u062a \u0628\u0631\u0646\u0627\u0645\u0647<\/span>\r\n<span class=\"hljs-keyword\">RUN<\/span><span class=\"bash\"> go env -w GOPROXY=https:\/\/goproxy.cn,direct &amp;&amp; \\\r\n    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 \u06f2: \u0627\u06cc\u0645\u06cc\u062c \u0646\u0647\u0627\u06cc\u06cc \u0628\u0631 \u067e\u0627\u06cc\u0647 \u062f\u0628\u06cc\u0627\u0646 \u06f1\u06f2<\/span>\r\n<span class=\"hljs-keyword\">FROM<\/span> hub.cr.parmincloud.ir\/library\/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><\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<p data-path-to-node=\"36\">\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=\"38\">\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<\/h2>\n<p data-path-to-node=\"39\">\u0627\u06a9\u0646\u0648\u0646 \u0627\u06cc\u0645\u06cc\u062c \u0631\u0627 \u0633\u0627\u062e\u062a\u0647 \u0648 \u06cc\u06a9 \u0634\u0628\u06a9\u0647\u200c\u06cc \u062f\u0627\u062e\u0644\u06cc \u0628\u0647 \u0647\u0645\u0631\u0627\u0647 Volume \u0628\u0631\u0627\u06cc \u0645\u0627\u0646\u062f\u06af\u0627\u0631\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0627\u06cc\u0645\u06cc\u0644\u200c\u0647\u0627 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645:<\/p>\n<div class=\"code-block ng-tns-c1976435164-354 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\" data-hveid=\"0\" data-ved=\"0CAAQhtANahgKEwiQ_NHm_e-VAxUAAAAAHQAAAAAQtAI\">\n<div class=\"formatted-code-block-internal-container ng-tns-c1976435164-354\">\n<div class=\"animated-opacity ng-tns-c1976435164-354\">\n<div class=\"code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c1976435164-354 ng-star-inserted\"><span class=\"ng-tns-c1976435164-354\">Bash<\/span><\/p>\n<div class=\"buttons ng-tns-c1976435164-354 ng-star-inserted\"><\/div>\n<\/div>\n<pre class=\"ng-tns-c1976435164-354\"><code class=\"code-container formatted ng-tns-c1976435164-354\" role=\"text\" data-test-id=\"code-content\"><span class=\"hljs-comment\"># \u06f1. \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\"># \u06f2. \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\"># \u06f3. \u0627\u06cc\u062c\u0627\u062f \u062f\u06cc\u0633\u06a9 \u0628\u0631\u0627\u06cc \u0630\u062e\u06cc\u0631\u0647 \u0645\u0627\u0646\u062f\u06af\u0627\u0631 \u0627\u0637\u0644\u0627\u0639\u0627\u062a<\/span>\r\ndocker volume create thunderbird-data\r\n\r\n<span class=\"hljs-comment\"># \u06f4. \u0627\u062c\u0631\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 \u0628\u0631\u0646\u0627\u0645\u0647<\/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=\"42\">\u06af\u0627\u0645 \u067e\u0646\u062c\u0645 \u2014 \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u0648\u0628\u200c\u0633\u0631\u0648\u0631 Caddy \u062c\u0647\u062a \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u0648 \u062f\u0633\u062a\u0631\u0633\u06cc \u0648\u0628<\/h2>\n<p data-path-to-node=\"43\">\u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u0644\u0627\u06cc\u0647 \u0627\u0645\u0646\u06cc\u062a\u06cc (\u0646\u0627\u0645 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0648 \u0631\u0645\u0632 \u0639\u0628\u0648\u0631) \u0648 \u0647\u0645\u0686\u0646\u06cc\u0646 \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 \u0641\u0627\u06cc\u0644\u200c\u0647\u0627 \u0627\u0632 \u0637\u0631\u06cc\u0642 WebDAV\u060c \u06cc\u06a9 \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 \u062c\u062f\u06cc\u062f \u0628\u0631\u0627\u06cc Caddy \u0645\u06cc\u200c\u0633\u0627\u0632\u06cc\u0645.<\/p>\n<p data-path-to-node=\"44\">\u06cc\u06a9 \u067e\u0648\u0634\u0647 \u062c\u062f\u06cc\u062f \u0628\u0647 \u0646\u0627\u0645 <code data-path-to-node=\"44\" data-index-in-node=\"20\">caddy<\/code> \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"code-block ng-tns-c1976435164-355 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\" data-hveid=\"0\" data-ved=\"0CAAQhtANahgKEwiQ_NHm_e-VAxUAAAAAHQAAAAAQtQI\">\n<div class=\"formatted-code-block-internal-container ng-tns-c1976435164-355\">\n<div class=\"animated-opacity ng-tns-c1976435164-355\">\n<div class=\"code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c1976435164-355 ng-star-inserted\"><span class=\"ng-tns-c1976435164-355\">Bash<\/span><\/p>\n<div class=\"buttons ng-tns-c1976435164-355 ng-star-inserted\"><\/div>\n<\/div>\n<pre class=\"ng-tns-c1976435164-355\"><code class=\"code-container formatted ng-tns-c1976435164-355\" 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=\"46\">\u06a9\u062f\u0647\u0627\u06cc \u0632\u06cc\u0631 \u0631\u0627 \u062f\u0631\u0648\u0646 <code data-path-to-node=\"46\" data-index-in-node=\"18\">Dockerfile<\/code> \u062c\u062f\u06cc\u062f \u0642\u0631\u0627\u0631 \u062f\u0647\u06cc\u062f:<\/p>\n<div class=\"code-block ng-tns-c1976435164-356 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\" data-hveid=\"0\" data-ved=\"0CAAQhtANahgKEwiQ_NHm_e-VAxUAAAAAHQAAAAAQtgI\">\n<div class=\"formatted-code-block-internal-container ng-tns-c1976435164-356\">\n<div class=\"animated-opacity ng-tns-c1976435164-356\">\n<div class=\"code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c1976435164-356 ng-star-inserted\"><span class=\"ng-tns-c1976435164-356\">Dockerfile<\/span><\/p>\n<div class=\"buttons ng-tns-c1976435164-356 ng-star-inserted\"><\/div>\n<\/div>\n<pre class=\"ng-tns-c1976435164-356\"><code class=\"code-container formatted ng-tns-c1976435164-356\" role=\"text\" data-test-id=\"code-content\"><span class=\"hljs-keyword\">FROM<\/span> hub.cr.parmincloud.ir\/library\/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\"> go env -w GOPROXY=https:\/\/goproxy.cn,direct &amp;&amp; \\\r\n    <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-20220622150308-0fc28259b36d'<\/span> &gt;&gt; go.mod<\/span>\r\n\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\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> hub.cr.parmincloud.ir\/library\/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 gosu &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=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\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><\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<p data-path-to-node=\"48\">\u062d\u0627\u0644\u0627 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc <code data-path-to-node=\"48\" data-index-in-node=\"14\">Caddyfile<\/code> \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"code-block ng-tns-c1976435164-357 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\" data-hveid=\"0\" data-ved=\"0CAAQhtANahgKEwiQ_NHm_e-VAxUAAAAAHQAAAAAQtwI\">\n<div class=\"formatted-code-block-internal-container ng-tns-c1976435164-357\">\n<div class=\"animated-opacity ng-tns-c1976435164-357\">\n<div class=\"code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c1976435164-357 ng-star-inserted\"><span class=\"ng-tns-c1976435164-357\">Bash<\/span><\/p>\n<div class=\"buttons ng-tns-c1976435164-357 ng-star-inserted\"><\/div>\n<\/div>\n<pre class=\"ng-tns-c1976435164-357\"><code class=\"code-container formatted ng-tns-c1976435164-357\" 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=\"50\">\u0645\u062d\u062a\u0648\u0627\u06cc \u0632\u06cc\u0631 \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"code-block ng-tns-c1976435164-358 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\" data-hveid=\"0\" data-ved=\"0CAAQhtANahgKEwiQ_NHm_e-VAxUAAAAAHQAAAAAQuAI\">\n<div class=\"formatted-code-block-internal-container ng-tns-c1976435164-358\">\n<div class=\"animated-opacity ng-tns-c1976435164-358\">\n<div class=\"code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c1976435164-358 ng-star-inserted\"><span class=\"ng-tns-c1976435164-358\">Code snippet<\/span><\/p>\n<div class=\"buttons ng-tns-c1976435164-358 ng-star-inserted\"><\/div>\n<\/div>\n<pre class=\"ng-tns-c1976435164-358\"><code class=\"code-container formatted ng-tns-c1976435164-358\" 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        {$APP_USERNAME} {$APP_PASSWORD_HASH}\r\n    }\r\n}\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<h3 data-path-to-node=\"52\">\u0633\u0627\u062e\u062a \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Caddy \u0648 \u0647\u0634 \u06a9\u0631\u062f\u0646 \u0631\u0645\u0632 \u0639\u0628\u0648\u0631:<\/h3>\n<p data-path-to-node=\"53\">\u0627\u06cc\u0645\u06cc\u062c Caddy \u0631\u0627 \u0628\u0633\u0627\u0632\u06cc\u062f:<\/p>\n<div class=\"code-block ng-tns-c1976435164-359 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\" data-hveid=\"0\" data-ved=\"0CAAQhtANahgKEwiQ_NHm_e-VAxUAAAAAHQAAAAAQuQI\">\n<div class=\"formatted-code-block-internal-container ng-tns-c1976435164-359\">\n<div class=\"animated-opacity ng-tns-c1976435164-359\">\n<div class=\"code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c1976435164-359 ng-star-inserted\"><span class=\"ng-tns-c1976435164-359\">Bash<\/span><\/p>\n<div class=\"buttons ng-tns-c1976435164-359 ng-star-inserted\"><\/div>\n<\/div>\n<pre class=\"ng-tns-c1976435164-359\"><code class=\"code-container formatted ng-tns-c1976435164-359\" 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=\"55\">\u062d\u0627\u0644\u0627 \u06cc\u06a9 \u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u0642\u0648\u06cc \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0631\u062f\u0647 \u0648 \u0639\u0628\u0627\u0631\u062a \u0632\u06cc\u0631 \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f \u062a\u0627 \u0647\u0634 \u0647\u0634\u200c\u0627\u0641\u0632\u0648\u062f\u0647 \u0622\u0646 \u062a\u0648\u0644\u06cc\u062f \u0634\u0648\u062f (\u0628\u0647\u200c\u062c\u0627\u06cc <code data-path-to-node=\"55\" data-index-in-node=\"95\">mypass<\/code> \u0631\u0645\u0632 \u062f\u0644\u062e\u0648\u0627\u0647 \u0631\u0627 \u0628\u0646\u0648\u06cc\u0633\u06cc\u062f):<\/p>\n<div class=\"code-block ng-tns-c1976435164-360 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\" data-hveid=\"0\" data-ved=\"0CAAQhtANahgKEwiQ_NHm_e-VAxUAAAAAHQAAAAAQugI\">\n<div class=\"formatted-code-block-internal-container ng-tns-c1976435164-360\">\n<div class=\"animated-opacity ng-tns-c1976435164-360\">\n<div class=\"code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c1976435164-360 ng-star-inserted\"><span class=\"ng-tns-c1976435164-360\">Bash<\/span><\/p>\n<div class=\"buttons ng-tns-c1976435164-360 ng-star-inserted\"><\/div>\n<\/div>\n<pre class=\"ng-tns-c1976435164-360\"><code class=\"code-container formatted ng-tns-c1976435164-360\" role=\"text\" data-test-id=\"code-content\">docker run --rm -it thunderbird-caddy caddy hash-password --plaintext <span class=\"hljs-string\">'mypass'<\/span><\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<p data-path-to-node=\"57\">\u062e\u0631\u0648\u062c\u06cc \u0627\u06cc\u0646 \u062f\u0633\u062a\u0648\u0631 \u06cc\u06a9 \u0639\u0628\u0627\u0631\u062a \u0647\u0634\u200c\u0634\u062f\u0647 \u0645\u0627\u0646\u0646\u062f <code data-path-to-node=\"57\" data-index-in-node=\"38\">$2a$14$...<\/code> \u062e\u0648\u0627\u0647\u062f \u0628\u0648\u062f. \u0622\u0646 \u0631\u0627 \u06a9\u067e\u06cc \u06a9\u0646\u06cc\u062f.<\/p>\n<p data-path-to-node=\"58\">\u062f\u0631 \u0646\u0647\u0627\u06cc\u062a \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 \u0648\u0628 \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f (\u0645\u0642\u062f\u0627\u0631 <code data-path-to-node=\"58\" data-index-in-node=\"40\">myuser<\/code> \u0631\u0627 \u0628\u0647 \u0646\u0627\u0645 \u06a9\u0627\u0631\u0628\u0631\u06cc \u062f\u0644\u062e\u0648\u0627\u0647 \u0648 <code data-path-to-node=\"58\" data-index-in-node=\"73\">mypass-hash<\/code> \u0631\u0627 \u0628\u0647 \u0647\u0634\u06cc \u06a9\u0647 \u062f\u0631 \u0645\u0631\u062d\u0644\u0647 \u0642\u0628\u0644 \u06af\u0631\u0641\u062a\u06cc\u062f \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0647\u06cc\u062f):<\/p>\n<div class=\"code-block ng-tns-c1976435164-361 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\" data-hveid=\"0\" data-ved=\"0CAAQhtANahgKEwiQ_NHm_e-VAxUAAAAAHQAAAAAQuwI\">\n<div class=\"formatted-code-block-internal-container ng-tns-c1976435164-361\">\n<div class=\"animated-opacity ng-tns-c1976435164-361\">\n<div class=\"code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c1976435164-361 ng-star-inserted\"><span class=\"ng-tns-c1976435164-361\">Bash<\/span><\/p>\n<div class=\"buttons ng-tns-c1976435164-361 ng-star-inserted\"><\/div>\n<\/div>\n<pre class=\"ng-tns-c1976435164-361\"><code class=\"code-container formatted ng-tns-c1976435164-361\" role=\"text\" data-test-id=\"code-content\">docker run --detach --restart=always \\\r\n  --volume=thunderbird-data:\/data \\\r\n  --net=thunderbird-net \\\r\n  --name=thunderbird-web \\\r\n  --env=APP_USERNAME=<span class=\"hljs-string\">\"myuser\"<\/span> \\\r\n  --env=APP_PASSWORD_HASH=<span class=\"hljs-string\">\"mypass-hash\"<\/span> \\\r\n  --publish=8080:8080 \\\r\n  thunderbird-caddy\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<h2 data-path-to-node=\"61\">\u06af\u0627\u0645 \u0634\u0634\u0645 \u2014 \u062a\u0633\u062a \u0648 \u0648\u0631\u0648\u062f \u0628\u0647 \u0628\u0631\u0646\u0627\u0645\u0647<\/h2>\n<p data-path-to-node=\"62\">\u0645\u0631\u0648\u0631\u06af\u0631 \u062e\u0648\u062f \u0631\u0627 \u0628\u0627\u0632 \u06a9\u0631\u062f\u0647 \u0648 \u0622\u062f\u0631\u0633 \u0633\u0631\u0648\u0631 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f:<\/p>\n<p data-path-to-node=\"63\"><code data-path-to-node=\"63\" data-index-in-node=\"0\">http:\/\/SERVER_IP:8080<\/code><\/p>\n<ol start=\"1\" data-path-to-node=\"64\">\n<li>\n<p data-path-to-node=\"64,0,0\">\u0646\u0627\u0645 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0648 \u0631\u0645\u0632 \u0639\u0628\u0648\u0631\u06cc \u06a9\u0647 \u062f\u0631 \u0644\u0627\u06cc\u0647 Caddy \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0631\u062f\u06cc\u062f \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f.<\/p>\n<\/li>\n<li>\n<p data-path-to-node=\"64,1,0\">\u0635\u0641\u062d\u0647 <b data-path-to-node=\"64,1,0\" data-index-in-node=\"5\">easy-noVNC<\/b> \u0638\u0627\u0647\u0631 \u0645\u06cc\u200c\u0634\u0648\u062f\u061b \u0631\u0648\u06cc <b data-path-to-node=\"64,1,0\" data-index-in-node=\"33\">Connect<\/b> \u06a9\u0644\u06cc\u06a9 \u06a9\u0646\u06cc\u062f.<\/p>\n<\/li>\n<li>\n<p data-path-to-node=\"64,2,0\">\u0645\u062d\u06cc\u0637 \u06af\u0631\u0627\u0641\u06cc\u06a9\u06cc Thunderbird \u0628\u0647\u200c\u0635\u0648\u0631\u062a \u06a9\u0627\u0645\u0644 \u0648 \u0648\u0627\u06a9\u0646\u0634\u200c\u06af\u0631\u0627 (Responsive) \u062f\u0631 \u0645\u0631\u0648\u0631\u06af\u0631 \u0634\u0645\u0627 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0645\u06cc\u200c\u0634\u0648\u062f!<\/p>\n<\/li>\n<\/ol>\n<h3 data-path-to-node=\"65\">\u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 \u0641\u0627\u06cc\u0644\u200c\u0647\u0627:<\/h3>\n<ul data-path-to-node=\"66\">\n<li>\n<p data-path-to-node=\"66,0,0\">\u0628\u0631\u0627\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u0648 \u062f\u0627\u0646\u0644\u0648\u062f \u0641\u0627\u06cc\u0644\u200c\u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u0648\u0628\u060c \u0622\u062f\u0631\u0633 <code data-path-to-node=\"66,0,0\" data-index-in-node=\"55\">http:\/\/SERVER_IP:8080\/files\/<\/code> \u0631\u0627 \u0628\u0627\u0632 \u06a9\u0646\u06cc\u062f.<\/p>\n<\/li>\n<li>\n<p data-path-to-node=\"66,1,0\">\u0628\u0631\u0627\u06cc \u0645\u062a\u0635\u0644 \u06a9\u0631\u062f\u0646 \u062f\u06cc\u0633\u06a9 \u0628\u0647\u200c\u0635\u0648\u0631\u062a <b data-path-to-node=\"66,1,0\" data-index-in-node=\"28\">WebDAV<\/b> \u0631\u0648\u06cc \u0648\u06cc\u0646\u062f\u0648\u0632 \u06cc\u0627 \u0644\u06cc\u0646\u0648\u06a9\u0633\u060c \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u0632 \u0622\u062f\u0631\u0633 <code data-path-to-node=\"66,1,0\" data-index-in-node=\"75\">http:\/\/SERVER_IP:8080\/webdav\/<\/code> \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0646\u0645\u0627\u06cc\u06cc\u062f.<\/p>\n<\/li>\n<\/ul>\n<h2 data-path-to-node=\"68\">\u062c\u0645\u0639\u200c\u0628\u0646\u062f\u06cc<\/h2>\n<p data-path-to-node=\"69\">\u0634\u0645\u0627 \u0645\u0648\u0641\u0642 \u0634\u062f\u06cc\u062f \u0628\u062f\u0648\u0646 \u0646\u06cc\u0627\u0632 \u0628\u0647 \u0633\u06cc\u0633\u062a\u0645\u200c\u0639\u0627\u0645\u0644 \u0633\u0646\u06af\u06cc\u0646 \u06cc\u0627 \u0646\u0631\u0645\u200c\u0627\u0641\u0632\u0627\u0631\u0647\u0627\u06cc \u0631\u06cc\u0645\u0648\u062a \u062f\u0633\u06a9\u062a\u0627\u067e \u067e\u06cc\u0686\u06cc\u062f\u0647\u060c \u06cc\u06a9 \u0646\u0631\u0645\u200c\u0627\u0641\u0632\u0627\u0631 \u062f\u0633\u06a9\u062a\u0627\u067e \u0631\u0627 \u062f\u0631\u0648\u0646 \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 \u062f\u0627\u06a9\u0631 \u0627\u062c\u0631\u0627 \u06a9\u0631\u062f\u0647 \u0648 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u0648\u0628 \u0628\u0647 \u0622\u0646 \u062f\u0633\u062a\u0631\u0633\u06cc \u067e\u06cc\u062f\u0627 \u06a9\u0646\u06cc\u062f.<\/p>\n<p data-path-to-node=\"70\">\u0627\u06cc\u0646 \u0633\u0627\u062e\u062a\u0627\u0631 \u067e\u0627\u06cc\u0647 \u0641\u0648\u0642\u200c\u0627\u0644\u0639\u0627\u062f\u0647\u200c\u0627\u06cc \u0627\u0633\u062a \u0648 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0628\u0647 \u062c\u0627\u06cc Thunderbird\u060c \u0646\u0631\u0645\u200c\u0627\u0641\u0632\u0627\u0631\u0647\u0627\u06cc \u062f\u06cc\u06af\u0631\u06cc \u0645\u0627\u0646\u0646\u062f <b data-path-to-node=\"70\" data-index-in-node=\"91\">GIMP<\/b> (\u0648\u06cc\u0631\u0627\u06cc\u0634\u06af\u0631 \u062a\u0635\u0648\u06cc\u0631)\u060c <b data-path-to-node=\"70\" data-index-in-node=\"114\">Wine<\/b> (\u0628\u0631\u0627\u06cc \u0627\u062c\u0631\u0627\u06cc \u0646\u0631\u0645\u200c\u0627\u0641\u0632\u0627\u0631\u0647\u0627\u06cc \u0648\u06cc\u0646\u062f\u0648\u0632\u06cc) \u06cc\u0627 <b data-path-to-node=\"70\" data-index-in-node=\"156\">Cutter<\/b> \u0631\u0627 \u0631\u0648\u06cc <b data-path-to-node=\"70\" data-index-in-node=\"170\">\u0633\u0631\u0648\u0631\u0647\u0627\u06cc \u0627\u0628\u0631\u06cc \u067e\u0627\u0631\u0645\u06cc\u0646 \u06a9\u0644\u0648\u062f<\/b> \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u0648 \u0627\u062c\u0631\u0627 \u0646\u0645\u0627\u06cc\u06cc\u062f.<\/p>\n<\/div>\n<\/div>\n<p data-path-to-node=\"70\">\n<p data-path-to-node=\"70\">\n<p data-path-to-node=\"70\">\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 \u062e\u062f\u0645\u0627\u062a \u0627\u0628\u0631\u06cc \u0648 \u0648\u0628\u200c\u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646\u200c\u0647\u0627\u060c \u0647\u0646\u0648\u0632 \u0647\u0645 \u0628\u0633\u06cc\u0627\u0631\u06cc \u0627\u0632 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631\u062f\u06cc \u0646\u06cc\u0627\u0632\u0645\u0646\u062f \u0645\u062d\u06cc\u0637 \u06af\u0631\u0627\u0641\u06cc\u06a9\u06cc \u062f\u0633\u06a9\u062a\u0627\u067e (GUI) \u0647\u0633\u062a\u0646\u062f. \u0628\u0627 \u062a\u0631\u06a9\u06cc\u0628 noVNC \u0648 TigerVNC\u060c \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc \u062f\u0633\u06a9\u062a\u0627\u067e \u062f\u0628\u06cc\u0627\u0646 \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 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u06cc\u06a9 \u0645\u0631\u0648\u0631\u06af\u0631 \u0648\u0628 (\u0628\u062f\u0648\u0646 \u0646\u06cc\u0627\u0632 \u0628\u0647 \u0646\u0635\u0628 \u0647\u06cc\u0686 \u0646\u0631\u0645\u200c\u0627\u0641\u0632\u0627\u0631 \u062c\u0627\u0646\u0628\u06cc) \u0628\u0647 \u0622\u0646\u200c\u0647\u0627 \u062f\u0633\u062a\u0631\u0633\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f. &hellip;<\/p>\n","protected":false},"author":9,"featured_media":6725,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[142,131,215],"tags":[],"class_list":["post-6724","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-142","category-131","category-server"],"_links":{"self":[{"href":"https:\/\/parmin.cloud\/blog\/wp-json\/wp\/v2\/posts\/6724","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=6724"}],"version-history":[{"count":0,"href":"https:\/\/parmin.cloud\/blog\/wp-json\/wp\/v2\/posts\/6724\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/parmin.cloud\/blog\/wp-json\/wp\/v2\/media\/6725"}],"wp:attachment":[{"href":"https:\/\/parmin.cloud\/blog\/wp-json\/wp\/v2\/media?parent=6724"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/parmin.cloud\/blog\/wp-json\/wp\/v2\/categories?post=6724"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/parmin.cloud\/blog\/wp-json\/wp\/v2\/tags?post=6724"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}