نحوه دسترسي از راه دور به برنامه هاي GUI با استفاده از Docker و Caddy در Debian 10
حتي با محبوبيت روزافزون خدمات ابري ، نياز به اجراي برنامه هاي بومي هنوز وجود دارد.
با استفاده از 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=true
pidfile=/tmp/supervisord.pid
logfile=/dev/fd/1
logfile_maxbytes=0
در اين بخش ، شما خود supervisord را پيكربندي مي كنيد. بايد nodaemon را روي true تنظيم كنيد زيرا درون يك كانتينر Docker به عنوان ورودي وارد مي شود. بنابراين ، مي خواهيد كه در پيش زمينه اجرا شود. همچنين pidfile را روي مسيري كه توسط يك كاربر غير ريشه قابل دسترسي است و logfile را روي stdout تنظيم ميكنيد تا بتوانيد ورودها را مشاهده كنيد.
در مرحله بعد ، يك بلوك كد كوچك ديگر را به supervisord.conf اضافه كنيد. اين بلوك TigerVNC را كه يك سرور مجازي تركيبي VNC / X11 است شروع مي كند:
~/thunderbird/supervisord.conf
…
[program:x11]
priority=0
command=/usr/bin/Xtigervnc -desktop “Thunderbird” -localhost -rfbport 5900 -SecurityTypes None -AlwaysShared -AcceptKeyEvents -AcceptPointerEvents -AcceptSetDesktopSize -SendCutText -AcceptCutText :0
autorestart=true
stdout_logfile=/dev/fd/1
stdout_logfile_maxbytes=0
redirect_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=0
command=/usr/local/bin/easy-novnc –addr :8080 –host localhost –port 5900 –no-url-password –novnc-params “resize=remote”
autorestart=true
stdout_logfile=/dev/fd/1
stdout_logfile_maxbytes=0
redirect_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=1
command=/usr/bin/openbox
environment=DISPLAY=:0
autorestart=true
stdout_logfile=/dev/fd/1
stdout_logfile_maxbytes=0
redirect_stderr=true
در اين بلوك ، شما در حال راه اندازي OpenBox ، مدير پنجره سبك X11 هستيد. مي توانيد از اين مرحله بگذريد ، اما بدون آن ، نمودارهاي ميله اي عنوان را نداريد يا نمي توانيد اندازه ويندوز را تغيير دهيد.
در آخر ، بياييد آخرين بلوك را به supervisord.conf اضافه كنيم ، كه برنامه اصلي را شروع مي كند:
~/thunderbird/supervisord.conf
…
[program:app]
priority=1
environment=DISPLAY=:0
command=/usr/bin/thunderbird
autorestart=true
stdout_logfile=/dev/fd/1
stdout_logfile_maxbytes=0
redirect_stderr=true
در اين بلوك آخر ، براي اطمينان از اجراي Thunderbird بعد از TigerVNC ، اولويت را روي 1 تنظيم كنيد در غير اين صورت با يك شرايط مسابقه روبرو مي شويد و به طور تصادفي در شروع كار ناكام خواهيد ماند. بنابراين autorestart = true قرار دهيد تا اگر برنامه به اشتباه بسته شد ، برنامه را مجدداً باز كنيد. متغير محيط DISPLAY به برنامه مي گويد تا روي سرور مجازي VNC كه قبلاً تنظيم كرده ايد نمايش داده شود.
در اينجا ظاهر نهايي supervisord.conf شما نمايش داده شده است:
~/thunderbird/supervisord.conf
[supervisord]
nodaemon=true
pidfile=/tmp/supervisord.pid
logfile=/dev/fd/1
logfile_maxbytes=0
[program:x11]
priority=0
command=/usr/bin/Xtigervnc -desktop “Thunderbird” -localhost -rfbport 5900 -SecurityTypes None -AlwaysShared -AcceptKeyEvents -AcceptPointerEvents -AcceptSetDesktopSize -SendCutText -AcceptCutText :0
autorestart=true
stdout_logfile=/dev/fd/1
stdout_logfile_maxbytes=0
redirect_stderr=true
[program:easy-novnc]
priority=0
command=/usr/local/bin/easy-novnc –addr :8080 –host localhost –port 5900 –no-url-password –novnc-params “resize=remote”
autorestart=true
stdout_logfile=/dev/fd/1
stdout_logfile_maxbytes=0
redirect_stderr=true
[program:openbox]
priority=1
command=/usr/bin/openbox
environment=DISPLAY=:0
autorestart=true
stdout_logfile=/dev/fd/1
stdout_logfile_maxbytes=0
redirect_stderr=true
[program:app]
priority=1
environment=DISPLAY=:0
command=/usr/bin/thunderbird
autorestart=true
stdout_logfile=/dev/fd/1
stdout_logfile_maxbytes=0
redirect_stderr=true
اگر مي خواهيد برنامه ديگري را كانتينرايز كنيد ، /usr/bin/thunderbird را با مسير قابل اجراي برنامه خود جايگزين كنيد. در غير اين صورت ، اكنون آماده پيكربندي منوي اصلي GUI خود هستيد.
مرحله 2 – تنظيم منوي OpenBox
اكنون كه مدير پروسه شما پيكربندي شده است ، بياييد منوي OpenBox را تنظيم كنيم. اين منو به ما امكان مي دهد تا برنامه ها را درون كانتينر راه اندازي كنيم. همچنين يك ترمينال و مانيتور پردازش براي اشكال زدايي در صورت لزوم را در اختيار خواهيم داشت.
در داخل ديركتوري برنامه خود ، از nano يا ويرايشگر متن مورد علاقه خود استفاده كنيد تا فايل جديدي به نام menu.xml ايجاد و باز كنيد:
⦁ $ nano ~/thunderbird/menu.xml
⦁
اكنون كد زير را به menu.xml اضافه كنيد:
~/thunderbird/menu.xml
اين فايل XML شامل آيتم هاي منو است كه با كليك راست بر روي دسكتاپ ظاهر مي شود. هر مورد از يك ليبل و يك عمل تشكيل شده است.
اگر مي خواهيد برنامه ديگري را كانتينرايز كنيد ، / usr / bin / thunderbird را با مسير اجرايي برنامه خود جايگزين كنيد و ليبل مورد را تغيير دهيد.
مرحله 3 – ايجاد Dockerfile
اكنون كه OpenBox پيكربندي شده است ، Dockerfile را ايجاد خواهيد كرد ، كه همه چيز را به هم پيوند مي دهد.
يك Dockerfile در ديركتوري كانتينر خود ايجاد كنيد:
⦁ $nano ~/thunderbird/Dockerfile
⦁
براي شروع ، بياييد براي ساختن easy-novnc كد ديگري اضافه كنيم:
~/thunderbird/Dockerfile
FROM golang:1.14-buster AS easy-novnc-build
WORKDIR /src
RUN go mod init build &&
go get github.com/geek1011/easy-novnc@v1.1.0 &&
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:buster
RUN apt-get update -y &&
apt-get install -y –no-install-recommends openbox tigervnc-standalone-server supervisor gosu &&
rm -rf /var/lib/apt/lists &&
mkdir -p /usr/share/desktop-directories
در اين دستورالعمل ، شما Debian 10 را به عنوان تصوير پايه خود نصب مي كنيد و سپس حداقل مورد نياز براي اجراي برنامه هاي GUI را در كانتينر خود نصب مي كنيد. توجه داشته باشيد كه apt-get update را به عنوان بخشي از همان دستورالعمل ها براي جلوگيري از مشكلات ذخيره سازي در Docker ، اجرا كنيد. براي صرفه جويي در فضا ، همچنين ليست هاي بسته را كه بعد از آن دانلود شده است حذف مي كنيد (بسته هاي ذخيره شده به صورت پيش فرض حذف مي شوند). همچنين /usr/share/desktop-directories را ايجاد مي كنيد زيرا برخي برنامه ها به دايركتوري موجود بستگي دارند.
بياييد يك بلوك كد كوچك ديگر اضافه كنيم:
~/thunderbird/Dockerfile
…
RUN apt-get update -y &&
apt-get install -y –no-install-recommends lxterminal nano wget openssh-client rsync ca-certificates xdg-utils htop tar xzip gzip bzip2 zip unzip &&
rm -rf /var/lib/apt/lists
در اين دستورالعمل ، شما در حال نصب برخي از نرم افزارها و بسته هاي عمومي مفيد هستيد. موارد قابل توجه در اينجا xd-utils (كه دستورات پايه مورد استفاده برنامه هاي دسكتاپ را در لينوكس فراهم مي كند) و ca-certificates (كه گواهي هاي ريشه را نصب مي كند تا به ما امكان دسترسي به سايت هاي HTTPS را بدهد) هستند.
اكنون مي توانيم دستورالعمل برنامه اصلي را اضافه كنيم:
~/thunderbird/Dockerfile
…
RUN apt-get update -y &&
apt-get install -y –no-install-recommends thunderbird &&
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 &&
useradd –home-dir /data –shell /bin/bash –uid 1000 –gid 1000 app &&
mkdir -p /data
VOLUME /data
براي اطمينان از يك UID / GID سازگار براي فايل ها ، صريحاً هر دو را روي 1000 تنظيم مي كنيد. همچنين مي توانيد يك حجم را در دايركتوري داده قرار دهيد تا اطمينان حاصل شود كه بين راه ريستارت ها همچنان ادامه دارد.
در آخر ، دستورالعمل هايي را براي راه اندازي همه موارد اضافه مي كنيم:
~/thunderbird/Dockerfile
…
CMD [“sh”, “-c”, “chown app:app /data /dev/stdout && exec gosu app supervisord”]
با تنظيم دستور پيش فرض روي supervisord ، مدير فرآيندهاي مورد نياز براي اجراي برنامه شما را راه اندازي مي كند. در اين حالت ، به جاي ENTRYPOINT از CMD استفاده مي كنيد. در بيشتر موارد ، تفاوتي ايجاد نمي كند ، اما استفاده از CMD براي اين منظور به چند دليل مناسب تر است. اولا ، supervisord هيچ آرگوماني مربوط به ما را دريافت نميكند ، و اگر آرگومان هايي را به كانتينر ارائه مي دهيد ، آنها CMD را جايگزين مي كنند و به ENTRYPOINT اضافه مي شوند. دوما ، استفاده از CMD به ما امكان مي دهد هنگام ارسال آرگومان ها به داخل كانتينر ، يك دستور كاملاً متفاوت (كه توسط / bin / sh -c اجرا خواهد شد) ارائه دهيم ، كه اشكال زدايي را آسان تر مي كند.
و در آخر ، لازم است قبل از شروع supervisord ، chown را به عنوان ريشه اجرا كنيد تا از مشكلات مجوز در حجم داده جلوگيري كنيد و به فرآيند كودك (child) اجازه دهيد stdout را باز كند. اين همچنين بدان معني است كه شما بايد به جاي دستورالعمل USER براي تعويض كاربر از gosu استفاده كنيد.
در اينجا ظاهر Dockerfile تكميل شده شما به شرح زير است:
~/thunderbird/Dockerfile
FROM golang:1.14-buster AS easy-novnc-build
WORKDIR /src
RUN go mod init build &&
go get github.com/geek1011/easy-novnc@v1.1.0 &&
go build -o /bin/easy-novnc github.com/geek1011/easy-novnc
FROM debian:buster
RUN apt-get update -y &&
apt-get install -y –no-install-recommends openbox tigervnc-standalone-server supervisor gosu &&
rm -rf /var/lib/apt/lists &&
mkdir -p /usr/share/desktop-directories
RUN apt-get update -y &&
apt-get install -y –no-install-recommends lxterminal nano wget openssh-client rsync ca-certificates xdg-utils htop tar xzip gzip bzip2 zip unzip &&
rm -rf /var/lib/apt/lists
RUN apt-get update -y &&
apt-get install -y –no-install-recommends thunderbird &&
rm -rf /var/lib/apt/lists
COPY –from=easy-novnc-build /bin/easy-novnc /usr/local/bin/
COPY menu.xml /etc/xdg/openbox/
COPY supervisord.conf /etc/
EXPOSE 8080
RUN groupadd –gid 1000 app &&
useradd –home-dir /data –shell /bin/bash –uid 1000 –gid 1000 app &&
mkdir -p /data
VOLUME /data
CMD [“sh”, “-c”, “chown app:app /data /dev/stdout && 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/Dockerfile
FROM golang:1.14-buster AS caddy-build
WORKDIR /src
RUN echo ‘module caddy’ > go.mod &&
echo ‘require github.com/caddyserver/caddy/v2 v2.0.0’ >> go.mod &&
echo ‘require github.com/mholt/caddy-webdav v0.0.0-20200523051447-bc5d19941ac3’ >> go.mod
RUN echo ‘package main’ > caddy.go &&
echo ‘import caddycmd “github.com/caddyserver/caddy/v2/cmd”‘ >> caddy.go &&
echo ‘import _ “github.com/caddyserver/caddy/v2/modules/standard”‘ >> caddy.go &&
echo ‘import _ “github.com/mholt/caddy-webdav”‘ >> caddy.go &&
echo ‘func main() { caddycmd.Main() }’ >> caddy.go
RUN go build -o /bin/caddy .
FROM debian:buster
RUN apt-get update -y &&
apt-get install -y –no-install-recommends gosu &&
rm -rf /var/lib/apt/lists
COPY –from=caddy-build /bin/caddy /usr/local/bin/
COPY Caddyfile /etc/
EXPOSE 8080
RUN groupadd –gid 1000 app &&
useradd –home-dir /data –shell /bin/bash –uid 1000 –gid 1000 app &&
mkdir -p /data
VOLUME /data
WORKDIR /data
CMD [“sh”, “-c”, “chown app:app /data && 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 {
log
root * /data
reverse_غير مجاز مي باشد thunderbird-app:8080
handle /files/* {
uri strip_prefix /files
file_server browse
}
redir /files /files/
handle /webdav/* {
uri strip_prefix /webdav
webdav
}
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 از يك پروكسي معكوس استفاده كنيد يا HKLMSYSTEMCurrentControlSetServicesWebClientParametersBasicAuthLevel را روي DWORD:2 تنظيم كنيد.
در هر صورت ، برنامه GUI بومي شما اكنون براي استفاده از راه دور آماده است.
نتيجه
اكنون با موفقيت يك كانتينر Docker را براي Thunderbird تنظيم كرده ايد و سپس با استفاده از Caddy ، دسترسي به آن را از طريق يك مرورگر وب پيكربندي كرده ايد. در صورت نياز به بروزرساني برنامه خود ، كانتينرها را متوقف كنيد ، docker rm thunderbird-app thunderbird-web را اجراي كنيد، تصاوير را مجدد بسازيد و سپس دستورات docker را از مراحل قبلي بالا مجدداً اجرا كنيد. از آنجا كه در يك حجم ذخيره مي شود ، داده هاي شما همچنان حفظ مي شوند.
اگر مي خواهيد در مورد دستورات اساسي Docker اطلاعات بيشتري كسب كنيد ، مي توانيد اين لينك آموزش يا اين صفحه را بخوانيد. براي استفاده طولاني مدت تر ، ميتوانيد HTTPS را براي امنيت بيشتر فعال كنيد (براي اين كار به دامنه اي نياز داريد).
علاوه بر اين ، اگر بيش از يك برنامه نصب كرده ايد ، مي توانيد به جاي شروع هر كانتينر به صورت دستي ، از Docker Compose يا Kubernetes استفاده كنيد. و به ياد داشته باشيد ، اين آموزش مي تواند به عنوان پايه اي براي اجراي ساير برنامه هاي لينوكس روي سرور مجازي شما استفاده شود ، از جمله:
⦁ Wine ، يك لايه سازگاري براي اجراي برنامه هاي ويندوز در لينوكس.
⦁ GIMP ، ويرايشگر تصوير منبع باز.
⦁ Cutter ، پلتفرم مهندسي معكوس منبع باز.
اين گزينه آخر پتانسيل بسيار مهمي را براي كانتينرايز و دسترسي از راه دور به برنامه هاي GUI ارائه مي دهد. با استفاده از اين ستاپ ، اكنون مي توانيد از سرور مجازي با توان محاسباتي بسيار بيشتر از آنچه به صورت محلي در دسترس داريد براي اجراي ابزارهاي منبع فشرده مانند Cutter استفاده كنيد.
از اين لينك ها زير مي توانيد آمورش هاي بيشتري براي لينوكس پيدا كنيد :
نحوه نصب و استفاده از Docker در اوبونتو 20.04
نحوه راه اندازي Nginx با پشتيباني HTTP / 2 در اوبونتو 18.04
چگونه مي توان پلتفرم Cloud IDE كد سرور را روي Debian 10 تنظيم كرد
نحوه دسترسي از راه دور به برنامه هاي GUI با استفاده از Docker و Caddy در Debian 10
چگونه مي توان پلتفرم Cloud IDE كد سرور را روي CentOS 7 تنظيم كرد
نحوه دسترسي از راه دور به برنامه هاي GUI با استفاده از Docker و Caddy در اوبونتو 20.04
نحوه دسترسي از راه دور به برنامه هاي GUI با استفاده از Docker و Caddy در Debian 9
خريد vps – خريد سرور مجازي – خريد سرور – سرور هلند – فروش vps – سرور مجازي آمريكا – خريدvps – سرور مجازي هلند – فروش سرور مجازي – سرور آمريكا – vps – سرور مجازي انگليس – سرور مجازي آلمان – سرور مجازي كانادا – خريد vps آمريكا – خريد وي پي اس – سرور – خريد سرور مجازي هلند – vps خريد – سرور مجازي فرانسه – سرور مجازي هلند – خريد vps آمريكا – خريد سرور مجازي ارزان هلند – vps – خريد vps هلند – خريد سرور مجازي آمريكا – خريد vps فرانسه – تست vps – سرور مجازي تست – سرور مجازي ويندوز – ارزانترين vps – خريد وي پي اس – vps ارزان –
برچسبها:Docker, noVNC, TigerVNC
برچسب: ،