حتي با محبوبيت روزافزون خدمات ابري ، نياز به اجراي برنامه هاي بومي هنوز وجود دارد.
با استفاده از noVNC و TigerVNC ، مي توانيد برنامه هاي بومي را درون يک کانتينر Docker اجرا کنيد و از راه دور با استفاده از يک مرورگر وب به آنها دسترسي پيدا کنيد. علاوه بر اين ، مي توانيد برنامه خود را بر روي سرور مجازي با منابع سيستم بيشتر از آنچه به صورت محلي موجود داريد اجرا کنيد ، که مي تواند در هنگام اجراي برنامه هاي بزرگ ، انعطاف پذيري بيشتري را ارائه دهد.
در اين آموزش ، Mozilla Thunderbird ، کلاينت ايميل را با استفاده از Docker کانتينرايز مي کنيد. پس از آن ، آن را ايمن کرده و با استفاده از سرور مجازي وب Caddy امکان دسترسي از راه دور را فراهم خواهيد کرد.
پس از اتمام کار ، فقط با يک مرورگر وب مي توانيد از هر وسيله اي به Thunderbird دسترسي پيدا کنيد. همچنين به صورت اختياري مي توانيد با استفاده از WebDAV به طور محلي به فايل هاي موجود در آن دسترسي پيدا کنيد. همچنين يک تصوير کاملاً خود شمول از Docker خواهيد داشت که مي توانيد در هر مکاني اجرا کنيد.
پيش نيازها
قبل از شروع اين راهنما ، به موارد زير نياز خواهيد داشت:
? يک سرور مجازي اوبونتو .04 با حداقل 2 گيگابايت رم و فضاي ديسک 4 گيگابايتي.
? يک کاربر غير ريشه با امتيازات sudo.
? Docker که روي سرور مجازي شما تنظيم شده باشد. مي توانيد نحوه نصب و استفاده از Docker در Ubuntu .04 را در اين لينک دنبال کنيد.
مرحله 1 – ايجاد پيکربندي supervisord
اکنون که سرور مجازي شما در حال اجرا است و Docker نصب شده است ، آماده هستيد تا پيکربندي کانتينر برنامه خود را شروع کنيد. از آنجا که کانتينر شما از چندين مؤلفه تشکيل شده است ، براي راه اندازي و نظارت بر آنها بايد از يک مدير فرآيند استفاده کنيد. در اينجا ، از supervisord استفاده خواهيد کرد. supervisord يک مدير فرآيند است که در پايتون نوشته شده و اغلب براي موزون کردن کانتينرهاي پيچيده استفاده مي شود.
ابتدا دايرکتوري به نام thunderbird براي کانتينر خود ايجاد کنيد و وارد شويد:
? $ mkdir ~/thunderbird
?
? $ cd ~/thunderbird


اکنون با استفاده از nano يا ويرايشگر مورد نظر خود ، فايلي به نام supervisord.conf ايجاد و باز کنيد:
? $ nano supervisord.conf
?
اکنون اين اولين بلوک کد را به supraord.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 version=”1.0″ encoding=”utf-8″?>
<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”>
<menu id=”root-menu” label=”Openbox 3″>
<item label=”Thunderbird”>
<action name=”Execute”>
<execute>/usr/bin/thunderbird</execute>
</action>
</item>
<item label=”Terminal”>
<action name=”Execute”>
<execute>/usr/bin/x-terminal-emulator</execute>
</action>
</item>
<item label=”Htop”>
<action name=”Execute”>
<execute>/usr/bin/x-terminal-emulator -e htop</execute>
</action>
</item>
</menu>
</openbox_menu>


اين فايل 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 را بعد از گزينه –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


 


 


 


از اين لينک ها زير مي توانيد آمورش هاي بيشتري براي لينوکس پيدا کنيد :


دسترسي از راه دور به برنامه GUI با Docker در اوبونتو .04


راه اندازي سايت توسعه Jekyll در اوبونتو 20.04


نحوه راه اندازي سايت توسعه Jekyll در اوبونتو .04


نحوه نصب و استفاده از Docker Compose در اوبونتو 20.04


نحوه اجراي چند نسخه PHP بر روي يک سرور با استفاده از Apache و PHP-FPM در CentOS 8


نحوه نصب و استفاده از TimescaleDB در Ubuntu 20.04


نحوه نصب و راه اندازي Laravel با Docker Compose در اوبونتو 20.04


 


 


خريد vps – خريد سرور مجازي – خريد سرور – سرور هلند – فروش vps – سرور مجازي آمريکا – خريدvps – سرور مجازي هلند – فروش سرور مجازي – سرور آمريکا – vps – سرور مجازي انگليس – سرور مجازي آلمان – سرور مجازي کانادا – خريد vps آمريکا – خريد وي پي اس – سرور – خريد سرور مجازي هلند – vps خريد – سرور مجازي فرانسه – سرور مجازي هلند – خريد vps آمريکا – خريد سرور مجازي ارزان هلند – vps – خريد vps هلند – خريد سرور مجازي آمريکا – خريد vps فرانسه – تست vps – سرور مجازي تست – سرور مجازي ويندوز – ارزانترين vps – خريد وي پي اس – vps ارزان –