loading...
سرور مجازی
behnam gol mohamadi بازدید : 13 سه شنبه 17 تیر 1399 نظرات (0)

حتی با محبوبیت روزافزون خدمات ابری ، نیاز به اجرای برنامه های بومی هنوز وجود دارد.
با استفاده از 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=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-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

این Dockerfile با فعال کردن افزونه WebDAV ، Caddy را ایجاد می کند ، و سپس آن را در پورت 8080 با Caddyfile در / etc / Caddyfile راه اندازی می کند. فایل را ذخیره کنید و ببندید.
سپس سرور مجازی وب Caddy را پیکربندی می کنید. فایلی به نام Caddyfile را در دایرکتوری که تازه ایجاد کرده اید ایجاد کنید:
⦁ $ nano ~/caddy/Caddyfile

اکنون بلوک کد زیر را به Caddyfile خود اضافه کنید:
~/caddy/Caddyfile
{
order webdav last
}
:8080 {
log
root * /data
reverse_proxy 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 از یک پروکسی معکوس استفاده کنید یا 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 استفاده کنید.

 

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

نحوه نصب و استفاده از 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 ارزان – 

 

برچسب‌ها:

behnam gol mohamadi بازدید : 11 سه شنبه 17 تیر 1399 نظرات (0)

FreeBSD یک سیستم عامل ایمن و با کارایی بالا است که برای انواع نقش های سرور مناسب است. در این راهنما ، ما اطلاعات اصلی در مورد چگونگی شروع کار با یک سرور FreeBSD را پوشش خواهیم داد.
این راهنما برای این در نظر گرفته شده تا یک ستاپ کلی برای سرورهای FreeBSD ارائه دهد ، اما توجه داشته باشید که نسخه های مختلف FreeBSD ممکن است دارای ویژگی های مختلفی باشند. بسته به نوع نسخه FreeBSD سرور شما در حال اجرا است ، دستورالعمل های ارائه شده در اینجا ممکن است مطابق توضیحات کار نکند.
ورود به سیستم با SSH
اولین قدم برای شروع پیکربندی سرور FreeBSD این است که وارد شوید.
برای ورود به سرور FreeBSD خود ، از دستور ssh استفاده کنید. شما باید حساب کاربری freebsd را به همراه آدرس IP عمومی سرور خود مشخص کنید:
⦁ $ ssh freebsd@your_server_ip

باید به طور خودکار تأیید و وارد سیستم شوید. به یک رابط خط فرمان هدایت می شوید.
تغییر پوسته پیش فرض به tcsh (اختیاری)
اگر تازه کار با FreeBSD را شروع کرده اید ، اعلان فرمان نمایش داده شده ممکن است برای شما ناآشنا به نظر برسد. بیایید در مورد نوع محیطی که ما در آن کار می کنیم ، توضیحاتی بدست آوریم. دستور زیر را اجرا کنید تا ببینید پوسته پیش فرض برای کاربر freebsd  شما چیست:
⦁ $ echo $SHELL

Output
/bin/sh

در این خروجی ، می بینید که پوسته پیش فرض برای کاربر frebsd sh ، sh است (که به پوسته Bourne  نیز معروف است). در سیستم های لینوکس ، sh اغلب یک اسم مستعار برای bash است ، یک جایگزین نرم افزار رایگان برای پوسته Bourne  که شامل چند ویژگی اضافی است. با این حال ، در FreeBSD ، برنامه پوسته کلاسیک sh است ، نه یک نام مستعار.
پوسته خط فرمان پیش فرض برای FreeBSD ، tcsh است . اگر می خواهید tcsh را به عنوان پوسته پیش فرض کاربر FreeBSD خود تنظیم کنید ، دستور زیر را اجرا کنید:
⦁ $ sudo chsh -s /bin/tcsh freebsd

دفعه بعدی که به سرور خود وارد شوید ، اعلان tcsh را به جای اعلان sh مشاهده می کنید. با اجرای برنامه می توانید از پوسته tcsh برای جلسه فعلی استفاده کنید:
⦁ $ tcsh

اعلان شما باید به شرح زیر تغییر کند:
freebsd@hostname:~ %
اگر می خواهید به پوسته Bourne برگردید می توانید با دستور sh این کار را انجام دهید.
اگرچه tcsh به طور معمول پوسته پیش فرض برای سیستم های FreeBSD است ، اما دارای چندین تنظیمات پیش فرض است که کاربران تمایل دارند خودشان تغییر دهند ، مانند پیجر و ویرایشگر پیش فرض و همچنین رفتار برخی از کلیدهای خاص. برای نشان دادن نحوه تغییر برخی از این پیش فرض ها ، فایل پیکربندی پوسته را اصلاح می کنیم.
یک فایل پیکربندی نمونه در حال حاضر در سیستم فایل موجود است. آن را در دیرکتوری هوم خود کپی کنید تا بتوانید به صورت دلخواه آن را تغییر دهید:
⦁ freebsd@hostname:~ % cp /usr/share/skel/dot.cshrc ~/.cshrc

پس از کپی کردن فایل در دیرکتوری خانه ، می توانید آن را ویرایش کنید. ویرایشگر vi بصورت پیش فرض در سیستم گنجانده شده است ، اما اگر می خواهید ویرایشگر ساده تری داشته باشید ، می توانید به جای آن ویرایشگر ee را امتحان کنید:
⦁ freebsd@hostname:~ % ee ~/.cshrc

وقتی این فایل را مرور می کنید ، می توانید تصمیم بگیرید که چه ورودی هایی را می خواهید اصلاح کنید. به طور خاص ، ممکن است بخواهید ورودی های setenv را تغییر دهید تا پیش فرض های خاصی داشته باشید که شاید با آنها بیشتر آشنا شوید.
~/.cshrc
. . .

setenv EDITOR vi
setenv PAGER more

. . .

اگر با ویرایشگر vi آشنایی ندارید و یک محیط ویرایش ساده تر را میخواهید ، می توانید متغیر محیط EDITOR را به چیزی مانند ee تغییر دهید. بیشتر کاربران می خواهند PAGER را به وضعیت کمتر تغییر دهند تا بیشتر. این امر به شما امکان می دهد تا بدون خروج از پیجر ، در صفحات به بالا و پایین بروید:
~/.cshrc
. . .
setenv EDITOR ee
setenv PAGER less
. . .

نکته دیگری که احتمالاً می خواهید به این فایل پیکربندی اضافه کنید ، بلوکی از کد است که به طور صحیح برخی از کلیدهای صفحه کلید خود را در جلسه tcsh ترسیم می کند. در پایین فایل کد زیر را اضافه کنید. بدون این خطوط ، DELETE  و کلیدهای دیگر درست کار نمی کنند:
~/.cshrc
. . .
if ($term == “xterm” || $term == “vt100” \
|| $term == “vt102” || $term !~ “con*”) then
# bind keypad keys for console, vt100, vt102, xterm
bindkey “\e[1~” beginning-of-line # Home
bindkey “\e[7~” beginning-of-line # Home rxvt
bindkey “\e[2~” overwrite-mode # Ins
bindkey “\e[3~” delete-char # Delete
bindkey “\e[4~” end-of-line # End
bindkey “\e[8~” end-of-line # End rxvt
endif

پس از اتمام ، با فشار دادن CTRL + C ، تایپ کردن exit، و سپس فشار دادن ENTER فایل را ذخیره کرده و ببندید. اگر در عوض فایل را با vi ویرایش کرده اید ، با فشار دادن ESC ، تایپ: wq ، فایل را ذخیره کرده و ببندید و سپس ENTER را فشار دهید.
برای اینکه بخش فعلی شما فوراً این تغییرات را منعکس کند ، فایل پیکربندی را سورس کنید:
⦁ freebsd@hostname:~ % source ~/.cshrc

ممکن است فوراً آشکار نباشد ، اما کلیدهای Home, Insert, Delete, و  Endهمانطور که انتظار می رود کار خواهند کرد.
نکته ای که در این مرحله باید به آن توجه داشته باشید اینست که اگر از پوسته های tcsh یا csh استفاده می کنید ، هر زمان که تغییراتی ایجاد شود ممکن است روی مسیر اجرایی تأثیر بگذارد ، باید دستور rehash را اجرا کنید. سناریوهای متداول که ممکن است در هنگام نصب یا حذف برنامه ها اتفاق بیفتد ، رخ می دهند.
بعد از نصب باید این را تایپ کنید تا پوسته فایلهای برنامه جدید را پیدا کند:
⦁ freebsd@hostname:~ % rehash

با این کار ، پوسته tcsh نه تنها به عنوان پیش فرض کاربر freebsd شما تعیین می شود ، بلکه بسیار قابل استفاده تر است.
تنظیم bash به عنوان پوسته پیش فرض (اختیاری)
اگر با پوسته bash بیشتر آشنا هستید و ترجیح می دهید از آن به عنوان پوسته پیش فرض خود استفاده کنید ، می توانید آن را در چند مرحله کوتاه انجام دهید.
توجه: bash در FreeBSD 11.1 پشتیبانی نمی شود و دستورالعمل های این بخش برای آن نسخه خاص کار نمی کند.

ابتدا باید با تایپ کردن دستور زیر پوسته bashرا نصب کنید:
⦁ $ sudo pkg install bash

از شما خواسته می شود که تایید کنید آیا می خواهید بسته دانلود شود یا خیر. این کار را با فشار دادن y و سپس enter انجام دهید.
پس از اتمام نصب ، می توانید با اجرای دستور زیر ، bash را شروع کنید:
⦁ $ bash

با این کار اعلان پوسته شما به روز می شود:
[freebsd@hostname ~] $
برای تغییر پوسته پیش فرض freebsd به bash ، می توانید تایپ کنید:
⦁ [freebsd@hostname ~] $ sudo chsh -s /usr/local/bin/bash freebsd

دفعه بعدی که وارد شوید ، پوسته bash بجای پیش فرض فعلی بطور خودکار شروع می شود.
اگر می خواهید پیجر یا ویرایشگر پیش فرض در پوسته bash را تغییر دهید ، می توانید این کار را در فایل ای به نام ~ / .bash_profile انجام دهید. به طور پیش فرض وجود نخواهد داشت ، بنابراین شما نیاز به ایجاد آن دارید:
⦁ [freebsd@hostname ~] $ ee ~/.bash_profile

در داخل ، برای تغییر پیجر یا ویرایشگر پیش فرض ، انتخاب های خود را مانند این اضافه کنید:
~/.bash_profile
export PAGER=less
export EDITOR=ee

پس از اتمام کار با فشار دادن CTRL + C ، تایپ کردن exit ، و سپس فشار دادن ENTER فایل را ذخیره کرده و ببندید.
برای اجرای سریع تغییرات خود ، فایل را سورس کنید:
⦁ [freebsd@hostname ~] $ source ~/.bash_profile

اگر می خواهید تغییرات بیشتری در محیط پوسته خود ایجاد کنید ، مانند تنظیم نام مستعار مخصوص فرمان یا تنظیم متغیرهای محیط ، می توانید آن فایل را مجدداً باز کنید و تغییرات جدید خود را در آن بیافزایید.
تنظیم گذرواژه ریشه (اختیاری)
به طور پیش فرض ، سرورهای FreeBSD اجازه ورود به ssh برای حساب root را با استفاده از یک رمز عبور نمی دهند.
از آنجا که حساب کاربری root نسبت به SSH غیرقابل دسترسی است ، تنظیم رمزعبور حساب ریشه نسبتاً بی خطر است. در حالی که شما قادر نخواهید بود از این طریق برای ورود به سیستم از طریق SSH استفاده کنید ، می توانید از این رمز عبور برای ورود به عنوان ریشه از طریق کنسول وب استفاده کنید.
برای تنظیم گذرواژه اصلی ، تایپ کنید:
sudo passwd

از شما خواسته می شود یک رمز ورود برای حساب root انتخاب و تأیید کنید. همانطور که در بالا گفته شد ، هنوز نمی توانید از این برای تأیید هویت SSH استفاده کنید (این یک تصمیم امنیتی است) ، اما می توانید از آن برای ورود به سیستم از طریق کنسول استفاده کنید.
برای انجام این کار ، روی دکمه Console در گوشه سمت راست بالای صفحه دراپلت خود کلیک کنید تا کنسول وب نمایش داده
شود:

اگر تصمیم به تنظیم گذرواژه ندارید و سرور برایتان قفل شده است (به عنوان مثال اگر به طور تصادفی قوانین فایروال بیش از حد محدود شده ای تنظیم کردید) ، همیشه می توانید با بوت کردن دراپلت خود ، حالت تک کاربر را تنظیم کنید. ما در این لینک راهنما به شما نشان می دهیم که چگونه می توانید این کار را انجام دهید.
نتیجه
در حال حاضر ، میدانید که چگونه به یک سرور FreeBSD وارد شوید و چگونه می توانید یک محیط پوسته bash را تنظیم کنید. قدم بعدی این است که خود را با برخی از اصول اولیه FreeBSD و همچنین تفاوت های آن با توزیع های مبتنی بر لینوکس آشنا کنید.
• مقدمه ای مقایسه ای در مورد FreeBSD برای کاربران لینوکس
• آشنایی با نگهداری پایه FreeBSD
پس از آشنایی با FreeBSD و پیکربندی آن با نیازهای خود ، می توانید از انعطاف پذیری ، امنیت و عملکرد آن بهره بیشتری ببرید.

 

برچسب‌ها:

behnam gol mohamadi بازدید : 13 سه شنبه 17 تیر 1399 نظرات (0)

Prosody یک سرور چت XMPP است که از چت روم های تکی و گروهی یک به یک رمزگذاری شده توسط TLS پشتیبانی می کند. XMPP (پروتکل حضور و پیام رسانی گسترده) یک پروتکل پیام رسانی باز است که به طور رسمی با عنوان Jabber شناخته می شود. این بدان معنی است که هر کلاینت چت XMPP قادر خواهد بود به یک سرور Prosody وصل شود و چت را شروع کند.
XMPP یک استاندارد کامل و آزاد است که توسط  Internet Engineering Task Force (IETF) نگهداری می شود. این برنامه در بسیاری از برنامه ها مانند Google Talk که توسط میلیون ها کاربر استفاده می شود ، بطور فعال نگهداری و به کار گرفته می شود. سرورهای XMPP ، مانند Prosody ، گزینه ای قابل انعطاف برای سرور چت هستند که بیش از دو دهه است که وجود دارند.
در این آموزش ، یک سرور Prosody را نصب و پیکربندی میکنید که از جلسات چت یک به یک و گروهی و امکان بارگذاری فایل ها در پنل چت برای اشتراک گذاری پشتیبانی می کند. تمام جلسات چت توسط گواهی رمزنگاری TLS محافظت می شود تا اطلاعات شخصی شما خصوصی بماند.
پیش نیازها
قبل از شروع این راهنما به موارد زیر نیاز خواهید داشت:
یک سرور Ubuntu 18.04 با حداقل 512 مگابایت رم که با دنبال کردن راهنمای ستاپ اولیه سرور برای اوبونتو 18.04 تنظیم شده باشد، شامل یک کاربر فعال با sudo ، غیر ریشه و یک فایروال.
• یک کلاینت چت XMPP که روی سیستم محلی شما نصب شده باشد. هر یک از برنامه های چت که در صفحه کلاینت XMPP ذکر شده است با سرور Prosody شما سازگار خواهد بود.
• دو نام هاست که به سرور شما اشاره کنند. شما به دو نام هاست نیاز دارید زیرا Prosody از یک هاست برای چت مستقیم و از دیگری برای اتاق های گفتگوی گروهی استفاده می کند. این راهنما از دو نام هاست مثال زیر استفاده خواهد کرد:
chat.your-domain : نام هاست چت یک به یک.
room.your-domain : نام هاست چت گروهی.
به عنوان کاربر فعال با sudo و غیر ریشه برای شروع این راهنما به سرور خود وارد شوید.
مرحله 1 – نصب Prosody
در این مرحله مخزن Prosody APT سفارشی را به سرور خود اضافه می کنید و سپس Prosody را از آن نصب می کنید. برای اطمینان از نصب جدیدترین بسته ها از مخزن Prosody استفاده می کنید.
ابتدا با ویرایشگر متن خود یک فایل مخزن جدید ایجاد و آن را باز کنید. این فایل اطلاعات مخزن Prosody را برای مدیر بسته APT در اختیار دارد:
⦁ $ sudo nano /etc/apt/sources.list.d/prosody.list

خط زیر را در فایل خود اضافه کنید:
/etc/apt/sources.list.d/prosody.list
deb https://packages.prosody.im/debian bionic main

حال باید کلید عمومی Prosody APT را دانلود و نصب کنید. سرور شما از این مسئله استفاده خواهد کرد تا تأیید کند بسته Prosody توسط تیم Prosody ساخته شده است و معتبر است.
دستور زیر از ابزار wget برای دانلود کلید در دیرکتوری فعلی شما استفاده می کند:
⦁ $ wget https://prosody.im/files/prosody-debian-packages.key

برای افزودن کلید Prosody به حلقه کلید APT از دستور apt-key add استفاده کنید:
⦁ $ sudo apt-key add prosody-debian-packages.key

اکنون می توانید کلید را حذف کنید زیرا دیگر نیازی به آن ندارید:
⦁ $ rm prosody-debian-packages.key

بانک اطلاعات بسته سرور خود را به روز کنید تا نسخه های جدیدتر بسته از مخزن Prosody را شامل شود:
⦁ $ sudo apt update

اکنون آماده نصب بسته سرور Prosody و برخی بسته های اختیاری دیگر هستید:
⦁ $ sudo apt install prosody prosody-modules lua-dbi-sqlite3 lua-event

بسته های نصب شده به شرح زیر است:
prosody: سرور prosody.
prosody-modules : ماژول های Prosody اضافی که عملکرد سرور Prosody را گسترش می دهد.
lua-dbi-sqlite3 : استفاده از یک پایگاه داده SQLite را برای Prosody ممکن میسازد.
lua-event: Prosodyرا قادر می سازد کلاینت های همزمان بیشتری را اداره کند.
اکنون نصب Prosody به پایان رسیده است. در مرحله بعد ، دو گواهینامه TLS دریافت خواهید کرد که Prosody برای رمزگذاری داده های خود از طریق اینترنت و از طریق سرور Prosody از آنها استفاده می کند.
مرحله 2 – اخذ گواهینامه های TLS
Prosody از گواهینامه های TLS برای رمزگذاری اتصالات بین سرور و کلاینت استفاده می کند. این گواهینامه ها همان مواردی هستند که هر زمان که از وب سایت با آدرس HTTPS بازدید می کنید ، از آن استفاده می نمایید. Let’s Encrypt یک سازمان بدون بهره وری است که گواهینامه های TLS رایگان ارائه می دهد. همچنین ابزار certbot را برای دریافت و مدیریت گواهینامه های خود ارائه می دهند. در این مرحله شما می توانید ابزار certbot را نصب کرده و از آن برای گرفتن یک جفت گواهی برای دو نام هاست مورد نظر خود به سرور خود استفاده کنید.
برای اطمینان از استفاده از جدیدترین بسته ها ، certbot  را از مخازن PPA اوبونتو Let’s Encrypt نصب خواهید کرد.
ابتدا دستور زیر را برای اضافه کردن مخزن سفارشی اجرا کنید:
⦁ $ sudo add-apt-repository ppa:certbot/certbot

اکنون ، certbot را نصب کنید:
⦁ $ sudo apt install certbot

در مرحله بعد ، اجازه ترافیک HTTP از طریق UFW را بدهید تا certbot بتواند به کارگیری گواهی شما را تأیید کند:
⦁ $ sudo ufw allow http

دستور certbot زیر را اجرا کنید ، که گواهی یکی از نام های هاست شما را دریافت می کند:
⦁ $ sudo certbot certonly –standalone –agree-tos –email your_email -d chat.your-domain

این گزینه ها عبارتند از:
– –certonly : گواهینامه را دریافت کنید و هیچ تغییر دیگری در سرور ایجاد نکنید.
–standalone : یک سرور وب موقت را برای تایید اعتبار گواهی راه اندازی کنید.
–agree-tos: بطور خودکار با شرایط سرویس Let’s Encrypt موافقت کنید.
–email your_email : آدرس ایمیلی که شما برای Let’s Encrypt ارسال می کنید تا از آنها استفاده کنند و در مورد مسائل امنیتی ، اعلام انقضای گواهی و سایر اطلاعات مهم به شما اطلاع دهند.
-d chat.your-domain: نام میزبانی که قصد استفاده از آن را برای سرور Prosody خود دارید.
هنگامی که این دستور را اجرا می کنید از شما سؤال می شود که آیا می خواهید آدرس ایمیل خود را با بنیاد الکترونیکی Frontier به اشتراک بگذارید ، که اختیاری است. سپس ثبت نام سرتیفیکیت با خروجی زیر ادامه خواهد یافت:
Output
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator standalone, Installer None
Obtaining a new certificate

IMPORTANT NOTES:
– Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/chat.your-domain/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/chat.your-domain/privkey.pem
Your cert will expire on 2020-07-26. To obtain a new or tweaked
version of this certificate in the future, simply run certbot
again. To non-interactively renew *all* of your certificates, run
“certbot renew”
– If you like Certbot, please consider supporting our work by:

Donating to ISRG / Let’s Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le

دوباره همین دستور را اجرا کنید تا یک گواهی برای نام هاست دوم خود دریافت کنید.
اکنون دو دایرکتوری دارید:
⦁ /etc/letsencrypt/live/room.your-domain
⦁ /etc/letsencrypt/live/chat.your-domain

این دایرکتوری ها حاوی گواهی و فایلهای کلیدی برای نامهای هاست شما هستند.
از آنجا که سرور Prosody به عنوان کاربر اصلی کار نمی کند ، مالکیت و مجوزهای دایرکتوری ها و فایل های کلیدی نیاز به تغییر دارد تا سرور Prosody بتواند آنها را بخواند و از آنها استفاده کند.
مجوز فایل ها و دایرکتوری ها در لینوکس این امکان را به شما می دهد که کاربران و پردازش ها بتوانند دایرکتوری ها و پوشه ها را بخوانند ، بنویسند و اجرا کنند. این کنترل از تغییر سیستم توسط یک کاربر غیر مجاز محافظت می کند و همچنین از خوانده شدن فایل های خصوصی مانند کلید خصوصی TLS توسط یک کاربر غیر مجاز محافظت می کند.
اگر با کاربران و مجوزهای لینوکس آشنا نیستید مقاله مقدمه ای بر مجوزهای لینوکس مطالبی عالی را ارائه می دهد.
اولین قدم برای تغییر گروه مالک کلیدهای خصوصی به گروه سرور Prosody با دستورات زیر است:
⦁ $ sudo chgrp prosody /etc/letsencrypt/live/room.your-domain/privkey.pem

⦁ $ sudo chgrp prosody /etc/letsencrypt/live/chat.your-domain/privkey.pem

ابزار chgrp مالکیت گروهی فایل ها و دیرکتوری ها را تغییر می دهد. در اینجا ، شما گروه را از root پیش فرض به prosody تغییر داده اید.
سپس ، مجوزهای دایرکتوری هایی که حاوی فایل های گواهی TLS هستند را به 0755 تغییر دهید. این دایرکتوری ها متعلق به کاربر root و گروه root هستند. دستور زیر مجوزهای موجود در این دیرکتوری ها را تغییر می دهد:
⦁ $ sudo chmod 0755 /etc/letsencrypt/archive

⦁ $ sudo chmod 0755 /etc/letsencrypt/live

مجوزهای جدید 0755 در این دیرکتوری ها بدان معنی است که کاربر اصلی ، مجوزهای خواندن ، نوشتن و اجرای مجوزها را دارد. اعضای گروه اصلی مجوزها را خوانده و اجرا می کنند. سایر کاربران و گروه های موجود در سیستم مجوزهای خواندن و اجرای آنها را دارند.
اکنون مجوزهای کلیدهای خصوصی TLS را تغییر دهید:
⦁ $ sudo chmod 0640 /etc/letsencrypt/live/room.your-domain/privkey.pem

⦁ $ sudo chmod 0640 /etc/letsencrypt/live/chat.your-domain/privkey.pem

مجوزهای 0640 در این فایل ها بدین معنی است که کاربر اصلی دارای مجوزهای خواندن و نوشتن روی فایل است. اعضای گروه Prosody مجوزهای مربوط به خواندن فایل را دارند. گروه Prosody یک عضو دارد ، کاربر Prosody . کاربری است که سرور Prosody با آن اجرا می شود و کاربری که با آن به فایل دسترسی خواهد داشت. همه کاربران دیگر در سیستم اجازه دسترسی به فایل را ندارند.
این دو دستور از ابزار chmod استفاده می کنند که کاربران و گروه هایی را که مجوزهای خواندن ، نوشتن و اجرا در فایل ها و دایرکتوری ها را دارند تعیین می کنند.
شما می توانید آزمایش کنید که Prosody می تواند کلیدهای خصوصی را با استفاده از sudo برای خواندن فایل های کلید خصوصی با cat به عنوان کاربر prosody بخواند:
⦁ $ sudo -u prosody cat /etc/letsencrypt/live/chat.your-domain/privkey.pem

اگر موفقیت آمیز بود ، می توانید محتویات فایل کلیدی نمایش داده شده روی صفحه خود را مشاهده کنید.
Prosody برای رمزگذاری اتصالات آپلود و دانلود فایل ، از یک فایل واحد حاوی گواهی و کلید خصوصی استفاده می کند. این فایل توسط certbot بطور خودکار ایجاد نمی شود بنابراین باید آن را بصورت دستی ایجاد کنید.
ابتدا وارد پوشه ای خواهید شد که حاوی فایل های کلید و گواهینامه است ، سپس از cat استفاده کنید تا محتوای آنها را در یک فایل جدید key-and-cert.pem ترکیب کنید:
⦁ $ cd /etc/letsencrypt/live/chat.your-domain/

⦁ $ sudo sh -c ‘cat privkey.pem fullchain.pem >key-and-cert.pem’

آغاز این دستور ، sudo sh-c ، یک زیر پوسته جدید را باز می کند که دارای مجوزهای کاربر اصلی است و می تواند فایل جدید را روی /etc/letsencrypt/live/chat.your-domain/ بنویسید.
اکنون گروه و مجوزهای این فایل جدید را تغییر دهید تا با گروه و مجوزهای تنظیم شده برای سایر کلیدهای خصوصی با دستور زیر مطابقت داشته باشد:
⦁ $ sudo chmod 0640 key-and-cert.pem

⦁ $ sudo chgrp prosody key-and-cert.pem

به دیرکتوری هوم کاربرتان بازگردید:
⦁ $ cd

سرانجام ، هر زمان که گواهی تجدید شود یا حاوی یک گواهی منقضی شده باشد ، باید این فایل دوباره ایجاد شود.
certbot با مکانیسمی به نام ” hook ” همراه است که اجازه می دهد قبل یا بعد از تمدید مجوز ، اسکریپت اجرا شود. شما می توانید از این مکانیزم برای اجرای یک اسکریپت استفاده کنید که پس از هر بار تجدید گواهی ، دستوری را که اجرا کردید ، دوباره ایجاد کند.
فایل اسکریپت جدید با نام /etc/letsencrypt/renewal-hooks/post/key-and-cert-combiner.sh را با یک ویرایشگر متن باز کنید:
⦁ $ sudo nano /etc/letsencrypt/renewal-hooks/post/key-and-cert-combiner.sh

سپس موارد زیر را به ویرایشگر اضافه کنید:
/etc/letsencrypt/renewal-hooks/post/key-and-cert-combiner.sh
#!/usr/bin/env bash
set -e

# combines the certificate and key into a single file with cat
cat /etc/letsencrypt/live/chat.your-domain/privkey.pem \
/etc/letsencrypt/live/chat.your-domain/fullchain.pem \
>/etc/letsencrypt/live/chat.your-domain/key-and-cert.pem

به این ترتیب فیلمنامه Bash شما تجزیه می شود:
⦁ #!/usr/bin/env bash : به سیستم می گوید از مترجم Bash برای اجرای اسکریپت استفاده کند.
⦁ set –e: در صورت عدم موفقیت ، باعث خروج اسكریپت میشود.
⦁ > : خروجی دستور cat را در فایل جدید سمت راست تغییر دهید.
اسکریپت را نمی توان اجرا کرد تا زمانی که به شما اجازه اجرای دستور زیر را بدهد:
⦁ $ sudo chmod +x /etc/letsencrypt/renewal-hooks/post/key-and-cert-combiner.sh

+ x به اسکریپت مجوزهای اجرا را می دهد.
سپس ، آزمایش کنید که گواهینامه ها به درستی نصب شده باشند و اسکریپت hook بعد از تمدید با اجرای دستور certbot زیر کار می کند:
⦁ $ sudo certbot renew –dry-run

این دستور به certbot می گوید تا گواهینامه ها را تمدید کند اما با گزینه –dry-run که باعث می شود هر گونه تغییری در certbot متوقف شود. اگر همه چیز موفقیت آمیز باشد ، خروجی زیر را مشاهده خواهید کرد:
Output
Congratulations, all renewals succeeded. The following certs have been renewed:
/etc/letsencrypt/live/chat.your-domain/fullchain.pem (success)
/etc/letsencrypt/live/room.your-domain/fullchain.pem (success)
** DRY RUN: simulating ‘certbot renew’ close to cert expiry
** (The test certificates above have not been saved.)
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
Running post-hook command: /etc/letsencrypt/renewal-hooks/post/key-and-cert-combiner.sh

اکنون مجوزهای TLS را برای سرور Prosody خود را دریافت کرده اید. در مرحله بعد ، فایل پیکربندی اصلی Prosody را ویرایش می کنید.
مرحله 3 – پیکربندی Prosody
Prosody گزینه های پیکربندی زیادی دارد و این در اندازه بزرگ فایل پیکربندی اصلی /etc/prosody/prosody.cfg.lua منعکس می شود. برای مدیریت این بخش از ابتدای فایل به سمت پایین کار خواهید کرد و ویرایشهایی را در فایل انجام می دهید.
قبل از شروع ویرایش یک فایل پیکربندی بزرگ ، بهتر است که یک نسخه کپی تهیه کنید تا نسخه اصلی را برای بازگشت به آن یا بازیابی داشته باشید. یک کپی از پیکربندی را با دستور cp تهیه کنید:
⦁ $ sudo cp /etc/prosody/prosody.cfg.lua /etc/prosody/prosody.cfg.lua.original

اکنون یک نسخه از فایل اصلی در /etc/prosody/prosody.cfg.lua.original دارید.
سپس ، فایل پیکربندی را با یک ویرایشگر متن باز کنید:
⦁ $ sudo nano /etc/prosody/prosody.cfg.lua

در بخش های بعدی تغییرات پیکربندی به کارهای کوچکتر تقسیم می شوند.
ایجاد یک ادمین
ادمین های Prosody کاربرانی هستند که می توانند از طریق کلاینت چت خود ، روی سرور Prosody تغییراتی ایجاد کنند ، به همه کاربران پیام دهند و سایر اقدامات ویژه را انجام دهند.
ادمین های سرور Prosody با خط زیر تنظیم شده اند:
/etc/prosody/prosody.cfg.lua

admins = { }

در این خط مثال ، کاربر admin به مثال سرورchat.your-domain شما اضافه می شود:
/etc/prosody/prosody.cfg.lua

admins = { “admin@chat.your-domain” }

اگر می خواهید کاربر دیگری اضافه کنید ، باید کاما را بعد از اولی قرار دهید:
/etc/prosody/prosody.cfg.lua

admins = { “admin@chat.your-domain”, “sammy@chat.your-domain” }

فعال کردن ماژول های Prosody
توسعه دهندگان Prosody ویژگی های بسیاری را در ماژول هایی قرار داده اند که می توانند فعال یا غیرفعال شوند.
با حذف — یک ماژول که قبل از آن آمده است، فعال می شود. به عنوان مثال ، در اینجا ، ماژول tls غیرفعال است:
Module Disabled
–“tls”; — Add support for secure TLS on c2s/s2s connections

و در اینجا فعال است:
Module Enabled
“tls”; — Add support for secure TLS on c2s/s2s connections

در ادامه این پاراگراف بخش ماژول های ویرایش شده در فایل پیکربندی Prosody با خطوط ویرایش شده، هایلایت گردیده است:
/etc/prosody/prosody.cfg.lua

modules_enabled = {

— Generally required
“roster”; — Allow users to have a roster. Recommended 😉
“saslauth”; — Authentication for clients and servers. Recommended if you want to log in.
“tls”; — Add support for secure TLS on c2s/s2s connections
“dialback”; — s2s dialback support
“disco”; — Service discovery

— Not essential, but recommended
“carbons”; — Keep multiple clients in sync
“pep”; — Enables users to publish their avatar, mood, activity, playing music and more
“private”; — Private XML storage (for room bookmarks, etc.)
“blocklist”; — Allow users to block communications with other users
“vcard4”; — User profiles (stored in PEP)
“vcard_legacy”; — Conversion between legacy vCard and PEP Avatar, vcard

— Nice to have
“version”; — Replies to server version requests
“uptime”; — Report how long server has been running
“time”; — Let others know the time here on this server
“ping”; — Replies to XMPP pings with pongs
“register”; — Allow users to register on this server using a client and change passwords
“mam”; — Store messages in an archive and allow users to access it
“csi_simple”; — Simple Mobile optimizations

— Admin interfaces
“admin_adhoc”; — Allows administration via an XMPP client that supports ad-hoc commands
–“admin_telnet”; — Opens telnet console interface on localhost port 5582

— HTTP modules
–“bosh”; — Enable BOSH clients, aka “Jabber over HTTP”
–“websocket”; — XMPP over WebSockets
“http_files”; — Serve static files from a directory over HTTP
“http_upload”; — Enables file sharing between users

— Other specific functionality
–“limits”; — Enable bandwidth limiting for XMPP connections
“groups”; — Shared roster support
–“server_contact_info”; — Publish contact information for this service
“announce”; — Send announcement to all online users
–“welcome”; — Welcome users who register accounts
–“watchregistrations”; — Alert admins of registrations
–“motd”; — Send a message to users when they log in
–“legacyauth”; — Legacy authentication. Only used by some old clients and bots.
–“proxy65”; — Enables a file transfer proxy service which clients behind NAT can use
}

ماژول های فعال شده شما به شرح زیر است:
⦁ mam: پیامهای چت را روی سرور ذخیره می کند تا کاربران بتوانند آنها را بازیابی کنند.
⦁ csi_simple: بهینه سازی ها را برای کلاینت های تلفن همراه فعال می کند.
⦁ http_files: اشتراک گذاری فایل را فعال می کند.
⦁ http_uploads: اشتراک گذاری فایل را فعال می کند.
⦁ groups: دید کاربر را فعال می کند.
⦁ announce: مدیر را قادر می سازد اعلان ها را برای همه کاربران ارسال کند.
تنظیم ذخیره سازی بانک اطلاعاتی
بخش بعدی که باید ویرایش کنید، تعیین میکند که Prosody پیام کاربران و سایر داده ها را در کجا ذخیره کند. تنظیمات پیش فرض استفاده از فایل های متنی است ، اما پیکربندی مقیاس پذیرتر ذخیره پیام ها در یک پایگاه داده است.
Prosody سه گزینه برای پایگاه داده ها ارائه می دهد. MySQL ، PostgreSQL و. SQLite راه اندازی و نگهداری SQLite ساده تر است، از کمترین منابع استفاده می کند و برای استقرارهای کوچکتر مناسب است.
با برداشتن خط اصلی ، دو خط زیر را فعال کنید – به شرح زیر:
/etc/prosody/prosody.cfg.lua

storage = “sql” — Default is “internal”

sql = { driver = “SQLite3”, database = “prosody.sqlite” } — Default. ‘database’ is the filename.

بایگانی پیام
با ویرایش خط زیر می توانید تعیین کنید چه مدت سرور پیام های چت قدیمی را ذخیره کند:
/etc/prosody/prosody.cfg.lua

archive_expires_after = “1w” — Remove archived messages after 1 week

دوره پیش فرض یک هفته نشان داده میشود. از d برای روزها ، w برای هفته ها و y برای سالها استفاده کنید.
رمزگذاری آپلودها و دانلود های فایل
خط https_certificate به Prosody می گوید که کجا به دنبال گواهی ترکیبی و کلیدی که قبلاً ایجاد کرده اید برای استفاده در انتقال فایل بگردد.
آن را ویرایش کنید تا از مسیر فایل ترکیبی شما استفاده کند:
/etc/prosody/prosody.cfg.lua

https_certificate = “/etc/letsencrypt/live/chat.your-domain/key-and-cert.pem”

حذف localhost
در پیکربندی پیش فرض ، Prosody برای اتصالات چت به localhost یا 127.0.0.1 گوش می دهد. این مورد برای سرور راه دور نیاز نیست.
این رفتار با اضافه کردن — به خط غیرفعال کنید به طوری که بعد از ویرایش اینگونه به نظر برسد:
/etc/prosody/prosody.cfg.lua

–VirtualHost “localhost”

تغییر حداکثر اندازه بارگذاری فایل
سرور Prosody شما با ضمیمه کردن فایل های اشتراک گذاری کاربران به پنجره های چت، از آن ها پشتیبانی می کند. حداکثر اندازه پیش فرض فایل هایی که کاربران می توانند به اشتراک بگذارند یک مگابایت است.
با افزودن خط زیر به انتهای پیکربندی ، این حد را روی مقدار بالاتری تنظیم کنید:
/etc/prosody/prosody.cfg.lua

http_upload_file_size_limit = 10485760

عدد در انتهای خط حداکثر اندازه فایل در بایت است. اندازه نشان داده شده در اینجا 10485760 بایت یا 10 مگابایت است. وب سایت GbMb ابزاری مفید برای تبدیل مگابایت به بایت فراهم می کند.
اگر می خواهید دانلود فایل های بزرگتر از 10 مگابایت مجاز باشد ، باید خط دیگری را اضافه کنید که متغیر http_max_content_size را تنظیم کند. http_max_content_size باید بزرگتر از حداکثر اندازه آپلود فایل باشد.
در اینجا ، حداکثر اندازه فایل روی 20 مگابایت (20971520 بایت) و http_max_content_size روی 30 مگابایت تنظیم شده است:
/etc/prosody/prosody.cfg.lua

http_upload_file_size_limit = 20971520
http_max_content_size = 31457280

http_max_content_size 50 را 50% بزرگتر از حداکثر اندازه فایل تنظیم کنید.
پیکربندی فایل گروه ها
ماژول groups که در بخش ماژول ها فعال کرده اید به کلاینت های چت اجازه می دهد تا یکدیگر را ببینند.
ماژول groups فایلی را می خواند که اسامی گروه و اعضای آنها را در خود جای می دهد. با اضافه کردن خط زیر در پایین تنظیمات ، مکان و نام فایل را تنظیم کنید:
/etc/prosody/prosody.cfg.lua

groups_file = “/etc/prosody/sharedgroups.txt”

این خط Prosody را پیکربندی می کند تا فایلی را در /etc/prosody/sharedgroups.txt برای جمع آوری اطلاعات گروهی بخواند. این فایل را در مرحله 4 با کاربران و گروه ها پر می کنید.
این فایل را با دستور زیر در ترمینال متفاوت ایجاد کنید:
⦁ $ sudo touch /etc/prosody/sharedgroups.txt

ابزار touch وقتی از گزینه های اضافی استفاده نمی شود ، یک فایل خالی ایجاد می کند.
اضافه کردن پیکربندی سرور چت VirtualHost
Prosody برای راه اندازی سرور چت که از نام هاست شما استفاده می کند از یک بلوک پیکربندی که با VirtualHost شروع می شود استفاده می کند.
بلوک پیکربندی زیر را به انتهای پیکربندی اضافه کنید:
/etc/prosody/prosody.cfg.lua

VirtualHost “chat.your-domain”
ssl = {
key = “/etc/letsencrypt/live/chat.your-domain/privkey.pem”;
certificate = “/etc/letsencrypt/live/chat.your-domain/fullchain.pem”;
}

گزینه های پیکربندی:
VirtualHost: نام هاستی که Prosody برای سرور چت از آن استفاده می کند.
key: کلید خصوصی TLS که برای امنیت اتصالات چت استفاده می شود.
certificate: گواهینامه خصوصی TLS که از آن برای امنیت اتصالات چت استفاده می شود.
اضافه کردن سرور اتاق چت
این پیکربندی Prosody را قادر می سازد اتاق های چت چند کاربره را به کاربران خود ارائه دهد. در بخش جدید بلوک پیکربندی زیر را در پایین فایل پیکربندی اضافه کنید:
/etc/prosody/prosody.cfg.lua

Component “room.your-domain” “muc”
modules_enabled = { “mam_muc”; }
storage = { muc_log = “sql”; }
ssl = {
key = “/etc/letsencrypt/live/room.your-domain/privkey.pem”;
certificate = “/etc/letsencrypt/live/room.your-domain/fullchain.pem”;
}

گزینه های استفاده شده:
Component: muc (چت چند کاربره) را قادر می سازد تا از نام هاست room.your-domain استفاده کند.
modules_enabled = { “mam_muc”; } : بایگانی پیام گروه های گفتگو را فعال می کند.
:storage پیام های چت را روی پایگاه داده SQLite بایگانی میکند
key : کلید خصوصی TLS که برای امنیت اتصالات چت استفاده می شود.
Certificate: گواهینامه خصوصی TLS که از آن برای امنیت اتصالات چت استفاده می شود.
ویرایشگر را ذخیره کرده و از آن خارج شوید.
اکنون ، Prosody را ریستارت کنید تا پیکربندی جدید اعمال شود:
⦁ $ sudo systemctl restart prosody.service

اکنون ویرایش فایل پیکربندی اصلی Prosody را انجام داده اید. در مرحله بعد یک کاربر Prosody اضافه کرده و آنها را به گروه اضافه می کنید.
مرحله 4 – اضافه کردن کاربران و گروههای Prosody
قبل از ورود به سیستم ، باید کاربران Prosody را به سرور Prosody خود در خط فرمان اضافه کنید. برای کمک به مدیریت سرور Prosody از ابزار prosodyctl که با بسته prosody تهیه شده است ، استفاده خواهید کرد.
برای اضافه کردن کاربر جدید از دستور prosodyctl زیر استفاده کنید:
⦁ $ sudo prosodyctl register sammy chat.your-domain password

این کاربر هم اکنون می تواند به سرور Prosody شما متصل شود.
اگر برخی از گروهها را ایجاد کنید که به کابران اجازه دهند یکدیگر و وضعیت یکدیگر را ببینند ، کاربران از شما قدردانی می کنند. شما این کار را با ایجاد گروه ها و اضافه کردن کاربران به آنها با فایل گروهی که قبلاً تعریف کرده بودید انجام میدهید.
فایل گروه را باز کنید:
⦁ $ sudo nano /etc/prosody/sharedgroups.txt

گروه با قرار دادن نام آن بین براکت ها تنظیم می شود. اعضای گروه در زیر خط جدیدی با نام گروه قرار می گیرند. شما می توانید هر تعداد گروه که می خواهید ایجاد کنید و کاربران می توانند در بیش از یک گروه عضو باشند.
در اینجا ، گروهی به نام Everyone وجود دارد که دو عضو دارد: sammy  و admin .
/etc/prosody/sharedgroups.txt
[Everyone]
sammy@chat.your-domain
admin@chat.your-domain

همه اعضای یک گروه قادر خواهند بود اعضای دیگر را بصورت آنلاین یا غیر آنلاین ببینند.
هر زمان که کاربران جدید اضافه کنید یا اطلاعات گروه را تغییر دهید باید سرور Prosody را مجدداً راه اندازی کنید:
⦁ $ sudo systemctl restart prosody.service

تمام آنچه که برای پیکربندی سرور باقی مانده است این است که به Prosody اجازه دهید از طریق فایروال ارتباط برقرار کند ، که در بخش بعدی انجام خواهید داد.
مرحله 5 – مجاز کردن ترافیک Prosody از طریق فایروال
Prosody اتصالات کلاینت را روی پورت های TCP 5222 و 5322 گوش می دهد. برای باز کردن این پورت ها در UFW از دستور زیر استفاده کنید:
⦁ $ sudo ufw allow 5222,5322/tcp

سرور prosody اکنون کاملاً نصب و پیکربندی شده است.
اکنون می توانید با یک کلاینت چت به سرور Prosody خود متصل شوید. در مرحله بعد ، شما یک کلاینت XMPP را در سیستم محلی یا تلفن هوشمند خود پیکربندی می کنید تا به سرور Prosody خود متصل شوید.
مرحله 6 – پیکربندی یک کلاینت چت XMPP
در این مرحله ، کلاینت XMPP خود را روی سرور Prosody پیکربندی می کنید. برای اتصال باید نام کاربری ، نام هاست سرور و رمز عبور خود را وارد کنید.
سرور Prosody را برای استفاده از پورت های استاندارد XMPP پیکربندی کرده اید و از امنیت TLS به طور خودکار مراقبت خواهد شد ، بنابراین نیازی به تنظیم آنها برای اتصال به کلاینت خود نخواهید داشت.
کلاینت های مختلف چت ممکن است نام کاربری ، رمز عبور و نام هاست سرور را در قالب های مختلف بخواهند. نام کاربری و نام هاست سرور بعضی اوقات مانند یک آدرس ایمیل مانند sammy@chat.your-domain کنار هم قرار می گیرند. آدرس ایمیل می تواند Username  یا XMPP Address باشد.
این تصویر صفحه ورود را برای کلاینت PSI نشان می دهد که باید نام کاربری و نام میزبان سرور در فرم آدرس ایمیل وارد شود.

در حالی که ، تصویر زیر از صفحه ورود به حساب برای سرویس گیرنده Gajim لینوکس XMPP ، نام کاربری و نام میزبان را نشان می دهد فیلدهای ورودی جداگانه داده شده است.

کلاینتان XMPP برای ورود به سیستم به جزئیات بیشتری از نام کاربری ، رمز عبور و نام میزبان سرور احتیاج ندارند. جایی که این توسط کلاینت شما پشتیبانی می شود.
نتیجه
در این مقاله شما سرور Prosody را با ویژگی های زیر تنظیم می کنید:
• رمزگذاری TLS
• اتاق های چت و گفتگوی گروهی یک به یک.
• به اشتراک گذاری فایل
همچنین یک کلاینت چت XMPP را تنظیم کرده اید تا از همه این ویژگی ها استفاده کند و با دوستان و همکاران خود چتی غنی از ویژگی ها به شما ارائه دهد.
اگر به دنبال گزینه های منبع باز دیگر برای ارتباط از راه دور هستید ، آموزش های نحوه نصب Jitsi Meet را بررسی کنید.

 

برچسب‌ها:

behnam gol mohamadi بازدید : 22 سه شنبه 17 تیر 1399 نظرات (0)

بانکهای اطلاعاتی مدیریت شده دارای چندین مزیت نسبت به بانکهای اطلاعاتی خود مدیریتی هستند از جمله به روزرسانی خودکار ، مقیاس بندی ساده و در دسترس بودن بیشتر. اگر تازه کار با بانکهای اطلاعاتی مدیریت شده را شروع کرده اید ، ممکن است بهترین روش برای انجام برخی کارها – مانند اتصال به بانک اطلاعاتی – کاملاً مشهود نباشد.
در این راهنما ، چگونگی نصب برنامه های کلاینت برای انواع سیستم های مدیریت پایگاه داده (DBMS) از جمله PostgreSQL ، MySQL و Redis ، روی سرور Ubuntu 18.04 می پردازیم. همچنین نحوه استفاده از این برنامه ها را برای اتصال به نمونه پایگاه داده مدیریت شده توضیح خواهیم داد.
توجه: دستورالعمل های ذکر شده در این راهنما با پایگاه داده های مدیریت شده vpsgol مورد آزمایش قرار گرفتند ، اما معمولاً برای پایگاه داده های مدیریت شده از هر ارائه دهنده ابری دیگر کار می کنند. با این حال ، اگر مشکلی در ارتباط با بانک اطلاعاتی ارائه شده از ارائه دهنده دیگر دارید ، باید برای کمک به مستندات آنها مراجعه کنید.

پیش نیازها
برای دنبال کردن دستورالعمل های مفصل در این راهنما ، به موارد زیر نیاز دارید:
• دسترسی به سروری که اوبونتو 18.04 را اجرا می کند. این سرور باید دارای یک کاربر غیر ریشه با امتیازات ادمین و فایروال تنظیم شده با ufw باشد. برای انجام این کار ، راهنمای ستاپ اولیه سرور ما برای اوبونتو 18.04 را دنبال کنید.
• یک نمونه پایگاه داده مدیریت شده. این آموزش دستورالعمل نحوه اتصال به انواع سیستم های مدیریت پایگاه داده ، به ویژه PostgreSQL ، MySQL و Redis را ارائه می دهد. برای تهیه یک بانک اطلاعاتی مدیریت شده ، مستندات ما را برای DBMS مورد نظر خود مرور کنید:
⦁ PostgreSQL
⦁ MySQL
⦁ Redis
هنگامی که این موارد انجام شد ، به قسمت های مربوط به DBMS خود بروید.
اتصال به یک بانک اطلاعاتی PostgreSQL مدیریت شده
برای اتصال به یک پایگاه داده مدیریت شده PostgreSQL ، می توانید از psql ، کلاینت استاندارد خط فرمان Postgres استفاده کنید. که منبع آزاد است و توسط گروه توسعه PostgreSQL نگهداری می شود و معمولاً هنگام دانلود سرور PostgreSQL شامل می شود. با این حال ، می توانید pscl را به تنهایی با نصب بسته postgresql-client با APT نصب کنید.
اگر اخیراً این کار را نکرده اید ، فهرست بسته سرور خود را به روز کنید:
$ sudo apt update

سپس دستور زیر را برای نصب psql اجرا کنید:
$ sudo apt install postgresql-client

APT از شما می خواهد تأیید کنید که می خواهید بسته را نصب کنید یا خیر. این کار را با فشار دادن ENTER انجام دهید.
پس از آن ، می توانید بدون نیاز به پیکربندی بیشتر به بانک اطلاعاتی Postgres خود وصل شوید. به عنوان مثال ، ممکن است با پرچم های زیر ، psql را راه اندازی کنید:
⦁ -U ، کاربر PostgreSQL که می خواهید به عنوان آن متصل شوید
⦁ -h ، نام هاست یا آدرس IP پایگاه داده مدیریت شده
⦁ -p ، پورت TCP که بانک اطلاعاتی مدیریت شده در حال گوش دادن به اتصالات است
⦁ -d ، پایگاه داده خاصی که می خواهید به آن متصل شوید
⦁ -v ، مختصر “variable” ، که به متغیرهای اتصال دیگر ارجح است، و پس از آن یک علامت مساوی (=) و مقادیر متغیرها وجود دارد. به عنوان مثال ، اگر می خواهید گواهی CA پایگاه داده را هنگام اتصال اعتبار دهید ، باید -v sslmode = مورد نیاز خود را وارد کنید
⦁ -W ، که به psql می گوید برای شما رمز ورود کاربر PostgreSQL را اعلام کند. توجه داشته باشید که می توانید دستور psql را با PGPASSWORD=password بگذرانید ، اما به طور کلی مخفی نگه داشتن کلمات عبور در خط فرمان ، ایمن تر به نظر می رسد.
با در نظر گرفتن این پرچم ها ، ترکیب دستور psql به شکل زیر است:
$ psql -U user -h host -p port -d database -v variable=value -W

از طرف دیگر ، اگر ارائه دهنده پایگاه داده مدیریت شده، یک شناسه منبع یکنواخت (URI) ارائه دهد ، می توانید از دستور زیر استفاده کنید:
$ psql postgresql://username:password@host:port/database?option_1=value&option_n=value

توجه: اگر به یک پایگاه داده مدیریت شده vpsgol متصل می شوید ، می توانید تمام این اطلاعات اتصال را در کنترل پنل ابری خود پیدا کنید. در منوی نوار کناری سمت چپ روی Databases کلیک کنید ، سپس روی پایگاه داده ای که می خواهید به آن متصل شوید کلیک کنید و به پایین بروید تا بخش جزئیات اتصال آن را پیدا کنید از آنجا یکی از موارد زیر را انجام می دهید:
• گزینه Connection parameters را انتخاب کنید و قسمتهای مربوط را بصورت جداگانه در دستور psql کپی کنید
• گزینه Connection String را انتخاب کنید و یک URI اتصال آماده را کپی کنید که می توانید در دستور اتصال URI که در بالا ذکر شد پیست کنید.
• گزینه Flags را انتخاب کرده و دستور psql آماده استفاده را که می توانید در ترمینال خود پیست کنید ، کپی کنید.
با این کار ، آماده استفاده از مثال PostgreSQL مدیریت شده خود هستید. برای اطلاعات بیشتر در مورد نحوه تعامل با PostgreSQL ، به راهنمای ما در مورد نحوه مدیریت یک بانک اطلاعاتی SQL مراجعه کنید. همچنین ممکن است مقاله مقدمه ای بر جستارها در PostgreSQL مفید باشد.
اتصال به یک بانک اطلاعاتی MySQL مدیریت شده
برای دسترسی به یک پایگاه داده MySQL مدیریت شده ، باید یک سرویس دهنده MySQL را روی دستگاهی نصب کنید که قصد ایجاد اتصال را دارید. اتصال با استفاده از دستور mysql امکان پذیر است ، همانطور که توسط MySQL Command-Line Client ارائه شده است ، اما این دستور از رشته های اتصال پشتیبانی نمی کند. برای انعطاف پذیری بیشتر در مورد نحوه اتصال ، توصیه می کنیم که از دستور mysqlsh استفاده کنید که به شما امکان می دهد از پوسته رسمی MySQL استفاده کنید ، زیرا این امکان را به شما می دهد تا به پرچم ها یا URI ارتباطی متصل شوید.
برای دسترسی به یک پایگاه داده vpsgol Manager MySQL ، باید نسخه 8.0 یا بالاتر از پوسته MySQL را نصب کنید. برای انجام این کار ، باید قبل از نصب بسته mysql-shell ، ابتدا مخزن نرم افزار MySQL را اضافه کنید.
با رفتن به صفحه مخازن APT MySQL در مرورگر وب خود کار را شروع کنید. دکمه دانلود را در گوشه پایین سمت راست پیدا کرده و روی صفحه بعدی کلیک کنید. این صفحه به شما اعلانی نمایش میدهد که وارد شوید یا یک حساب کاربری وب Oracle ایجاد کنید. می توانید این مرحله را رد کنید و در عوض به دنبال پیوندی باشید که می گوید No thanks ، just start my download. روی پیوند راست کلیک کرده و گزینه Copy Link Address را انتخاب کنید (بسته به مرورگر شما ممکن است این گزینه متفاوت باشد).
اکنون آماده دانلود فایل هستید. در سرور خود ، به دایرکتوری بروید که می توانید در آن بنویسید:
$ cd /tmp

فایل را با استفاده از curl دانلود کنید ، به یاد داشته باشید آدرس موردنظر خود را در جای قسمت هایلاین شده از دستور زیر ، پیست کنید. همچنین باید دو پرچم خط فرمان را به curl وارد کنید. –O به curl میگوید به جای خروجی استاندارد به یک فایل خروجی بفرستد. پرچم L باعث می شود که مجدداً HTTP هدایت شود ، که در این حالت ضروری است زیرا آدرسی که کپی کرده اید در واقع قبل از دانلود فایل به مکان دیگری هدایت می شود:
$ curl -OL https://dev.mysql.com/get/mysql-apt-config_0.8.15-1_all.deb

اکنون فایل باید در فهرست اصلی شما دانلود شود. برای اطمینان فایل ها را لیست کنید:
$ ls

نام فایل ذکر شده در خروجی را مشاهده خواهید کرد:
Output
mysql-apt-config_0.8.15-1_all.deb
. . .
اکنون می توانید مخزن MySQL APT را به لیست مخزن سیستم خود اضافه کنید. از دستور dpkg برای نصب ، حذف و بازرسی بسته های نرم افزاری .deb استفاده می شود. دستور زیر شامل پرچم -i است که نشان می دهد شما می خواهید از فایل مشخص شده نصب کنید:
$ sudo dpkg -i mysql-apt-config*

در حین نصب ، به شما یک صفحه پیکربندی ارائه می شود که می توانید مشخص کنید کدام نسخه از MySQL را ترجیح دهید ، به همراه گزینه ای برای نصب مخازن برای سایر ابزارهای مرتبط با MySQL. پیش فرض اطلاعات مخزن را برای آخرین نسخه پایدار MySQL اضافه می کند و هیچ چیز دیگری به همراه نخواهد داشت. این همان چیزی است که ما می خواهیم ، بنابراین از فلش پایین برای رفتن به گزینه Ok استفاده کرده و ENTER را بزنید.

پس از آن بسته با اضافه کردن مخزن به پایان می رسد. حافظه نهان بسته apt خود را ریفرش کنید تا بسته های نرم افزاری جدید در دسترس باشد:
$ sudo apt update

در مرحله بعد ، می توانید کمی سیستم خود را پاکسازی کرده و فایلی را که دانلود کرده اید پاک کنید ، زیرا در آینده به آن نیازی نخواهید داشت:
$ rm mysql-apt-config*

توجه: اگر نیاز به پیکربندی تنظیمات این مخازن دارید ، دستور زیر را برای انتخاب گزینه های جدید خود اجرا کنید:
$ sudo dpkg-reconfigure mysql-apt-config

پس از انتخاب گزینه های جدید خود ، دستور زیر را برای ریفرش کردن حافظه نهان بسته خود اجرا کنید:
$ sudo apt update

اکنون که مخازن MySQL را اضافه کردید ، آماده نصب نرم افزار واقعی پوسته MySQL هستید. این کار را با دستور apt زیر انجام دهید:
$ sudo apt install mysql-shell

پس از اتمام آن فرمان ، شماره نسخه نرم افزار را بررسی کنید تا اطمینان حاصل کنید که آخرین نسخه را دارید:
$ mysqlsh –version
Output
mysqlsh Ver 8.0.19 for Linux on x86_64 – for MySQL 8.0.19 (MySQL Community Server (GPL))

بعد از نصب بسته mysql-shell ، می توانید با اجرای دستور mysqlsh با پرچم های زیر به عنوان آرگومان به پایگاه داده مدیریت شده خود دسترسی پیدا کنید:
⦁ -u ، کاربر MySQL که می خواهید به عنوان متصل شوید
⦁ -p ، به mysqlsh می گوید اعلان رمزعبور کاربر را درخواست دهد. می توانید گذرواژه خود را مستقیماً در فرمان اتصال به دنبال پرچم -p (بدون فاصله ، به صورت -ppassword) قرار دهید ، اما به دلایل امنیتی ، این کار به طور کلی توصیه نمی شود.
⦁ -h ، نام هاست یا آدرس IP پایگاه داده
⦁ -P ، پورت TCP که MySQL در حال گوش دادن به اتصالات آن است
⦁ -D ، پایگاه داده خاصی که می خواهید به آن متصل شوید
علاوه بر این ، ممکن است بخواهید گزینه –sql را نیز درج کنید. وقتی پوسته MySQL بخش جدیدی را باز می کند ، این کار را در یکی از سه حالت انجام می دهد: SQL، JavaScript یا Python. حالت SQL بخشی را باز می کند که در آن می توانید از SQL برای جستجوی و دستکاری داده ها و همچنین ایجاد پایگاه های داده ، جداول ، گروه ها یا هر چیز دیگری که برای ذخیره و مدیریت داده های خود نیاز دارید ، ایجاد کنید. حالت های JavaScript و Python به شما امکان می دهد از توابع موجود در آن زبان های مربوطه برای ایجاد آبجکت های بخش شماره استفاده کنید. این به شما امکان می دهد چندین نمونه سرور MySQL را از همان نمونه پوسته MySQL استفاده کنید.
پوسته MySQL بطور پیش فرض بخش ها را در حالت JavaScript باز می کند. بنابراین ، اگر می خواهید نمایش داده های SQL را همانطور که معمولاً با کلاینت خط فرمان MySQL انجام می دهد ، اجرا کنید ، برای ایجاد ارتباط در حالت SQL باید گزینه –sql را مشخص کنید.
با استفاده از این پرچم ها ، دستور mysqlsh به صورت زیر ظاهر می شود:
$ mysqlsh -u user -p -h host -P port -D database –sql

از طرف دیگر ، اگر دارای یک URI اتصال هستید که می توانید از آن برای اتصال استفاده کنید ، از یک دستور مانند این استفاده می کنید:
$ mysqlsh –sql mysql://user:password@host:port/database?option_1=value&option_n=value

توجه: اگر به یک پایگاه داده مدیریت شده vpsgol متصل می شوید ، می توانید تمام این اطلاعات اتصال را در کنترل پنل ابری خود پیدا کنید. در منوی نوار کناری سمت چپ روی Databases کلیک کنید ، سپس روی پایگاه داده ای که می خواهید به آن متصل شوید کلیک کنید و به پایین بروید تا بخش جزئیات اتصال آن را پیدا کنید از آنجا یکی از موارد زیر را انجام می دهید:
• گزینه Connection parameters را انتخاب کنید و قسمتهای مربوط را بصورت جداگانه در دستور mysqlsh کپی کنید
• گزینه Connection String را انتخاب کنید و یک URI اتصال آماده را کپی کنید که می توانید در دستور اتصال URI که در بالا ذکر شد پیست کنید.
با این کار ، آماده استفاده از مثال MySQL مدیریت شده خود هستید.
اگه به تازگی کار با پوسته MySQL را شروع کرده اید، چیزی که باید دقت کنید این است که برای بستن اتصال، دستور exit مورد استفاده ار کلاینت های دیگر کار نمیکند. باید از میانبر \q استفاده کنید:
SQL> \q
Output
Bye!

برای اطلاعات بیشتر در مورد نحوه تعامل با MySQL ، به راهنمای ما در مورد نحوه مدیریت یک بانک اطلاعاتی SQL مراجعه کنید. همچنین ممکن است مقاله مقدمه ای بر جستارها در MySQL مفید باشد.
یادداشت مربوط به احراز هویت رمز عبور در MySQL 8
در MySQL 8.0 و نسخه های جدیدتر ، افزونه تأیید اعتبار پیش فرض، caching_sha2_password است. با این وجود ، PHP از caching_sha2_password پشتیبانی نمی کند. اگر قصد استفاده از بانک اطلاعاتی MySQL خود با برنامه ای مانند WordPress یا phpMyAdmin دارید که از PHP استفاده می کند ، ممکن است این مسئله هنگام تلاش برنامه برای اتصال به پایگاه داده به مشکلاتی منجر شود.
اگر به فایل پیکربندی پایگاه داده دسترسی دارید ، می توانید به صورت پیش فرض تنظیماتی را برای استفاده از یک افزونه احراز هویت پشتیبانی شده از PHP – به عنوان مثال ، mysql_native_password – اضافه کنید:
Example MySQL Configuration File
[mysqld]
default-authentication-plugin=mysql_native_password

با این حال ، برخی از ارائه دهندگان پایگاه داده مدیریت شده – فایل پیکربندی پایگاه داده را برای کاربران نهایی در دسترس قرار نمی دهند. در این حالت ، می توانید به بانک اطلاعاتی متصل شوید و یک دستور ALTER USER برای هر کاربر MySQL موجود که باید به بانک اطلاعاتی وصل شود را اجرا کنید ، اما نمی توانید با افزونه caching_sha2_password این کار را انجام دهید:
SQL> ALTER USER user IDENTIFIED WITH mysql_native_password BY ‘password’;

البته ، می توانید با وارد کردن افزونه در عبارت CREATE USER مربوطه ، کاربران جدید را برای تأیید اعتبار mysql_native_password تنظیم کنید:
SQL> USER user IDENTIFIED WITH mysql_native_password BY ‘password’;

اگر از بانک اطلاعاتی مدیریت شده vpsgol استفاده می کنید ، توجه داشته باشید که اگر کاربر را پیکربندی کنید تا با افزونه دیگری غیر از caching_sha2_password تأیید اعتبار کند ، دیگر نمی توانید رمز ورود کاربر را در کنترل پنل ابری خود مشاهده کنید. به همین دلیل ، باید اطمینان داشته باشید که کلمه عبورهای مربوط به کاربرانی را که با mysql_native_password یا سایر افزونه های دیگر در یک مکان امن تأیید می کنند ، یادداشت کنید.
اتصال به یک پایگاه داده Redis مدیریت شده
وقتی Redis را به صورت محلی نصب می کنید ، با redis-cli ، رابط خط فرمان Redis همراه است. شما می توانید از redis-cli برای اتصال به یک نمونه از راه دور Redis مدیریت شده استفاده کنید ، اما بطور طبیعی از اتصالات TLS / SSL پشتیبانی نمی کند. روش هایی وجود دارد که می توانید redis-cli را برای اتصال ایمن به یک نمونه Redis مدیریت شده (به عنوان مثال ، با پیکربندی یک تونل TLS) پیکربندی کنید ، اما کلاینت های جایگزین Redis نیز وجود دارند که دارای پشتیبانی TLS هستند.
برای دیتابیس مدیریت شده Redis در vpsgol ، توصیه می کنیم Redli ، یک ترمینال منبع باز و تعاملی Redis را نصب کنید. برای انجام این کار ، به صفحه نسخه ها در پروژه Redli GitHub بروید و جدول Assets برای آخرین نسخه را پیدا کنید. در زمان این مقاله ، این نسخه 0.4.4 میباشد.
در آنجا ، پیوند مربوط به فایلی که به linux_amd64.tar.gz ختم میشود را پیدا کنید. این پیوند به فایل بایگانی معروف به tarball اشاره دارد که در صورت استخراج ، چند فایل در سیستم شما ایجاد می کند. روی این پیوند راست کلیک کرده و Copy link address را انتخاب کنید (این گزینه بسته به مرورگر وب شما ممکن است متفاوت باشد).
در سرور خود ، به دایرکتوری بروید که می توانید در آن بنویسید:
$ cd /tmp

سپس پیوند را در دستور wget زیر پیست کنید و URL هایلایت شده را جایگزین کنید. این دستور فایل را در سرور شما دانلود می کند:
$ wget https://github.com/IBM-Cloud/redli/releases/download/v0.4.4/redli_0.4.4_linux_amd64.tar.gz

پس از دانلود فایل در سرور خود ، تاربال را اکسترکت کنید:
$ tar xvf redli_0.4.4_linux_amd64.tar.gz

فایل های زیر را در سرور شما ایجاد می کند:
Output
LICENSE.txt
README.md
redli

فایل redli فایل باینری Redli است. آن را به دیرکتوری / usr / local / bin انتقال دهید ، محلی که اوبونتو به دنبال فایلهای قابل اجرا است:
sudo mv redli /usr/local/bin/

در این مرحله می توانید سیستم خود را کمی پاکسازی کرده کرده و تاربال را حذف کنید:
$ rm redli_0.4.4_linux_amd64.tar.gz

اکنون می توانید از Redli برای اتصال به نمونه Redis مدیریت شده خود استفاده کنید. می توانید این کار را با اجرای دستور redli به همراه این پرچم ها انجام دهید:
⦁ -h ، هاستی که به آن متصل میشوید. می تواند یک نام هاست یا یک آدرس IP باشد
⦁ -a ، رمز عبوری است که برای تأیید اعتبار به نمونه Redis استفاده می شود
⦁ -p ، پورت اتصال
با در نظر گرفتن این پرچم ها ، دستور redli به شرح زیر خواهد بود. توجه داشته باشید که این مثال شامل گزینه –tls نیز می باشد که به شما امکان می دهد بدون نیاز به یک تونل به یک بانک اطلاعاتی Redis مدیریت شده از طریق TLS / SSL متصل شوید:
$ redli –tls -h host -a password -p port

یکی از مزایایی که Redli نسبت به redis-cli دارد این است که پروتکل rediss را می فهمد ، که برای تعیین URI با اشاره به پایگاه داده Redis استفاده می شود. این ویژگی به شما امکان می دهد برای دسترسی به پایگاه داده خود از یک رشته اتصال استفاده کنید:
$ redli –tls -u rediss://user:password@host:port

توجه: اگر به یک پایگاه داده مدیریت شده vpsgol متصل می شوید ، می توانید تمام این اطلاعات اتصال را در کنترل پنل ابری خود پیدا کنید. در منوی نوار کناری سمت چپ روی Databases کلیک کنید ، سپس روی پایگاه داده ای که می خواهید به آن متصل شوید کلیک کنید و به پایین بروید تا بخش جزئیات اتصال آن را پیدا کنید از آنجا یکی از موارد زیر را انجام می دهید:
• گزینه Connection parameters را انتخاب کنید و قسمتهای مربوط را بصورت جداگانه در دستور redliکپی کنید
• گزینه Connection String را انتخاب کنید و یک URI اتصال آماده را کپی کنید که می توانید در دستور اتصال URI که در بالا ذکر شد پیست کنید.
• گزینه Flags را انتخاب کرده و دستور redli آماده استفاده را که می توانید در ترمینال خود پیست کنید ، کپی کنید.
با این کار ، آماده استفاده از مثال Redis مدیریت شده خود هستید. برای اطلاعات بیشتر در مورد نحوه تعامل با Redis ، به راهنمای ما در مورد نحوه مدیریت یک بانک اطلاعاتی Redis مراجعه کنید.
نتیجه
به عنوان یک پیشرفت نسبتاً جدید در سرویس های ابری ، بسیاری از شیوه هایی که برای پایگاه داده های خود مدیریتی مشهورند، برای بانکهای اطلاعاتی که توسط ارائه دهندگان ابری مدیریت می شوند ، مستند و گسترده نیستند. یکی از بنیادی ترین این شیوه ها ، یعنی دسترسی به بانک اطلاعاتی ، ممکن است برای افرادی که به تازگی با بانکهای اطلاعاتی مدیریت شده کار میکنند، شفاف نباشد. هدف ما از این آموزش این است که به شما در شروع کار با بانک اطلاعاتی مدیریت شده برای ذخیره داده ها کمک کنیم.
برای کسب اطلاعات بیشتر در مورد کار با بانکهای اطلاعاتی ، توصیه می کنیم انواع محتوای مرتبط با بانک اطلاعاتی ما را بررسی کنید ، از جمله آموزش هایی که مستقیماً روی PostgreSQL ، MySQL و Redis متمرکز شده اند.

 

برچسب‌ها:

behnam gol mohamadi بازدید : 14 سه شنبه 17 تیر 1399 نظرات (0)

 

هنگام ذخیره هرگونه اطلاعات مهم ، داشتن یک نقطه خرابی بسیار خطرناک است. در حالی که بسیاری از پایگاه داده ها و نرم افزارهای دیگر به شما امکان می دهند داده ها را در زمینه یک برنامه واحد پخش کنید ، سایر سیستم ها می توانند در سطح سیستم فایلها کار کنند تا اطمینان حاصل شود که داده ها هر زمان که در دیسک نوشته شده باشند ، به جای دیگری کپی می شوند.
GlusterFS یک سیستم فایل ذخیره سازی متصل به شبکه است که به شما امکان می دهد منابع ذخیره سازی چندین ماشین را جمع کنید. به نوبه خود ، این ویژگی به شما اجازه می دهد تا دستگاه های ذخیره سازی متعددی را که در بین بسیاری از رایانه ها توزیع می شود ، به عنوان یک واحد تکی قدرتمند استفاده کنید. GlusterFS همچنین به شما امکان می دهد انواع مختلفی از تنظیمات ذخیره سازی را ایجاد کنید ، بسیاری از آنها از نظر عملکردی مشابه سطوح RAID هستند. به عنوان مثال ، می توانید داده ها را در گره های مختلف در خوشه نواری کنید ، یا می توانید افزونگی را برای دسترسی بهتر به اطلاعات پیاده سازی کنید.
اهداف
در این راهنما ، یک مجموعه ذخیره سازی خوشه ای اضافی ایجاد خواهید کرد ، که به یک سیستم فایل توزیع شده نیز شناخته می شود یا همانطور که در اسناد GlusterFS به آن اشاره شده است ، یک استخر ذخیره سازی قابل اعتماد ایجاد میکنید. این استخر عملکردی شبیه به پیکربندی RAID آینه ای بر روی شبکه فراهم می کند: هر سرور مجازی مستقل شامل کپی داده های خود است و به برنامه های شما امکان دسترسی به هر کپی را می دهد و از این طریق به توزیع بار قابل خواندن شما کمک می کند.
این خوشه GundterFS اضافی از دو سرور مجازی Ubuntu 20.04 تشکیل شده است. مشابه سرور مجازی NAS با RAID آینه ای عمل می کند. سپس به یک سرور سوم Ubuntu 20.04 پیکربندی شده برای عملکرد به عنوان یک کلاینت GlusterFS دسترسی پیدا خواهید کرد.
نکته ای در مورد اجرای ایمن GlusterFS
وقتی داده ها را به یک والیوم GlusterFS اضافه می کنید ، آن داده ها با هر دستگاه موجود در استخر ذخیره سازی که در آن والیوم هاست است همگام سازی می شود. این ترافیک بین گره ها به طور پیش فرض رمزگذاری نشده است ، به این معنی که خطری وجود دارد که بتواند توسط سو استفاده گران ردیابی شود.
به همین دلیل ، اگر می خواهید از GlusterFS در تولید استفاده کنید ، توصیه می شود که آن را در یک شبکه جداگانه اجرا کنید. به عنوان مثال ، می توانید آن را به گونه ای تنظیم کنید تا در یک Virtual Private Cloud (VPC) یا با یک VPN بین هر یک از گره ها اجرا شود.
پیش نیازها
برای دنبال کردن این آموزش ، به سه سرور مجازی اوبونتو 20.04 در حال اجرا نیاز دارید. هر سرور مجازی باید دارای یک کاربر غیر ریشه با امتیازات ادمین و فایروال تنظیم شده با UFW باشد. برای انجام این کار ، راهنمای تنظیم اولیه سرور مجازی ما برای اوبونتو 20.04 را دنبال کنید.
توجه: همانطور که در بخش اهداف گفته شد ، این آموزش پیکربندی دو سرور مجازی Ubuntu را انجام می دهد تا به عنوان سرور مجازی در استخر ذخیره سازی شما عمل کنند و مابقی نیز به عنوان کلاینت باشند که برای دسترسی به این گره ها استفاده خواهید کرد.
برای شفاف سازی ، این آموزش با نام های هاست زیر به این دستگاه ها اشاره می کند:
نام هاست نقش آن در استخر
gluster0 سرور مجازی
gluster1 سرور مجازی
gluster2 کلاینت

دستوراتی که باید بر روی gluster0 یا gluster1 اجرا شوند ، به ترتیب رنگهای آبی و قرمز دارند:
Sammy@gluster0:~$
Sammy@gluster1:~$

دستوراتی که فقط باید روی کلاینت اجرا شوند (gluster2) رنگ سبز دارند:
Sammy@gluster2:~$
دستوراتی که می توانند یا باید روی بیش از یک دستگاه اجرا شوند ، رنگ خاکستری دارند:
$
مرحله 1 – پیکربندی رزولوشن DNS در هر دستگاه
تنظیم نوعی رزولوشن نام هاست بین هر رایانه می تواند در مدیریت استخر ذخیره سازی Gluster شما کمک کننده باشد. به این ترتیب ، هر وقت در این آموزش مجبور به مراجعه به یکی از دستگاه های خود در یک دستور gluster هستید ، می توانید به جای آدرس IP مربوطه ، آنها را با یک نام دامنه یا حتی یک نام مستعار به خاطر بسپارید.
اگر نام دامنه اضافی ندارید ، یا اگر می خواهید چیزی را سریع تنظیم کنید ، می توانید به جای آن فایل / etc / hosts را در هر رایانه ویرایش کنید. این یک فایل ویژه در دستگاه های لینوکس است که در آن می توانید سیستم را پیکربندی کنید تا نامهای هاست موجود در فایل را در آدرسهای IP ثابت مشخص کنید.
توجه: اگر می خواهید سرور مجازی های خود را برای تأیید هویت با دامنه ای که در اختیار دارید پیکربندی کنید ، ابتدا لازم است یک نام دامنه از یک ثبت دامنه – مانند Namecheap یا Enom – دریافت کنید و رکوردهای DNS مناسب را پیکربندی کنید.
پس از پیکربندی یک رکورد برای هر سرور مجازی ، می توانید به مرحله دوم بروید. از آنجا که این راهنما را دنبال می کنید ، مطمئن شوید که glusterN.example.com و glusterN را با نام دامنه ای جایگزین می کنید که به سرور مجازی مربوطه در دستور نمونه ارجاع می شود.

با استفاده از ویرایشگر متن مورد نظر خود ، این فایل را با امتیازات اصلی در هر یک از دستگاه های خود باز کنید. در اینجا ، ما از nano استفاده خواهیم کرد:
$ sudo nano /etc/hosts

به طور پیش فرض ، با حذف کامنت ها فایل چیزی شبیه به این خواهد بود:
/etc/hosts
127.0.1.1 hostname hostname
127.0.0.1 localhost

::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

در یکی از سرور مجازی های اوبونتو ، آدرس IP سرور مجازی را به همراه هر نامی که مایل به استفاده برای ارجاع آنها در دستورات زیر تعریف هاست محلی هستید اضافه کنید.
در مثال زیر ، هر سرور مجازی با یک نام هاست طولانی که با glusterN.example.com مطابقت دارد و یک نام کوتاه که به صورت glusterN است ، ارائه می شود. می توانید قسمتهای glusterN.example.com و glusterN هر خط را با هر اسمی – یا نامهای جدا شده با اسپیس – که می خواهید برای دسترسی به هر سرور مجازی از آنها استفاده کنید ، تغییر دهید. البته توجه داشته باشید که در کل این آموزش از این مثالها استفاده خواهد شد:
توجه: اگر سرور مجازی های شما بخشی از استخر زیرساختی Virtual Private Cloud هستند ، باید از آدرس IP خصوصی سرور مجازی ها در فایل / etc / host ها به جای IP های عمومی آنها استفاده کنید.
/etc/hosts
. . .
127.0.0.1 localhost
first_ip_address gluster0.example.com gluster0
second_ip_address gluster1.example.com gluster1
third_ip_address gluster2.example.com gluster2

. . .

پس از پایان افزودن این خطوط جدید به فایل / etc / host های یک دستگاه ، آنها را در فایل های / etc / hosts در دستگاه های دیگر خود کپی کرده و اضافه کنید. هر فایل /etc/hosts باید همان خطوط را داشته باشد ، آدرسهای IP سرور مجازی های شما را به نامهایی که انتخاب کرده اید پیوند دهد.
پس از اتمام ، هر فایل را ذخیره کنید و ببندید. اگر از nano استفاده کرده اید ، این کار را با فشار دادن CTRL + X ، Y ، و سپس ENTER انجام دهید.
اکنون که تنظیمات نام هاست را بین هر یک از سرور مجازی های خود پیکربندی کرده اید ، سپس با تنظیم استخر و والیوم ، دستورات را ساده تر می کنید. سپس ، گام دیگری را برمیدارید که باید روی هر یک از سرور مجازی های شما انجام شود. یعنی ، درواقع بایگانی بسته رسمی شخصی پروژه (PPA) Gluster را به هر سه سرور مجازی Ubuntu خود اضافه کنید تا اطمینان حاصل شود که می توانید جدیدترین نسخه GlusterFS را نصب کنید.
مرحله 2 – تنظیم منابع نرم افزاری روی هر دستگاه
اگرچه مخازن پیش فرض Ubuntu 20.04 APT شامل بسته های GlusterFS هستند ، اما در زمان نوشتن این مقاله، جدیدترین نسخه ها نیستند. یکی از راه های نصب آخرین نسخه پایدار GlusterFS (نسخه 7.6 در زمان این نوشتار) اضافه کردن PPA رسمی پروژه Gluster به هر سه سرور مجازی Ubuntu شما است.
با اجرای دستور زیر روی هر سرور مجازی ، PPA را برای بسته های GlusterFS اضافه کنید:
$ sudo add-apt-repository ppa:gluster/glusterfs-7

هنگامی که از شما خواسته شد تأیید کنید که در واقع می خواهید PPA را اضافه کنید ، ENTER را فشار دهید.
پس از افزودن PPA ، شاخص بسته محلی هر سرور مجازی را ریفرشکنید. این کار باعث می شود هر سرور مجازی از بسته های جدید موجود آگاه شود:
$ sudo apt update

پس از افزودن PPA رسمی پروژه Gluster به هر سرور مجازی و به روزرسانی شاخص بسته محلی ، آماده نصب بسته های لازم GlusterFS هستید. اما ، از آنجا که دو تا از سه ماشین شما به عنوان سرور مجازی های Gluster و دیگری به عنوان کلاینت عمل می کنند ، دو روش نصب و پیکربندی مجزا وجود دارد. ابتدا اجزای سرور مجازی را نصب و تنظیم می کنید.
مرحله 3 – نصب مؤلفه های سرور مجازی و ایجاد استخر ذخیره سازی مطمئن
استخر ذخیره سازی هر مقدار ظرفیت ذخیره از بیش از یک منبع ذخیره سازی است. در این مرحله ، دو سرور مجازی خود را – gluster0 و gluster1 – به عنوان اجزای خوشه پیکربندی می کنید.
در هر دو gluster0 و gluster1 ، بسته بندی سرور مجازی GlusterFS را با تایپ کردن دستور زیر نصب کنید:
$ sudo apt install glusterfs-server

هنگامی که از شما خواسته شد ، Y و سپس ENTER را فشار دهید تا نصب را تأیید کنید.
فرایند نصب به طور خودکار GlusterFS را پیکربندی می کند تا به عنوان یک سرویس سیستمی اجرا شود. با این حال ، این سرویس به طور خودکار شروع نمی شود و با بوت شدن فعال نمیشود.
برای شروع glusterd ، سرویس GlusterFS ، دستور شروع systemctl زیر را در gluster0 و gluster1 اجرا کنید:
$ sudo systemctl start glusterd.service

سپس دستور زیر را روی هر دو سرور مجازی اجرا کنید. این کار باعث می شود تا هر زمان که سرور مجازی بوت شود ، سرویس شروع شود:
$ sudo systemctl enable glusterd.service

پس از آن ، می توانید وضعیت سرویس را در یکی یا هر دو سرور مجازی بررسی کنید:
$ sudo systemctl status glusterd.service

اگر سرویس به روز و در حال اجرا باشد ، خروجی مانند این را دریافت خواهید کرد:
Output
● glusterd.service – GlusterFS, a clustered file-system server
Loaded: loaded (/lib/systemd/system/glusterd.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2020-06-02 21:32:21 UTC; 32s ago
Docs: man:glusterd(8)
Main PID: 14742 (glusterd)
Tasks: 9 (limit: 2362)
CGroup: /system.slice/glusterd.service
└─14742 /usr/sbin/glusterd -p /var/run/glusterd.pid –log-level INFO

با فرض اینکه از راهنمای پیش نیاز ستاپ اولیه سرور مجازی پیروی کرده اید ، فایروال را با UFW بر روی هر یک از دستگاه های خود تنظیم کرده اید. به همین دلیل ، قبل از برقراری ارتباطات بین آنها و ایجاد استخر ذخیره سازی ، باید فایروال را در هر گره باز کنید.
Daemon Gluster از پورت 24007 استفاده می کند ، بنابراین باید به هر گره اجازه دهید از طریق فایروال هر گره دیگر در استخر ذخیره سازی خود به آن پورت دسترسی پیدا کند. برای انجام این کار ، دستور زیر را در gluster0 اجرا کنید. به یاد داشته باشید gluster1_ip_address را به آدرس IP gluster1 تغییر دهید:
Sammy@gluster0:~$ sudo ufw allow from gluster1_ip_address to any port 24007

و دستور زیر را روی gluster1 اجرا کنید. دوباره مطمئن شوید gluster0_ip_address را به آدرس IP gluster0 تغییر دهید:
Sammy@gluster1:~$ sudo ufw allow from gluster0_ip_address to any port 24007

همچنین باید به دستگاه کلاینت (gluster2) اجازه دسترسی به این پورت را بدهید. در غیر این صورت ، بعد از تلاش برای تنظیم والیوم ، بعداً به مشکلاتی دچار خواهید شد. دستور زیر را بر روی هر دو سرور مجازی gluster0 و gluster1 اجرا کنید تا این پورت در دستگاه کلاینت شما باز شود:
سپس ، برای اطمینان از اینكه هیچ ماشین دیگری قادر به دسترسی به پورت Gluster در هر یك از سرور مجازی ها نیست ، قانون deny  زیر را نیز به gluster0 و gluster1 اضافه كنید:
$ sudo ufw deny 24007

اکنون آماده برقراری ارتباط بین gluster0 و gluster1 هستید. برای انجام این کار ، باید دستورالعمل gler peer probe را در یکی از گره های خود اجرا کنید. فرقی نمی کند از کدام گره استفاده کنید ، اما مثال زیر نشان می دهد که فرمان در gluster0 اجرا می شود:
Sammy@gluster0:~$ sudo gluster peer probe gluster1

در اصل ، این دستور به gluster0 می گوید که به gluster1 اعتماد کند و آن را به عنوان بخشی از استخر ذخیره خود ثبت کند. اگر کاوشگر موفقیت آمیز باشد ، خروجی زیر را برمی گرداند:
Output
peer probe: success

می توانید در هر زمان با اجرای دستور gluster peer status روی هر کدام از موارد ، بررسی کنید که گره ها در حال برقراری ارتباط هستند. در این مثال، روی gluster1 در حال اجرا است:
Sammy@gluster1:~$ sudo gluster peer status

اگر این دستور را از gluster1 اجرا کنید ، خروجی مانند این را نشان می دهد:
Output
Number of Peers: 1

Hostname: gluster0.example.com
Uuid: a3fae496-c4eb-4b20-9ed2-7840230407be
State: Peer in Cluster (Connected)

در این مرحله ، دو سرور مجازی شما در حال برقراری ارتباط و آماده برای ایجاد حجم ذخیره با یکدیگر هستند.
مرحله 4 – ایجاد یک حجم ذخیره سازی
به یاد بیاورید که هدف اصلی این آموزش ایجاد استخر اضافی ذخیره سازی است. برای این منظور شما می توانید یک والیوم با عملکرد کپی گیری تنظیم کنید ، که به شما امکان می دهد چندین نسخه از داده های خود را نگه دارید و از بروز مشکل در خوشه خود جلوگیری کنید.
برای ایجاد یک والیوم ، می توانید از دستور gluster volume createبا این ترکیب کلی استفاده کنید:
sudo gluster volume create volume_name replica number_of_servers domain1.com:/path/to/data/directory domain2.com:/path/to/data/directory force

در اینجا معنی آرگومان ها و گزینه های فرمان gluster volume create آورده شده است:
volume_name: این نامی است که شما می توانید پس از ایجاد ، به آن والیوم بدهید. دستور مثال زیر یک والیوم با نام Volum1 ایجاد می کند.
replica number_of_servers: به دنبال نام والیوم ، می توانید نوع والیوم را تعیین کنید. به یاد بیاورید که هدف از این آموزش ایجاد استخر اضافی ذخیره سازی است ، بنابراین ما از نوع والیوم کپی گیری استفاده خواهیم کرد. نیاز به یک آرگومان دارد که نشان می دهد داده های والیوم روی چند سرور مجازی کپی میشود (در مورد این آموزش 2 سرور مجازی).
domain1.com:/… و domain2.com:/…: ماشینها و محل دایرکتوری آجرها را تعریف می کنند – اصطلاح GlusterFS برای واحد اصلی ذخیره سازی آن ، که شامل هر دایرکتوری در مورد هر دستگاهی است که به عنوان یک قسمت یا یک نسخه از یک والیوم بزرگتر – که والیوم 1 را تشکیل می دهد، ارائه میشود. مثال زیر دایرکتوری به نام gluster-store را در دیرکتوری اصلی هر دو سرور مجازی ایجاد می کند.
Force: این گزینه ، هشدارها یا گزینه هایی که ممکن است ظاهر شوند و ایجاد والیوم را متوقف کنند، رد می کند.
طبق کنوانسیون هایی که در ابتدا در این آموزش ایجاد شده است ، می توانید این دستور را برای ایجاد یک والیوم اجرا کنید. توجه داشته باشید که می توانید آن را از طریق gluster0 یا gluster1 اجرا کنید:
$ sudo gluster volume create volume1 replica 2 gluster0.example.com:/gluster-storage gluster1.example.com:/gluster-storage force

اگر والیوم با موفقیت ایجاد شد ، خروجی زیر را دریافت خواهید کرد:
Output
volume create: volume1: success: please start the volume to access data

در این مرحله ، والیوم شما ایجاد شده است ، اما هنوز فعال نیست. با اجرای دستور زیر ، مجدداً از هر یک از سرور مجازی های Gluster می توانید والیوم را شروع کرده و آن را برای استفاده در دسترس قرار دهید:
$ sudo gluster volume start volume1

اگر والیوم به درستی شروع شده باشد ، این خروجی را دریافت خواهید کرد:
Output
volume start: volume1: success

سپس ، بررسی کنید که والیوم آنلاین باشد. دستور زیر را از هر یک از گره های خود اجرا کنید:
$ sudo gluster volume status

خروجی مشابه این را برمی گرداند:
Output
Status of volume: volume1
Gluster process TCP Port RDMA Port Online Pid
——————————————————————————
Brick gluster0.example.com:/gluster-storage 49152 0 Y 18801
Brick gluster1.example.com:/gluster-storage 49152 0 Y 19028
Self-heal Daemon on localhost N/A N/A Y 19049
Self-heal Daemon on gluster0.example.com N/A N/A Y 18822

Task Status of Volume volume1
——————————————————————————
There are no active volume tasks

براساس این خروجی ، brickها در هر دو سرور مجازی بصورت آنلاین هستند.
به عنوان آخرین مرحله برای پیکربندی والیوم خود ، باید فایروال را در هر دو سرور مجازی باز کنید تا دستگاه کلاینت شما بتواند به آن متصل شود و والیوم آن را نصب کند. با توجه به خروجی نمونه فرمان قبلی ، volume1 در پورت 49152 در هر دو دستگاه در حال اجرا است. این پورت پیش فرض GlusterFS برای والیوم اولیه آن است و در والیوم بعدی که ایجاد می کنید از پورت 49153 ، سپس 49154 و غیره استفاده خواهید کرد.
دستور زیر را بر روی هر دو gluster0 و gluster1 اجرا کنید تا gluster2 از طریق فایروال مربوط به هر یک به این پورت دسترسی داشته باشد:
$ sudo ufw allow from gluster2_ip_address to any port 49152

سپس ، برای یک لایه امنیتی بیشتر ، یک قانون deny  دیگر برای پورت والیوم در هر دو gluster0 و gluster1 اضافه کنید. این کار تضمین می کند که هیچ دستگاهی به غیر از کلاینت شما نمی تواند به والیوم هر سرور مجازی دسترسی داشته باشد:
$ sudo ufw deny 49152

اکنون که والیوم شما به روز و در حال اجراست ، می توانید دستگاه کلاینت خود را تنظیم کرده و از راه دور استفاده از آن را شروع کنید.
مرحله 5 – نصب و پیکربندی مولفه های کلاینت
اکنون والیوم شما پیکربندی شده و برای استفاده توسط دستگاه کلاینت شما در دسترس است. قبل از شروع کار ، باید بسته glusterfs-client را از PPA تنظیم شده در مرحله 1 در دستگاه کلاینت خود نصب کنید. متعلقات این بسته شامل برخی از کتابخانه های مشترک و ماژول های مترجم GlusterFS و ابزارهای FUSE لازم برای کار کردن آن است.
دستور زیر را در gluster2 اجرا کنید:
Sammy@gluster2:~$ sudo apt install glusterfs-client

در ادامه والیوم ذخیره از راه دور خود را روی رایانه کلاینت خود سوار می کنید. قبل از اینکه بتوانید این کار را انجام دهید ، باید یک نقطه اتصال ایجاد کنید. به طور معمول ، این نقطه در دیرکتوری / mnt است ، اما در هر مکان راحت می توان از آن استفاده کرد.
برای سادگی ، دایرکتوری به نام /storage-poolرا بر روی دستگاه کلاینت خود ایجاد کنید تا به عنوان نقطه سوارسازی ارائه شود. این نام دیرکتوری با یک اسلش (/) که آن را در دیرکتوری اصلی قرار می دهد ، شروع می شود ، بنابراین شما باید آن را با امتیازات sudo ایجاد کنید:
Sammy@gluster2:~$ sudo mkdir /storage-pool

اکنون می توانید والیوم از راه دور را نصب کنید. اما قبل از آن ، نگاهی به نحو دستور mount مورد نظر برای انجام این کار بیندازید:
sudo mount -t glusterfs domain1.com:volume_name /path/to/mount/point

mount ابزاری است که در بسیاری از سیستم عاملهای یونیکس مانند یافت می شود. برای نصب سیستم فایل ها – هر چیزی از دستگاههای ذخیره سازی خارجی ، مانند کارتهای SD یا USB ، برای ذخیره سازی متصل به شبکه ، مانند این آموزش – تا دایرکتوری های موجود در سیستم فایل های موجود دستگاه استفاده می شود. ترکیب دستور mount که از آن استفاده خواهید کرد شامل گزینه -t است که به سه آرگومان نیاز دارد: نوع سیستم فایل نصب شده ، دستگاهی که می توان سیستم فایل برای سوار شدن روی آن را پیدا کرد و دایرکتوری روی کلاینت که در آن والیوم را نصب خواهید کرد.
توجه کنید که در این مثال ، آرگومان دستگاه به یک نام هاست اشاره می کند که به دنبال آن یک علامت کولون و سپس نام والیوم اضافه می شود. GlusterFS دیرکتوری های ذخیره سازی واقعی را در هر هاست ابسترکت میکند، به این معنی که این دستور به دنبال نصب دیرکتوری /gluster-storage نیست ، بلکه به جای آن volume1.
همچنین توجه داشته باشید که فقط باید یک عضو از خوشه ذخیره را مشخص کنید. این می تواند هر دو گره باشد ، زیرا سرویس GlusterFS با آنها به عنوان یک دستگاه رفتار می کند.
دستور زیر را روی دستگاه کلاینت خود (gluster2) اجرا کنید تا والیوم را در دیرکتوری /storage-pool ایجاد کنید:
Sammy@gluster2:~$ sudo mount -t glusterfs gluster0.example.com:/volume1 /storage-pool

پس از آن ، دستور df را اجرا کنید. که مقدار فضای موجود در دیسک را برای سیستم فایلی هایی که کاربر از آن استفاده می کند ، نشان می دهد:
Sammy@gluster2:~$ df

این دستور نشان می دهد که والیوم GlusterFS در محل صحیح نصب شده است:
Output
Filesystem 1K-blocks Used Available Use% Mounted on
. . .
gluster0.example.com:/volume1 50633164 1938032 48695132 4% /storage-pool

اکنون می توانید آزمایش کنید که هر داده ای که برای کلاینت ارسال می کنید همانطور که انتظار می رود در گره های سرور مجازی شما کپی شود.
مرحله 6 – تست ویژگی های افزونگی (Redundancy)
اکنون که کلاینت خود را برای استفاده از استخر و والیوم خود تنظیم کرده اید ، می توانید عملکرد آن را آزمایش کنید.
در دستگاه کلاینت (gluster2) خود ، به نقطه سوار سازی در مرحله قبل بروید:
Sammy@gluster2:~$ cd /storage-pool

سپس چند فایل آزمایشی ایجاد کنید. دستور زیر ده فایل خالی جداگانه در استخر شما ایجاد می کند:
Sammy@gluster2:~$ sudo touch file_{0..9}.test

اگر دایرکتوریهای ذخیره سازی را که قبلاً در مورد هر هاست ذخیره سازی تعریف کرده اید ، بررسی کنید ، متوجه می شوید که همه این فایل ها در هر سیستم موجود هستند.
در gluster0:
Sammy@gluster0:~$ ls /gluster-storage

Output
file_0.test file_2.test file_4.test file_6.test file_8.test
file_1.test file_3.test file_5.test file_7.test file_9.test

به همین ترتیب ، در gluster1:
Sammy@gluster1:~$ ls /gluster-storage

Output
file_0.test file_2.test file_4.test file_6.test file_8.test
file_1.test file_3.test file_5.test file_7.test file_9.test

همانطور که این خروجی ها نشان می دهد ، فایل های آزمایشی که به کلاینت اضافه کردید نیز برای هر دو گره شما نوشته شده است.
اگر تا به حال نقطه ای وجود داشته باشد که یکی از گره های موجود در خوشه ذخیره شما تنزل یابد ، در صورت ایجاد تغییراتی در سیستم فایل ، می تواند از همگام سازی با استخر ذخیره خارج شود. انجام یک عمل خوانش در نقطه نصب کلاینت پس از بازگشت گره به صورت آنلاین ، به گره هشدار می دهد تا فایل های از دست رفته را دریافت کنید:
Sammy@gluster2:~$ ls /storage-pool

اکنون که تأیید کرده اید که والیوم ذخیره شما به درستی نصب شده است و می تواند داده ها را در هر دو دستگاه در خوشه تکرار کند ، می توانید دسترسی به استخر ذخیره سازی را غیرفعال کنید.
مرحله 7 – محدود کردن ویژگی های افزونگی
در این مرحله ، هر رایانه ای می تواند بدون هیچ محدودیتی به والیوم ذخیره شما وصل شود. شما می توانید با تنظیم گزینه auth.allow ، که آدرس های IP هر کلاینت را که باید به والیوم دسترسی داشته باشد تعریف میکند، این مشخصه را تغییر دهید.
اگر از پیکربندی /etc/hostsاستفاده می کنید ، نامهایی که برای هر سرور مجازی تعیین کرده اید به طور صحیح مسیریابی نمی شوند. به جای آن باید از یک آدرس IP ثابت استفاده کنید. از طرف دیگر ، اگر از رکوردهای DNS استفاده می کنید ، نام دامنه ای که پیکربندی کرده اید در اینجا کار خواهد کرد.
روی هر یک از گره های ذخیره سازی خود (gluster0 یا gluster1) ، دستور زیر را اجرا کنید:
$ sudo gluster volume set volume1 auth.allow gluster2_ip_address

اگر فرمان با موفقیت انجام شود ، این خروجی را برمی گرداند:
Output
volume set: success

اگر در هر نقطه ای نیاز به حذف محدودیت دارید ، می توانید این دستور را تایپ کنید:
$ sudo gluster volume set volume1 auth.allow *

با این کار مجدداً اتصالات از هر دستگاه امکان پذیر می شود. این کار ایمن نیست ، اما می تواند برای مشکلات اشکال زدایی مفید باشد.
اگر چندین کلاینت دارید ، می توانید آدرس IP یا نام دامنه آنها را همزمان (بسته به اینکه از / etc / host یا رزولوشن نام هاست DNS استفاده کنید) مشخص کنید ، و با کاما از هم جدا کنید:
$ sudo gluster volume set volume1 auth.allow gluster_client1_ip,gluster_client2_ip

استخر ذخیره سازی شما اکنون پیکربندی شده ، ایمن و آماده استفاده است. در مرحله بعد چند دستور را یاد خواهید گرفت که به شما کمک می کنند اطلاعاتی درباره وضعیت استخر ذخیره خود بدست آورید.
مرحله 8 – دریافت اطلاعات در مورد استخر ذخیره سازی خود با دستورات GlusterFS
هنگامی که شروع به تغییر برخی از تنظیمات ذخیره سازی GlusterFS می کنید ، ممکن است در مورد گزینه هایی که در دسترس دارید ، اینکه کدام والیوم زنده است و کدام گره ها با هر والیوم مرتبط هستند ، دچار سردرگمی شوید.
دستورات مختلفی وجود دارد که در گره های شما برای بازیابی این داده ها و تعامل با استخر شما وجود دارد.
اگر می خواهید اطلاعات مربوط به هر یک از والیوم های خود را داشته باشید ، فرمان gluster volume info را اجرا کنید:
$ sudo gluster volume info

Output
Volume Name: volume1
Type: Replicate
Volume ID: a1e03075-a223-43ab-a0f6-612585940b0c
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: gluster0.example.com:/gluster-storage
Brick2: gluster1.example.com:/gluster-storage
Options Reconfigured:
auth.allow: gluster2_ip_address
transport.address-family: inet
storage.fips-mode-rchecksum: on
nfs.disable: on
performance.client-io-threads: off

به طور مشابه ، برای به دست آوردن اطلاعات در مورد هر همتایی که این گره به آن متصل است ، می توانید تایپ کنید:
Sammy@gluster1:~$ sudo gluster peer status

Number of Peers: 1

Hostname: gluster0.example.com
Uuid: cb00a2fc-2384-41ac-b2a8-e7a1793bb5a9
State: Peer in Cluster (Connected)

اگر می خواهید اطلاعات دقیقی در مورد عملکرد هر گره داشته باشید ، می توانید با تایپ کردن دستور زیر یک والیوم را تنظیم کنید:
$ sudo gluster volume profile volume_name start

پس از اتمام این دستور ، می توانید اطلاعاتی را که جمع آوری شده است با تایپ دستور زیر بدست آورید:
$ sudo gluster volume profile volume_name info

Output
Brick: gluster0.example.com:/gluster-storage
——————————————–
Cumulative Stats:
%-latency Avg-latency Min-Latency Max-Latency No. of calls Fop
——— ———– ———– ———– ———— —-
0.00 0.00 us 0.00 us 0.00 us 30 FORGET
0.00 0.00 us 0.00 us 0.00 us 36 RELEASE
0.00 0.00 us 0.00 us 0.00 us 38 RELEASEDIR

Duration: 5445 seconds
Data Read: 0 bytes
Data Written: 0 bytes

Interval 0 Stats:
%-latency Avg-latency Min-Latency Max-Latency No. of calls Fop
——— ———– ———– ———– ———— —-
0.00 0.00 us 0.00 us 0.00 us 30 FORGET
0.00 0.00 us 0.00 us 0.00 us 36 RELEASE
0.00 0.00 us 0.00 us 0.00 us 38 RELEASEDIR

Duration: 5445 seconds
Data Read: 0 bytes
Data Written: 0 bytes
. . .

همانطور که قبلاً نشان داده شده است ، برای لیستی از کلیه مؤلفه های مرتبط با GlusterFS که در هریک از گره های شما اجرا شده است ، دستور gluster volume status را اجرا کنید:
$ sudo gluster volume status

Output
Status of volume: volume1
Gluster process TCP Port RDMA Port Online Pid
——————————————————————————
Brick gluster0.example.com:/gluster-storage 49152 0 Y 19003
Brick gluster1.example.com:/gluster-storage 49152 0 Y 19040
Self-heal Daemon on localhost N/A N/A Y 19061
Self-heal Daemon on gluster0.example.com N/A N/A Y 19836

Task Status of Volume volume1
——————————————————————————
There are no active volume tasks

اگر می خواهید والیوم ذخیره سازی GlusterFS خود را مدیریت کنید ، ممکن است ایده خوبی باشد که به کنسول GlusterFS وارد شوید. این امر به شما امکان می دهد قبل از همه چیز با محیط GlusterFS خود ارتباط برقرار کنید:
$ sudo gluster

این امر به شما اعلانی را نشان می دهد که می توانید دستورات خود را تایپ کنید. help اعلان خوبی برای جهت گیری میباشد:
Gluster> help

Output
peer help – display help for peer commands
volume help – display help for volume commands
volume bitrot help – display help for volume bitrot commands
volume quota help – display help for volume quota commands
snapshot help – display help for snapshot commands
global help – list global commands

پس از اتمام ، برای خروج از کنسول Gluster ، exit را اجرا کنید:
Gluster> exit

با این کار ، آماده هستید تا GlusterFS را با برنامه بعدی خود ادغام کنید.
نتیجه
با تکمیل این آموزش ، یک سیستم ذخیره سازی اضافی دارید که به شما امکان می دهد همزمان روی دو سرور مجازی جداگانه بنویسید. این ویژگی می تواند برای تعدادی از برنامه ها مفید باشد و می تواند اطمینان حاصل کند که داده های شما حتی در صورت تنزل یک سرور مجازی در دسترس باشند

 

برچسب‌ها:

behnam gol mohamadi بازدید : 11 سه شنبه 17 تیر 1399 نظرات (0)

امروزه Laravel یکی از محبوب ترین چارچوب های منبع باز برنامه PHP است. معمولاً با یک پایگاه داده MySQL مستقر می شود اما می تواند به گنه ای پیکربندی شود که از انواع مختلف گزینه های ذخیره داده backend استفاده کند.Laravel مفتخر است که از بسیاری از ویژگی های مدرن PHP و اکوسیستم گسترده بسته استفاده می کند.
Kubernetes یک پلتفرم هماهنگ سازی کانتینر است که می تواند بر روی خوشه های vpsgol Kubernetes میزبانی شود تا بخش عمده ای از کار اجرایی را در راه اندازی و اجرای کانتینرها در تولید انجام دهد. Helm یک مدیر بسته Kubernetes است که پیکربندی و نصب سرویس ها و pod ها در Kubernetes را آسان تر می کند.
در این راهنما یک برنامه PHP Laravel ایجاد می کنید ، برنامه خود را در یک تصویر Docker ایجاد می کنید و با استفاده از نمودار LAMP Helm آن تصویر را در یک خوشه vpsgol Kubernetes به کار می گیرید. در مرحله بعدی ، یک کنترلر Ingress را تنظیم می کنید تا SSL و یک نام دامنه سفارشی را به برنامه تان اضافه کنید. پس از اتمام ، یک برنامه Laravel در حال کار و متصل به یک پایگاه داده MySQL خواهید داشت که روی یک خوشه Kubernetes در حال اجرا است.
پیش نیازها
⦁ Docker روی دستگاهی که از آن به خوشه خود دسترسی پیدا کنید ، نصب شده باشد. می توانید دستورالعمل های دقیقی در مورد نصب Docker برای اکثر توزیع های لینوکس در اینجا یا در وب سایت Docker برای سایر سیستم عامل ها پیدا کنید.
⦁ یک حساب کاربری در Docker Hub برای ذخیره تصاویر Docker که می خواهید در طول این آموزش ایجاد کنید.
⦁ یک خوشه vpsgol Kubernetes 1.17+ که پیکربندی اتصال شما به صورت پیش فرض kubectl تنظیم شده باشد.
⦁ مدیر بسته Helm 3 نصب شده روی دستگاه محلی شما. مرحله اول را کامل کنید و از مرحله دوم نحوه نصب نرم افزار روی Kubernetes Cluster با آموزش Helm 3 Package Manager ، repo stable  را اضافه کنید.
⦁ یک نام دامنه کاملاً ثبت شده با یک رکورد A در دسترس. در سراسر این آموزش از your_domain استفاده خواهد شد. می توانید نام دامنه را در Namecheap خریداری کنید ، به صورت رایگان در Freenom دریافت کنید ، یا از ثبت دامنه مورد نظر خود استفاده کنید. در مورد IP برای رکورد A دامنه خود در این زمان نگران نباشید. هنگامی که به مرحله 5 رسیدید و کنترلر Ingress شما در محل کار قرار گرفت ، your_domain خود را به IP مناسب وصل می کنید.
مرحله 1 – ایجاد یک برنامه جدید Laravel
در این مرحله از Docker برای ایجاد یک برنامه جدید Laravel 7 استفاده خواهید کرد ، اما باید بتوانید با یک برنامه موجود Laravel که از MySQL به عنوان پایگاه داده پشتیبان استفاده می کند ، مراحل مشابه را طی کنید. برنامه جدیدی که شما ایجاد می کنید ، تأیید می کند که Laravel به بانک اطلاعاتی متصل شده است و نام بانک اطلاعات را نشان می دهد.
ابتدا به دیرکتوری هوم خود بروید و سپس با استفاده از یک کانتینر composer Docker یک برنامه جدید Laravel ایجاد کنید:
⦁ $ cd ~

⦁ $ docker run –rm -v $(pwd):/app composer create-project –prefer-dist laravel/laravel laravel-kubernetes

پس از اتمام کار کانتینر و نصب تمام بسته های composer ، باید نصب جدیدی از Laravel را در دیرکتوری فعلی خود با نام laravel-kubernetes ببینید. به آن پوشه بروید:
⦁ $ cd ~/laravel-kubernetes

بقیه دستورات این آموزش را از اینجا اجرا خواهید کرد.
هدف از این برنامه تست اتصال بانک اطلاعاتی شما و نمایش نام آن در مرورگر شما است. برای آزمایش اتصال بانک اطلاعاتی ، فایل ./resources/views/welcome.blade.phpرا در ویرایشگر متن باز کنید:
⦁ $ nano ./resources/views/welcome.blade.php

بخش <div class = “link”> … </div> را پیدا کنید و محتوای آن را با موارد زیر جایگزین کنید:
./resources/views/welcome.blade.php

<div class=”links”>
<strong>Database Connected: </strong>
@php
try {
DB::connection()->getPDO();
echo DB::connection()->getDatabaseName();
} catch (\Exception $e) {
echo ‘None’;
}
@endphp
</div>

فایل را ذخیره کنید و ببندید.
این کارها تمام سفارشی سازی هایی است که برای این آموزش باید روی برنامه پیش فرض Laravel انجام دهید. پس از اتمام ، این قطعه مختصر از PHP ، اتصال به پایگاه داده شما را آزمایش می کند و نام بانک اطلاعاتی را روی صفحه نمایش Laravel در مرورگر وب شما نمایش می دهد.
در مرحله بعد ، از Docker برای ساختن تصویری که حاوی این برنامه Laravel و Docker Compose است برای بررسی کارکرد آن به صورت محلی و اتصال به یک پایگاه داده MySQL استفاده می کنید.
مرحله 2 – کانتینرایز کردن برنامه Laravel
اکنون که یک برنامه جدید Laravel ایجاد کرده اید ، باید کد خود را در یک تصویر Docker بسازید و سپس تصویر را با Docker Compose تست کنید. در حالی که هدف از این آموزش استقرار برنامه روی یک خوشه Kubernetes است ، Docker Compose روشی مناسب برای آزمایش تصویر Docker و پیکربندی به صورت محلی قبل از اجرای آن روی cloud است. این حلقه بازخورد سریع می تواند برای ایجاد و آزمایش تغییرات کوچک مفید باشد.
ابتدا با استفاده از nano یا ویرایشگر متن مورد نظر خود ، یک فایل را در ریشه برنامه Laravel خود با نام Dockerfile ایجاد کنید:
⦁ $ nano ./Dockerfile

محتوای زیر را اضافه کنید. Docker از این فایل برای ساختن کد شما در تصویر استفاده می کند:
./Dockerfile
FROM php:7.4-apache

# Install packages
RUN apt-get update && apt-get install -y \
git \
zip \
curl \
sudo \
unzip \
libicu-dev \
libbz2-dev \
libpng-dev \
libjpeg-dev \
libmcrypt-dev \
libreadline-dev \
libfreetype6-dev \
g++

# Apache configuration
ENV APACHE_DOCUMENT_ROOT=/var/www/html/public
RUN sed -ri -e ‘s!/var/www/html!${APACHE_DOCUMENT_ROOT}!g’ /etc/apache2/sites-available/*.conf
RUN sed -ri -e ‘s!/var/www/!${APACHE_DOCUMENT_ROOT}!g’ /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf
RUN a2enmod rewrite headers

# Common PHP Extensions
RUN docker-php-ext-install \
bz2 \
intl \
iconv \
bcmath \
opcache \
calendar \
pdo_mysql

# Ensure PHP logs are captured by the container
ENV LOG_CHANNEL=stderr

# Set a volume mount point for your code
VOLUME /var/www/html

# Copy code and run composer
COPY –from=composer:latest /usr/bin/composer /usr/bin/composer
COPY . /var/www/tmp
RUN cd /var/www/tmp && composer install –no-dev

# Ensure the entrypoint file can be run
RUN chmod +x /var/www/tmp/docker-entrypoint.sh
ENTRYPOINT [“/var/www/tmp/docker-entrypoint.sh”]

# The default apache run command
CMD [“apache2-foreground”]

فایل را ذخیره کنید و ببندید.
این Dockerfile با تصویر PHP 7.4 Apache Docker که در Docker Hub یافت می شود ، شروع می کند ، سپس چندین بسته Linux را که معمولاً توسط برنامه های Laravel مورد نیاز هستند ، نصب می کند. در مرحله بعد ، فایلهای پیکربندی Apache را ایجاد کرده و بازنویسی هدر را فعال می کند.Dockerfile چندین پسوند متداول PHP را نصب می کند و متغیر محیطی را اضافه می کند تا اطمینان حاصل کند که ورود های لاراول از طریق stderr به داخل کانتینر منتقل می شوند. این به شما امکان می دهد تا ورودهای لاراول را با پیگیری Docker Compose یا Kubernetes ببینید.
سرانجام ، Dockerfile تمام کدهای موجود در برنامه Laravel را در / var / www / tmp کپی کرده و متعلقات Composer را نصب می کند. سپس ENTRYPOINT را تنظیم می کند ، اما باید آن فایل را ایجاد کنید ، که در مرحله بعدی انجام خواهیم داد.
در دیرکتوری اصلی پروژه خود ، فایل جدیدی بنام docker-entrypoint.sh ایجاد کنید. این فایل هنگامی اجرا می شود که کانتینر شما به صورت محلی یا در خوشه Kubernetes اجرا شود ، و کد برنامه Laravel شما را از دیرکتوری / var / www / tmp به / var / www / html کپی می کند که Apache قادر به ارائه آن است.
⦁ $ nano ./docker-entrypoint.sh

اکنون اسکریپت زیر را اضافه کنید:
./docker-entrypoint.sh
#!/bin/bash

cp -R /var/www/tmp/. /var/www/html/
chown -R www-data:www-data /var/www/html

exec “$@”

خط آخر ، exec “$@” به پوسته دستور می دهد تا دستور دیگری را که به عنوان یک آرگومان ورودی به آن وارد شد ، اجرا کند. از این جهت مهم است که شما می خواهید Docker بعد از اجرای این اسکریپت ، دستور اجرای آپاچی (apache2-foreground) را ادامه دهد. فایل را ذخیره کنید و ببندید.
در مرحله بعدی ، یک فایل .dockerignore را در دیرکتوری اصلی برنامه خود ایجاد کنید. این فایل اطمینان می دهد که هنگام ساختن تصویر Docker ، با بسته ها یا فایل های محیطی که نباید در آن کپی گردد مخلوط نمی شود:
⦁ $ nano ./.dockerignore

./.dockerignore
.env
/vendor

فایل را ذخیره کنید و ببندید.
آخرین فایلی که باید قبل از اجرای برنامه خود بصورت محلی با استفاده از Docker Compose ایجاد کنید ، فایل docker-compose.yml است. اما در طول پیکربندی این فایل YAML ، باید APP_KEY را که لاراول هنگام نصب ایجاد کرده است ، وارد کنید. با باز کردن و جستجو در فایل ./.env یا با اجرای دستورات cat و grep زیر ، آن را پیدا کنید:
⦁ $ cat .env | grep ^APP_KEY

خروجی مانند این را مشاهده خواهید کرد:
Output
APP_KEY=base64:0EHhVpgg … UjGE=

کلید خود را در کلیپ بورد خود کپی کنید. حتماً پیشوند base64: وجود دارد. اکنون فایل docker-compose.yml را در دیرکتوری اصلی برنامه خود ایجاد کنید:
⦁ $ nano ./docker-compose.yml

در اینجا ما برای پیاده سازی پایگاه داده شما از تصویر PHP برنامه Laravel و همچنین یک کانتینر MySQL استفاده خواهیم کرد. محتوای زیر را اضافه کنید:
./docker-compose.yml
version: ‘3.5’
services:
php:
image: your_docker_hub_username/laravel-kubernetes:latest
restart: always
ports:
– 8000:80
environment:
– APP_KEY=”your_laravel_app_key”
– APP_ENV=local
– APP_DEBUG=true
– DB_PORT=3306
– DB_HOST=mysql
– DB_DATABASE
– DB_USERNAME
– DB_PASSWORD
mysql:
image: mysql:5.7
restart: always
environment:
– MYSQL_ROOT_PASSWORD=${DB_ROOT_PASSWORD}
– MYSQL_DATABASE=${DB_DATABASE}
– MYSQL_USER=${DB_USERNAME}
– MYSQL_PASSWORD=${DB_PASSWORD}

برای متغیر your_laravel_app_key از متغیر APP_KEY که در کلیپ بورد کپی کرده اید استفاده کنید و از متغیر your_docker_hub_username برای نام کاربری Docker Hub استفاده نمایید. فایل را ذخیره کنید و ببندید.
اولین تصویر را بصورت محلی با استفاده از docker build ایجاد خواهید کرد. تصویر دوم تصویر رسمی MySQL Docker است که در Hub Docker موجود است. هر دو به چندین متغیر محیطی احتیاج دارند ، که شما هنگام اجرای کانتینرها خواهید داشت.
برای ساختن تصویر Docker حاوی برنامه Laravel ، دستور زیر را اجرا کنید. مطمئن شوید که your_docker_hub_username را با نام کاربری یا نام کاربری تیم خود در Docker Hub که این تصویر در آن ذخیره می شود ، جایگزین کنید:
⦁ $ docker build -t your_docker_hub_username/laravel-kubernetes:latest .

در مرحله بعد ، می توانید این دو کانتینر را با Docker Compose با اعتبارات موردنیاز بانک اطلاعاتی اجرا کنید:
⦁ $ DB_ROOT_PASSWORD=rootpassword DB_DATABASE=local_db DB_USERNAME=admin DB_PASSWORD=password docker-compose up -d

چهار متغیر محیطی که در اینجا مورد استفاده قرار می گیرند ( DB_ROOT_PASSWORD ، DB_DATABASE ، DB_USERNAME، DB_PASSWORD) در صورت تمایل می توانند اصلاح شوند ، اما از آنجا که شما فقط برنامه خود را بصورت محلی آزمایش می کنید ، دیگر لازم نیست نگران امنیت آنها باشید.
ممکن است حداکثر 30 ثانیه طول بکشد تا پایگاه داده MySQL شروع به کار کند و کانتینرها آماده شوند. هنگامی که آماده بودند ، می توانید برنامه Laravel خود را بر روی دستگاه خود در localhost:8000مشاهده کنید.

برنامه PHP شما به پایگاه داده MySQL شما متصل می شود. پس از اتصال موفق ، متن “بانک اطلاعاتی متصل: local_db” در زیر آرم Laravel ظاهر می شود.
اکنون که تصویر Docker خود را بصورت محلی با استفاده از Docker Compose آزمایش کرده اید ، می توانید کانتینرها را با اجرای docker-compose down پایین بیاورید:
⦁ $ docker-compose down

در بخش بعدی ، تصویر Docker خود را به Docker Hub سوق می دهید تا نمودار Helm شما بتواند از آن برای استقرار برنامه خود در خوشه Kubernetes استفاده کند.
مرحله 3 – وارد کردن تصویر Docker به Docker Hub
نمودار LAMP Helm که برای استفاده از کد خود در Kubernetes استفاده خواهید کرد ، نیاز دارد که کد شما در یک رجیستری کانتینر موجود باشد. در حالی که می توانید تصویر خود را به یک رجیستری خصوصی یا خود هاست وارد کنید ، برای اهداف این آموزش از یک رجیستری Docker در دسترس عمومی و رایگان در Docker Hub استفاده خواهید کرد.
با استفاده از مرورگر وب خود به حساب کاربری خود در Docker Hub دسترسی پیدا کنید و سپس یک مخزن جدید به نام laravel-kubernetes ایجاد کنید.

در مرحله بعد ، اگر از دستگاه محلی خود به Docker Hub متصل نشده اید ، باید وارد Docker Hub شوید. می توانید این کار را از طریق خط فرمان انجام دهید:
⦁ $ docker login -u your_docker_hub_username

هنگام درخواست ، اعتبارنامه ورود خود را وارد کنید. این کار معمولاً فقط باید یک بار در هر دستگاه انجام شود زیرا Docker اعتبار شما را در دیرکتوری ~ / .docker / config.json در دیرکتوری هوم شما ذخیره می کند.
در آخر ، تصویر خود را به Docker Hub وارد کنید:
⦁ $ docker push your_docker_hub_username/laravel-kubernetes:latest

بسته به اتصال شما ممکن است چند دقیقه طول بکشد تا برنامه تان آپلود شود، اما هنگامی که کار Docker انجام شد ، یک hash نهایی و اندازه تصویر خود را در ترمینال مشاهده خواهید کرد. چیزی شبیه به این خواهد بود:
Output
latest: digest: sha256:df4bdeda91484c8c26a989b13b8f27ab14d93ab2e676e3c396714cb3811c4086 size: 4918

اکنون که برنامه Laravel شما محصور شده است و تصویری را به Docker Hub فشار داده اید ، می توانید از آن در یک طرح Helm Chart یا Kubernetes استفاده کنید. در مرحله بعد ، مقادیر سفارشی را بر اساس نمودار LAMP Helm تنظیم کرده و آن را به خوشه vpsgol Kubernetes خود مستقر می کنید.
مرحله 4 – پیکربندی و به کارگیری برنامه با نمودار LAMP Helm
Helm تعدادی نمودار را برای کمک به شما در تنظیم برنامه های Kubernetes با استفاده از ابزارهای از پیش تعیین شده ابزارها فراهم می کند. در حالی که شما می توانید فایل های خدمات Kubernetes خود را برای دستیابی به استقرار مشابه بنویسید ، در این بخش خواهید دید که استفاده از نمودار Helm به پیکربندی بسیار کمتری نیاز دارد.
ابتدا برای ذخیره کلیه فایل های پیکربندی Helm به یک دیرکتوری راهنما نیاز دارید. دایرکتوری جدیدی را در ریشه پروژه Laravel خود به نام helm ایجاد کنید:
⦁ $ mkdir ./helm

در داخل دایرکتوری helm / ، دو فایل جدید ایجاد خواهید کرد: values.yml و secrets.yml. ابتدا values.yml را ایجاد و باز کنید:
⦁ $ nano ./helm/values.yml

فایل values.yml شامل گزینه های پیکربندی غیر سری است که مقادیر پیش فرض در نمودار LAMP Helm را رونویسی می کند. تنظیمات زیر را اضافه کنید ، مطمئن شوید که نام_docker_hub_us را با نام کاربری شخصی خود جایگزین کنید:
./helm/values.yml
php:
repository: “your_docker_hub_username/laravel-kubernetes”
tag: “latest”
fpmEnabled: false
envVars:
– name: APP_ENV
value: production
– name: APP_DEBUG
value: false
– name: DB_PORT
value: 3306
– name: DB_HOST
value: localhost

فایل را ذخیره کنید و ببندید.
اکنون یک فایل secrets.yml ایجاد کنید:
⦁ $ nano ./helm/secrets.yml

secrets.yml تحت بررسی کنترل نسخه قرار نمیگیرد. شامل اطلاعات پیکربندی حساس مانند گذرواژه پایگاه داده شما و کلید برنامه Laravel است. تنظیمات زیر را انجام دهید و متناسب با نیاز و اعتبارات خود تنظیم کنید:
./helm/secrets.yml
mysql:
rootPassword: “your_database_root_password”
user: your_database_user
password: “your_database_password”
database: your_database_name

php:
envVars:
– name: APP_KEY
value: “your_laravel_app_key”
– name: DB_DATABASE
value: your_database_name
– name: DB_USERNAME
value: your_database_user
– name: DB_PASSWORD
value: “your_database_password”

حتماً از نام کاربری و رمز ورود ترکیبی برای پایگاه داده تولید خود استفاده کنید و از همان your_laravel_app_key همانند بالا استفاده کنید ، یا یک پنجره ترمینال جدید را باز کنید و با اجرای دستور زیر یک مورد جدید ایجاد کنید. سپس می توانید مقدار جدیدی را که Laravel در فایل .env خود قرار دارد کپی کنید:
⦁ $ docker run –rm -v $(pwd):/app php:cli php /app/artisan key:generate

secrets.yml را ذخیره کنید و ببندید.
در مرحله بعد ، برای جلوگیری از ایجاد فایل secrets.yml در تصویر Docker یا ذخیره روی کنترل نسخه ، مطمئن شوید که خط زیر را هم به فایل های .dockerignore و .gitignore اضافه می کنید. /helm/secrets.yml را در هر فایل باز کرده و پیوست کنید ، یا برای اضافه کردن هر دو دستور زیر را اجرا کنید:
⦁ $ echo ‘/helm/secrets.yml’ >> ./.dockerignore && echo ‘/helm/secrets.yml’ >> ./.gitignore

اکنون که فایل های پیکربندی Helm را برای برنامه خود و تصویر Docker ایجاد کرده اید ، می توانید این نمودار Helm را به عنوان یک نسخه جدید در خوشه Kubernetes خود نصب کنید. نمودار خود را از دیرکتوری اصلی برنامه خود نصب کنید:
⦁ $ helm install laravel-kubernetes -f helm/values.yml -f helm/secrets.yml stable/lamp

خروجی مانند این را مشاهده خواهید کرد:
Output
NAME: laravel-kubernetes
LAST DEPLOYED: Mon May 18 13:21:20 2020
NAMESPACE: default
STATUS: deployed
REVISION: 1

برنامه شما یک یا دو دقیقه طول می کشد تا در دسترس قرار گیرد ، اما می توانید این دستور را برای نظارت بر خدمات Kubernetes در خوشه خود اجرا کنید:
⦁ $ kubectl get services -w

به دنبال نام برنامه خود باشید:
Output
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)
laravel-kubernetes-lamp LoadBalancer your_cluster_ip your_external_ip 80:32175/TCP,3306:32243/TCP

هنگامی که سرویس جدید laravel-kubernetes-lamp شما آدرس IP را تحت EXTERNAL-IP نمایش می دهد ، می توانید برای دیدن برنامه در خوشه Kubernetes خود ، به your_external_ip مراجعه کنید. برنامه شما به بانک اطلاعاتی شما متصل می شود ، مانند آنچه هنگام اجرای برنامه به صورت محلی روی Docker Compose انجام دادید ، نام بانک اطلاعاتی را در زیر آرم Laravel مشاهده خواهید کرد.

اجرای یک برنامه وب در آدرس IP نا ایمن ممکن است برای اثبات مفهوم مناسب باشد ، اما وب سایت شما بدون گواهی SSL و نام دامنه سفارشی آماده تولید نیست. قبل از انجام تنظیمات در مرحله بعدی ، نسخه خود را از طریق خط فرمان uninstall کنید:
⦁ $ helm delete laravel-kubernetes

در مرحله بعد ، اولین پیکربندی Helm را بسط میدهید تا یک کنترلر Ingress ، گواهی SSL و دامنه سفارشی را به برنامه Laravel خود اضافه کنید.
مرحله 5 – اضافه کردن کنترلرIngress و SSL به خوشه Kubernetes
در Kubernetes ، کنترلرIngress مسئول ارائه خدمات برنامه شما در اینترنت است. در مرحله قبل ، نمودار LAMP Helm یک لود بالانسر vpsgol ایجاد کرد و برنامه شما را مستقیماً از طریق آدرس IP لود بالانسر به نمایش میگذارد.
می توانید SSL و نام دامنه خود را مستقیماً روی لود بالانسر محدود کنید ، اما از آنجا که در Kubernetes کار می کنید ، ممکن است مدیریت همه آن ها در یک مکان راحت تر باشد. برای اطلاعات بیشتر در مورد کنترلرهای Ingress و جزئیات بیشتر در مورد مراحل زیر ، نحوه تنظیم یک Nginx Ingress در vpsgol Kubernetes با استفاده از Helm را بخوانید.
نمودار LAMP Helm شامل گزینه ای برای تنظیم پشتیبانی از Ingress است. فایل helm/values.yml خود را باز کنید:
⦁ $ nano ./helm/values.yml

خطوط زیر را اضافه کنید:
./helm/values.yml

# Use Ingress Controller
service:
type: ClusterIP
HTTPPort: 80
ingress:
enabled: true
domain: your_domain

این امر باعث میشود استقرار شما لود بالانسر را نصب نکند و در عوض برنامه را در پورت 80 خوشه Kubernetes ارائه دهد که کنترلرIngress آن را در اینترنت قرار دهد. values.yml را ذخیره کرده و ببندید.
اکنون دستور helm install را که قبلاً اجرا کرده اید ، اجرا کنید تا دوباره برنامه Laravel خود را راه اندازی نمایید. حتماً این دستور را از دیرکتوری روت برنامه خود اجرا کنید:
⦁ $ helm install laravel-kubernetes -f helm/values.yml -f helm/secrets.yml stable/lamp

سپس ، کنترلر nginx-ingress را روی خوشه Kubernetes خود با استفاده از کنترلرNginx Ingress تحت کنترل Kubernetes نصب کنید:
⦁ $ helm install nginx-ingress stable/nginx-ingress –set controller.publishService.enabled=true

پس از نصب ، خروجی مانند این را مشاهده خواهید کرد:
Output
NAME: nginx-ingress
LAST DEPLOYED: Mon May 18 13:28:34 2020
NAMESPACE: default
STATUS: deployed
REVISION: 1

برای به نمایش گذاشتن استقرار برنامه Laravel به یک منبع Ingress نیز نیاز دارید. یک فایل جدید در دیرکتوری اصلی برنامه خود با نام ingress.yml ایجاد کنید:
⦁ $ nano ./ingress.yml

این فایل، هاست برنامه ، یعنی مدیر گواهینامه SSL و خدمات backend و نام پورت شما را تعریف می کند. تنظیمات زیر را اضافه کنید ، و your_domain را با دامنه مورد نظر خود جایگزین کنید:
./ingress.yml
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: laravel-kubernetes-ingress
annotations:
kubernetes.io/ingress.class: nginx
cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
tls:
– hosts:
– your_domain
secretName: laravel-kubernetes-tls
rules:
– host: your_domain
http:
paths:
– backend:
serviceName: laravel-kubernetes-lamp
servicePort: 80

فایل را ذخیره کنید و ببندید.
در مرحله بعد ، باید Cert-Manager را نصب کنید و یک صادرکننده ایجاد کنید که به شما امکان می دهد با استفاده از Let’s Encrypt ، گواهی های تولید SSL تولید کنید.Cert-Manager به تعاریف منابع سفارشی نیاز دارد که می توانید با استفاده از خط فرمان از مخزن Cert-Manager استفاده کنید:
⦁ $ kubectl apply –validate=false -f https://github.com/jetstack/cert-manager/releases/download/v0.15.0/cert-manager.crds.yaml

تعدادی از منابع Kubernetes را ایجاد می کند که در خط فرمان نمایش داده می شوند:
Output
customresourcedefinition.apiextensions.k8s.io/certificaterequests.cert-manager.io created
customresourcedefinition.apiextensions.k8s.io/certificates.cert-manager.io created
customresourcedefinition.apiextensions.k8s.io/challenges.acme.cert-manager.io created
customresourcedefinition.apiextensions.k8s.io/clusterissuers.cert-manager.io created
customresourcedefinition.apiextensions.k8s.io/issuers.cert-manager.io created
customresourcedefinition.apiextensions.k8s.io/orders.acme.cert-manager.io create

Cert-Manager همچنین برای جداسازی آن در خوشه Kubernetes به یک فضای نام نیاز دارد:
⦁ $ kubectl create namespace cert-manager

این خروجی را مشاهده خواهید کرد:
Output
namespace/cert-manager created

از آنجا که cert منیجر Jetstack یکی از نمودارهای حفظ شده Kubernetes نیست ، شما باید مخزن Jetstack Helm را نیز اضافه کنید. دستور زیر را اجرا کنید تا در Helm در دسترس باشد:
$ helm repo add jetstack https://charts.jetstack.io

افزودن موفقیت آمیز خروجی زیر را به همراه خواهد داشت:
Output
“jetstack” has been added to your repositories

اکنون آماده هستید تا Cert-Manager را در فضای نام cert منیجر در خوشه Kubernetes خود نصب کنید:
$ helm install cert-manager –version v0.15.0 –namespace cert-manager jetstack/cert-manager

پس از اتمام ، خلاصه ای از استقرار مانند این را مشاهده خواهید کرد:
Output
NAME: cert-manager
LAST DEPLOYED: Mon May 18 13:32:08 2020
NAMESPACE: cert-manager
STATUS: deployed
REVISION: 1

آخرین فایلی که باید به دیرکتوری اصلی برنامه Laravel اضافه کنید ، یک فایل پیکربندی production_issuer.yml Kubernetes است. فایل را ایجاد کنید:
$ nano ./production_issuer.yml
اکنون موارد زیر را اضافه کنید:
apiVersion: cert-manager.io/v1alpha2
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
spec:
acme:
# Email address used for ACME registration
email: your_email_address
server: https://acme-v02.api.letsencrypt.org/directory
privateKeySecretRef:
# Name of a secret used to store the ACME account private key
name: letsencrypt-prod-private-key
# Add a single challenge solver, HTTP01 using nginx
solvers:
– http01:
ingress:
class: nginx

فایل را ذخیره کنید و ببندید.
Let’s Encrypt، هشدارهای مهم و هشدارهای مربوط به انقضا را به your_email_address ارسال میکند ، بنابراین حتماً آدرسی را که مرتباً بررسی میکنید ، اضافه نمایید. این فایل را ذخیره کنید و یک منبع جدید هم برای منبع Ingress و هم برای صادرکننده تولید در خوشه Kubernetes خود ایجاد کنید:
⦁ $ kubectl create -f ingress.yml

⦁ $ kubectl create -f production_issuer.yml

در آخر ، رکوردهای DNS نام دامنه خود را به روز کنید تا یک رکورد به آدرس IP لود بالانسر شما نشان داده شود. برای یافتن آدرس IP برای کنترلرIngress خود این دستور را وارد کنید:
⦁ $ kubectl get service nginx-ingress-controller

Output
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-ingress-controller LoadBalancer your_cluster_ip your_external_ip

از آدرس your_external_ip به عنوان آدرس IP برای رکورد DNS A خود استفاده کنید. روند به روزرسانی رکوردهای DNS شما بسته به مکانی که شما نام دامنه و هاست DNS خود را مدیریت می کنید ، متفاوت است.
هنگامی که رکوردهای DNS شما به روزرسانی شد و گواهینامه SSL شما تولید گردید ، برنامه شما در your_domain موجود است و SSL فعال خواهد شد.

در حالی که برنامه PHP و بانک اطلاعاتی شما اکنون به هم متصل هستند ، همچنان نیاز به رفتن به پایگاه داده دارید. در مرحله آخر ، نحوه اجرای فرامین Artisan را در غلاف Kubernetes خود مشاهده خواهید کرد تا جابه جایی به پایگاه داده و سایر کارهای تعمیر و نگهداری معمول را انجام دهید.

مرحله 6 – اجرای دستورات از راه دور
در حالی که برنامه Laravel شما در حال اجراست و به پایگاه داده MySQL در Kubernetes متصل شده است ، چندین عملیات معمول وجود دارد که باید آنها را با نصب جدید Laravel اجرا کنید. یکی از کارهای متداولی که باید انجام دهید ، انتقال پایگاه داده است.
قبل از اینکه بتوانید یک دستور Artisan را در برنامه Laravel خود اجرا کنید ، باید نام غلاف را اجرا کنید که کانتینر برنامه Laravel شماست. با استفاده از خط فرمان ، می توانید تمام غلاف ها را در خوشه Kubernetes خود مشاهده کنید:
$ kubectl get pods

خروجی مانند این را مشاهده خواهید کرد:
Output
NAME READY STATUS RESTARTS AGE
laravel-kubernetes-lamp-77fb989b46-wczgb 2/2 Running 0 16m

غلاف را برای استقرار laravel-kubernetes-lamp-… انتخاب کنید. حتماً از نام موجود در خروجی خود استفاده کنید و از نام ذکر شده در بالا استفاده نکنید. اکنون می توانید kubectl exec را روی آن اجرا کنید. به عنوان مثال ، با استفاده از دستور artisan migrate ، یک جابه جایی بانک اطلاعاتی را اجرا کنید. شما پرچم –force را اضافه می کنید زیرا در حال تولید غلاف هستید:
$ kubectl exec laravel-kubernetes-lamp-77fb989b46-wczgb — php artisan migrate –force

این دستور یک خروجی تولید می کند:
Output
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_000000_create_users_table (0.16 seconds)
Migrating: 2019_08_19_000000_create_failed_jobs_table
Migrated: 2019_08_19_000000_create_failed_jobs_table (0.05 seconds)

شما اکنون با موفقیت Laravel 7 و MySQL را به Kubernetes مستقر کرده اید و یک کار اساسی برای نگهداری پایگاه داده را انجام داده اید.

نتیجه
در این آموزش ، یاد گرفتید که چگونه یک برنامه کاربردی Laravel PHP را کانتینرایز کنید ، آن را به یک پایگاه داده MySQL متصل کنید ، یک تصویر داکر حاوی کد خود را به Docker Hub وارد کنید ، و سپس از یک نمودار Helm برای استقرار آن تصویر در یک خوشه vpsgol Kubernetes استفاده کنید. در آخر ، SSL و یک نام دامنه سفارشی اضافه کردید و یاد گرفتید که چگونه ابزارهای خط فرمان را روی غلافهای در حال اجرای خود راه اندازی کنید.
Kubernetes و Helm مزایای بسیاری نسبت به هاستینگ معمول LAMP Stack را ارائه می دهند: مقیاس پذیری ، امکان تعویض سرویس ها بدون ورود مستقیم به سرور ، ابزارهایی برای انجام به روزرسانی ها و کنترل روی محیط هاست. به عبارتی ، پیچیدگی کانتینرایز اولیه و پیکربندی برنامه شما مانع شروع کار سریع می شود. با استفاده از این راهنما به عنوان نقطه شروع ، استقرار Laravel به Kubernetes قابل دستیابی تر می شود. از این به بعد میتوانید درباره قدرت لاراول یا اضافه کردن ابزارهای نظارتی به Kubernetes مانند Linkerd ، که می توانید بصورت دستی با راهنمای ما یا با vpsgol 1-Click نصب کنید ، اطلاعاتی دریافت کنید.

 

برچسب‌ها:

تعداد صفحات : 12

اطلاعات کاربری
  • فراموشی رمز عبور؟
  • آرشیو
    آمار سایت
  • کل مطالب : 116
  • کل نظرات : 0
  • افراد آنلاین : 2
  • تعداد اعضا : 0
  • آی پی امروز : 25
  • آی پی دیروز : 23
  • بازدید امروز : 51
  • باردید دیروز : 29
  • گوگل امروز : 0
  • گوگل دیروز : 0
  • بازدید هفته : 102
  • بازدید ماه : 183
  • بازدید سال : 2,441
  • بازدید کلی : 7,140