<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>نوشته های mehdi kamali</title><link>https://virgool.ir/feed/@mehdikamali289</link><description></description><language>fa</language><pubDate>2026-11-12 00:45:23</pubDate><image><url>https://files.virgool.ir/upload/users/220946/avatar/avatar.png</url><title>mehdi kamali</title><link>https://virgool.ir/@mehdikamali289</link></image><item><title>نحوه راه اندازی Nginx با پشتیبانی HTTP / 2 در اوبونتو 18.04</title><link>https://virgool.ir/@mehdikamali289/نحوه-راه-اندازی-nginx-با-پشتیبانی-http-2-در-اوبونتو-1804-syjia5i4r3bg</link><description>Nginx یک سرور مجازی وب منبع باز سریع و قابل اعتماد است. شهرت آن به دلیل اشغال کم حافظه ، مقیاس پذیری بالا ، سهولت پیکربندی و پشتیبانی از طیف گسترده ای از پروتکل ها میباشد.HTTP / 2 نسخه جدیدی از پروتکل نقل و انتقال Hypertext است که در وب برای ارائه صفحات از سرور مجازی به مرورگر استفاده می شود. HTTP / 2 اولین به روزرسانی عمده HTTP در تقریباً دو دهه اخیر است : HTTP1.1 در سال 1999 به عموم مردم معرفی شد در حالی که صفحه های وب معمولاً فقط یک فایل HTML با شیوه نامه CSS درون خطی بودند. اینترنت از آن زمان به طرز چشمگیری تغییر کرده است، و اکنون ما با محدودیت های HTTP 1.1 روبرو هستیم – پروتکل سرعت انتقال بالقوه را برای اکثر وب سایت های مدرن محدود می کند زیرا قسمت هایی از یک صفحه را در یک صف دانلود می کند (دانلود قسمت قبلی باید قبل از قسمت بعدی کامل شود) ، و به طور متوسط ​​یک صفحه وب مدرن به دانلود حدود 100 درخواست نیاز دارد (هر درخواست یک عکس ، فایل js ، فایل CSS و غیره است).HTTP / 2 این مشکل را حل می کند زیرا باعث ایجاد چند تغییر اساسی می شود:• همه درخواست ها به صورت موازی دانلود می شوند ، نه در صف• هدرهای HTTP فشرده می شوند• صفحات به عنوان یک باینری ، نه به عنوان یک فایل متنی انتقال پیدا میکنند، که کارآمدتر است• سرور مجازی ها می توانند داده ها را “push” کنندحتی بدون درخواست کاربر ، که سرعت را برای کاربران با تأخیر بالا بهبود می بخشداگرچه HTTP / 2 به رمزگذاری نیاز ندارد ، اما توسعه دهندگان دو مرورگر محبوب ، گوگل کروم و موزیلا فایرفاکس ، اظهار داشتند که به دلایل امنیتی از HTTP / 2 فقط برای اتصالات HTTPS پشتیبانی می کنند. از این رو ، اگر تصمیم دارید سرور مجازی هایی را با پشتیبانی HTTP / 2 تنظیم کنید ، باید آنها را با HTTPS نیز ایمن کنید.این آموزش به شما کمک می کند تا یک سرور مجازی سریع و مطمئن Nginx با پشتیبانی HTTP / 2 تنظیم کنید.پیش نیازهاقبل از شروع کار ، به چند مورد نیاز خواهیم داشت:⦁ یک سرور مجازی Ubuntu 18.04 با پیروی از راهنمای تنظیم اولیه سرور مجازی Ubuntu 18.04 ، شامل یک کاربر sudo غیر ریشه و فایروال.⦁ Nginx که بر روی سرور مجازی شما نصب شده باشد ، و می توانید با دنبال کردن نحوه نصب Nginx در اوبونتو 18.04 ، این کار را انجام دهید.⦁ نام دامنه پیکربندی شده برای اشاره به سرور مجازی شما. می توانید در Namecheap خریداری کنید یا یکی از آنها را به صورت رایگان در Freenom دریافت کنید.⦁ گواهی TLS / SSL که برای سرور مجازی شما تنظیم شده است. سه گزینه دارید:o با دنبال کردن چگونگی ایمن سازی Nginx با Let’s Encrypt در Ubuntu 18.04 می توانید گواهی رایگان از Let’s Encrypt دریافت کنید.o همچنین می توانید با دنبال کردن نحوه ایجاد یک گواهی SSL خود امضا شده برای Nginx در اوبونتو 18.04 ، یک گواهی خود امضا شده ایجاد و تنظیم کنید.o می توانید گواهی را از ارائه دهندگان دیگر خریداری کرده و Nginx را پیکربندی کنید تا با پیروی از مراحل 2 تا 6 نحوه ایجاد یک گواهی SSL خود امضا شده برای Nginx در اوبونتو 18.04 از آن استفاده کنید.⦁ Nginx به گونه ای پیکربندی شود تا ترافیک را از پورت 80 به پورت 443 هدایت کند ، که باید با پیش نیازهای قبلی پوشش داده شود.⦁ Nginx به گونه ای پیکربندی شود تا از یک کلید 2040 بیتی یا بالاتر Ephemeral Diffie-Hellman (DHE) استفاده کند ، که باید با پیش نیازهای قبلی نیز پوشش داده شود.مرحله 1 – فعال کردن پشتیبانی HTTP / 2اگر مرحله نصب بلوک سرور مجازی را در آموزش نصب Nginx دنبال کردید ، باید یک سرور مجازی برای دامنه خود در / etc / nginx / sites-available / your_domain خود با server_namedirective که قبلاً به طور مناسب تنظیم شده است ، داشته باشید. اولین تغییری که ما ایجاد خواهیم کرد اصلاح بلوک سرور مجازی دامنه شما برای استفاده از HTTP / 2 خواهد بود.فایل پیکربندی را برای دامنه خود باز کنید:$ sudo nano /etc/nginx/sites-available/your_domainدر این فایل ، متغیرهای listen مربوط به پورت 443 را بیابید:your_domain’&gt;/etc/nginx/sites-available/your_domain…listen [::]:443 ssl ipv6only=on;listen 443 ssl;…مورد اول مربوط به اتصالات IPv6 است. مورد دوم برای کلیه اتصالات IPv4 است. ما HTTP / 2 را برای هر دو فعال خواهیم کرد.هر یک از دستورالعمل های listen را تغییر دهید تا http2 را شامل شود:your_domain’&gt;/etc/nginx/sites-available/your_domain…listen [::]:443 ssl http2 ipv6only=on;listen 443 ssl http2;…این به Nginx می گوید که از HTTP / 2 با مرورگرهای پشتیبانی شده استفاده کند.فایل پیکربندی را ذخیره کرده و ویرایشگر متن را ویرایش کنید.هر زمان که در فایل های پیکربندی Nginx تغییراتی ایجاد کنید ، باید پیکربندی خطاهای نحوی را مانند این موارد بررسی کنید:$ sudo nginx –tاگر نحو بدون خطا باشد ، خروجی زیر را مشاهده خواهید کرد:Output of sudo nginx -tnginx: the configuration file /etc/nginx/nginx.conf syntax is oknginx: configuration file /etc/nginx/nginx.conf test is successfulدر مرحله بعد ، ما سرور مجازی خود را پیکربندی خواهیم کرد تا از لیست محدودتر رمزها استفاده شود.مرحله 2 – حذف سوئیت های رمزگذاری شده قدیمی و ناایمنHTTP / 2 دارای لیست سیاه رمزهای قدیمی و ناامن است ، بنابراین باید از آنها اجتناب کنیم. مجموعه های cipher مجموعه های رمزنگاری هستند که نحوه رمزگذاری داده های انتقال یافته را توصیف می کنند.روشی که برای تعریف cipher استفاده خواهید کرد بستگی به نحوه پیکربندی گواهینامه های TLS / SSL شما برای Nginx دارد.اگر برای به دست آوردن گواهینامه های خود از Certbot استفاده کرده اید ، فایل /etc/letsencrypt/options-ssl-nginx.conf را نیز ایجاد کرده است که حاوی cipher هایی است که برای HTTP / 2 به اندازه کافی قوی نیستند. اصلاح این فایل متأسفانه مانع از اعمال به روزرسانی Certbot در آینده خواهد شد ، بنابراین ما فقط به Nginx میگوییم که از این فایل استفاده نکند و ما لیست رمزهای خود را مشخص خواهیم کرد.فایل پیکربندی بلوک سرور مجازی را برای دامنه خود باز کنید:$ sudo nano /etc/nginx/sites-available/your_domainخطی را که شامل فایل های گزینه options-ssl-nginx.conf است پیدا کنید و آن را حذف کنید:your_domain’&gt;/etc/nginx/sites-available/your_domain# include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot&lt;^&gt;در زیر آن خط ، این خط را برای تعریف رمز مجاز اضافه کنید:your_domain’&gt;/etc/nginx/sites-available/your_domainssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;فایل را ذخیره کرده و از ویرایشگر خارج شوید.اگر از گواهینامه های خود امضا شده یا از یک گواهی از سوی شخص ثالث استفاده کرده اید و مطابق پیش نیازها آن را پیکربندی کرده اید ، فایل /etc/nginx/snippets/ssl-params.conf را در ویرایشگر متن خود باز کنید:$ sudo nano /etc/nginx/snippets/ssl-params.confخط زیر را پیدا کنید:/etc/nginx/snippets/ssl-params.conf…ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384;…آن را به این صورت اصلاح کنید:/etc/nginx/snippets/ssl-params.conf…ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3فایل را ذخیره کنید و از ویرایشگر خود خارج شوید.یک بار دیگر ، پیکربندی خطاهای نحوی را بررسی کنید:$ sudo nginx -tاگر خطایی دیدید ، آن ها را هدف قرار داده و دوباره تست کنید.هنگامی که خطایی ندیدید ، Nginx را ریستارت کنید:$ sudo systemctl reload nginxبا راه اندازی مجدد سرور مجازی ، تأیید کنید که به خوبی کار می کند.مرحله 3 – تأیید فعال بودن HTTP / 2بیایید اطمینان حاصل کنیم که سرور مجازی با HTTP / 2 کار می کند.از دستور curl برای ایجاد درخواست به سایت خود و مشاهده هدر ها استفاده کنید:$ curl -I -L https://your_domainخروجی زیر را مشاهده خواهید کرد:OutputHTTP/1.1 301 Moved PermanentlyServer: nginx/1.14.0 (Ubuntu)Date: Fri, 06 Jul 2018 19:07:12 GMTContent-Type: text/htmlContent-Length: 194Connection: keep-aliveLocation: https://your_domain/HTTP/2 200server: nginx/1.14.0 (Ubuntu)date: Fri, 06 Jul 2018 19:07:12 GMTcontent-type: text/htmlcontent-length: 16last-modified: Fri, 06 Jul 2018 16:55:37 GMTetag: “5b3f9f09-10”accept-ranges: bytesهمچنین می توانید تأیید کنید که HTTP / 2 در گوگل کروم در حال استفاده است. کروم را باز کرده و به http: // your_domain بروید. ابزارهای برنامه نویسی کروم را باز کنید (View -&gt; Developer -&gt; Developer Tools) و مجدد صفحه را لود کنید (View -&gt; Reload This Page). به سربرگ Network بروید ، بر روی ردیف header جدول که با Name شروع می شود ، کلیک راست کنید و از منوی بازشده گزینه پروتکل را انتخاب کنید.h2 (مخفف HTTP / 2) را در یک ستون پروتکل جدید مشاهده خواهید کرد که نشان می دهد HTTP / 2 در حال کار است.در این مرحله ، شما آماده ارائه مطالب از طریق پروتکل HTTP / 2 هستید. بیایید با فعال کردن HSTS ، امنیت و عملکرد را بهبود ببخشیم.مرحله 4 – فعال کردن امنیت سختگیرانه انتقال HTTP (HSTS)حتی اگر درخواستهای HTTP شما به HTTPS تغییر مسیر دهند ، می توانید HTTP Strict Transport Security (HSTS) را فعال کنید تا از انجام این تغییر مسیرها جلوگیری شود. اگر مرورگر یک هدرHSTS پیدا کند ، دیگر سعی نخواهد کرد تا برای یک بازه زمانی معین ، دوباره از طریق HTTP معمولی به سرور مجازی متصل شود. صرفنظر از نوع داده ، آن را فقط با اتصال HTTPS رمزگذاری شده داده تبادل می کند. این هدر همچنین از ما در برابر حملات تخریب پروتکل محافظت می کند.فایل پیکربندی Nginx را در ویرایشگر خود باز کنید:$ sudo nano /etc/nginx/nginx.confبرای فعال کردن HSTS ، این خط را به فایل اضافه کنید:/etc/nginx/nginx.confhttp {…### Virtual Host Configs##include /etc/nginx/conf.d/*.conf;include /etc/nginx/sites-enabled/*;add_header Strict-Transport-Security “max-age=15768000” always;}…max-age در ثانیه تنظیم می شود. مقدار 15768000 معادل 6 ماه است.به طور پیش فرض ، این هدر به زیردامنه ها اضافه نمی شود. اگر زیر دامنه دارید و می خواهید HSTS روی همه آنها اعمال شود ، باید متغیر includeSubDomains را در انتهای خط اضافه کنید ، مانند این:/etc/nginx/nginx.confadd_header Strict-Transport-Security “max-age=15768000; includeSubDomains” always;فایل را ذخیره کنید و از ویرایشگر خارج شوید.یک بار دیگر ، پیکربندی خطاهای نحوی را بررسی کنید:$ sudo nginx -tسرانجام ، سرور مجازی Nginx را دوباره راه اندازی کنید تا تغییرات اعمال شود.$ sudo systemctl reload nginxنتیجهسرور مجازی Nginx شما اکنون در خدمت صفحات HTTP / 2 است. اگر می خواهید استحکام اتصال SSL خود را آزمایش کنید ، لطفا به SSL Qualys LAB مراجعه کرده و تست را برای سرور مجازی خود اجرا کنید. اگر همه چیز به درستی تنظیم شده است ، باید یک علامت A + برای امنیت دریافت کنید.برچسب‌ها:CSS, HTTP / 2, HTTPS, Hypertext, js, Nginx</description><category>mehdi kamali</category><author>mehdi kamali</author><pubDate>Mon, 29 Jun 2020 12:36:39 +0430</pubDate></item><item><title>چگونه می توان پلتفرم Cloud IDE کد سرور را روی Debian 10 تنظیم كرد</title><link>https://virgool.ir/@mehdikamali289/چگونه-می-توان-پلتفرم-cloud-ide-کد-سرور-را-روی-debian-10-تنظیم-كرد-ypp1mlfhs8nx</link><description>با حرکت ابزارهای گسترش دهنده به سمت cloud ، ایجاد و تطابق پذیری پلتفرم cloud IDE (محیط پیشرفت ادغام شده) در حال رشد است. Cloud IDE ها امکان همکاری زمان واقعی (real-time) بین تیم های توسعه دهنده را فراهم می کنند تا در یک محیط توسعه یکپارچه کار کنند و ناسازگاری ها را به حداقل می رساند اما تولید را افزایش میدهد. چون از طریق مرورگرهای وب قابل دسترسی اند ، Cloud IDE ها در هر نوع دستگاه مدرن موجود هستند.code-server یک کد مایکروسافت ویژوال استودیو است که روی یک سرور مجازی از راه دور اجرا می شود و مستقیماً از مرورگر شما قابل دسترسی است. ویژوال استودیو کد یک ویرایشگر کد مدرن با پشتیبانی Git ادغام شده، یک اشکال زدا برای کد، دارای تکمیل خودکار هوشمند و ویژگی های قابل سفارشی سازی و قابل بسط میباشد. بدان معنی که می توانید از دستگاه های مختلف با سیستم عامل های مختلف استفاده کنید و همیشه یک محیط توسعه مداوم داشته باشید.در این آموزش ، پلتفرم cloud IDE کد سرور مجازی را بر روی دستگاه Debian 10 خود تنظیم کرده و آن را در دامنه قرار می دهید ، که با گواهی TLS در Let’s Encrypt ایمن شده است. در آخر، کد ویژوال استودیو را روی سرور مجازی Debian 10 خود راه اندازی میکنید که در دامنه شما در دسترس است و با پسورد محافظت میشود.پیش نیازها⦁ سرور مجازی که Debian 10 را اجرا میکند با حداقل 2 گیگابایت رم ، دسترسی به ریشه و یک حساب sudo و غیر ریشه. می توانید این کار را با دنبال کردن راهنمای اولیه تنظیم سرور انجام دهید.⦁ Nginx که روی سرور مجازی شما نصب شده باشد. برای راهنمایی در مورد نحوه انجام این کار ، مراحل 1 تا 4 نحوه نصب Nginx را در Debian 10 مطالعه کنید.⦁ یک نام دامنه کاملا ثبت شده برای میزبانی کد سرور مجازی ، که به سرور مجازی شما اشاره میکند. در این آموزش از code-server.your-domain استفاده می شود. می توانید نام دامنه را در Namecheap خریداری کنید ، به صورت رایگان در Freenom دریافت کنید ، یا از ثبت دامنه مورد نظر خود استفاده کنید.مرحله 1 – نصب کد- سرور مجازیدر این بخش کد-سرور مجازی را روی سرور مجازی خود تنظیم می کنید. این مستلزم دانلود آخرین نسخه و ایجاد سرویس سیستمی است که کد-سرور مجازی را همیشه در پس زمینه اجرا می کند. همچنین رویکرد ریستارت را برای سرویس تعیین خواهید کرد ، به این ترتیب کد-سرور مجازی پس از خرابی یا ریبوت احتمالی در دسترس خواهد بود.همه داده های مربوط به کد-سرور مجازی را در پوشه ای به نام ~ / code-server ذخیره می کنید. با اجرای دستور زیر آن را ایجاد کنید:⦁ $ mkdir ~/code-serverبه آن پوشه بروید:⦁ $ cd ~/code-server⦁باید به صفحه نسخه های کد-سرور مجازی Github بروید و آخرین لینوکس را انتخاب کنید (نام فایل شامل “linux” خواهد بود). در زمان نوشتن ، آخرین نسخه 3.2.0 بوده است. با اجرای دستور زیر آن را با استفاده از wget دانلود کنید:$ wget https://github.com/cdr/code-server/releases/download/3.2.0/code-server-3.2.0-linux-x86_64.tar.gzسپس با اجرای این دستور، آرشیو را باز کنید:⦁ $ tar -xzvf code-server-3.2.0-linux-x86_64.tar.gz⦁پوشه ای دقیقاً به نام فایل اصلی که دانلود کرده اید ، دریافت میکنید که شامل کد منبع کد-سرور مجازی است. آن را در / usr / lib / code-server کپی کنید تا با اجرای دستور زیر بتوانید به صورت گسترده به آن دسترسی پیدا کنید:⦁ $ sudo cp -r code-server-3.2.0-linux-x86_64 /usr/lib/code-server⦁سپس ، یک لینک نمادین را در / usr / bin / code-server ایجاد کنید ، که به قابلیت اجرای کد-سرور مجازی اشاره کند:⦁ $ sudo ln -s /usr/lib/code-server/code-server /usr/bin/code-server⦁در مرحله بعد ، یک پوشه برای کد-سرور مجازی ایجاد کنید ، که در آن داده های کاربر را ذخیره می کند:⦁ $ sudo mkdir /var/lib/code-server⦁اکنون که کد-سرور مجازی را دانلود کرده اید و آن را در سراسر سیستم در دسترس قرار داده اید ، یک سرویس سیستمی ایجاد خواهید کرد تا کد-سرور مجازی را همیشه در پس زمینه اجرا کنید.پیکربندی سرویس را در فایلی به نام code-server.service ، در دیرکتوریuser / lib / systemd / system ذخیره خواهید کرد ، جایی که سیستم عامل سرویس های خود را ذخیره می کند. آن را با استفاده از ویرایشگر متن خود ایجاد کنید:⦁ $ sudo nano /lib/systemd/system/code-server.service⦁خطوط زیر را اضافه کنید:/lib/systemd/system/code-server.service[Unit]Description=code-serverAfter=nginx.service[Service]Type=simpleEnvironment=PASSWORD=your_passwordExecStart=/usr/bin/code-server –bind-addr 127.0.0.1:8080 –user-data-dir /var/lib/code-server –auth passwordRestart=always[Install]WantedBy=multi-user.targetدر اینجا ابتدا شرح سرویس را مشخص می کنید. سپس ، اعلام می کنید که سرویس nginx قبل از این باید شروع شود. بعد از بخش [Unit] نوع سرویس را تعریف می کنید (simple بدان معنی است که فرایند باید به سادگی اجرا شود) و فرمانی را که اجرا می شود ارائه می دهد.همچنین مشخص می کنید که اجرای کد-سرور مجازی جهانی باید با چند آرگومان خاص برای کد-سرور مجازی آغاز شود. –bind-addr 127.0.0.1:8080 آن را به localhost  در پورت 8080 متصل می کند ، بنابراین فقط از داخل سرور مجازی شما قابل دسترسی است. –user-data-dir /var/lib/code-server دایرکتوری داده های کاربر خود را تنظیم می کند ، و –auth password مشخص می کند که باید بازدید کنندگان را با یک رمزعبور ، مشخص شده در متغیر محیط PASSWORD که در خط بالای آن مشخص شده است ، تأیید کند.به یاد داشته باشید که your_password را با رمز عبور دلخواه خود جایگزین کنید ، سپس فایل را ذخیره کنید و ببندید.خط بعدی به systemd می گوید تا کد-سرور مجازی را در تمام مواقع عدم کارکرد ریستارت کند (برای مثال ، هنگام خرابی یا قطع فرایند). بخش [Install] به سیستم دستور می دهد تا در صورت امکان ورود به سرور مجازی شما ، این سرویس را شروع کند.با اجرای دستور زیر سرویس کد-سرور مجازی را شروع کنید:⦁ $ sudo systemctl start code-server⦁با مشاهده وضعیت آن بررسی کنید که درست شروع شده است:⦁ $ sudo systemctl status code-server⦁خروجی مشابه این مشاهده خواهید کرد:Output● code-server.service – code-serverLoaded: loaded (/lib/systemd/system/code-server.service; disabled; vendor preset: enabled)Active: active (running) since Wed 2020-05-13 19:31:00 UTC; 13s agoMain PID: 1851 (node)Tasks: 14 (limit: 2378)Memory: 25.7MCGroup: /system.slice/code-server.service├─1851 /usr/lib/code-server/node /usr/lib/code-server/out/node/entry.js –bind-addr 127.0.0.1:8080 –user-data-dir /var/lib/code-server –auth pas└─1862 /usr/lib/code-server/node /usr/lib/code-server/out/node/entry.js –bind-addr 127.0.0.1:8080 –user-data-dir /var/lib/code-server –auth pasMay 13 19:31:00 code-server-update systemd[1]: Started code-server.May 13 19:31:01 code-server-update code-server[1851]: info code-server 3.2.0 fd36a99a4c78669970ebc4eb05768293b657716fMay 13 19:31:01 code-server-update code-server[1851]: info HTTP server listening on http://127.0.0.1:8080May 13 19:31:01 code-server-update code-server[1851]: info – Using custom password for authenticationMay 13 19:31:01 code-server-update code-server[1851]: info – Not serving HTTPSMay 13 19:31:01 code-server-update code-server[1851]: info Automatic updates are enabledبرای شروع خودکار کد-سرور مجازی پس از راه اندازی مجدد سرور ، سرویس خود را با اجرای دستور زیر فعال کنید:⦁ $ sudo systemctl enable code-server⦁در این مرحله ، کد-سرور مجازی را دانلود کرده و آن را در سطح جهانی در دسترس قرار داده اید. سپس ، یک سرویس سیستمی برای آن ایجاد کرده اید و آن را فعال کرده اید ، بنابراین کد-سرور مجازی از هر بوت سرور مجازی شروع می شود. سپس ، با پیکربندی Nginx به عنوان یک پروکسی معکوس بین بازدید کننده و کد-سرور مجازی آن را در معرض نمایش دامنه خود قرار می دهید.مرحله 2 – قرار دادن کد-سرور مجازی در معرض دامنهدر این بخش ، Nginx را به عنوان یک پروکسی معکوس برای کد-سرور مجازی پیکربندی می کنید.همانطور که در مرحله پیش نیاز Nginx آموخته اید ، فایل های پیکربندی سایت آن تحت /etc/nginx/sites-available ذخیره می شوند و بعداً باید با /etc/nginx/sites-enabled لینک شوند تا فعال گردند.پیکربندی را برای قرار دادن کد-سرور مجازی در دامنه خود در فایلی به نام code-server.conf ، تحت /etc/nginx/sites-available ذخیره می کنید. با ایجاد ویرایشگر خود را شروع به کار کنید:⦁ $ sudo nano /etc/nginx/sites-available/code-server.conf⦁خطوط زیر را اضافه کنید:/etc/nginx/sites-available/code-server.confserver {listen 80;listen [::]:80;server_name code-server.your-domain;location / {proxy_pass http://localhost:8080/;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection upgrade;proxy_set_header Accept-Encoding gzip;}}code-server.your-domain را با دامنه مورد نظر خود جایگزین کنید ، سپس فایل را ذخیره کنید و ببندید.در این فایل ، تعریف می کنید که Nginx باید به پورت HTTP 80 گوش کند. سپس ، یک server_name را تعیین می کنید که به Nginx می گوید برای کدام دامنه درخواست ها را بپذیرد و این پیکربندی خاص را اعمال کند. در بلوک بعدی ، برای مکان ریشه (/) ، مشخص می کنید که درخواست ها باید به کد-سرور مجازی در حال اجرا در localhost:8080 به جلو و عقب منتقل شوند. سه خط بعدی (که با proxy_set_header شروع میشود) به Nginx دستور می دهد تا برخی از هدرهای درخواست HTTP را که برای عملکرد صحیح WebSockets مورد نیاز هستند ، استفاده کند.برای فعال کردن پیکربندی این سایت، باید سیملینکی از آن را با دستور زیر در پوشه /etc/nginx/sites-enabled ایجاد کنید:$ sudo ln -s /etc/nginx/sites-available/code-server.conf /etc/nginx/sites-enabled/code-server.confبرای آزمایش اعتبار پیکربندی ، دستور زیر را اجرا کنید:⦁ $ sudo nginx -t⦁خروجی زیر را مشاهده خواهید کرد:Outputnginx: the configuration file /etc/nginx/nginx.conf syntax is oknginx: configuration file /etc/nginx/nginx.conf test is successfulبرای اینکه پیکربندی عملی شود ، باید Nginx را مجدداً راه اندازی کنید:⦁ $ sudo systemctl restart nginx⦁اکنون نصب سرور مجازی کد شما در دامنه شما قابل دسترسی است. در مرحله بعد ، با استفاده از یک گواهی نامه Let’s Encrypt TLS رایگان ، آن را ایمن خواهید کرد.مرحله 3 – امنیت بخشیدن به دامنهدر این بخش دامنه خود را با استفاده از گواهی نامه Let’s Encrypt TLS که با استفاده از Certbot تهیه می نمایید، ایمن می کنید.برای نصب آخرین نسخه Certbot ، دستور زیر را اجرا کنید:⦁ $ sudo apt install certbot python-certbot-nginx⦁به عنوان بخشی از پیش نیازها، ufw (فایروال کامپایل نشده) را فعال و آن را برای ارائه ترافیک HTTP رمزگذاری نشده پیکربندی کردید. برای امکان دسترسی به سایت ایمن، باید آن را به گونه ای پیکربندی کنید که ترافیک رمزگذاری شده را با اجرای دستور زیر بپذیرد:⦁ $ sudo ufw allow https⦁خروجی به صورت زیر خواهد بود:OutputRule addedRule added (v6)به صورت مشابه با Nginx، باید آن را برای اعمال پیکربندی مجدد لود کنید:$ sudo ufw reloadخروجی به این صورت خواهد بود:OutputFirewall reloadedسپس در مرورگر خود به دامنه مورد استفاده برای سرور مجازی کد بروید. اعلان ورود به سرور مجازی کد را مشاهده خواهید کرد.سرور مجازی کد از شما می خواهد رمز عبور خود را وارد کنید. رمز عبوری که در مرحله قبل تنظیم کردید وارد کنید و Enter IDE را بزنید. اکنون سرور مجازی کد را وارد کرده و فوراً رابط کاربری گرافیکی آن را مشاهده می کنید.اکنون که بررسی کرد کد سرور مجازی به درستی در اختیار دامنه قرار گرفته است، گواهی های Let’s Encrypt TLS را برای ایمنی با استفاده از Certbot نصب میکنید.$ sudo certbot –nginx -d code-server.your-domainدر این دستور ، شما certbot را برای درخواست گواهینامه ها برای دامنه خود اجرا می کنید – نام دامنه را با پارامتر -d وارد میکنید. پرچم –nginx به آن می گوید برای پشتیبانی از HTTPS ، پیکربندی سایت Nginx را به طور خودکار تغییر دهید. به یاد داشته باشید که دامنه code-server.your خود را با نام دامنه خود جایگزین کنید.اگر اولین بار است که Certbot را اجرا می کنید ، از شما خواسته می شود که یک آدرس ایمیل برای اخطارهای ضروری وارد کنید و شرایط خدمات EFF را بپذیرید. سپس Certbot درخواست Let’s Encrypt برای گواهی دامنه شما را میدهد. سپس از شما سؤال می کند که آیا مایلید همه ترافیک HTTP را به HTTPS هدایت کنید:OutputPlease choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –1: No redirect – Make no further changes to the webserver configuration.2: Redirect – Make all requests redirect to secure HTTPS access. Choose this fornew sites, or if you’re confident your site works on HTTPS. You can undo thischange by editing your web server’s configuration.– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –Select the appropriate number [1-2] then [enter] (press ‘c’ to cancel):توصیه می شود برای به حداکثر رساندن امنیت گزینه دوم را انتخاب کنید. پس از وارد کردن انتخاب خود ، ENTER را فشار دهید.خروجی مشابه این خواهد بود:OutputIMPORTANT NOTES:– Congratulations! Your certificate and chain have been saved at:/etc/letsencrypt/live/code-server.your-domain/fullchain.pemYour key file has been saved at:/etc/letsencrypt/live/code-server.your-domain/privkey.pemYour cert will expire on … To obtain a new or tweakedversion of this certificate in the future, simply run certbot againwith the “certonly” option. To non-interactively renew *all* ofyour certificates, run “certbot renew”– Your account credentials have been saved in your Certbotconfiguration directory at /etc/letsencrypt. You should make asecure backup of this folder now. This configuration directory willalso contain certificates and private keys obtained by Certbot somaking regular backups of this folder is ideal.– If you like Certbot, please consider supporting our work by:Donating to ISRG / Let’s Encrypt: https://letsencrypt.org/donateDonating to EFF: https://eff.org/donate-leاین بدان معنی است که Certbot موفق به تولید گواهینامه های TLS شده و آنها را در پیکربندی Nginx برای دامنه شما به کار می برد. اکنون می توانید دامنه کد سرور مجازی خود را در مرورگر خود مجدد لود کنید و یک پدلاک (قفل) در سمت چپ آدرس سایت مشاهده کنید ، این بدان معنی است که اتصال شما به درستی ایمن است.اکنون که کد-سرور مجازی را از طریق یک پروکسی معکوس Nginx در دامنه خود دارید ، آماده استفاده از واسط کاربری کد-سرور مجازی هستید.مرحله 4 – استفاده از رابط کد-سرور مجازیدر این بخش از برخی از ویژگی های رابط کد-سرور مجازی استفاده خواهید کرد. از آنجا که کد-سرور مجازی ویژوال استودیو کد در حال اجرا در cloud است ، همان رابط کاربری نسخه دسکتاپ مستقل را دارد.در سمت چپ IDE ، یک ردیف عمودی از شش دکمه وجود دارد که بیشترین ویژگی های مورد استفاده را در یک صفحه جانبی که با عنوان Activity Bar شناخته می شود باز می کند.این نوار قابل تنظیم است بنابراین می توانید این نماها را به ترتیب دیگری جابجا کنید یا آنها را از نوار حذف کنید. به طور پیش فرض ، اولین دکمه منوی کلی را به صورت کشویی باز می کند ، در حالی که نمای دوم پنل اکسپلورر را باز می کند که پیمایش درخت مانند از ساختار پروژه را فراهم می کند. می توانید پوشه ها و فایل های خود را در اینجا مدیریت کنید – ایجاد ، حذف ، جابجایی و تغییر نام آنها در صورت لزوم. نمای بعدی دسترسی به عملکرد جستجو و جایگزینی را فراهم می کندبه دنبال این ، به ترتیب پیش فرض ، نمای شما از سیستم های کنترل منبع مانند Git قرار میگیرد. کد ویژوال استودیو همچنین از سایر ارائه دهندگان کنترل منبع پشتیبانی می کند و می توانید در این مستندات دستورالعمل های بیشتری را برای جریان کاری کنترل منبع با ویرایشگر بیابید.گزینه اشکال زدایی در نوار فعالیت ، کلیه اقدامات معمول را برای اشکال زدایی در پنل ارائه می دهد. ویژوال استودیو کد با پشتیبانی داخلی برای اشکال زدایی زمان اجرای Node.js و هر زبانی که به Javascript تبدیل شود همراه است. برای سایر زبانها می توانید افزونه هایی را برای اشکال زدایی مورد نیاز نصب کنید. می توانید پیکربندی های اشکال زدایی را در فایل launch.jsonذخیره کنید.نمای نهایی در نوار فعالیت ، منویی را برای دسترسی به افزونه های موجود در Marketplace فراهم می کند.قسمت اصلی GUI ویرایشگر شماست که می توانید آن ها را با استفاده از زبانه ها برای ویرایش کد خود جدا کنید. می توانید نمای ویرایش خود را به یک سیستم شبکه یا به فایل های جانبی تغییر دهید.پس از ایجاد فایل جدید از طریق منوی File ، یک فایل خالی در یک تب جدید باز می شود و پس از ذخیره سازی ، نام فایل در پنل جانبی Explorer قابل مشاهده خواهد بود. ایجاد پوشه ها را می توان با کلیک راست بر روی نوار کناری Explorer و کلیک بر روی New Folder انجام داد. می توانید پوشه ای را با کلیک بر روی نام آن و همچنین drag و drop فایل ها و پوشه ها به قسمتهای بالایی بسط دهید تا آنها را به یک مکان جدید منتقل کنید.می توانید با وارد کردن CTRL + SHIFT + `، یا با کلیک کردن بر روی ترمینال در منوی کشویی بالای منو ، و انتخاب New Terminal ، به ترمینال دسترسی پیدا کنید. ترمینال در یک پنل پایین تر باز خواهد شد و دیرکتوری کار آن روی فضای کاری پروژه تنظیم می شود ، که شامل فایل ها و پوشه های نمایش داده شده در پنل سمت Explorer است.شما یک نمای کلی سطح بالا از رابط کد سرور مجازی را جستجو کرده اید و برخی از متداول ترین ویژگی ها را مشاهده کرده اید.نتیجهاکنون کد-سرور مجازی ، یک IDE همه کاره cloud را در اختیار دارید که بر روی سرور مجازی Debian 10 شما نصب شده است ، در دامنه شما قرار گرفته و با استفاده از گواهی Let’s Encrypt ایمن شده است. هم اکنون می توانید بر روی پروژه ها بصورت جداگانه و همچنین در یک مجموعه همکاری تیمی کار کنید. اجرای IDE cloud منابع موجود در دستگاه محلی شما را آزاد می کند و به شما امکان می دهد منابع را در صورت لزوم مقیاس کنید. برای اطلاعات بیشتر در مورد ویژگی های دیگر و دستورالعمل های دقیق در مورد سایر مؤلفه های کد-سرور مجازی ، به مطالب کد ویژوال استودیو مراجعه کنید.برچسب‌ها:Certbot, cloud, Cloud IDE, Marketplace, New Terminal</description><category>mehdi kamali</category><author>mehdi kamali</author><pubDate>Mon, 29 Jun 2020 12:34:05 +0430</pubDate></item><item><title>نحوه دسترسی از راه دور به برنامه های GUI با استفاده از Docker و Caddy در Debian 10</title><link>https://virgool.ir/@mehdikamali289/نحوه-دسترسی-از-راه-دور-به-برنامه-های-gui-با-استفاده-از-docker-و-caddy-در-debian-10-rhy1g5pbcs87</link><description>حتی با محبوبیت روزافزون خدمات ابری ، نیاز به اجرای برنامه های بومی هنوز وجود دارد.با استفاده از noVNC و TigerVNC ، می توانید برنامه های بومی را درون یک کانتینر Docker اجرا کنید و از راه دور با استفاده از یک مرورگر وب به آنها دسترسی پیدا کنید. علاوه بر این ، می توانید برنامه خود را بر روی سرور مجازی با منابع سیستم بیشتر از آنچه به صورت محلی موجود دارید اجرا کنید ، که می تواند در هنگام اجرای برنامه های بزرگ ، انعطاف پذیری بیشتری را ارائه دهد.در این آموزش ، Mozilla Thunderbird ، کلاینت ایمیل را با استفاده از Docker کانتینرایز می کنید. پس از آن ، آن را ایمن کرده و با استفاده از سرور مجازی وب Caddy امکان دسترسی از راه دور را فراهم خواهید کرد.پس از اتمام کار ، فقط با یک مرورگر وب می توانید از هر وسیله ای به Thunderbird دسترسی پیدا کنید. همچنین به صورت اختیاری می توانید با استفاده از WebDAV به طور محلی به فایل های موجود در آن دسترسی پیدا کنید. همچنین یک تصویر کاملاً خود شمول از Docker خواهید داشت که می توانید در هر مکانی اجرا کنید.پیش نیازهاقبل از شروع این راهنما ، به موارد زیر نیاز خواهید داشت:⦁ یک سرور مجازی Debian 10 با حداقل 2 گیگابایت رم و فضای دیسک 4 گیگابایتی.⦁ یک کاربر غیر ریشه با امتیازات sudo.⦁ Docker که روی سرور مجازی شما تنظیم شده باشد. می توانید نحوه نصب و استفاده از Docker در Debian 10 را در این لینک دنبال کنید.مرحله 1 – ایجاد پیکربندی supervisordاکنون که سرور مجازی شما در حال اجرا است و Docker نصب شده است ، آماده هستید تا پیکربندی کانتینر برنامه خود را شروع کنید. از آنجا که کانتینر شما از چندین مؤلفه تشکیل شده است ، برای راه اندازی و نظارت بر آنها باید از یک مدیر فرآیند استفاده کنید. در اینجا ، از supervisord استفاده خواهید کرد. supervisord یک مدیر فرآیند است که در پایتون نوشته شده و اغلب برای موزون کردن کانتینرهای پیچیده استفاده می شود.ابتدا دایرکتوری به نام thunderbird برای کانتینر خود ایجاد کنید و وارد شوید:⦁ $ mkdir ~/thunderbird⦁⦁ $ cd ~/thunderbirdاکنون با استفاده از nano یا ویرایشگر مورد نظر خود ، فایلی به نام supervisord.conf ایجاد و باز کنید:⦁ $ nano ~/thunderbird/supervisord.conf⦁اکنون این اولین بلوک کد را به supervisord.conf اضافه کنید ، که گزینه های جهانی برای supervisord را تعریف می کند:~/thunderbird/supervisord.conf[supervisord]nodaemon=truepidfile=/tmp/supervisord.pidlogfile=/dev/fd/1logfile_maxbytes=0در این بخش ، شما خود supervisord را پیکربندی می کنید. باید nodaemon را روی true تنظیم کنید زیرا درون یک کانتینر Docker به عنوان ورودی وارد می شود. بنابراین ، می خواهید که در پیش زمینه اجرا شود. همچنین pidfile را روی مسیری که توسط یک کاربر غیر ریشه قابل دسترسی است و logfile را روی stdout تنظیم میکنید تا بتوانید ورودها را مشاهده کنید.در مرحله بعد ، یک بلوک کد کوچک دیگر را به supervisord.conf اضافه کنید. این بلوک TigerVNC را که یک سرور مجازی ترکیبی VNC / X11 است شروع می کند:~/thunderbird/supervisord.conf…[program:x11]priority=0command=/usr/bin/Xtigervnc -desktop “Thunderbird” -localhost -rfbport 5900 -SecurityTypes None -AlwaysShared -AcceptKeyEvents -AcceptPointerEvents -AcceptSetDesktopSize -SendCutText -AcceptCutText :0autorestart=truestdout_logfile=/dev/fd/1stdout_logfile_maxbytes=0redirect_stderr=trueدر این بلوک ، سرور مجازی X11 را تنظیم می کنید. X11 یک پروتکل سرور مجازی نمایشگر است ، همان چیزی است که به برنامه های GUI اجازه اجرا می دهد. توجه داشته باشید که در آینده باWayland جایگزین خواهد شد ، اما دسترسی از راه دور هنوز در دست توسعه است.برای این کانتینر ، شما از TigerVNC و سرور مجازی داخلی VNC استفاده می کنید. که دارای چندین مزیت نسبت به استفاده از یک سرور مجازی جداگانه X11 و VNC است:• زمان پاسخ سریعتر ، زیرا کشیدن GUI مستقیماً روی سرور مجازی VNC انجام می شود به جای اینکه روی یک بافر چارچوب واسطه (حافظه ای که محتویات صفحه را ذخیره می کند) انجام شود.• تغییر اندازه خودکار صفحه ، که به برنامه ریموت اجازه می دهد تا به طور خودکار تغییر اندازه دهد تا با کلاینت (در این حالت ، پنجره مرورگر وب شما) متناسب باشد.در صورت تمایل ، می توانید آرگومان را برای گزینه -desktop از Thunderbird به چیز دیگری که انتخاب کرده اید تغییر دهید. سرور مجازی انتخاب شما را به عنوان تیتر صفحه وب مورد استفاده برای دسترسی به برنامه شما نمایش می دهد.اکنون ، بیایید یک بلوک سوم از کد را به supervisord.conf اضافه کنیم تا easy-novnc را شروع کنیم:~/thunderbird/supervisord.conf…[program:easy-novnc]priority=0command=/usr/local/bin/easy-novnc –addr :8080 –host localhost –port 5900 –no-url-password –novnc-params “resize=remote”autorestart=truestdout_logfile=/dev/fd/1stdout_logfile_maxbytes=0redirect_stderr=trueدر این بلوک ، یک easy-novnc را راه اندازی می کنید ، یک سرور مجازی مستقل که یک پوشش حول noVNC فراهم می کند. این سرور مجازی دو نقش را انجام می دهد. ابتدا یک صفحه اتصال ساده فراهم می کند که به شما امکان می دهد گزینه های اتصال را پیکربندی کنید و به شما امکان می دهد موارد پیش فرض را تنظیم کنید. دوم ، VNC را روی WebSocket پروکسی میکند ، که به آن امکان دسترسی از طریق یک مرورگر وب معمولی را می دهد.معمولاً تغییر اندازه در سمت کلاینت انجام می شود (یعنی مقیاس بندی تصویر) ، اما شما از گزینه resize=remote استفاده می کنید تا از تنظیمات وضوح تصویری از راه دور TigerVNC استفاده کامل کنید. این گزینه همچنین تأخیر کمتری را در دستگاه های کندتر مانند Chromebooks رده پایین ایجاد می کند:توجه: در این آموزش از easy-novnc استفاده شده است. در صورت تمایل می توانید به جای آن از websockify و یک وب سرور مجازی جداگانه استفاده کنید. مزیت easy-novnc این است که میزان حافظه و زمان راه اندازی آن به میزان قابل توجهی پایین است و خود شمول به حساب می آید. easy-novnc همچنین یک صفحه اتصال تمیزتر نسبت به noVNC پیش فرض ارائه می دهد و تنظیم گزینه های پیش فرض مفید برای این ستاپ (مانند resize=remote) را ممکن می سازد.برای شروع OpenBox ، یعنی مدیر پنجره ، بلوک زیر را به پیکربندی خود اضافه کنید:~/thunderbird/supervisord.conf…[program:openbox]priority=1command=/usr/bin/openboxenvironment=DISPLAY=:0autorestart=truestdout_logfile=/dev/fd/1stdout_logfile_maxbytes=0redirect_stderr=trueدر این بلوک ، شما در حال راه اندازی OpenBox ، مدیر پنجره سبک X11 هستید. می توانید از این مرحله بگذرید ، اما بدون آن ، نمودارهای میله ای عنوان را ندارید یا نمی توانید اندازه ویندوز را تغییر دهید.در آخر ، بیایید آخرین بلوک را به supervisord.conf اضافه کنیم ، که برنامه اصلی را شروع می کند:~/thunderbird/supervisord.conf…[program:app]priority=1environment=DISPLAY=:0command=/usr/bin/thunderbirdautorestart=truestdout_logfile=/dev/fd/1stdout_logfile_maxbytes=0redirect_stderr=trueدر این بلوک آخر ، برای اطمینان از اجرای Thunderbird بعد از TigerVNC ، اولویت را روی 1 تنظیم کنید در غیر این صورت با یک شرایط مسابقه روبرو می شوید و به طور تصادفی در شروع کار ناکام خواهید ماند. بنابراین autorestart = true قرار دهید تا اگر برنامه به اشتباه بسته شد ، برنامه را مجدداً باز کنید. متغیر محیط DISPLAY به برنامه می گوید تا روی سرور مجازی VNC که قبلاً تنظیم کرده اید نمایش داده شود.در اینجا ظاهر نهایی supervisord.conf شما نمایش داده شده است:~/thunderbird/supervisord.conf[supervisord]nodaemon=truepidfile=/tmp/supervisord.pidlogfile=/dev/fd/1logfile_maxbytes=0[program:x11]priority=0command=/usr/bin/Xtigervnc -desktop “Thunderbird” -localhost -rfbport 5900 -SecurityTypes None -AlwaysShared -AcceptKeyEvents -AcceptPointerEvents -AcceptSetDesktopSize -SendCutText -AcceptCutText :0autorestart=truestdout_logfile=/dev/fd/1stdout_logfile_maxbytes=0redirect_stderr=true[program:easy-novnc]priority=0command=/usr/local/bin/easy-novnc –addr :8080 –host localhost –port 5900 –no-url-password –novnc-params “resize=remote”autorestart=truestdout_logfile=/dev/fd/1stdout_logfile_maxbytes=0redirect_stderr=true[program:openbox]priority=1command=/usr/bin/openboxenvironment=DISPLAY=:0autorestart=truestdout_logfile=/dev/fd/1stdout_logfile_maxbytes=0redirect_stderr=true[program:app]priority=1environment=DISPLAY=:0command=/usr/bin/thunderbirdautorestart=truestdout_logfile=/dev/fd/1stdout_logfile_maxbytes=0redirect_stderr=trueاگر می خواهید برنامه دیگری را کانتینرایز کنید ، /usr/bin/thunderbird را با مسیر قابل اجرای برنامه خود جایگزین کنید. در غیر این صورت ، اکنون آماده پیکربندی منوی اصلی GUI خود هستید.مرحله 2 – تنظیم منوی OpenBoxاکنون که مدیر پروسه شما پیکربندی شده است ، بیایید منوی OpenBox را تنظیم کنیم. این منو به ما امکان می دهد تا برنامه ها را درون کانتینر راه اندازی کنیم. همچنین یک ترمینال و مانیتور پردازش برای اشکال زدایی در صورت لزوم را در اختیار خواهیم داشت.در داخل دیرکتوری برنامه خود ، از nano یا ویرایشگر متن مورد علاقه خود استفاده کنید تا فایل جدیدی به نام menu.xml ایجاد و باز کنید:⦁ $ nano ~/thunderbird/menu.xml⦁اکنون کد زیر را به menu.xml اضافه کنید:~/thunderbird/menu.xml&lt;?xml version=”1.0″ encoding=”utf-8″?&gt;&lt;openbox_menu xmlns=”http://openbox.org/” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation=”http://openbox.org/ file:///usr/share/openbox/menu.xsd”&gt;&lt;menu id=”root-menu” label=”Openbox 3″&gt;&lt;item label=”Thunderbird”&gt;&lt;action name=”Execute”&gt;&lt;execute&gt;/usr/bin/thunderbird&lt;/execute&gt;&lt;/action&gt;&lt;/item&gt;&lt;item label=”Terminal”&gt;&lt;action name=”Execute”&gt;&lt;execute&gt;/usr/bin/x-terminal-emulator&lt;/execute&gt;&lt;/action&gt;&lt;/item&gt;&lt;item label=”Htop”&gt;&lt;action name=”Execute”&gt;&lt;execute&gt;/usr/bin/x-terminal-emulator -e htop&lt;/execute&gt;&lt;/action&gt;&lt;/item&gt;&lt;/menu&gt;&lt;/openbox_menu&gt;این فایل XML شامل آیتم های منو است که با کلیک راست بر روی دسکتاپ ظاهر می شود. هر مورد از یک لیبل و یک عمل تشکیل شده است.اگر می خواهید برنامه دیگری را کانتینرایز کنید ، / usr / bin / thunderbird را با مسیر اجرایی برنامه خود جایگزین کنید و لیبل مورد را تغییر دهید.مرحله 3 – ایجاد Dockerfileاکنون که OpenBox پیکربندی شده است ، Dockerfile را ایجاد خواهید کرد ، که همه چیز را به هم پیوند می دهد.یک Dockerfile در دیرکتوری کانتینر خود ایجاد کنید:⦁ $nano ~/thunderbird/Dockerfile⦁برای شروع ، بیایید برای ساختن easy-novnc کد دیگری اضافه کنیم:~/thunderbird/DockerfileFROM golang:1.14-buster AS easy-novnc-buildWORKDIR /srcRUN go mod init build &amp;&amp; \go get github.com/geek1011/easy-novnc@v1.1.0 &amp;&amp; \go build -o /bin/easy-novnc github.com/geek1011/easy-novncدر مرحله اول ، شما در حال ساختن easy-novnc هستید. برای سادگی و صرفه جویی در فضا این کار در یک مرحله جداگانه انجام می شود – به زنجیره ابزار کلیGo در تصویر نهایی خود نیازی ندارید. به@ v1.1.0 در دستور build توجه داشته باشید. این تضمین می کند که نتیجه تعیین کننده است ، و از آن جهت مهم است که Docker نتیجه هر مرحله را ذخیره می کند. اگر نسخه صریح را مشخص نکرده اید ، Docker در زمان ساخت اولین تصویر، آخرین نسخه های easy-novnc را ارجاع می دهد. علاوه بر این ، بهتر است اطمینان حاصل کنید که یک نسخه خاص از easy-novnc را دانلود می کنید تا در صورت ایجاد تغییرات در رابط CLI آن را داشته باشید.حالا بیایید مرحله دوم را ایجاد کنیم که به تصویر نهایی تبدیل می شود. در اینجا از Debian 10 (Buster) به عنوان تصویر پایه استفاده خواهید کرد. توجه داشته باشید که از آنجا که این کار در یک کانتینر در حال اجرا است ، صرف نظر از توزیع شما در سرور مجازی خود ، کار خواهد کرد.سپس ، بلوک زیر را به Dockerfile خود اضافه کنید:~/thunderbird/Dockerfile…FROM debian:busterRUN apt-get update -y &amp;&amp; \apt-get install -y –no-install-recommends openbox tigervnc-standalone-server supervisor gosu &amp;&amp; \rm -rf /var/lib/apt/lists &amp;&amp; \mkdir -p /usr/share/desktop-directoriesدر این دستورالعمل ، شما Debian 10 را به عنوان تصویر پایه خود نصب می کنید و سپس حداقل مورد نیاز برای اجرای برنامه های GUI را در کانتینر خود نصب می کنید. توجه داشته باشید که apt-get update را به عنوان بخشی از همان دستورالعمل ها برای جلوگیری از مشکلات ذخیره سازی در Docker ، اجرا کنید. برای صرفه جویی در فضا ، همچنین لیست های بسته را که بعد از آن دانلود شده است حذف می کنید (بسته های ذخیره شده به صورت پیش فرض حذف می شوند). همچنین /usr/share/desktop-directories را ایجاد می کنید زیرا برخی برنامه ها به دایرکتوری موجود بستگی دارند.بیایید یک بلوک کد کوچک دیگر اضافه کنیم:~/thunderbird/Dockerfile…RUN apt-get update -y &amp;&amp; \apt-get install -y –no-install-recommends lxterminal nano wget openssh-client rsync ca-certificates xdg-utils htop tar xzip gzip bzip2 zip unzip &amp;&amp; \rm -rf /var/lib/apt/listsدر این دستورالعمل ، شما در حال نصب برخی از نرم افزارها و بسته های عمومی مفید هستید. موارد قابل توجه در اینجا xd-utils (که دستورات پایه مورد استفاده برنامه های دسکتاپ را در لینوکس فراهم می کند) و ca-certificates (که گواهی های ریشه را نصب می کند تا به ما امکان دسترسی به سایت های HTTPS را بدهد) هستند.اکنون می توانیم دستورالعمل برنامه اصلی را اضافه کنیم:~/thunderbird/Dockerfile…RUN apt-get update -y &amp;&amp; \apt-get install -y –no-install-recommends thunderbird &amp;&amp; \rm -rf /var/lib/apt/listsمانند گذشته ، در اینجا ما در حال نصب برنامه هستیم. اگر برنامه کاربردی دیگری را کانتینرایز میکنید ، می توانید این دستورات را با دستورالعمل های لازم برای نصب برنامه خاص خود جایگزین کنید. برخی از برنامه ها برای اجرای داخل Docker به کار کمی بیشتر نیاز دارند. به عنوان مثال ، اگر برنامه ای را نصب می کنید که از Chrome ،Chromium یا QtWebEngine استفاده می کند ، باید از آرگومان خط فرمان –no-sandbox استفاده کنید ، زیرا در Docker پشتیبانی نمی شود.در مرحله بعد ، بیایید دستورالعمل هایی را اضافه کنیم تا چند فایل آخر به کانتینر اضافه شود:~/thunderbird/Dockerfile…COPY –from=easy-novnc-build /bin/easy-novnc /usr/local/bin/COPY menu.xml /etc/xdg/openbox/COPY supervisord.conf /etc/EXPOSE 8080در اینجا شما می توانید فایل های پیکربندی را که قبلاً ایجاد کرده اید به تصویر اضافه کرده و از مرحله اول کپی کردن باینری easy-novnc را انجام دهید.این بلوک کد بعدی دایرکتوری داده را ایجاد می کند و کاربر اختصاصی را برای برنامه شما اضافه می کند. از آن جهت مهم است که برخی برنامه ها از اجرا به عنوان ریشه خودداری می کنند. همچنین بهتر است که حتی در یک کانتینر ، برنامه ها را به صورت ریشه اجرا نکنید.~/thunderbird/Dockerfile…RUN groupadd –gid 1000 app &amp;&amp; \useradd –home-dir /data –shell /bin/bash –uid 1000 –gid 1000 app &amp;&amp; \mkdir -p /dataVOLUME /dataبرای اطمینان از یک UID / GID سازگار برای فایل ها ، صریحاً هر دو را روی 1000 تنظیم می کنید. همچنین می توانید یک حجم را در دایرکتوری داده قرار دهید تا اطمینان حاصل شود که بین راه ریستارت ها همچنان ادامه دارد.در آخر ، دستورالعمل هایی را برای راه اندازی همه موارد اضافه می کنیم:~/thunderbird/Dockerfile…CMD [“sh”, “-c”, “chown app:app /data /dev/stdout &amp;&amp; exec gosu app supervisord”]با تنظیم دستور پیش فرض روی supervisord ، مدیر فرآیندهای مورد نیاز برای اجرای برنامه شما را راه اندازی می کند. در این حالت ، به جای ENTRYPOINT از CMD استفاده می کنید. در بیشتر موارد ، تفاوتی ایجاد نمی کند ، اما استفاده از CMD برای این منظور به چند دلیل مناسب تر است. اولا ، supervisord هیچ آرگومانی مربوط به ما را دریافت نمیکند ، و اگر آرگومان هایی را به کانتینر ارائه می دهید ، آنها CMD را جایگزین می كنند و به ENTRYPOINT اضافه می شوند. دوما ، استفاده از CMD به ما امکان می دهد هنگام ارسال آرگومان ها به داخل کانتینر ، یک دستور کاملاً متفاوت (که توسط / bin / sh -c اجرا خواهد شد) ارائه دهیم ، که اشکال زدایی را آسان تر می کند.و در آخر ، لازم است قبل از شروع supervisord ، chown را به عنوان ریشه اجرا کنید تا از مشکلات مجوز در حجم داده جلوگیری کنید و به فرآیند کودک (child) اجازه دهید stdout را باز کند. این همچنین بدان معنی است که شما باید به جای دستورالعمل USER برای تعویض کاربر از gosu استفاده کنید.در اینجا ظاهر Dockerfile تکمیل شده شما به شرح زیر است:~/thunderbird/DockerfileFROM golang:1.14-buster AS easy-novnc-buildWORKDIR /srcRUN go mod init build &amp;&amp; \go get github.com/geek1011/easy-novnc@v1.1.0 &amp;&amp; \go build -o /bin/easy-novnc github.com/geek1011/easy-novncFROM debian:busterRUN apt-get update -y &amp;&amp; \apt-get install -y –no-install-recommends openbox tigervnc-standalone-server supervisor gosu &amp;&amp; \rm -rf /var/lib/apt/lists &amp;&amp; \mkdir -p /usr/share/desktop-directoriesRUN apt-get update -y &amp;&amp; \apt-get install -y –no-install-recommends lxterminal nano wget openssh-client rsync ca-certificates xdg-utils htop tar xzip gzip bzip2 zip unzip &amp;&amp; \rm -rf /var/lib/apt/listsRUN apt-get update -y &amp;&amp; \apt-get install -y –no-install-recommends thunderbird &amp;&amp; \rm -rf /var/lib/apt/listsCOPY –from=easy-novnc-build /bin/easy-novnc /usr/local/bin/COPY menu.xml /etc/xdg/openbox/COPY supervisord.conf /etc/EXPOSE 8080RUN groupadd –gid 1000 app &amp;&amp; \useradd –home-dir /data –shell /bin/bash –uid 1000 –gid 1000 app &amp;&amp; \mkdir -p /dataVOLUME /dataCMD [“sh”, “-c”, “chown app:app /data /dev/stdout &amp;&amp; exec gosu app supervisord”]Dockerfile خود را ذخیره کرده و ببندید. اکنون آماده ساخت و اجرای کانتینر خود هستیم و سپس به Thunderbird – که یک برنامه GUI است، دسترسی پیدا خواهیم کرد.مرحله 4 – ساخت و اجرای کانتینرمرحله بعدی ساخت کانتینر شما و تنظیم آن در زمان راه اندازی است. همچنین می توانید یک حجم برای حفظ داده های برنامه بین ریستارت ها و به روز رسانی تنظیم کنید.ابتدا کانتینر خود را بسازید. حتماً این دستورات را در دیرکتوری ~ / thunderbird اجرا کنید:⦁ $ docker build -t thunderbird .⦁اکنون یک شبکه جدید ایجاد کنید که بین کانتینرهای برنامه به اشتراک گذاشته شود:⦁ $ docker network create thunderbird-net⦁سپس یک حجم برای ذخیره داده های برنامه ایجاد کنید:⦁ $ docker volume create thunderbird-data⦁در آخر ، آن را اجرا کرده و آن را روی ریستارت خودکار تنظیم کنید:⦁ $ docker run –detach –restart=always –volume=thunderbird-data:/data –net=thunderbird-net –name=thunderbird-app thunderbird⦁توجه داشته باشید که در صورت تمایل ، می توانید thunderbird-app را بعد از گزینه –name با نام دیگری جایگزین کنید. هرچه انتخاب کردید ، اکنون برنامه شما کانتینرایز شده و در حال اجرا است. اکنون بیایید از سرور مجازی وب Caddy برای امنیت آن استفاده کنیم و از راه دور به آن متصل شویم.مرحله 5 – تنظیم Caddyدر این مرحله ، وب سرور مجازی Caddy را تنظیم می کنید تا تأیید هویت انجام شود و به صورت اختیاری ، دسترسی از راه دور فایل از طریق WebDAV را انجام دهد. برای سادگی و اینکه به شما امکان استفاده از پروکسی معکوس موجود خود را بدهد ، آن را در یک کانتینر دیگر اجرا کنید.یک دیرکتوری جدید ایجاد کنید و سپس به داخل آن بروید:⦁ $ mkdir ~/caddy⦁⦁ $ cd ~/caddyاکنون با استفاده از nano یا ویرایشگر مورد نظر خود ، یک Dockerfile جدید ایجاد کنید:⦁ $ nano ~/caddy/Dockerfile⦁سپس بخش های زیر را اضافه کنید:~/caddy/DockerfileFROM golang:1.14-buster AS caddy-buildWORKDIR /srcRUN echo ‘module caddy’ &gt; go.mod &amp;&amp; \echo ‘require github.com/caddyserver/caddy/v2 v2.0.0’ &gt;&gt; go.mod &amp;&amp; \echo ‘require github.com/mholt/caddy-webdav v0.0.0-20200523051447-bc5d19941ac3’ &gt;&gt; go.modRUN echo ‘package main’ &gt; caddy.go &amp;&amp; \echo ‘import caddycmd “github.com/caddyserver/caddy/v2/cmd”‘ &gt;&gt; caddy.go &amp;&amp; \echo ‘import _ “github.com/caddyserver/caddy/v2/modules/standard”‘ &gt;&gt; caddy.go &amp;&amp; \echo ‘import _ “github.com/mholt/caddy-webdav”‘ &gt;&gt; caddy.go &amp;&amp; \echo ‘func main() { caddycmd.Main() }’ &gt;&gt; caddy.goRUN go build -o /bin/caddy .FROM debian:busterRUN apt-get update -y &amp;&amp; \apt-get install -y –no-install-recommends gosu &amp;&amp; \rm -rf /var/lib/apt/listsCOPY –from=caddy-build /bin/caddy /usr/local/bin/COPY Caddyfile /etc/EXPOSE 8080RUN groupadd –gid 1000 app &amp;&amp; \useradd –home-dir /data –shell /bin/bash –uid 1000 –gid 1000 app &amp;&amp; \mkdir -p /dataVOLUME /dataWORKDIR /dataCMD [“sh”, “-c”, “chown app:app /data &amp;&amp; exec gosu app /usr/local/bin/caddy run -adapter caddyfile -config /etc/Caddyfile”]این Dockerfile با فعال کردن افزونه WebDAV ، Caddy را ایجاد می کند ، و سپس آن را در پورت 8080 با Caddyfile در / etc / Caddyfile راه اندازی می کند. فایل را ذخیره کنید و ببندید.سپس سرور مجازی وب Caddy را پیکربندی می کنید. فایلی به نام Caddyfile را در دایرکتوری که تازه ایجاد کرده اید ایجاد کنید:⦁ $ nano ~/caddy/Caddyfileاکنون بلوک کد زیر را به Caddyfile خود اضافه کنید:~/caddy/Caddyfile{order webdav last}:8080 {logroot * /datareverse_proxy thunderbird-app:8080handle /files/* {uri strip_prefix /filesfile_server browse}redir /files /files/handle /webdav/* {uri strip_prefix /webdavwebdav}redir /webdav /webdav/basicauth /* {{env.APP_USERNAME} {env.APP_PASSWORD_HASH}}}این Caddyfile دیرکتوری اصلی را به کانتینر thunderbird-app که در مرحله 4 ایجاد کرده اید پروکسی میکند ( Docker آن را در IP صحیح تجزیه می کند). همچنین یک مرورگر فایل مبتنی بر وب فقط قابل خواندن در /files ارائه می کند و یک سرور مجازی WebDAV را روی / webdav اجرا می کند که می توانید برای دسترسی به فایل های خود به صورت محلی قرار دهید. نام کاربری و رمز عبور از متغیرهای محیط APP_USERNAME و APP_PASSWORD_HASH خوانده می شود.اکنون کانتینر را بسازید:⦁ $ docker build -t thunderbird-caddy .⦁Caddy v2 نیاز به hash رمز عبور مورد نظر شما دارد. دستور زیر را اجرا کنید و به یاد داشته باشید که mypass را با یک رمز عبور قوی به انتخاب خود جایگزین کنید:⦁ $ docker run –rm -it thunderbird-caddy caddy hash-password -plaintext ‘mypass’⦁این دستور یک رشته کاراکتر را تولید می کند. این کار را برای تهیه دستور بعدی در کلیپ بورد خود کپی کنید.اکنون آماده اجرای کانتینر هستید. اطمینان حاصل کنید که myuser را با نام کاربری مورد نظر خود جایگزین کنید و mypass-hash را با همان دستوری که در مرحله قبل اجرا کردید جایگزین نمایید. همچنین می توانید پورت (8080 در اینجا) را برای دسترسی به سرور مجازی خود در پورت دیگری تغییر دهید:$ docker run –detach –restart=always –volume=thunderbird-data:/data –net=thunderbird-net –name=thunderbird-web –env=APP_USERNAME=”myuser” –env=APP_PASSWORD_HASH=”mypass-hash” –publish=8080:8080 thunderbird-caddy⦁اکنون آماده دسترسی و آزمایش برنامه خود هستیم.مرحله 6 – تست و مدیریت برنامهبیایید به برنامه دسترسی پیدا کنیم و از عملکرد آن اطمینان حاصل نماییم.ابتدا http: // your_server_ip: 8080 را در یک مرورگر وب باز کنید ، با اعتباراتی که قبلاً انتخاب کرده اید وارد شوید و روی connect کلیک کنید.اکنون می توانید با برنامه تعامل برقرار کنید ، و برای تنظیم مناسب پنجره مرورگر ، باید به طور خودکار تغییر اندازه دهد.اگر بر روی دسکتاپ سیاه رنگ کلیک راست کنید، باید منویی را مشاهده کنید که به شما امکان دسترسی به یک ترمینال را می دهد. اگر کلیک وسط کنید ​​، باید لیستی از پنجره ها را ببینید.اکنون http://your_server_ip:8080/files/ را در یک مرورگر وب باز کنید. باید بتوانید به فایل های خود دسترسی پیدا کنید.به صورت اختیاری ، می توانید http: // your_server_ip: 8080 / webdav / خود را در یک کلاینت WebDAV نصب کنید. باید بتوانید مستقیماً به فایل های خود دسترسی پیدا کرده و آن ها را تغییر دهید. اگر از گزینه Map network drive در ویندوز اکسپلورر استفاده می کنید ، باید برای اضافه کردنHTTPS از یک پروکسی معکوس استفاده کنید یا HKLM\SYSTEM\CurrentControlSet\Services\WebClient\Parameters\BasicAuthLevel را روی DWORD:2 تنظیم کنید.در هر صورت ، برنامه GUI بومی شما اکنون برای استفاده از راه دور آماده است.نتیجهاکنون با موفقیت یک کانتینر Docker را برای Thunderbird تنظیم کرده اید و سپس با استفاده از Caddy ، دسترسی به آن را از طریق یک مرورگر وب پیکربندی کرده اید. در صورت نیاز به بروزرسانی برنامه خود ، کانتینرها را متوقف کنید ، docker rm thunderbird-app thunderbird-web را اجرای کنید، تصاویر را مجدد بسازید و سپس دستورات docker را از مراحل قبلی بالا مجدداً اجرا کنید. از آنجا که در یک حجم ذخیره می شود ، داده های شما همچنان حفظ می شوند.اگر می خواهید در مورد دستورات اساسی Docker اطلاعات بیشتری کسب کنید ، می توانید این لینک آموزش یا این صفحه را بخوانید. برای استفاده طولانی مدت تر ، میتوانید HTTPS را برای امنیت بیشتر فعال کنید (برای این کار به دامنه ای نیاز دارید).علاوه بر این ، اگر بیش از یک برنامه نصب کرده اید ، می توانید به جای شروع هر کانتینر به صورت دستی ، از Docker Compose یا Kubernetes استفاده کنید. و به یاد داشته باشید ، این آموزش می تواند به عنوان پایه ای برای اجرای سایر برنامه های لینوکس روی سرور مجازی شما استفاده شود ، از جمله:⦁ Wine ، یک لایه سازگاری برای اجرای برنامه های ویندوز در لینوکس.⦁ GIMP ، ویرایشگر تصویر منبع باز.⦁ Cutter ، پلتفرم مهندسی معکوس منبع باز.این گزینه آخر پتانسیل بسیار مهمی را برای کانتینرایز و دسترسی از راه دور به برنامه های GUI ارائه می دهد. با استفاده از این ستاپ ، اکنون می توانید از سرور مجازی  با توان محاسباتی بسیار بیشتر از آنچه به صورت محلی در دسترس دارید برای اجرای ابزارهای منبع فشرده مانند Cutter استفاده کنید.خرید vps – خرید سرور مجازی – خرید سرور – سرور هلند – فروش vps – سرور مجازی آمریکا – خریدvps – سرور مجازی هلند – فروش سرور مجازی – سرور آمریکا – vps – سرور مجازی انگلیس – سرور مجازی آلمان – سرور مجازی کانادا – خرید vps آمریکا – خرید وی پی اس – سرور – خرید سرور مجازی هلند – vps خرید – سرور مجازی فرانسه – سرور مجازی هلند – خرید vps آمریکا – خرید سرور مجازی ارزان هلند – vps – خرید vps هلند – خرید سرور مجازی آمریکا – خرید vps فرانسه – تست vps – سرور مجازی تست – سرور مجازی ویندوز – ارزانترین vps – خرید وی پی اس – vps ارزان –برچسب‌ها:Docker, noVNC, TigerVNC</description><category>mehdi kamali</category><author>mehdi kamali</author><pubDate>Mon, 29 Jun 2020 12:28:01 +0430</pubDate></item><item><title>چگونه می توان پلتفرم Cloud IDE کد سرور را روی CentOS 7 تنظیم كرد</title><link>https://virgool.ir/@mehdikamali289/چگونه-می-توان-پلتفرم-cloud-ide-کد-سرور-را-روی-centos-7-تنظیم-كرد-add8odkoi4rw</link><description>با حرکت ابزارهای گسترش دهنده به سمت cloud ، ایجاد و تطابق پذیری پلتفرم cloud IDE (محیط پیشرفت ادغام شده) در حال رشد است. Cloud IDE ها امکان همکاری زمان واقعی (real-time) بین تیم های توسعه دهنده را فراهم می کنند تا در یک محیط توسعه یکپارچه کار کنند و ناسازگاری ها را به حداقل می رساند اما تولید را افزایش میدهد. چون از طریق مرورگرهای وب قابل دسترسی اند ، Cloud IDE ها در هر نوع دستگاه مدرن موجود هستند.code-server یک کد مایکروسافت ویژوال استودیو است که روی یک سرور مجازی از راه دور اجرا می شود و مستقیماً از مرورگر شما قابل دسترسی است. ویژوال استودیو کد یک ویرایشگر کد مدرن با پشتیبانی Git ادغام شده، یک اشکال زدا برای کد، دارای تکمیل خودکار هوشمند و ویژگی های قابل سفارشی سازی و قابل بسط میباشد. بدان معنی که می توانید از دستگاه های مختلف با سیستم عامل های مختلف استفاده کنید و همیشه یک محیط توسعه مداوم داشته باشید.در این آموزش ، پلتفرم cloud IDE کد سرور مجازی را بر روی دستگاه CentOS 7 خود تنظیم کرده و آن را در دامنه قرار می دهید ، که با گواهی TLS در Let’s Encrypt ایمن شده است. در آخر، کد ویژوال استودیو را روی سرور مجازی CentOS 7 خود راه اندازی میکنید که در دامنه شما در دسترس است و با پسورد محافظت میشود.پیش نیازها⦁ سرور مجازی که CentOS 7 را اجرا میکند با حداقل 2 گیگابایت رم ، دسترسی به ریشه و یک حساب sudo و غیر ریشه. می توانید این کار را با دنبال کردن راهنمای اولیه تنظیم سرور CentOS 7 انجام دهید.⦁ Nginx که روی سرور مجازی شما نصب شده باشد. برای راهنمایی در مورد نحوه انجام این کار ، مراحل 1 تا 4 نحوه نصب Nginx را در CentOS 7 مطالعه کنید.⦁ یک نام دامنه کاملا ثبت شده برای میزبانی کد سرور مجازی ، که به سرور مجازی شما اشاره میکند. در این آموزش از code-server.your-domain استفاده می شود. می توانید نام دامنه را در Namecheap خریداری کنید ، به صورت رایگان در Freenom دریافت کنید ، یا از ثبت دامنه مورد نظر خود استفاده کنید.مرحله 1 – نصب کد- سرور مجازیدر این بخش کد-سرور مجازی را روی سرور مجازی خود تنظیم می کنید. این مستلزم دانلود آخرین نسخه و ایجاد سرویس سیستمی است که کد-سرور مجازی را همیشه در پس زمینه اجرا می کند. همچنین رویکرد ریستارت را برای سرویس تعیین خواهید کرد ، به این ترتیب کد-سرور پس از خرابی یا ریبوت احتمالی در دسترس خواهد بود.همه داده های مربوط به کد-سرور مجازی را در پوشه ای به نام ~ / code-server ذخیره می کنید. با اجرای دستور زیر آن را ایجاد کنید:⦁ $ mkdir ~/code-serverبه آن پوشه بروید:⦁ $ cd ~/code-server⦁باید به صفحه نسخه های کد-سرور مجازی Github بروید و آخرین لینوکس را انتخاب کنید (نام فایل شامل “linux” خواهد بود). در زمان نوشتن ، آخرین نسخه 3.2.0 بوده است. با اجرای دستور زیر آن را با استفاده از curl دانلود کنید:⦁ $ curl -LO https://github.com/cdr/code-server/releases/download/3.2.0/code-server-3.2.0-linux-x86_64.tar.gzسپس با اجرای این دستور، آرشیو را باز کنید:⦁ $ tar -xzvf code-server-3.2.0-linux-x86_64.tar.gz⦁پوشه ای دقیقاً به نام فایل اصلی که دانلود کرده اید ، دریافت میکنید که شامل کد منبع کد-سرور مجازی است. آن را در / usr / lib / code-server کپی کنید تا با اجرای دستور زیر بتوانید به صورت گسترده به آن دسترسی پیدا کنید:⦁ $ sudo cp -r code-server-3.2.0-linux-x86_64 /usr/lib/code-server⦁سپس ، یک لینک نمادین را در / usr / bin / code-server ایجاد کنید ، که به عملکرد کد-سرور مجازی اشاره کند:⦁ $ sudo ln -s /usr/lib/code-server/code-server /usr/bin/code-server⦁در مرحله بعد ، یک پوشه برای کد-سرور مجازی ایجاد کنید ، که در آن داده های کاربر را ذخیره می کند:⦁ $ sudo mkdir /var/lib/code-server⦁اکنون که کد-سرور مجازی را دانلود کرده اید و آن را در سراسر سیستم در دسترس قرار داده اید ، یک سرویس سیستمی ایجاد خواهید کرد تا کد-سرور مجازی را همیشه در پس زمینه اجرا کنید.پیکربندی سرویس را در فایلی به نام code-server.service ، در دیرکتوریuser / lib / systemd / system ذخیره خواهید کرد ، جایی که سیستم عامل سرویس های خود را ذخیره می کند. آن را با استفاده از ویرایشگر متن خود ایجاد کنید:⦁ $ sudo nano /lib/systemd/system/code-server.service⦁خطوط زیر را اضافه کنید:/lib/systemd/system/code-server.service[Unit]Description=code-serverAfter=nginx.service[Service]Type=simpleEnvironment=PASSWORD=your_passwordExecStart=/usr/bin/code-server –bind-addr 127.0.0.1:8080 –user-data-dir /var/lib/code-server –auth passwordRestart=always[Install]WantedBy=multi-user.targetدر اینجا ابتدا شرح سرویس را مشخص می کنید. سپس ، اعلام می کنید که سرویس nginx قبل از این باید شروع شود. بعد از بخش [Unit] نوع سرویس را تعریف می کنید (simple بدان معنی است که فرایند باید به سادگی اجرا شود) و فرمانی را که اجرا می شود ارائه می دهد.همچنین مشخص می کنید که اجرای کد-سرور مجازی جهانی باید با چند آرگومان خاص برای کد-سرور مجازی آغاز شود. –bind-addr 127.0.0.1:8080 آن را به localhost  در پورت 8080 متصل می کند ، بنابراین فقط از داخل سرور مجازی شما قابل دسترسی است. –user-data-dir /var/lib/code-server دایرکتوری داده های کاربر خود را تنظیم می کند ، و –auth password مشخص می کند که باید بازدید کنندگان را با یک رمزعبور ، مشخص شده در متغیر محیط PASSWORD که در خط بالای آن مشخص شده است ، تأیید کند.به یاد داشته باشید که your_password را با رمز عبور دلخواه خود جایگزین کنید ، سپس فایل را ذخیره کنید و ببندید.خط بعدی به systemd می گوید تا کد-سرور مجازی را در تمام مواقع عدم کارکرد ریستارت کند (برای مثال ، هنگام خرابی یا قطع فرایند). بخش [Install] به سیستم دستور می دهد تا در صورت امکان ورود به سرور مجازی شما ، این سرویس را شروع کند.با اجرای دستور زیر سرویس کد-سرور مجازی را شروع کنید:⦁ $ sudo systemctl start code-server⦁با مشاهده وضعیت آن بررسی کنید که درست شروع شده است:⦁ $ sudo systemctl status code-server⦁خروجی مشابه این مشاهده خواهید کرد:Output● code-server.service – code-serverLoaded: loaded (/usr/lib/systemd/system/code-server.service; disabled; vendor preset: disabled)Active: active (running) since Wed 2020-05-13 19:57:27 UTC; 5s agoMain PID: 10608 (node)CGroup: /system.slice/code-server.service├─10608 /usr/lib/code-server/node /usr/lib/code-server/out/node/entry.js –bind-addr 127.0.0.1:8080 –user-data-dir /var/lib/code-server –auth…└─10622 /usr/lib/code-server/node /usr/lib/code-server/out/node/entry.js –bind-addr 127.0.0.1:8080 –user-data-dir /var/lib/code-server –auth…May 13 19:57:27 code-server-update-centos systemd[1]: Started code-server.May 13 19:57:27 code-server-update-centos code-server[10608]: info code-server 3.2.0 fd36a99a4c78669970ebc4eb05768293b657716fMay 13 19:57:27 code-server-update-centos code-server[10608]: info HTTP server listening on http://127.0.0.1:8080May 13 19:57:27 code-server-update-centos code-server[10608]: info – Using custom password for authenticationMay 13 19:57:27 code-server-update-centos code-server[10608]: info – Not serving HTTPSMay 13 19:57:27 code-server-update-centos code-server[10608]: info Automatic updates are enabledبرای شروع خودکار کد-سرور مجازی پس از راه اندازی مجدد سرور مجازی ، سرویس خود را با اجرای دستور زیر فعال کنید:⦁ $ sudo systemctl enable code-server⦁در این مرحله ، کد-سرور مجازی را دانلود کرده و آن را در سطح جهانی در دسترس قرار داده اید. سپس ، یک سرویس سیستمی برای آن ایجاد کرده اید و آن را فعال کرده اید ، بنابراین کد-سرور از هر بوت سرور مجازی شروع می شود. سپس ، با پیکربندی Nginx به عنوان یک پروکسی معکوس بین بازدید کننده و کد-سرور آن را در معرض نمایش دامنه خود قرار می دهید.مرحله 2 – قرار دادن کد-سرور مجازی در معرض دامنهدر این بخش ، Nginx را به عنوان یک پروکسی معکوس برای کد-سرور مجازی پیکربندی می کنید.همانطور که در مرحله پیش نیاز Nginx آموخته اید ، فایل های پیکربندی سایت آن تحت /etc/nginx/conf.d ذخیره می شوند و بعداً باید با فعال شدن Nginx ، به صورت خودکار لود میشوند.پیکربندی را برای قرار دادن کد-سرور مجازی در دامنه خود در فایلی به نام code-server.conf ، تحت /etc/nginx/conf.d ذخیره می کنید. با ایجاد ویرایشگر خود را شروع به کار کنید:⦁ $ sudo vi /etc/nginx/conf.d/code-server.conf⦁خطوط زیر را اضافه کنید:/etc/nginx/conf.d/code-server.confserver {listen 80;listen [::]:80;server_name code-server.your-domain;location / {proxy_pass http://localhost:8080/;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection upgrade;proxy_set_header Accept-Encoding gzip;}}code-server.your-domain را با دامنه مورد نظر خود جایگزین کنید ، سپس فایل را ذخیره کنید و ببندید.در این فایل ، تعریف می کنید که Nginx باید به پورت HTTP 80 گوش کند. سپس ، یک server_name را تعیین می کنید که به Nginx می گوید برای کدام دامنه درخواست ها را بپذیرد و این پیکربندی خاص را اعمال کند.در بلوک بعدی ، برای مکان ریشه (/) ، مشخص می کنید که درخواست ها باید به کد-سرور مجازی در حال اجرا در localhost:8080 به جلو و عقب منتقل شوند. سه خط بعدی (که با proxy_set_header شروع میشود) به Nginx دستور می دهد تا برخی از هدرهای درخواست HTTP را که برای عملکرد صحیح WebSockets مورد نیاز هستند ، استفاده کند.برای آزمایش اعتبار پیکربندی ، دستور زیر را اجرا کنید:⦁ $ sudo nginx -t⦁خروجی زیر را مشاهده خواهید کرد:Outputnginx: the configuration file /etc/nginx/nginx.conf syntax is oknginx: configuration file /etc/nginx/nginx.conf test is successfulبرای اینکه پیکربندی عملی شود ، باید Nginx را مجدداً راه اندازی کنید:⦁ $ sudo systemctl restart nginx⦁CentOS 7 مجهز به SELinux است ، با یک آیین نامه سختگیرانه ، که به طور پیش فرض اجازه اتصال Nginx به سوکت های محلی TCP را نمی دهد. Nginx برای خدمت به عنوان یک پروکسی معکوس برای سرور مجازی کد ، باید این کار را انجام دهد. دستور زیر را اجرا کنید تا این قانون را به صورت دائم منحل کنید:$ sudo setsebool httpd_can_network_connect 1 -Pسپس در مرورگر خود به دامنه مورد استفاده برای سرور مجازی کد بروید. اعلان ورود به سرور مجازی کد را مشاهده خواهید کرد.سرور مجازی کد از شما می خواهد رمز عبور خود را وارد کنید. رمز عبوری که در مرحله قبل تنظیم کردید وارد کنید و Enter IDE را بزنید. اکنون سرور مجازی کد را وارد کرده و فوراً رابط کاربری گرافیکی آن را مشاهده می کنید.اکنون نصب سرور مجازی کد شما در دامنه شما قابل دسترسی است. در مرحله بعد ، با استفاده از یک گواهی نامه Let’s Encrypt TLS رایگان ، آن را ایمن خواهید کرد.مرحله 3 – امنیت بخشیدن به دامنهدر این بخش دامنه خود را با استفاده از گواهی نامه Let’s Encrypt TLS که با استفاده از Certbot تهیه می نمایید، ایمن می کنید.برای نصب آخرین نسخه Certbot ، دستور زیر را اجرا کنید:⦁ $ sudo yum install certbot python2-certbot-nginx -y⦁برای درخواست گواهی نامه برای دامنه خود ، دستور زیر را اجرا کنید:⦁ $ sudo certbot –nginx -d code-server.your-domain⦁در این دستور ، شما certbot را برای درخواست گواهینامه ها برای دامنه خود اجرا می کنید – نام دامنه را با پارامتر -d وارد میکنید. پرچم –nginx به آن می گوید برای پشتیبانی از HTTPS ، پیکربندی سایت Nginx را به طور خودکار تغییر دهید. به یاد داشته باشید که دامنه code-server.your خود را با نام دامنه خود جایگزین کنید.اگر اولین بار است که Certbot را اجرا می کنید ، از شما خواسته می شود که یک آدرس ایمیل برای اخطارهای ضروری وارد کنید و شرایط خدمات EFF را بپذیرید. سپس Certbot درخواست Let’s Encrypt برای گواهی دامنه شما را میدهد. سپس از شما سؤال می کند که آیا مایلید همه ترافیک HTTP را به HTTPS هدایت کنید:OutputPlease choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –1: No redirect – Make no further changes to the webserver configuration.2: Redirect – Make all requests redirect to secure HTTPS access. Choose this fornew sites, or if you’re confident your site works on HTTPS. You can undo thischange by editing your web server’s configuration.– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –Select the appropriate number [1-2] then [enter] (press ‘c’ to cancel):توصیه می شود برای به حداکثر رساندن امنیت گزینه دوم را انتخاب کنید. پس از وارد کردن انتخاب خود ، ENTER را فشار دهید.خروجی مشابه این خواهد بود:OutputIMPORTANT NOTES:– Congratulations! Your certificate and chain have been saved at:/etc/letsencrypt/live/code-server.your-domain/fullchain.pemYour key file has been saved at:/etc/letsencrypt/live/code-server.your-domain/privkey.pemYour cert will expire on … To obtain a new or tweakedversion of this certificate in the future, simply run certbot againwith the “certonly” option. To non-interactively renew *all* ofyour certificates, run “certbot renew”– Your account credentials have been saved in your Certbotconfiguration directory at /etc/letsencrypt. You should make asecure backup of this folder now. This configuration directory willalso contain certificates and private keys obtained by Certbot somaking regular backups of this folder is ideal.– If you like Certbot, please consider supporting our work by:Donating to ISRG / Let’s Encrypt: https://letsencrypt.org/donateDonating to EFF: https://eff.org/donate-leاین بدان معنی است که Certbot موفق به تولید گواهینامه های TLS شده و آنها را در پیکربندی Nginx برای دامنه شما به کار می برد. اکنون می توانید دامنه کد سرور مجازی خود را در مرورگر خود مجدد لود کنید و یک پدلاک (قفل) در سمت چپ آدرس سایت مشاهده کنید ، این بدان معنی است که اتصال شما به درستی ایمن است.اکنون شما Certbot را روی تمدید خودکار گواهینامه ها قبل از منقضی شدن تنظیم می کنید. برای اجرای بررسی تمدید به صورت روزانه ، از cron ، یک سرویس سیستمی استاندارد برای انجام کارهای دوره ای استفاده خواهید کرد. با باز کردن و ویرایش فایلی به نام crontab ، corn را هدایت می کنید:$ sudo crontab –eاین دستور crontab پیش فرض را که در حال حاضر یک فایل متنی خالی است ، باز می کند. خط زیر را اضافه کنید ، سپس آن را ذخیره کرده و ببندید:crontab. . .15 3 * * * /usr/bin/certbot renew –quiet15 3 * * * دستور زیر را هر روز ساعت 3:15 صبح اجرا می کند – می توانید این کار را روی هر زمان تطبیق دهید.دستور تمدید برای Certbot تمام گواهینامه های نصب شده روی سیستم را بررسی کرده و مواردی را که در کمتر از سی روز به پایان رسیده اند ، به روز می کند. –quiet به Certbot می گوید که اطلاعات را به خروجی نفرستد یا منتظر ورود کاربر باشد.cron اکنون این دستور را روزانه اجرا می کند. تمام گواهینامه های نصب شده هنگامی که سی روز یا کمتر از انقضای انها باقی مانده باشد به طور خودکار تمدید و مجدد لود می شوند.اکنون که کد-سرور مجازی را از طریق یک پروکسی معکوس Nginx در دامنه خود دارید ، آماده استفاده از واسط کاربری کد-سرور مجازی هستید.مرحله 4 – استفاده از رابط کد-سرور مجازیدر این بخش از برخی از ویژگی های رابط کد-سرور مجازی استفاده خواهید کرد. از آنجا که کدسرور مجازی ویژوال استودیو کد در حال اجرا در cloud است ، همان رابط کاربری نسخه دسکتاپ مستقل را دارد.در سمت چپ IDE ، یک ردیف عمودی از شش دکمه وجود دارد که بیشترین ویژگی های مورد استفاده را در یک صفحه جانبی که با عنوان Activity Bar شناخته می شود باز می کند.این نوار قابل تنظیم است بنابراین می توانید این نماها را به ترتیب دیگری جابجا کنید یا آنها را از نوار حذف کنید. به طور پیش فرض ، اولین دکمه منوی کلی را به صورت کشویی باز می کند ، در حالی که نمای دوم پنل اکسپلورر را باز می کند که پیمایش درخت مانند از ساختار پروژه را فراهم می کند. می توانید پوشه ها و فایل های خود را در اینجا مدیریت کنید – ایجاد ، حذف ، جابجایی و تغییر نام آنها در صورت لزوم. نمای بعدی دسترسی به عملکرد جستجو و جایگزینی را فراهم می کندبه دنبال این ، به ترتیب پیش فرض ، نمای شما از سیستم های کنترل منبع مانند Git قرار میگیرد. کد ویژوال استودیو همچنین از سایر ارائه دهندگان کنترل منبع پشتیبانی می کند و می توانید در این مستندات دستورالعمل های بیشتری را برای جریان کاری کنترل منبع با ویرایشگر بیابید.گزینه اشکال زدایی در نوار فعالیت ، کلیه اقدامات معمول را برای اشکال زدایی در پنل ارائه می دهد. ویژوال استودیو کد با پشتیبانی داخلی برای اشکال زدایی زمان اجرای Node.js و هر زبانی که به Javascript تبدیل شود همراه است. برای سایر زبانها می توانید افزونه هایی را برای اشکال زدایی مورد نیاز نصب کنید. می توانید پیکربندی های اشکال زدایی را در فایل launch.jsonذخیره کنید.نمای نهایی در نوار فعالیت ، منویی را برای دسترسی به افزونه های موجود در Marketplace فراهم می کند.قسمت اصلی GUI ویرایشگر شماست که می توانید آن ها را با استفاده از زبانه ها برای ویرایش کد خود جدا کنید. می توانید نمای ویرایش خود را به یک سیستم شبکه یا به فایل های جانبی تغییر دهید.پس از ایجاد فایل جدید از طریق منوی File ، یک فایل خالی در یک تب جدید باز می شود و پس از ذخیره سازی ، نام فایل در پنل جانبی Explorer قابل مشاهده خواهد بود. ایجاد پوشه ها را می توان با کلیک راست بر روی نوار کناری Explorer و کلیک بر روی New Folder انجام داد. می توانید پوشه ای را با کلیک بر روی نام آن و همچنین drag و drop فایل ها و پوشه ها به قسمتهای بالایی بسط دهید تا آنها را به یک مکان جدید منتقل کنید.می توانید با وارد کردن CTRL + SHIFT + `، یا با کلیک کردن بر روی ترمینال در منوی کشویی بالای منو ، و انتخاب New Terminal ، به ترمینال دسترسی پیدا کنید. ترمینال در یک پنل پایین تر باز خواهد شد و دیرکتوری کار آن روی فضای کاری پروژه تنظیم می شود ، که شامل فایل ها و پوشه های نمایش داده شده در پنل سمت Explorer است.شما یک نمای کلی سطح بالا از رابط کد سرور مجازی را جستجو کرده اید و برخی از متداول ترین ویژگی ها را مشاهده کرده اید.نتیجهاکنون کد-سرور مجازی ، یک IDE همه کاره cloud را در اختیار دارید که بر روی سرور مجازی CentOS 7 شما نصب شده است ، در دامنه شما قرار گرفته و با استفاده از گواهی Let’s Encrypt ایمن شده است. هم اکنون می توانید بر روی پروژه ها بصورت جداگانه و همچنین در یک مجموعه همکاری تیمی کار کنید. اجرای IDE cloud منابع موجود در دستگاه محلی شما را آزاد می کند و به شما امکان می دهد منابع را در صورت لزوم مقیاس کنید. برای اطلاعات بیشتر در مورد ویژگی های دیگر و دستورالعمل های دقیق در مورد سایر مؤلفه های کد-سرور ، به مطالب کد ویژوال استودیو مراجعه کنید.</description><category>mehdi kamali</category><author>mehdi kamali</author><pubDate>Mon, 29 Jun 2020 12:14:24 +0430</pubDate></item><item><title>نحوه دسترسی از راه دور به برنامه های GUI با استفاده از Docker و Caddy در اوبونتو 20.04</title><link>https://virgool.ir/@mehdikamali289/نحوه-دسترسی-از-راه-دور-به-برنامه-های-gui-با-استفاده-از-docker-و-caddy-در-اوبونتو-2004-zyjwajfvr5t5</link><description>حتی با محبوبیت روزافزون خدمات ابری ، نیاز به اجرای برنامه های بومی هنوز وجود دارد.با استفاده از noVNC و TigerVNC ، می توانید برنامه های بومی را درون یک کانتینر Docker اجرا کنید و از راه دور با استفاده از یک مرورگر وب به آنها دسترسی پیدا کنید. علاوه بر این ، می توانید برنامه خود را بر روی سرور مجازی با منابع سیستم بیشتر از آنچه به صورت محلی موجود دارید اجرا کنید ، که می تواند در هنگام اجرای برنامه های بزرگ ، انعطاف پذیری بیشتری را ارائه دهد.در این آموزش ، Mozilla Thunderbird ، کلاینت ایمیل را با استفاده از Docker کانتینرایز می کنید. پس از آن ، آن را ایمن کرده و با استفاده از سرور مجازی وب Caddy امکان دسترسی از راه دور را فراهم خواهید کرد.پس از اتمام کار ، فقط با یک مرورگر وب می توانید از هر وسیله ای به Thunderbird دسترسی پیدا کنید. همچنین به صورت اختیاری می توانید با استفاده از WebDAV به طور محلی به فایل های موجود در آن دسترسی پیدا کنید. همچنین یک تصویر کاملاً خود شمول از Docker خواهید داشت که می توانید در هر مکانی اجرا کنید.پیش نیازهاقبل از شروع این راهنما ، به موارد زیر نیاز خواهید داشت:⦁ یک سرور مجازی اوبونتو 20.04 با حداقل 2 گیگابایت رم و فضای دیسک 4 گیگابایتی.⦁ یک کاربر غیر ریشه با امتیازات sudo.⦁ Docker که روی سرور مجازی شما تنظیم شده باشد. می توانید نحوه نصب و استفاده از Docker در Ubuntu 20.04 را در این لینک دنبال کنید.مرحله 1 – ایجاد پیکربندی supervisordاکنون که سرور مجازی شما در حال اجرا است و Docker نصب شده است ، آماده هستید تا پیکربندی کانتینر برنامه خود را شروع کنید. از آنجا که کانتینر شما از چندین مؤلفه تشکیل شده است ، برای راه اندازی و نظارت بر آنها باید از یک مدیر فرآیند استفاده کنید. در اینجا ، از supervisord استفاده خواهید کرد. supervisord یک مدیر فرآیند است که در پایتون نوشته شده و اغلب برای موزون کردن کانتینرهای پیچیده استفاده می شود.ابتدا دایرکتوری به نام thunderbird برای کانتینر خود ایجاد کنید و وارد شوید:⦁ $ mkdir ~/thunderbird⦁⦁ $ cd ~/thunderbirdاکنون با استفاده از nano یا ویرایشگر مورد نظر خود ، فایلی به نام supervisord.conf ایجاد و باز کنید:⦁ $ nano ~/thunderbird/supervisord.conf⦁اکنون این اولین بلوک کد را به supraord.conf اضافه کنید ، که گزینه های جهانی برای supervisord را تعریف می کند:~/thunderbird/supervisord.conf[supervisord]nodaemon=truepidfile=/tmp/supervisord.pidlogfile=/dev/fd/1logfile_maxbytes=0در این بخش ، شما خود supervisord را پیکربندی می کنید. باید nodaemon را روی true تنظیم کنید زیرا درون یک کانتینر Docker به عنوان ورودی وارد می شود. بنابراین ، می خواهید که در پیش زمینه اجرا شود. همچنین pidfile را روی مسیری که توسط یک کاربر غیر ریشه قابل دسترسی است و logfile را روی stdout تنظیم میکنید تا بتوانید ورودها را مشاهده کنید.در مرحله بعد ، یک بلوک کد کوچک دیگر را به supervisord.conf اضافه کنید. این بلوک TigerVNC را که یک سرور مجازی ترکیبی VNC / X11 است شروع می کند:~/thunderbird/supervisord.conf…[program:x11]priority=0command=/usr/bin/Xtigervnc -desktop “Thunderbird” -localhost -rfbport 5900 -SecurityTypes None -AlwaysShared -AcceptKeyEvents -AcceptPointerEvents -AcceptSetDesktopSize -SendCutText -AcceptCutText :0autorestart=truestdout_logfile=/dev/fd/1stdout_logfile_maxbytes=0redirect_stderr=trueدر این بلوک ، سرور مجازی X11 را تنظیم می کنید. X11 یک پروتکل سرور مجازی نمایشگر است ، همان چیزی است که به برنامه های GUI اجازه اجرا می دهد. توجه داشته باشید که در آینده باWayland جایگزین خواهد شد ، اما دسترسی از راه دور هنوز در دست توسعه است.برای این کانتینر ، شما از TigerVNC و سرور مجازی داخلی VNC استفاده می کنید. که دارای چندین مزیت نسبت به استفاده از یک سرور مجازی جداگانه X11 و VNC است:• زمان پاسخ سریعتر ، زیرا کشیدن GUI مستقیماً روی سرور مجازی VNC انجام می شود به جای اینکه روی یک بافر چارچوب واسطه (حافظه ای که محتویات صفحه را ذخیره می کند) انجام شود.• تغییر اندازه خودکار صفحه ، که به برنامه ریموت اجازه می دهد تا به طور خودکار تغییر اندازه دهد تا با کلاینت (در این حالت ، پنجره مرورگر وب شما) متناسب باشد.در صورت تمایل ، می توانید آرگومان را برای گزینه -desktop از Thunderbird به چیز دیگری که انتخاب کرده اید تغییر دهید. سرور مجازی انتخاب شما را به عنوان تیتر صفحه وب مورد استفاده برای دسترسی به برنامه شما نمایش می دهد.اکنون ، بیایید یک بلوک سوم از کد را به supervisord.conf اضافه کنیم تا easy-novnc را شروع کنیم:~/thunderbird/supervisord.conf…[program:easy-novnc]priority=0command=/usr/local/bin/easy-novnc –addr :8080 –host localhost –port 5900 –no-url-password –novnc-params “resize=remote”autorestart=truestdout_logfile=/dev/fd/1stdout_logfile_maxbytes=0redirect_stderr=trueدر این بلوک ، یک easy-novnc را راه اندازی می کنید ، یک سرور مجازی مستقل که یک پوشش حول noVNC فراهم می کند. این سرور مجازی دو نقش را انجام می دهد. ابتدا یک صفحه اتصال ساده فراهم می کند که به شما امکان می دهد گزینه های اتصال را پیکربندی کنید و به شما امکان می دهد موارد پیش فرض را تنظیم کنید. دوم ، VNC را روی WebSocket پروکسی میکند ، که به آن امکان دسترسی از طریق یک مرورگر وب معمولی را می دهد.معمولاً تغییر اندازه در سمت کلاینت انجام می شود (یعنی مقیاس بندی تصویر) ، اما شما از گزینه resize=remote استفاده می کنید تا از تنظیمات وضوح تصویری از راه دور TigerVNC استفاده کامل کنید. این گزینه همچنین تأخیر کمتری را در دستگاه های کندتر مانند Chromebooks رده پایین ایجاد می کند:توجه: در این آموزش از easy-novnc استفاده شده است. در صورت تمایل می توانید به جای آن از websockify و یک وب سرور مجازی جداگانه استفاده کنید. مزیت easy-novnc این است که میزان حافظه و زمان راه اندازی آن به میزان قابل توجهی پایین است و خود شمول به حساب می آید. easy-novnc همچنین یک صفحه اتصال تمیزتر نسبت به noVNC پیش فرض ارائه می دهد و تنظیم گزینه های پیش فرض مفید برای این ستاپ (مانند resize=remote) را ممکن می سازد.برای شروع OpenBox ، یعنی مدیر پنجره ، بلوک زیر را به پیکربندی خود اضافه کنید:~/thunderbird/supervisord.conf…[program:openbox]priority=1command=/usr/bin/openboxenvironment=DISPLAY=:0autorestart=truestdout_logfile=/dev/fd/1stdout_logfile_maxbytes=0redirect_stderr=trueدر این بلوک ، شما در حال راه اندازی OpenBox ، مدیر پنجره سبک X11 هستید. می توانید از این مرحله بگذرید ، اما بدون آن ، نمودارهای میله ای عنوان را ندارید یا نمی توانید اندازه ویندوز را تغییر دهید.در آخر ، بیایید آخرین بلوک را به supervisord.conf اضافه کنیم ، که برنامه اصلی را شروع می کند:~/thunderbird/supervisord.conf…[program:app]priority=1environment=DISPLAY=:0command=/usr/bin/thunderbirdautorestart=truestdout_logfile=/dev/fd/1stdout_logfile_maxbytes=0redirect_stderr=trueدر این بلوک آخر ، برای اطمینان از اجرای Thunderbird بعد از TigerVNC ، اولویت را روی 1 تنظیم کنید در غیر این صورت با یک شرایط مسابقه روبرو می شوید و به طور تصادفی در شروع کار ناکام خواهید ماند. بنابراین autorestart = true قرار دهید تا اگر برنامه به اشتباه بسته شد ، برنامه را مجدداً باز کنید. متغیر محیط DISPLAY به برنامه می گوید تا روی سرور مجازی VNC که قبلاً تنظیم کرده اید نمایش داده شود.در اینجا ظاهر نهایی supervisord.conf شما نمایش داده شده است:~/thunderbird/supervisord.conf[supervisord]nodaemon=truepidfile=/tmp/supervisord.pidlogfile=/dev/fd/1logfile_maxbytes=0[program:x11]priority=0command=/usr/bin/Xtigervnc -desktop “Thunderbird” -localhost -rfbport 5900 -SecurityTypes None -AlwaysShared -AcceptKeyEvents -AcceptPointerEvents -AcceptSetDesktopSize -SendCutText -AcceptCutText :0autorestart=truestdout_logfile=/dev/fd/1stdout_logfile_maxbytes=0redirect_stderr=true[program:easy-novnc]priority=0command=/usr/local/bin/easy-novnc –addr :8080 –host localhost –port 5900 –no-url-password –novnc-params “resize=remote”autorestart=truestdout_logfile=/dev/fd/1stdout_logfile_maxbytes=0redirect_stderr=true[program:openbox]priority=1command=/usr/bin/openboxenvironment=DISPLAY=:0autorestart=truestdout_logfile=/dev/fd/1stdout_logfile_maxbytes=0redirect_stderr=true[program:app]priority=1environment=DISPLAY=:0command=/usr/bin/thunderbirdautorestart=truestdout_logfile=/dev/fd/1stdout_logfile_maxbytes=0redirect_stderr=trueاگر می خواهید برنامه دیگری را کانتینرایز کنید ، /usr/bin/thunderbird را با مسیر قابل اجرای برنامه خود جایگزین کنید. در غیر این صورت ، اکنون آماده پیکربندی منوی اصلی GUI خود هستید.مرحله 2 – تنظیم منوی OpenBoxاکنون که مدیر پروسه شما پیکربندی شده است ، بیایید منوی OpenBox را تنظیم کنیم. این منو به ما امکان می دهد تا برنامه ها را درون کانتینر راه اندازی کنیم. همچنین یک ترمینال و مانیتور پردازش برای اشکال زدایی در صورت لزوم را در اختیار خواهیم داشت.در داخل دیرکتوری برنامه خود ، از nano یا ویرایشگر متن مورد علاقه خود استفاده کنید تا فایل جدیدی به نام menu.xml ایجاد و باز کنید:⦁ $ nano ~/thunderbird/menu.xml⦁اکنون کد زیر را به menu.xml اضافه کنید:~/thunderbird/menu.xml&lt;?xml version=”1.0″ encoding=”utf-8″?&gt;&lt;openbox_menu xmlns=”http://openbox.org/” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation=”http://openbox.org/ file:///usr/share/openbox/menu.xsd”&gt;&lt;menu id=”root-menu” label=”Openbox 3″&gt;&lt;item label=”Thunderbird”&gt;&lt;action name=”Execute”&gt;&lt;execute&gt;/usr/bin/thunderbird&lt;/execute&gt;&lt;/action&gt;&lt;/item&gt;&lt;item label=”Terminal”&gt;&lt;action name=”Execute”&gt;&lt;execute&gt;/usr/bin/x-terminal-emulator&lt;/execute&gt;&lt;/action&gt;&lt;/item&gt;&lt;item label=”Htop”&gt;&lt;action name=”Execute”&gt;&lt;execute&gt;/usr/bin/x-terminal-emulator -e htop&lt;/execute&gt;&lt;/action&gt;&lt;/item&gt;&lt;/menu&gt;&lt;/openbox_menu&gt;این فایل XML شامل آیتم های منو است که با کلیک راست بر روی دسکتاپ ظاهر می شود. هر مورد از یک لیبل و یک عمل تشکیل شده است.اگر می خواهید برنامه دیگری را کانتینرایز کنید ، / usr / bin / thunderbird را با مسیر اجرایی برنامه خود جایگزین کنید و لیبل مورد را تغییر دهید.مرحله 3 – ایجاد Dockerfileاکنون که OpenBox پیکربندی شده است ، Dockerfile را ایجاد خواهید کرد ، که همه چیز را به هم پیوند می دهد.یک Dockerfile در دیرکتوری کانتینر خود ایجاد کنید:⦁ $nano ~/thunderbird/Dockerfile⦁برای شروع ، بیایید برای ساختن easy-novnc کد دیگری اضافه کنیم:~/thunderbird/DockerfileFROM golang:1.14-buster AS easy-novnc-buildWORKDIR /srcRUN go mod init build &amp;&amp; \go get github.com/geek1011/easy-novnc@v1.1.0 &amp;&amp; \go build -o /bin/easy-novnc github.com/geek1011/easy-novncدر مرحله اول ، شما در حال ساختن easy-novnc هستید. برای سادگی و صرفه جویی در فضا این کار در یک مرحله جداگانه انجام می شود – به زنجیره ابزار کلیGo در تصویر نهایی خود نیازی ندارید. به@ v1.1.0 در دستور build توجه داشته باشید. این تضمین می کند که نتیجه تعیین کننده است ، و از آن جهت مهم است که Docker نتیجه هر مرحله را ذخیره می کند. اگر نسخه صریح را مشخص نکرده اید ، Docker در زمان ساخت اولین تصویر، آخرین نسخه های easy-novnc را ارجاع می دهد. علاوه بر این ، بهتر است اطمینان حاصل کنید که یک نسخه خاص از easy-novnc را دانلود می کنید تا در صورت ایجاد تغییرات در رابط CLI آن را داشته باشید.اکنون بیایید مرحله دوم را ایجاد کنیم که به تصویر نهایی تبدیل می شود. در اینجا از Debian 10 (Buster) به عنوان تصویر پایه استفاده خواهید کرد. توجه داشته باشید که از آنجا که این کار در یک کانتینر در حال اجرا است ، صرف نظر از توزیع شما در سرور مجازی خود ، کار خواهد کرد.سپس ، بلوک زیر را به Dockerfile خود اضافه کنید:~/thunderbird/Dockerfile…FROM debian:busterRUN apt-get update -y &amp;&amp; \apt-get install -y –no-install-recommends openbox tigervnc-standalone-server supervisor gosu &amp;&amp; \rm -rf /var/lib/apt/lists &amp;&amp; \mkdir -p /usr/share/desktop-directoriesدر این دستورالعمل ، شما Debian 10 را به عنوان تصویر پایه خود نصب می کنید و سپس حداقل مورد نیاز برای اجرای برنامه های GUI را در کانتینر خود نصب می کنید. توجه داشته باشید که apt-get update را به عنوان بخشی از همان دستورالعمل ها برای جلوگیری از مشکلات ذخیره سازی در Docker ، اجرا کنید. برای صرفه جویی در فضا ، همچنین لیست های بسته را که بعد از آن دانلود شده است حذف می کنید (بسته های ذخیره شده به صورت پیش فرض حذف می شوند). همچنین /usr/share/desktop-directories را ایجاد می کنید زیرا برخی برنامه ها به دایرکتوری موجود بستگی دارند.بیایید یک بلوک کد کوچک دیگر اضافه کنیم:~/thunderbird/Dockerfile…RUN apt-get update -y &amp;&amp; \apt-get install -y –no-install-recommends lxterminal nano wget openssh-client rsync ca-certificates xdg-utils htop tar xzip gzip bzip2 zip unzip &amp;&amp; \rm -rf /var/lib/apt/listsدر این دستورالعمل ، شما در حال نصب برخی از نرم افزارها و بسته های عمومی مفید هستید. موارد قابل توجه در اینجا xd-utils (که دستورات پایه مورد استفاده برنامه های دسکتاپ را در لینوکس فراهم می کند) و ca-certificates (که گواهی های ریشه را نصب می کند تا به ما امکان دسترسی به سایت های HTTPS را بدهد) هستند.اکنون می توانیم دستورالعمل برنامه اصلی را اضافه کنیم:~/thunderbird/Dockerfile…RUN apt-get update -y &amp;&amp; \apt-get install -y –no-install-recommends thunderbird &amp;&amp; \rm -rf /var/lib/apt/listsمانند قبل ، در این قسمت در حال نصب برنامه هستیم. اگر برنامه کاربردی دیگری را کانتینرایز میکنید ، می توانید این دستورات را با دستورالعمل های لازم برای نصب برنامه خاص خود جایگزین کنید. برخی از برنامه ها برای اجرای داخل Docker به کار کمی بیشتر نیاز دارند. به عنوان مثال ، اگر برنامه ای را نصب می کنید که از Chrome ،Chromium یا QtWebEngine استفاده می کند ، باید از آرگومان خط فرمان –no-sandbox استفاده کنید ، زیرا در Docker پشتیبانی نمی شود.در مرحله بعد ، بیایید دستورالعمل هایی را اضافه کنیم تا چند فایل آخر به کانتینر اضافه شود:~/thunderbird/Dockerfile…COPY –from=easy-novnc-build /bin/easy-novnc /usr/local/bin/COPY menu.xml /etc/xdg/openbox/COPY supervisord.conf /etc/EXPOSE 8080در اینجا شما می توانید فایل های پیکربندی را که قبلاً ایجاد کرده اید به تصویر اضافه کرده و از مرحله اول کپی کردن باینری easy-novnc را انجام دهید.این بلوک کد بعدی دایرکتوری داده را ایجاد می کند و کاربر اختصاصی را برای برنامه شما اضافه می کند. از آن جهت مهم است که برخی برنامه ها از اجرا به عنوان ریشه خودداری می کنند. همچنین بهتر است که حتی در یک کانتینر ، برنامه ها را به صورت ریشه اجرا نکنید.~/thunderbird/Dockerfile…RUN groupadd –gid 1000 app &amp;&amp; \useradd –home-dir /data –shell /bin/bash –uid 1000 –gid 1000 app &amp;&amp; \mkdir -p /dataVOLUME /dataبرای اطمینان از یک UID / GID سازگار برای فایل ها ، صریحاً هر دو را روی 1000 تنظیم می کنید. همچنین می توانید یک حجم را در دایرکتوری داده قرار دهید تا اطمینان حاصل شود که بین راه ریستارت ها همچنان ادامه دارد.در آخر ، دستورالعمل هایی را برای راه اندازی همه موارد اضافه می کنیم:~/thunderbird/Dockerfile…CMD [“sh”, “-c”, “chown app:app /data /dev/stdout &amp;&amp; exec gosu app supervisord”]با تنظیم دستور پیش فرض روی supervisord ، مدیر فرآیندهای مورد نیاز برای اجرای برنامه شما را راه اندازی می کند. در این حالت ، به جای ENTRYPOINT از CMD استفاده می کنید. در بیشتر موارد ، تفاوتی ایجاد نمی کند ، اما استفاده از CMD برای این منظور به چند دلیل مناسب تر است. اولا ، supervisord هیچ آرگومانی مربوط به ما را دریافت نمیکند ، و اگر آرگومان هایی را به کانتینر ارائه می دهید ، آنها CMD را جایگزین می كنند و به ENTRYPOINT اضافه می شوند. دوما ، استفاده از CMD به ما امکان می دهد هنگام ارسال آرگومان ها به داخل کانتینر ، یک دستور کاملاً متفاوت (که توسط / bin / sh -c اجرا خواهد شد) ارائه دهیم ، که اشکال زدایی را آسان تر می کند.و در آخر ، لازم است قبل از شروع supervisord ، chown را به عنوان ریشه اجرا کنید تا از مشکلات مجوز در حجم داده جلوگیری کنید و به فرآیند کودک (child) اجازه دهید stdout را باز کند. این همچنین بدان معنی است که شما باید به جای دستورالعمل USER برای تعویض کاربر از gosu استفاده کنید.در اینجا ظاهر Dockerfile تکمیل شده شما به شرح زیر است:~/thunderbird/DockerfileFROM golang:1.14-buster AS easy-novnc-buildWORKDIR /srcRUN go mod init build &amp;&amp; \go get github.com/geek1011/easy-novnc@v1.1.0 &amp;&amp; \go build -o /bin/easy-novnc github.com/geek1011/easy-novncFROM debian:busterRUN apt-get update -y &amp;&amp; \apt-get install -y –no-install-recommends openbox tigervnc-standalone-server supervisor gosu &amp;&amp; \rm -rf /var/lib/apt/lists &amp;&amp; \mkdir -p /usr/share/desktop-directoriesRUN apt-get update -y &amp;&amp; \apt-get install -y –no-install-recommends lxterminal nano wget openssh-client rsync ca-certificates xdg-utils htop tar xzip gzip bzip2 zip unzip &amp;&amp; \rm -rf /var/lib/apt/listsRUN apt-get update -y &amp;&amp; \apt-get install -y –no-install-recommends thunderbird &amp;&amp; \rm -rf /var/lib/apt/listsCOPY –from=easy-novnc-build /bin/easy-novnc /usr/local/bin/COPY menu.xml /etc/xdg/openbox/COPY supervisord.conf /etc/EXPOSE 8080RUN groupadd –gid 1000 app &amp;&amp; \useradd –home-dir /data –shell /bin/bash –uid 1000 –gid 1000 app &amp;&amp; \mkdir -p /dataVOLUME /dataCMD [“sh”, “-c”, “chown app:app /data /dev/stdout &amp;&amp; exec gosu app supervisord”]Dockerfile خود را ذخیره کرده و ببندید. اکنون آماده ساخت و اجرای کانتینر خود هستیم و سپس به Thunderbird – که یک برنامه GUI است، دسترسی پیدا خواهیم کرد.مرحله 4 – ساخت و اجرای کانتینرمرحله بعدی ساخت کانتینر شما و تنظیم آن در زمان راه اندازی است. همچنین می توانید یک حجم برای حفظ داده های برنامه بین ریستارت ها و به روز رسانی تنظیم کنید.ابتدا کانتینر خود را بسازید. حتماً این دستورات را در دیرکتوری ~ / thunderbird اجرا کنید:⦁ $ docker build -t thunderbird .⦁اکنون یک شبکه جدید ایجاد کنید که بین کانتینرهای برنامه به اشتراک گذاشته شود:⦁ $ docker network create thunderbird-net⦁سپس یک حجم برای ذخیره داده های برنامه ایجاد کنید:⦁ $ docker volume create thunderbird-data⦁در آخر ، آن را اجرا کرده و آن را روی ریستارت خودکار تنظیم کنید:⦁ $ docker run –detach –restart=always –volume=thunderbird-data:/data –net=thunderbird-net –name=thunderbird-app thunderbird⦁توجه داشته باشید که در صورت تمایل ، می توانید thunderbird-app را بعد از گزینه –name با نام دیگری جایگزین کنید. هرچه انتخاب کردید ، اکنون برنامه شما کانتینرایز شده و در حال اجرا است. اکنون بیایید از سرور مجازی وب Caddy برای امنیت آن استفاده کنیم و از راه دور به آن متصل شویم.مرحله 5 – راه اندازی Caddyدر این مرحله ، وب سرور مجازی Caddy را تنظیم می کنید تا تأیید هویت انجام شود و به صورت اختیاری ، دسترسی از راه دور فایل از طریق WebDAV را انجام دهد. برای سادگی و اینکه به شما امکان استفاده از پروکسی معکوس موجود خود را بدهد ، آن را در یک کانتینر دیگر اجرا کنید.یک دیرکتوری جدید ایجاد کنید و سپس به داخل آن بروید:⦁ $ mkdir ~/caddy⦁⦁ $ cd ~/caddyاکنون با استفاده از nano یا ویرایشگر مورد نظر خود ، یک Dockerfile جدید ایجاد کنید:⦁ $ nano ~/caddy/Dockerfile⦁سپس بخش های زیر را اضافه کنید:~/caddy/DockerfileFROM golang:1.14-buster AS caddy-buildWORKDIR /srcRUN echo ‘module caddy’ &gt; go.mod &amp;&amp; \echo ‘require github.com/caddyserver/caddy/v2 v2.0.0’ &gt;&gt; go.mod &amp;&amp; \echo ‘require github.com/mholt/caddy-webdav v0.0.0-20200523051447-bc5d19941ac3’ &gt;&gt; go.modRUN echo ‘package main’ &gt; caddy.go &amp;&amp; \echo ‘import caddycmd “github.com/caddyserver/caddy/v2/cmd”‘ &gt;&gt; caddy.go &amp;&amp; \echo ‘import _ “github.com/caddyserver/caddy/v2/modules/standard”‘ &gt;&gt; caddy.go &amp;&amp; \echo ‘import _ “github.com/mholt/caddy-webdav”‘ &gt;&gt; caddy.go &amp;&amp; \echo ‘func main() { caddycmd.Main() }’ &gt;&gt; caddy.goRUN go build -o /bin/caddy .FROM debian:busterRUN apt-get update -y &amp;&amp; \apt-get install -y –no-install-recommends gosu &amp;&amp; \rm -rf /var/lib/apt/listsCOPY –from=caddy-build /bin/caddy /usr/local/bin/COPY Caddyfile /etc/EXPOSE 8080RUN groupadd –gid 1000 app &amp;&amp; \useradd –home-dir /data –shell /bin/bash –uid 1000 –gid 1000 app &amp;&amp; \mkdir -p /dataVOLUME /dataWORKDIR /dataCMD [“sh”, “-c”, “chown app:app /data &amp;&amp; exec gosu app /usr/local/bin/caddy run -adapterاین Dockerfile با فعال کردن افزونه WebDAV ، Caddy را ایجاد می کند ، و سپس آن را در پورت 8080 با Caddyfile در / etc / Caddyfile راه اندازی می کند. فایل را ذخیره کنید و ببندید.سپس سرور مجازی وب Caddy را پیکربندی می کنید. فایلی به نام Caddyfile را در دایرکتوری که تازه ایجاد کرده اید ایجاد کنید:⦁ $ nano ~/caddy/Caddyfileاکنون بلوک کد زیر را به Caddyfile خود اضافه کنید:~/caddy/Caddyfile{order webdav last}:8080 {logroot * /datareverse_proxy thunderbird-app:8080handle /files/* {uri strip_prefix /filesfile_server browse}redir /files /files/handle /webdav/* {uri strip_prefix /webdavwebdav}redir /webdav /webdav/basicauth /* {{env.APP_USERNAME} {env.APP_PASSWORD_HASH}}}این Caddyfile دیرکتوری اصلی را به کانتینر thunderbird-app که در مرحله 4 ایجاد کرده اید پروکسی میکند ( Docker آن را در IP صحیح تجزیه می کند). همچنین یک مرورگر فایل مبتنی بر وب فقط قابل خواندن در /files ارائه می کند و یک سرور مجازی WebDAV را روی / webdav اجرا می کند که می توانید برای دسترسی به فایل های خود به صورت محلی قرار دهید. نام کاربری و رمز عبور از متغیرهای محیط APP_USERNAME و APP_PASSWORD_HASH خوانده می شود.اکنون کانتینر را بسازید:⦁ $ docker build -t thunderbird-caddy .⦁Caddy v2 نیاز دارد که شما پسورد موردنظر خود را hash کنید. دستور زیر را اجرا کنید و به یاد داشته باشید که mypass را با یک رمز عبور قوی به انتخاب خود جایگزین کنید:⦁ $ docker run –rm -it thunderbird-caddy caddy hash-password -plaintext ‘mypass’⦁این دستور یک رشته کاراکتر را تولید می کند. آن را برای تهیه دستور بعدی در کلیپ بورد خود کپی کنید.اکنون آماده اجرای کانتینر هستید. اطمینان حاصل کنید که myuser را با نام کاربری مورد نظر خود جایگزین کنید و mypass-hash را با همان دستوری که در مرحله قبل اجرا کردید جایگزین نمایید. همچنین می توانید پورت (8080 در اینجا) را برای دسترسی به سرور مجازی خود در پورت دیگری تغییر دهید:⦁ $ docker run –detach –restart=always –volume=thunderbird-data:/data –net=thunderbird-net –name=thunderbird-web –env=APP_USERNAME=”myuser” –env=APP_PASSWORD_HASH=”mypass-hash” –publish=8080:8080 thunderbird-caddy⦁اکنون آماده دسترسی و آزمایش برنامه خود هستیم.مرحله 6 – تست و مدیریت برنامهبیایید به برنامه دسترسی پیدا کنیم و از عملکرد آن اطمینان حاصل نماییم.ابتدا http: // your_server_ip: 8080 را در یک مرورگر وب باز کنید ، با اعتباراتی که قبلاً انتخاب کرده اید وارد شوید و روی connect کلیک کنید.اکنون می توانید با برنامه تعامل برقرار کنید ، و برای تنظیم مناسب پنجره مرورگر ، باید به طور خودکار تغییر اندازه دهد.اگر بر روی دسکتاپ سیاه رنگ کلیک راست کنید، باید منویی را مشاهده کنید که به شما امکان دسترسی به یک ترمینال را می دهد. اگر کلیک وسط کنید ​​، باید لیستی از پنجره ها را ببینید.اکنون http://your_server_ip:8080/files/ را در یک مرورگر وب باز کنید. باید بتوانید به فایل های خود دسترسی پیدا کنید.به صورت اختیاری ، می توانید http: // your_server_ip: 8080 / webdav / خود را در یک کلاینت WebDAV نصب کنید. باید بتوانید مستقیماً به فایل های خود دسترسی پیدا کرده و آن ها را تغییر دهید. اگر از گزینه Map network drive در ویندوز اکسپلورر استفاده می کنید ، باید برای اضافه کردنHTTPS از یک پروکسی معکوس استفاده کنید یا HKLM\SYSTEM\CurrentControlSet\Services\WebClient\Parameters\BasicAuthLevel را روی DWORD:2 تنظیم کنید.در هر صورت ، برنامه GUI بومی شما اکنون برای استفاده از راه دور آماده است.نتیجهاکنون با موفقیت یک کانتینر Docker را برای Thunderbird تنظیم کرده اید و سپس با استفاده از Caddy ، دسترسی به آن را از طریق یک مرورگر وب پیکربندی کرده اید. در صورت نیاز به بروزرسانی برنامه خود ، کانتینرها را متوقف کنید ، docker rm thunderbird-app thunderbird-web را اجرای کنید، تصاویر را مجدد بسازید و سپس دستورات docker را از مراحل قبلی بالا مجدداً اجرا کنید. از آنجا که در یک حجم ذخیره می شود ، داده های شما همچنان حفظ می شوند.اگر می خواهید در مورد دستورات اساسی Docker اطلاعات بیشتری کسب کنید ، می توانید این لینک آموزش یا این صفحه را بخوانید. برای استفاده طولانی مدت تر ، میتوانید HTTPS را برای امنیت بیشتر فعال کنید (برای این کار به دامنه ای نیاز دارید).علاوه بر این ، اگر بیش از یک برنامه نصب کرده اید ، می توانید به جای شروع هر کانتینر به صورت دستی ، از Docker Compose یا Kubernetes استفاده کنید. و به یاد داشته باشید ، این آموزش می تواند به عنوان پایه ای برای اجرای سایر برنامه های لینوکس روی سرور مجازی شما استفاده شود ، از جمله:⦁ Wine ، یک لایه سازگاری برای اجرای برنامه های ویندوز در لینوکس.⦁ GIMP ، ویرایشگر تصویر منبع باز.⦁ Cutter ، پلتفرم مهندسی معکوس منبع باز.این گزینه آخر پتانسیل بسیار مهمی را برای کانتینرایز و دسترسی از راه دور به برنامه های GUI ارائه می دهد. با استفاده از این ستاپ ، اکنون می توانید از سرور مجازی  با توان محاسباتی بسیار بیشتر از آنچه به صورت محلی در دسترس دارید برای اجرای ابزارهای منبع فشرده مانند Cutter استفاده کنید</description><category>mehdi kamali</category><author>mehdi kamali</author><pubDate>Mon, 29 Jun 2020 12:08:06 +0430</pubDate></item><item><title>نحوه دسترسی از راه دور به برنامه های GUI با استفاده از Docker و Caddy در Debian 9</title><link>https://virgool.ir/@mehdikamali289/نحوه-دسترسی-از-راه-دور-به-برنامه-های-gui-با-استفاده-از-docker-و-caddy-در-debian-9-qk1xxy1vq2lp</link><description>حتی با محبوبیت روزافزون خدمات ابری ، نیاز به اجرای برنامه های بومی هنوز وجود دارد.با استفاده از noVNC و TigerVNC ، می توانید برنامه های بومی را درون یک کانتینر Docker اجرا کنید و از راه دور با استفاده از یک مرورگر وب به آنها دسترسی پیدا کنید. علاوه بر این ، می توانید برنامه خود را بر روی سرور مجازی با منابع سیستم بیشتر از آنچه به صورت محلی موجود دارید اجرا کنید ، که می تواند در هنگام اجرای برنامه های بزرگ ، انعطاف پذیری بیشتری را ارائه دهد.در این آموزش ، Mozilla Thunderbird ، کلاینت ایمیل را با استفاده از Docker کانتینرایز می کنید. پس از آن ، آن را ایمن کرده و با استفاده از سرور مجازی وب Caddy امکان دسترسی از راه دور را فراهم خواهید کرد.پس از اتمام کار ، فقط با یک مرورگر وب می توانید از هر وسیله ای به Thunderbird دسترسی پیدا کنید. همچنین به صورت اختیاری می توانید با استفاده از WebDAV به طور محلی به فایل های موجود در آن دسترسی پیدا کنید. همچنین یک تصویر کاملاً خود شمول از Docker خواهید داشت که می توانید در هر مکانی اجرا کنید.پیش نیازهاقبل از شروع این راهنما ، به موارد زیر نیاز خواهید داشت:⦁ یک سرور مجازی Debian 9 با حداقل 2 گیگابایت رم و فضای دیسک 4 گیگابایتی.⦁ یک کاربر غیر ریشه با امتیازات sudo.⦁ Docker که روی سرور مجازی شما تنظیم شده باشد. می توانید نحوه نصب و استفاده از Docker در Debian 9 را در این لینک دنبال کنید.مرحله 1 – ایجاد پیکربندی supervisordاکنون که سرور مجازی شما در حال اجرا است و Docker نصب شده است ، آماده هستید تا پیکربندی کانتینر برنامه خود را شروع کنید. از آنجا که کانتینر شما از چندین مؤلفه تشکیل شده است ، برای راه اندازی و نظارت بر آنها باید از یک مدیر فرآیند استفاده کنید. در اینجا ، از supervisord استفاده خواهید کرد. supervisord یک مدیر فرآیند است که در پایتون نوشته شده و اغلب برای موزون کردن کانتینرهای پیچیده استفاده می شود.ابتدا دایرکتوری به نام thunderbird برای کانتینر خود ایجاد کنید و وارد شوید:⦁ $ mkdir ~/thunderbird⦁⦁ $ cd ~/thunderbirdاکنون با استفاده از nano یا ویرایشگر مورد نظر خود ، فایلی به نام supervisord.conf ایجاد و باز کنید:⦁ $ nano ~/thunderbird/supervisord.conf⦁اکنون این اولین بلوک کد را به supervisord.conf اضافه کنید ، که گزینه های جهانی برای supervisord را تعریف می کند:~/thunderbird/supervisord.conf[supervisord]nodaemon=truepidfile=/tmp/supervisord.pidlogfile=/dev/fd/1logfile_maxbytes=0در این بخش ، شما خود supervisord را پیکربندی می کنید. باید nodaemon را روی true تنظیم کنید زیرا درون یک کانتینر Docker به عنوان ورودی وارد می شود. بنابراین ، می خواهید که در پیش زمینه اجرا شود. همچنین pidfile را روی مسیری که توسط یک کاربر غیر ریشه قابل دسترسی است و logfile را روی stdout تنظیم میکنید تا بتوانید ورودها را مشاهده کنید.در مرحله بعد ، یک بلوک کد کوچک دیگر را به supervisord.conf اضافه کنید. این بلوک TigerVNC را که یک سرور مجازی ترکیبی VNC / X11 است شروع می کند:~/thunderbird/supervisord.conf…[program:x11]priority=0command=/usr/bin/Xtigervnc -desktop “Thunderbird” -localhost -rfbport 5900 -SecurityTypes None -AlwaysShared -AcceptKeyEvents -AcceptPointerEvents -AcceptSetDesktopSize -SendCutText -AcceptCutText :0autorestart=truestdout_logfile=/dev/fd/1stdout_logfile_maxbytes=0redirect_stderr=trueدر این بلوک ، سرور مجازی X11 را تنظیم می کنید. X11 یک پروتکل سرور مجازی نمایشگر است ، همان چیزی است که به برنامه های GUI اجازه اجرا می دهد. توجه داشته باشید که در آینده باWayland جایگزین خواهد شد ، اما دسترسی از راه دور هنوز در دست توسعه است.برای این کانتینر ، شما از TigerVNC و سرور مجازی داخلی VNC استفاده می کنید. که دارای چندین مزیت نسبت به استفاده از یک سرور مجازی جداگانه X11 و VNC است:• زمان پاسخ سریعتر ، زیرا کشیدن GUI مستقیماً روی سرور مجازی VNC انجام می شود به جای اینکه روی یک بافر چارچوب واسطه (حافظه ای که محتویات صفحه را ذخیره می کند) انجام شود.• تغییر اندازه خودکار صفحه ، که به برنامه ریموت اجازه می دهد تا به طور خودکار تغییر اندازه دهد تا با کلاینت (در این حالت ، پنجره مرورگر وب شما) متناسب باشد.در صورت تمایل ، می توانید آرگومان را برای گزینه -desktop از Thunderbird به چیز دیگری که انتخاب کرده اید تغییر دهید. سرور مجازی انتخاب شما را به عنوان تیتر صفحه وب مورد استفاده برای دسترسی به برنامه شما نمایش می دهد.اکنون ، بیایید یک بلوک سوم از کد را به supervisord.conf اضافه کنیم تا easy-novnc را شروع کنیم:~/thunderbird/supervisord.conf…[program:easy-novnc]priority=0command=/usr/local/bin/easy-novnc –addr :8080 –host localhost –port 5900 –no-url-password –novnc-params “resize=remote”autorestart=truestdout_logfile=/dev/fd/1stdout_logfile_maxbytes=0redirect_stderr=trueدر این بلوک ، یک easy-novnc را راه اندازی می کنید ، یک سرور مجازی مستقل که یک پوشش حول noVNC فراهم می کند. این سرور مجازی دو نقش را انجام می دهد. ابتدا یک صفحه اتصال ساده فراهم می کند که به شما امکان می دهد گزینه های اتصال را پیکربندی کنید و به شما امکان می دهد موارد پیش فرض را تنظیم کنید. دوم ، VNC را روی WebSocket پروکسی میکند ، که به آن امکان دسترسی از طریق یک مرورگر وب معمولی را می دهد.معمولاً تغییر اندازه در سمت کلاینت انجام می شود (یعنی مقیاس بندی تصویر) ، اما شما از گزینه resize=remote استفاده می کنید تا از تنظیمات وضوح تصویری از راه دور TigerVNC استفاده کامل کنید. این گزینه همچنین تأخیر کمتری را در دستگاه های کندتر مانند Chromebooks رده پایین ایجاد می کند:توجه: در این آموزش از easy-novnc استفاده شده است. در صورت تمایل می توانید به جای آن از websockify و یک وب سرور مجازی جداگانه استفاده کنید. مزیت easy-novnc این است که میزان حافظه و زمان راه اندازی آن به میزان قابل توجهی پایین است و خود شمول به حساب می آید. easy-novnc همچنین یک صفحه اتصال تمیزتر نسبت به noVNC پیش فرض ارائه می دهد و تنظیم گزینه های پیش فرض مفید برای این ستاپ (مانند resize=remote) را ممکن می سازد.برای شروع OpenBox ، یعنی مدیر پنجره ، بلوک زیر را به پیکربندی خود اضافه کنید:~/thunderbird/supervisord.conf…[program:openbox]priority=1command=/usr/bin/openboxenvironment=DISPLAY=:0autorestart=truestdout_logfile=/dev/fd/1stdout_logfile_maxbytes=0redirect_stderr=trueدر این بلوک ، شما در حال راه اندازی OpenBox ، مدیر پنجره سبک X11 هستید. می توانید از این مرحله بگذرید ، اما بدون آن ، نمودارهای میله ای عنوان را ندارید یا نمی توانید اندازه ویندوز را تغییر دهید.در آخر ، بیایید آخرین بلوک را به supervisord.conf اضافه کنیم ، که برنامه اصلی را شروع می کند:~/thunderbird/supervisord.conf…[program:app]priority=1environment=DISPLAY=:0command=/usr/bin/thunderbirdautorestart=truestdout_logfile=/dev/fd/1stdout_logfile_maxbytes=0redirect_stderr=trueدر این بلوک آخر ، برای اطمینان از اجرای Thunderbird بعد از TigerVNC ، اولویت را روی 1 تنظیم کنید در غیر این صورت با یک شرایط مسابقه روبرو می شوید و به طور تصادفی در شروع کار ناکام خواهید ماند. بنابراین autorestart = true قرار دهید تا اگر برنامه به اشتباه بسته شد ، برنامه را مجدداً باز کنید. متغیر محیط DISPLAY به برنامه می گوید تا روی سرور مجازی VNC که قبلاً تنظیم کرده اید نمایش داده شود.در اینجا ظاهر نهایی supervisord.conf نمایش داده شده است:~/thunderbird/supervisord.conf[supervisord]nodaemon=truepidfile=/tmp/supervisord.pidlogfile=/dev/fd/1logfile_maxbytes=0[program:x11]priority=0command=/usr/bin/Xtigervnc -desktop “Thunderbird” -localhost -rfbport 5900 -SecurityTypes None -AlwaysShared -AcceptKeyEvents -AcceptPointerEvents -AcceptSetDesktopSize -SendCutText -AcceptCutText :0autorestart=truestdout_logfile=/dev/fd/1stdout_logfile_maxbytes=0redirect_stderr=true[program:easy-novnc]priority=0command=/usr/local/bin/easy-novnc –addr :8080 –host localhost –port 5900 –no-url-password –novnc-params “resize=remote”autorestart=truestdout_logfile=/dev/fd/1stdout_logfile_maxbytes=0redirect_stderr=true[program:openbox]priority=1command=/usr/bin/openboxenvironment=DISPLAY=:0autorestart=truestdout_logfile=/dev/fd/1stdout_logfile_maxbytes=0redirect_stderr=true[program:app]priority=1environment=DISPLAY=:0command=/usr/bin/thunderbirdautorestart=truestdout_logfile=/dev/fd/1stdout_logfile_maxbytes=0redirect_stderr=trueاگر می خواهید برنامه دیگری را کانتینرایز کنید ، /usr/bin/thunderbird را با مسیر قابل اجرای برنامه خود جایگزین کنید. در غیر این صورت ، اکنون آماده پیکربندی منوی اصلی GUI خود هستید.مرحله 2 – تنظیم منوی OpenBoxاکنون که مدیر پروسه شما پیکربندی شده است ، بیایید منوی OpenBox را تنظیم کنیم. این منو به ما امکان می دهد تا برنامه ها را درون کانتینر راه اندازی کنیم. همچنین یک ترمینال و مانیتور پردازش برای اشکال زدایی در صورت لزوم را در اختیار خواهیم داشت.در داخل دیرکتوری برنامه خود ، از nano یا ویرایشگر متن مورد علاقه خود استفاده کنید تا فایل جدیدی به نام menu.xml ایجاد و باز کنید:⦁ $ nano ~/thunderbird/menu.xml⦁اکنون کد زیر را به menu.xml اضافه کنید:~/thunderbird/menu.xml&lt;?xml version=”1.0″ encoding=”utf-8″?&gt;&lt;openbox_menu xmlns=”http://openbox.org/” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation=”http://openbox.org/ file:///usr/share/openbox/menu.xsd”&gt;&lt;menu id=”root-menu” label=”Openbox 3″&gt;&lt;item label=”Thunderbird”&gt;&lt;action name=”Execute”&gt;&lt;execute&gt;/usr/bin/thunderbird&lt;/execute&gt;&lt;/action&gt;&lt;/item&gt;&lt;item label=”Terminal”&gt;&lt;action name=”Execute”&gt;&lt;execute&gt;/usr/bin/x-terminal-emulator&lt;/execute&gt;&lt;/action&gt;&lt;/item&gt;&lt;item label=”Htop”&gt;&lt;action name=”Execute”&gt;&lt;execute&gt;/usr/bin/x-terminal-emulator -e htop&lt;/execute&gt;&lt;/action&gt;&lt;/item&gt;&lt;/menu&gt;این فایل XML شامل آیتم های منو است که با کلیک راست بر روی دسکتاپ ظاهر می شود. هر مورد از یک لیبل و یک عمل تشکیل شده است.اگر می خواهید برنامه دیگری را کانتینرایز کنید ، / usr / bin / thunderbird را با مسیر اجرایی برنامه خود جایگزین کنید و لیبل مورد را تغییر دهید.مرحله 3 – ایجاد Dockerfileاکنون که OpenBox پیکربندی شده است ، Dockerfile را ایجاد خواهید کرد ، که همه چیز را به هم پیوند می دهد.یک Dockerfile در دیرکتوری کانتینر خود ایجاد کنید:⦁ $nano ~/thunderbird/Dockerfile⦁برای شروع ، بیایید برای ساختن easy-novnc کد دیگری اضافه کنیم:~/thunderbird/DockerfileFROM golang:1.14-buster AS easy-novnc-buildWORKDIR /srcRUN go mod init build &amp;&amp; \go get github.com/geek911/easy-novnc@v1.1.0 &amp;&amp; \go build -o /bin/easy-novnc github.com/geek911/easy-novncدر مرحله اول ، شما در حال ساختن easy-novnc هستید. برای سادگی و صرفه جویی در فضا این کار در یک مرحله جداگانه انجام می شود – به زنجیره ابزار کلیGo در تصویر نهایی خود نیازی ندارید. به@ v1.1.0 در دستور build توجه داشته باشید. این تضمین می کند که نتیجه تعیین کننده است ، و از آن جهت مهم است که Docker نتیجه هر مرحله را ذخیره می کند. اگر نسخه صریح را مشخص نکرده اید ، Docker در زمان ساخت اولین تصویر، آخرین نسخه های easy-novnc را ارجاع می دهد. علاوه بر این ، بهتر است اطمینان حاصل کنید که یک نسخه خاص از easy-novnc را دانلود می کنید تا در صورت ایجاد تغییرات در رابط CLI آن را داشته باشید.حالا بیایید مرحله دوم را ایجاد کنیم که به تصویر نهایی تبدیل می شود. در اینجا از Debian 9 (Buster) به عنوان تصویر پایه استفاده خواهید کرد. توجه داشته باشید که از آنجا که این کار در یک کانتینر در حال اجرا است ، صرف نظر از توزیع شما در سرور مجازی خود ، کار خواهد کرد.سپس ، بلوک زیر را به Dockerfile خود اضافه کنید:~/thunderbird/Dockerfile…FROM debian:busterRUN apt-get update -y &amp;&amp; \apt-get install -y –no-install-recommends openbox tigervnc-standalone-server supervisor gosu &amp;&amp; \rm -rf /var/lib/apt/lists &amp;&amp; \mkdir -p /usr/share/desktop-directoriesدر این دستورالعمل ، شما Debian 9 را به عنوان تصویر پایه خود نصب می کنید و سپس حداقل مورد نیاز برای اجرای برنامه های GUI را در کانتینر خود نصب می کنید. توجه داشته باشید که apt-get update را به عنوان بخشی از همان دستورالعمل ها برای جلوگیری از مشکلات ذخیره سازی در Docker ، اجرا کنید. برای صرفه جویی در فضا ، همچنین لیست های بسته را که بعد از آن دانلود شده است حذف می کنید (بسته های ذخیره شده به صورت پیش فرض حذف می شوند). همچنین /usr/share/desktop-directories را ایجاد می کنید زیرا برخی برنامه ها به دایرکتوری موجود بستگی دارند.بیایید یک بلوک کد کوچک دیگر اضافه کنیم:~/thunderbird/Dockerfile…RUN apt-get update -y &amp;&amp; \apt-get install -y –no-install-recommends lxterminal nano wget openssh-client rsync ca-certificates xdg-utils htop tar xzip gzip bzip2 zip unzip &amp;&amp; \rm -rf /var/lib/apt/listsدر این دستورالعمل ، شما در حال نصب برخی از نرم افزارها و بسته های عمومی مفید هستید. موارد قابل توجه در اینجا xd-utils (که دستورات پایه مورد استفاده برنامه های دسکتاپ را در لینوکس فراهم می کند) و ca-certificates (که گواهی های ریشه را نصب می کند تا به ما امکان دسترسی به سایت های HTTPS را بدهد) هستند.اکنون می توانیم دستورالعمل برنامه اصلی را اضافه کنیم:~/thunderbird/Dockerfile…RUN apt-get update -y &amp;&amp; \apt-get install -y –no-install-recommends thunderbird &amp;&amp; \rm -rf /var/lib/apt/listsمانند گذشته ، در اینجا ما در حال نصب برنامه هستیم. اگر برنامه کاربردی دیگری را کانتینرایز میکنید ، می توانید این دستورات را با دستورالعمل های لازم برای نصب برنامه خاص خود جایگزین کنید. برخی از برنامه ها برای اجرای داخل Docker به کار کمی بیشتر نیاز دارند. به عنوان مثال ، اگر برنامه ای را نصب می کنید که از Chrome ،Chromium یا QtWebEngine استفاده می کند ، باید از آرگومان خط فرمان –no-sandbox استفاده کنید ، زیرا در Docker پشتیبانی نمی شود.در مرحله بعد ، بیایید دستورالعمل هایی را اضافه کنیم تا چند فایل آخر به کانتینر اضافه شود:~/thunderbird/Dockerfile…COPY –from=easy-novnc-build /bin/easy-novnc /usr/local/bin/COPY menu.xml /etc/xdg/openbox/COPY supervisord.conf /etc/EXPOSE 8080در اینجا شما می توانید فایل های پیکربندی را که قبلاً ایجاد کرده اید به تصویر اضافه کرده و از مرحله اول کپی کردن باینری easy-novnc را انجام دهید.این بلوک کد بعدی دایرکتوری داده را ایجاد می کند و کاربر اختصاصی را برای برنامه شما اضافه می کند. از آن جهت مهم است که برخی برنامه ها از اجرا به عنوان ریشه خودداری می کنند. همچنین بهتر است که حتی در یک کانتینر ، برنامه ها را به صورت ریشه اجرا نکنید.~/thunderbird/Dockerfile…RUN groupadd –gid 900 app &amp;&amp; \useradd –home-dir /data –shell /bin/bash –uid 900 –gid 900 app &amp;&amp; \mkdir -p /dataVOLUME /dataبرای اطمینان از یک UID / GID سازگار برای فایل ها ، صریحاً هر دو را روی 900 تنظیم می کنید. همچنین می توانید یک حجم را در دایرکتوری داده قرار دهید تا اطمینان حاصل شود که بین راه ریستارت ها همچنان ادامه دارد.در آخر ، دستورالعمل هایی را برای راه اندازی همه موارد اضافه می کنیم:~/thunderbird/Dockerfile…CMD [“sh”, “-c”, “chown app:app /data /dev/stdout &amp;&amp; exec gosu app supervisord”]با تنظیم دستور پیش فرض روی supervisord ، مدیر فرآیندهای مورد نیاز برای اجرای برنامه شما را راه اندازی می کند. در این حالت ، به جای ENTRYPOINT از CMD استفاده می کنید. در بیشتر موارد ، تفاوتی ایجاد نمی کند ، اما استفاده از CMD برای این منظور به چند دلیل مناسب تر است. اولا ، supervisord هیچ آرگومانی مربوط به ما را دریافت نمیکند ، و اگر آرگومان هایی را به کانتینر ارائه می دهید ، آنها CMD را جایگزین می كنند و به ENTRYPOINT اضافه می شوند. دوما ، استفاده از CMD به ما امکان می دهد هنگام ارسال آرگومان ها به داخل کانتینر ، یک دستور کاملاً متفاوت (که توسط / bin / sh -c اجرا خواهد شد) ارائه دهیم ، که اشکال زدایی را آسان تر می کند.و در آخر ، لازم است قبل از شروع supervisord ، chown را به عنوان ریشه اجرا کنید تا از مشکلات مجوز در حجم داده جلوگیری کنید و به فرآیند کودک (child) اجازه دهید stdout را باز کند. این همچنین بدان معنی است که شما باید به جای دستورالعمل USER برای تعویض کاربر از gosu استفاده کنید.در اینجا ظاهر Dockerfile تکمیل شده شما به شرح زیر است:~/thunderbird/DockerfileFROM golang:1.14-buster AS easy-novnc-buildWORKDIR /srcRUN go mod init build &amp;&amp; \go get github.com/geek1011/easy-novnc@v1.1.0 &amp;&amp; \go build -o /bin/easy-novnc github.com/geek1011/easy-novncFROM debian:busterRUN apt-get update -y &amp;&amp; \apt-get install -y –no-install-recommends openbox tigervnc-standalone-server supervisor gosu &amp;&amp; \rm -rf /var/lib/apt/lists &amp;&amp; \mkdir -p /usr/share/desktop-directoriesRUN apt-get update -y &amp;&amp; \apt-get install -y –no-install-recommends lxterminal nano wget openssh-client rsync ca-certificates xdg-utils htop tar xzip gzip bzip2 zip unzip &amp;&amp; \rm -rf /var/lib/apt/listsRUN apt-get update -y &amp;&amp; \apt-get install -y –no-install-recommends thunderbird &amp;&amp; \rm -rf /var/lib/apt/listsCOPY –from=easy-novnc-build /bin/easy-novnc /usr/local/bin/COPY menu.xml /etc/xdg/openbox/COPY supervisord.conf /etc/EXPOSE 8080RUN groupadd –gid 1000 app &amp;&amp; \useradd –home-dir /data –shell /bin/bash –uid 1000 –gid 1000 app &amp;&amp; \mkdir -p /dataVOLUME /dataCMD [“sh”, “-c”, “chown app:app /data /dev/stdout &amp;&amp; exec gosu app supervisord”]Dockerfile خود را ذخیره کرده و ببندید. اکنون آماده ساخت و اجرای کانتینر خود هستیم و سپس به Thunderbird – که یک برنامه GUI است، دسترسی پیدا خواهیم کرد.مرحله 4 – ساخت و اجرای کانتینرمرحله بعدی ساخت کانتینر شما و تنظیم آن در زمان راه اندازی است. همچنین می توانید یک حجم برای حفظ داده های برنامه بین ریستارت ها و به روز رسانی تنظیم کنید.ابتدا کانتینر خود را بسازید. حتماً این دستورات را در دیرکتوری ~ / thunderbird اجرا کنید:⦁ $ docker build -t thunderbird⦁اکنون یک شبکه جدید ایجاد کنید که بین کانتینرهای برنامه به اشتراک گذاشته شود:⦁ $ docker network create thunderbird-net⦁سپس یک حجم برای ذخیره داده های برنامه ایجاد کنید:⦁ $ docker volume create thunderbird-data⦁در آخر ، آن را اجرا کرده و آن را روی ریستارت خودکار تنظیم کنید:⦁ $ docker run –detach –restart=always –volume=thunderbird-data:/data –net=thunderbird-net –name=thunderbird-app thunderbird⦁توجه داشته باشید که در صورت تمایل ، می توانید thunderbird-app را بعد از گزینه –name با نام دیگری جایگزین کنید. هرچه انتخاب کردید ، اکنون برنامه شما کانتینرایز شده و در حال اجرا است. اکنون بیایید از سرور مجازی وب Caddy برای امنیت آن استفاده کنیم و از راه دور به آن متصل شویم.مرحله 5 – تنظیم Caddyدر این مرحله ، وب سرور مجازی Caddy را تنظیم می کنید تا تأیید هویت انجام شود و به صورت اختیاری ، دسترسی از راه دور فایل از طریق WebDAV را انجام دهد. برای سادگی و اینکه به شما امکان استفاده از پروکسی معکوس موجود خود را بدهد ، آن را در یک کانتینر دیگر اجرا کنید.یک دیرکتوری جدید ایجاد کنید و سپس به داخل آن بروید:⦁ $ mkdir ~/caddy⦁⦁ $ cd ~/caddyاکنون با استفاده از nano یا ویرایشگر مورد نظر خود ، یک Dockerfile جدید ایجاد کنید:⦁ $ nano ~/caddy/Dockerfile⦁سپس بخش های زیر را اضافه کنید:~/caddy/DockerfileFROM golang:1.14-buster AS caddy-buildWORKDIR /srcRUN echo ‘module caddy’ &gt; go.mod &amp;&amp; \echo ‘require github.com/caddyserver/caddy/v2 v2.0.0’ &gt;&gt; go.mod &amp;&amp; \echo ‘require github.com/mholt/caddy-webdav v0.0.0-20200523051447-bc5d19941ac3’ &gt;&gt; go.modRUN echo ‘package main’ &gt; caddy.go &amp;&amp; \echo ‘import caddycmd “github.com/caddyserver/caddy/v2/cmd”‘ &gt;&gt; caddy.go &amp;&amp; \echo ‘import _ “github.com/caddyserver/caddy/v2/modules/standard”‘ &gt;&gt; caddy.go &amp;&amp; \echo ‘import _ “github.com/mholt/caddy-webdav”‘ &gt;&gt; caddy.go &amp;&amp; \echo ‘func main() { caddycmd.Main() }’ &gt;&gt; caddy.goRUN go build -o /bin/caddy .FROM debian:busterRUN apt-get update -y &amp;&amp; \apt-get install -y –no-install-recommends gosu &amp;&amp; \rm -rf /var/lib/apt/listsCOPY –from=caddy-build /bin/caddy /usr/local/bin/COPY Caddyfile /etc/EXPOSE 8080RUN groupadd –gid 1000 app &amp;&amp; \useradd –home-dir /data –shell /bin/bash –uid 1000 –gid 1000 app &amp;&amp; \mkdir -p /dataVOLUME /dataWORKDIR /dataCMD [“sh”, “-c”, “chown app:app /data &amp;&amp; exec gosu app /usr/local/bin/caddy run -adapterاین Dockerfile با فعال کردن افزونه WebDAV ، Caddy را ایجاد می کند ، و سپس آن را در پورت 8080 با Caddyfile در / etc / Caddyfile راه اندازی می کند. فایل را ذخیره کنید و ببندید.سپس سرور مجازی وب Caddy را پیکربندی می کنید. فایلی به نام Caddyfile را در دایرکتوری که تازه ایجاد کرده اید ایجاد کنید:⦁ $ nano ~/caddy/Caddyfileاکنون بلوک کد زیر را به Caddyfile خود اضافه کنید:~/caddy/Caddyfile{order webdav last}:8080 {logroot * /datareverse_proxy thunderbird-app:8080handle /files/* {uri strip_prefix /filesfile_server browse}redir /files /files/handle /webdav/* {uri strip_prefix /webdavwebdav}redir /webdav /webdav/basicauth /* {{env.APP_USERNAME} {env.APP_PASSWORD_HASH}}}این Caddyfile دیرکتوری اصلی را به کانتینر thunderbird-app که در مرحله 4 ایجاد کرده اید پروکسی میکند ( Docker آن را در IP صحیح تجزیه می کند). همچنین یک مرورگر فایل مبتنی بر وب فقط قابل خواندن در /files ارائه می کند و یک سرور مجازی WebDAV را روی / webdav اجرا می کند که می توانید برای دسترسی به فایل های خود به صورت محلی قرار دهید. نام کاربری و رمز عبور از متغیرهای محیط APP_USERNAME و APP_PASSWORD_HASH خوانده می شود.اکنون کانتینر را بسازید:⦁ $ docker build -t thunderbird-caddy .⦁Caddy v2 نیاز به hash رمز عبور مورد نظر شما دارد. دستور زیر را اجرا کنید و به یاد داشته باشید که mypass را با یک رمز عبور قوی به انتخاب خود جایگزین کنید:⦁ $ docker run –rm -it thunderbird-caddy caddy hash-password -plaintext ‘mypass’⦁این دستور یک رشته کاراکتر را تولید می کند. این کار را برای تهیه دستور بعدی در کلیپ بورد خود کپی کنید.اکنون آماده اجرای کانتینر هستید. اطمینان حاصل کنید که myuser را با نام کاربری مورد نظر خود جایگزین کنید و mypass-hash را با همان دستوری که در مرحله قبل اجرا کردید جایگزین نمایید. همچنین می توانید پورت (8080 در اینجا) را برای دسترسی به سرور مجازی خود در پورت دیگری تغییر دهید:⦁ $ docker run –detach –restart=always –volume=thunderbird-data:/data –net=thunderbird-net –name=thunderbird-web –env=APP_USERNAME=”myuser” –env=APP_PASSWORD_HASH=”mypass-hash” –publish=8080:8080 thunderbird-caddy⦁اکنون آماده دسترسی و آزمایش برنامه خود هستیم.مرحله 6 – تست و مدیریت برنامهبیایید به برنامه دسترسی پیدا کنیم و از عملکرد آن اطمینان حاصل نماییم.ابتدا http: // your_server_ip: 8080 را در یک مرورگر وب باز کنید ، با اعتباراتی که قبلاً انتخاب کرده اید وارد شوید و روی connect کلیک کنید.اکنون می توانید با برنامه تعامل برقرار کنید ، و برای تنظیم مناسب پنجره مرورگر ، باید به طور خودکار تغییر اندازه دهد.اگر بر روی دسکتاپ سیاه رنگ کلیک راست کنید، باید منویی را مشاهده کنید که به شما امکان دسترسی به یک ترمینال را می دهد. اگر کلیک وسط کنید ​​، باید لیستی از پنجره ها را ببینید.اکنون http://your_server_ip:8080/files/ را در یک مرورگر وب باز کنید. باید بتوانید به فایل های خود دسترسی پیدا کنید.به صورت اختیاری ، می توانید http: // your_server_ip: 8080 / webdav / خود را در یک کلاینت WebDAV نصب کنید. باید بتوانید مستقیماً به فایل های خود دسترسی پیدا کرده و آن ها را تغییر دهید. اگر از گزینه Map network drive در ویندوز اکسپلورر استفاده می کنید ، باید برای اضافه کردنHTTPS از یک پروکسی معکوس استفاده کنید یا HKLM\SYSTEM\CurrentControlSet\Services\WebClient\Parameters\BasicAuthLevel را روی DWORD:2 تنظیم کنید.در هر صورت ، برنامه GUI بومی شما اکنون برای استفاده از راه دور آماده است.نتیجهاکنون با موفقیت یک کانتینر Docker را برای Thunderbird تنظیم کرده اید و سپس با استفاده از Caddy ، دسترسی به آن را از طریق یک مرورگر وب پیکربندی کرده اید. در صورت نیاز به بروزرسانی برنامه خود ، کانتینرها را متوقف کنید ، docker rm thunderbird-app thunderbird-web را اجرای کنید، تصاویر را مجدد بسازید و سپس دستورات docker را از مراحل قبلی بالا مجدداً اجرا کنید. از آنجا که در یک حجم ذخیره می شود ، داده های شما همچنان حفظ می شوند.اگر می خواهید در مورد دستورات اساسی Docker اطلاعات بیشتری کسب کنید ، می توانید این لینک آموزش یا این صفحه را بخوانید. برای استفاده طولانی مدت تر ، میتوانید HTTPS را برای امنیت بیشتر فعال کنید (برای این کار به دامنه ای نیاز دارید).علاوه بر این ، اگر بیش از یک برنامه نصب کرده اید ، می توانید به جای شروع هر کانتینر به صورت دستی ، از Docker Compose یا Kubernetes استفاده کنید. و به یاد داشته باشید ، این آموزش می تواند به عنوان پایه ای برای اجرای سایر برنامه های لینوکس روی سرور مجازی شما استفاده شود ، از جمله:⦁ Wine ، یک لایه سازگاری برای اجرای برنامه های ویندوز در لینوکس.⦁ GIMP ، ویرایشگر تصویر منبع باز.⦁ Cutter ، پلتفرم مهندسی معکوس منبع باز.این گزینه آخر پتانسیل بسیار مهمی را برای کانتینرایز و دسترسی از راه دور به برنامه های GUI ارائه می دهد. با استفاده از این ستاپ ، اکنون می توانید از سرور مجازی با توان محاسباتی بسیار بیشتر از آنچه به صورت محلی در دسترس دارید برای اجرای ابزارهای منبع فشرده مانند Cutter استفاده کنید.برچسب‌ها:TigerVNC</description><category>mehdi kamali</category><author>mehdi kamali</author><pubDate>Mon, 29 Jun 2020 12:00:28 +0430</pubDate></item></channel></rss>