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

نمونه Redis مدیریت شده می تواند مزایایی مانند دسترسی بالا و به روزرسانی های خودکار را ارائه دهد. با این حال ، هر زمان که با یک سرور مجازی پایگاه داده از راه دور ارتباط برقرار کنید ، خطر حمله گران برای جاسوسی اطلاعات حساس ارسال شده به آن را به همراه دارد.
redis-cli ، رابط خط فرمان Redis ، به طور مستقیم از TLS ، یعنی پروتکل رمزنگاری که امکان برقراری ارتباط امن از طریق شبکه را فراهم می کند، پشتیبانی نمی کند. این بدان معنی است که بدون پیکربندی بیشتر ، redis-cli راهی مطمئن برای اتصال به یک سرور مجازی Redis از راه دور نیست. یکی از راه های برقراری ارتباط امن با نمونه Redis ایجاد شده ، ایجاد تونلی است که از پروتکل TLS استفاده می کند.
Stunnel یک پروکسی منبع باز است که برای ایجاد تونل های ایمن استفاده می شود و به شما امکان می دهد تا با ماشین های دیگر از طریق TLS ارتباط برقرار کنید. در این راهنما ، ما نصب و پیکربندی Stunnel را نشان میدهیم تا بتوانید با redis-cli به نمونه Redisمدیریت شده با Redis متصل شوید.
پیش نیازها
برای تکمیل این راهنما ، به موارد زیر نیاز دارید:
• دسترسی به سرور مجازی اوبونتو 18.04. این سرور مجازی باید دارای کاربر غیر ریشه و امتیازات ادمین و فایروال تنظیم شده با ufw باشد. برای انجام این کار ، راهنمای راه اندازی سرور مجازی اولیه ما برای اوبونتو 18.04 را دنبال کنید.
• یک نمونه پایگاه داده Redis مدیریت شده: مراحل ذکر شده در این آموزش به طور کلی برای بانکهای اطلاعاتی مدیریت شده از هر ارائه دهنده ابری کار میکنند.
مرحله 1 – نصب Stunnel و redis-cli
هنگامی که سرور مجازی Redis را نصب می کنید ، معمولاً با redis-cli همراه است. با این وجود ، می توانید با نصب بسته redis-tools از مخازن پیش فرض اوبونتو ، redis-cli را بدون سرور مجازی Redis نصب کنید. همچنین می توانید با دانلود بسته stunnel4 ، stunnel را از مخازن پیش فرض اوبونتو نصب کنید.
اگر اخیراً این کار را نکرده اید ، دیرکتوری بسته سرور مجازی خود را به روز کنید:
$ sudo apt update

سپس بسته های redis-tools و stunnel4 را با APT نصب کنید:
$ sudo apt install redis-tools stunnel4

هنگامی که از شما درخواست شد ، تأیید کنید که می خواهید بسته ها را نصب کنید.
با اجرای دستور زیر می توانید بررسی کنید که آیا stunnel به صورت صحیح نصب شده است یا خیر:
$ sudo systemctl status stunnel4

Output
● stunnel4.service – LSB: Start or stop stunnel 4.x (TLS tunnel for network daemons)
Loaded: loaded (/etc/init.d/stunnel4; generated)
Active: active (exited) since Thu 2019-09-12 14:34:05 UTC; 8s ago
Docs: man:systemd-sysv-generator(8)
Tasks: 0 (limit: 2362)
CGroup: /system.slice/stunnel4.service

Sep 12 14:34:05 stunnel systemd[1]: Starting LSB: Start or stop stunnel 4.x (TLS tunnel for network daemons)…
Sep 12 14:34:05 stunnel stunnel4[2034]: TLS tunnels disabled, see /etc/default/stunnel4
Sep 12 14:34:05 stunnel systemd[1]: Started LSB: Start or stop stunnel 4.x (TLS tunn

در اینجا ، می بینید که سرویس stunnel فعال است ، اگرچه این روند بلافاصله خارج می شود. این به ما می گوید که stunnel در حال اجراست ، اما از آنجایی که ما هنوز پیکربندی نکرده ایم ، قادر به انجام عملی نیستیم.
مرحله 2 – پیکربندی Stunnel
سیستم های مدرن لینوکس برای تنظیم اولیه و مدیریت خدمات و دیمن ها به سیستم متکی هستند. با این حال ، stunnel برای راه اندازی از اسکریپت مبتنی بر سبک SysV که مبتنی بر سیستم قدیمی UNIX System V init است ، استفاده می کند. برای فعال کردن این اسکریپت اولیه باید فایل / etc / default / stunnel4 را تغییر دهید.
این فایل را با ویرایشگر متن مورد نظر خود باز کنید. در اینجا ، ما از nano استفاده خواهیم کرد:
$ sudo nano /etc/default/stunnel4

گزینه ENABLED را در بالای فایل پیدا کنید. به طور پیش فرض روی 0 تنظیم می شود ، اما ان را به 1 تغییر می دهد تا بتواند در بوت شروع به کار کند:
/etc/default/stunnel4
# /etc/default/stunnel
# Julien LEMOINE <speedblue@debian.org>
# September 2003

# Change to one to enable stunnel automatic startup
ENABLED=1
. . .

فایل را ذخیره کنید و ببندید. اگر از nano برای ویرایش فایل استفاده کرده اید ، این کار را با فشار دادن CTRL + X ، ، سپس Y انجام دهید.
در مرحله بعد ، نیاز به ایجاد یک فایل پیکربندی برای stunnel دارید که به برنامه می گوید کجا به مسیریابی ترافیک نیاز دارد.
فایل جدیدی به نام stunnel.conf را تحت دیرکتوری / etc / stunnel باز کنید:
$ sudo nano /etc/stunnel/stunnel.conf

محتوای زیر را به این فایل اضافه کنید:
/etc/stunnel/stunnel.conf
fips = no
setuid = nobody
setgid = nogroup
pid = /home/sammy/pids/stunnel.pid
debug = 7
delay = yes
[redis-cli]
client = yes
accept = 127.0.0.1:8000
connect = managed_redis_hostname_or_ip:managed_redis_port

پنج خط اول در فایل گزینه های جهانی هستند ، به این معنی که آنها برای هر سرویسی که در این فایل گنجانده اید اعمال خواهد شد:
fips: حالت FIPS 140-2 را برای stunnel فعال یا غیرفعال می کند. در این حالت ، stunnel تأیید می کند که اتصال مطابق با استاندارد پردازش اطلاعات فدرال است. تنظیم آن روی no این ویژگی را غیرفعال می کند. توجه داشته باشید که غیرفعال کردن این امر امنیت کمتری ندارد ، اما فعال کردن آن (به صورت پیش فرض) به پیکربندی بیشتری نیاز دارد.
setuid: شناسه کاربر یونیکس را که تحت آن stunnel اجرا می شود تعریف میکند. به طور پیش فرض ، روند stunnel متعلق به کاربر root است. با این حال ، مستندات stunnel توصیه می کنند که پس از شروع stunnel ، امتیازات ادمین را رها کنید ، زیرا عدم انجام این کار خطر امنیتی را ایجاد می کند. تنظیم پارامتر setuid  بر روی nobody  باعث می شود که هیچ کاربر غیرمجازی پس از شروع به کار stunnel ، روند آن را به تصرف خود نیاورد.
setgid: شناسه گروه یونیکس را تعریف می کند که stunnel تحت آن اجرا می شود. مانند تنظیمات setuid ، این پیکربندی گروهی را بدون هیچ گونه امتیاز ویژه – nogroup  – مشخص می کند تا از مشکلات امنیتی احتمالی جلوگیری کند.
pid: موقعیت فایل را تعریف می کند که در آن stunnel یک فایل .pid ایجاد کند ، نوعی فایل که حاوی PID فرآیند است. فایلهای pid معمولاً توسط برنامه های دیگر برای یافتن PID یک فرایند در حال اجرا استفاده می شوند. به طور پیش فرض ، stunnel یک فایل .pid را در دیرکتوری / var / run / stunnel4 / ایجاد می کند ، اما به دلیل اینکه هیچ کاربری اجازه دسترسی به آن دیرکتوری را ندارد ، از شروع صحیح stunnel جلوگیری می کند. در عوض ، این خط فایلی به نام stunnel.pid را که در پوشه ای به نام pids در دیرکتوری هوم کاربر Ubuntu نگهداری می شود ، مشخص می کند. ما در ادامه این دیرکتوری و فایل stunnel.pid را ایجاد خواهیم کرد. همینطور که این خط را اضافه می کنید ، حتماً sammy را به نام کاربر سیستم Ubuntu خود تغییر دهید.
debug: سطح اشکال زدایی stunnel را تنظیم می کند ، که می تواند از 0 تا 7 باشد. در این مثال ما آن را به 7 ، بالاترین سطح در دسترس قرار می دهیم ، زیرا در صورت بروز هرگونه مشکل ، دقیق ترین اطلاعات را ارائه می دهد. می توانید آن را در هر سطحی که دوست دارید تنظیم کنید ، اما توجه داشته باشید که تنظیم پیش فرض 5 است.
delay: هنگامی که روی بله تنظیم میشود ، این گزینه باعث می شود تا stunnel جستجوی DNS برای آدرس ذکر شده در گزینه اتصال را به تأخیر بیندازد. همچنین از عدم دسترسی آدرس IP جلوگیری می کند. این کار باعث می شود که حتی اگر نمونه Redis آفلاین باشد، همانطور که می تواند هنگام افزایش اندازه خوشه شما اتفاق بیفتد، تونل را باز نگه دارد.
خطوط باقیمانده گزینه هایی در سطح سرویس ها هستند و فقط برای تونلی که ما برای redis-cli ایجاد خواهیم کرد اعمال می شود:
[redis-cli] : یک نام سرویس است و مشخص می کند که خطوط زیر یک پیکربندی سرویس فردی برای یک برنامه کلاینت را نشان می دهد. شما می توانید بیش از یک سرویس را در یک فایل پیکربندی stunnel داشته باشید ، هر چند که باید با یک برنامه کلاینت موجود همراه باشد و نمی توانید دو سرویس برای یک برنامه مشابه داشته باشید.
Client: تنظیم این گزینه روی بله به stunnel می گوید که در حالت کلاینت اجرا شود ، به این معنی که stunnel به جای اینکه به عنوان یک سرور مجازی TLS عمل کند ، به یک سرور مجازی TLS (نمونه Redis مدیریت شده) وصل می شود.
accept: میزبان و پورت را که تونل در آن از کلاینت پشتیبانی می کند ، تعریف می کند. در اینجا ، ما آدرس IP 127.0.0.1 را مشخص می كنیم ، كه یك آدرس IPv4 loopback است كه برای نمایش localhost و پورت 8000 استفاده می شود. این بدان معناست كه stunnel اتصالات منشاء گرفته از سرور مجازی اوبونتو را در پورت 8000 گوش می دهد و آنها را رمزگذاری می كند. توجه داشته باشید که می توانید پورت را روی هر شماره پورتی که که از قبل استفاده نشده تنظیم کنید.
connect: آدرس و پورت راه دور را که stunnel به آن متصل میشود را تعیین می کند. حتماً این پارامتر را تغییر دهید تا با پورت و نام میزبان یا آدرس IP پایگاه داده مدیریت شده مطابقت داشته باشید.
توجه: نام میزبان یا آدرس IP و پورتی که باید در بخشنامه اتصال مشخص کنید مربوط به بانک اطلاعاتی Redis شما می باشد. این موارد معمولاً در رابط کاربری مدیریت پایگاه داده ارائه دهنده ابری شما وجود دارد که نمونه Redis خود را تهیه کرده اید.
این پیکربندی نسبتاً جزیی است که بسیاری از تنظیمات پیش فرض stunnel را کنار می گذارد. این برنامه برای ایجاد تونل هایی متناسب با نیازهای خاص شما گزینه های بسیاری در اختیار شما قرار داده است. برای اطلاعات بیشتر به اسناد رسمی مراجعه کنید.
پس از افزودن این محتوا ، فایل را ذخیره کنید و ببندید.
سپس ، مطمئن شوید که شما در دیرکتوری اصلی کاربر اوبونتو هستید:
$ cd

در مرحله بعد پوشه pids را که فایل stunnel.pid را نگه می دارد ایجاد کنید:
$ mkdir pids

فرآیند stunnel فایل stunnel.pid را بطور خودکار ایجاد می کند ، بنابراین نیازی نیست خودتان این فایل را ایجاد کنید. با این حال ، نیاز به تغییر مالکیت دایرکتوری pids در گروه کاربر و گروه های جدید دارید:
$ sudo chown -R nobody:nogroup pids/

سپس سرویس stunnel4 را مجدداً راه اندازی کنید تا stunnel فایل پیکربندی جدید را بخواند:
$ sudo systemctl restart stunnel4

پس از آن ، می توانید آزمایش کنید که آیا stunnel با استفاده از netstat ، ابزار خط فرمان که برای نمایش اتصالات شبکه استفاده می شود ، با موفقیت یک تونل ایجاد کرده است. دستور زیر را اجرا کنید ، که خروجی netstat را به یک دستور grep پایپ می کند ، که به نوبه خود آن را برای هر نمونه از stunnel جستجو می کند:
$ sudo netstat -plunt | grep stunnel

Output
tcp 0 0 127.0.0.1:8000 0.0.0.0:* LISTEN 17868/
این خروجی نشان می دهد که stunnel در حال گوش دادن به اتصالات در پورت محلی 8000 است.
همچنین می توانید تأیید کنید که هیچ کس مالکیت فرآیند stunnel را با ps ، یعنی برنامه ای که تمام فرآیندهای در حال اجرا را نشان می دهد، در دست نگرفته است:
$ ps aux | grep stunnel

Output
nobody 15674 0.0 0.1 121912 3180 ? Ssl 19:28 0:00 /usr/bin/stunnel4 /etc/stunnel/stunnel.conf
. . .

در اینجا ، می بینید که هیچ کس واقعاً روند stunnel را به دست نگرفته است.
اکنون Stunnel کاملاً پیکربندی شده است و روی سیستم شما کار می کند. اکنون آماده اتصال به نمونه Redis مدیریت شده و تست کارکرد تونل هستید.
مرحله 3 – اتصال به بانک اطلاعاتی مدیریت شده از طریق TLS
اکنون که redis-cli را بر روی سرور مجازی خود نصب و stunnel را پیکربندی کرده اید، آماده هستید تا از طریق TLS به بانک اطلاعاتی مدیریت شده خود وصل شوید.
بر اساس تنظیمات تعریف شده در فایل پیکربندی ایجاد شده در مرحله 2 ، با دستور زیر به پایگاه داده مدیریت شده خود وصل می شوید:
$ redis-cli -h localhost -p 8000

این دستور شامل پرچم -h است که به redis-cli می گوید که آرگومان بعدی میزبان اتصال به آن خواهد بود. در این حالت ، از آنجا که ما به یک تونلی که به صورت محلی روی سرور مجازی ایجاد شده است متصل میشویم، localhost  خواهد بود. پس از آن پرچم -p است که بر پورت تونل محلی که به آن متصل می شویم ، پیشی میگیرد که در این حالت پورت 8000 است.
پس از اجرای آن فرمان ، به سرور مجازی مدیریت شده Redis خود متصل خواهید شد. اعلان شما تغییر خواهد کرد تا منعکس کننده اتصال و در حالت تعاملی redis-cli شما باشد:
Localhost:8000>
توجه: اغلب اوقات ، پایگاه داده های مدیریت شده پیکربندی می شوند تا کاربران را هنگام اتصال با رمز عبوری که وارد میکنند احراز هویت کنند. اگر نمونه Redis مدیریت شده شما نیاز به رمزعبور دارد ، می توانید پرچم -a را در فرمان redis-cli خود وارد کنید ، و پس از آن رمز عبور خود را دنبال کنید:
$ redis-cli -h localhost -p 8000 -a password

از طرف دیگر ، می توانید با اجرای دستور auth و پسورد خود پس از برقراری اتصال ، تأیید اعتبار کنید:
Localhost:8000> auth password

با اجرای دستور ping از حالت تعاملی Redis می توانید آزمایش کنید که آیا تونل کار می کند:
Localhost:8000> ping

اگر اتصال زنده باشد ، PONG را برمی گرداند:
Output
PONG

اگر با این حال ، stunnel به درستی ترافیک را از سرور مجازی شما به نمونه Redis شما تونل نکند ، ممکن است قبل از جدا شدن از Redis ، پیغام خطایی مانند این را مشاهده کنید:
Output
Error: Server closed the connection

اگر این یا یک خطای مشابه را دریافت کرده اید ، دوباره بررسی کنید که نام میزبان و پورت Redis را به درستی در فایل stunnel.conf خود وارد کرده اید. به همین ترتیب ، مطمئن باشید که شماره فرمان صحیح را در دستور redis-cli خود وارد کرده اید.
همچنین می توانید هنگامی که نمونه Redis مدیریت شده اتصالات باز خود را بازنشانی می کند ، این خطا را دریافت کنید ، همانطور که می تواند هنگام پیکربندی تنظیمات خوشه اتفاق بیفتد. در چنین مواردی ، ممکن است از Redis جدا نشوید ، اگرچه لازم است مجدداً تأیید اعتبار کنید.
پس از تأیید کار تونل ، پیش بروید و از نمونه Redis خود جدا شوید:
Localhost:8000> exit

اگر پیکربندی stunnel را تغییر دهید ، باید سرویس stunnel4 را بار دیگر بارگذاری یا ریستارت کنید ، تا stunnel متوجه تغییرات شود:
$ sudo systemctl reload stunnel4

اگر در هر زمانی در آینده می خواهید تونل TLS را ببندید ، می توانید با systemctl نیز این کار را انجام دهید:
$ sudo systemctl stop stunnel4

بعد از اینکه بنز تونل بسته شد ، می توانید با شروع دوباره سرویس ، تونل را مجدداً باز کنید:
$ sudo systemctl start stunnel4

اکنون که پیکربندی خود را با موفقیت انجام داده اید ، شروع به اضافه کردن داده ها به نمونه Redis مدیریت شده با Redis-cli میکنید.
نتیجه
Stunnel ابزاری مفید برای ایجاد تونل های TLS و برقراری اتصالات ایمن به سرور مجازی های از راه دور است. این امر به ویژه در مواردی که انتقال ایمن اطلاعات بین ماشین ها بسیار مهم است ، مانند پایگاه داده از راه دور، بسیار مفید خواهد بود.
از اینجا ، می توانید کاوش در Redis و ادغام آن با برنامه بعدی خود را شروع کنید. اگر به تازگی کار با Redis را شروع کرده اید ، ممکن است مجموعه مقالات ما را در مورد چگونگی مدیریت یک بانک اطلاعاتی Redis برایتان مفید باشد.

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

behnam gol mohamadi بازدید : 18 پنجشنبه 30 مرداد 1399 نظرات (0)

Cloudflare سرویسی است که بین بازدید کننده و سرور مجازی مالک وب سایت قرار دارد و به عنوان یک پروکسی معکوس برای وب سایت ها عمل می کند. Cloudflare یک شبکه انتقال محتوا (CDN) ، و همچنین خدمات سرور مجازی کاهش نام دامنه توزیع شده DDoS را فراهم می کند.
Nginx یک سرور مجازی وب مشهور است که مسئول میزبانی برخی از بزرگترین و پر ترافیک ترین سایتهای اینترنت است. معمولا سازمانها وب سایتها را با Nginx ارائه کرده و از Cloudflare به عنوان ارائه دهنده CDN و DNS استفاده می کنند.
در این آموزش ، وب سایت خود را که توسط Nginx با گواهی Origin CA از Cloudflare ارائه میشود ایمن میکنید و سپس Nginx را برای استفاده از درخواستهای معتبر پیکربندی میکنید. مزایای استفاده از این ستاپ این است که شما از CDN Cloudflare و وضوح سریع DNS بهره می برید و در عین حال اطمینان حاصل می کنید که همه اتصالات از Cloudflare عبور می کنند. این مانع از رسیدن هرگونه درخواست مخرب به سرور مجازی شما می شود.
پیش نیازها
برای تکمیل این آموزش به موارد زیر نیاز دارید:
⦁ یک سرور مجازی Ubuntu 20.04 با پیروی از راهنمای ستاپ اولیه سرور مجازی Ubuntu 20.04 ، از جمله یک کاربر sudo غیر ریشه و فایروال راه اندازی شده.
⦁ Nginx بر روی سرور مجازی شما نصب شده باشد. می توانید راهنمای ما در مورد نحوه نصب Nginx را در اوبنتو 20.04 دنبال کنید.
⦁ یک حساب Cloudflare
⦁ یک دامنه ثبت شده به حساب Cloudflare شما اضافه شده باشد که به سرور مجازی Nginx شما اشاره کند. راهنمای ما در مورد چگونگی کاهش حملات DDoS علیه وب سایت خود با Cloudflare می تواند در انجام این کار به شما کمک کند. مقدمه ما در مورد اصطلاحات DNS ، مؤلفه ها و مفاهیم نیز می تواند مفید باشد.
⦁ سرور مجازی Nginx Block برای دامنه شما پیکربندی شده باشد ، که می توانید با دنبال کردن مرحله 5 نحوه نصب Nginx در اوبونتو 20.04 ، آن را انجام دهید.
مرحله 1 – تولید گواهی Origin CA TLS
Cloudflare Origin CA به شما امکان می دهد تا یک گواهی TLS رایگان امضا شده توسط Cloudflare برای نصب بر روی سرور مجازی Nginx خود تولید کنید. با استفاده از گواهی TLS تولید شده Cloudflare می توانید ارتباط بین سرور مجازیهای Cloudflare و سرور مجازی Nginx خود را تضمین کنید.
برای تولید گواهی نامه با Origin CA ، در یک مرورگر وب به حساب Cloudflare خود وارد شوید. دامنه مورد نظر برای تأمین امنیت را انتخاب کرده و به بخش SSL / TLS داشبورد Cloudflare خود بروید. از آنجا به تب Origin Server بروید و بر روی دکمه Create Certificate کلیک کنید:

گزینه پیش فرض Let Cloudflare generate a private key and a CSR را انتخاب کنید.

بر روی Next کلیک کنید و گفتگویی با Origin Certificate و Private key را مشاهده خواهید کرد. شما باید گواهی مبدا و کلید خصوصی را از Cloudflare به سرور مجازی خود منتقل کنید. به دلایل امنیتی ، اطلاعات Private Key مجدداً نمایش داده نمی شود ، بنابراین قبل از کلیک بر روی Ok ، کلید سرور مجازی خود را کپی کنید.

شما از دیرکتوری / etc / ssl در سرور مجازی برای نگه داشتن گواهی مبدا و فایل های کلید خصوصی استفاده خواهید کرد. این پوشه در حال حاضر در سرور مجازی وجود دارد.
ابتدا محتویات Certificate Origin نمایش داده شده در کادر گفتگو در مرورگر خود را کپی کنید.
سپس ، در سرور مجازی خود ، /etc/ssl/cert.pem را در ویرایشگر متن مورد نظر خود باز کنید:
⦁ $ sudo nano /etc/ssl/cert.pem

محتوای گواهی را در فایل اضافه کنید. سپس ذخیره کنید و از ویرایشگر خارج شوید.
سپس به مرورگر خود بازگردید و محتویات کلید خصوصی را کپی کنید. فایل /etc/ssl/key.pem را برای ویرایش باز کنید:
⦁ $ sudo nano /etc/ssl/key.pem

کلید خصوصی را درون فایل قرار دهید ، فایل را ذخیره کنید و از ویرایشگر خارج شوید.
توجه: گاهی اوقات ، هنگامی که گواهی و کلید را از داشبورد Cloudflare کپی می کنید و آن را در فایل های مربوطه روی سرور مجازی پیست میکنید ، خطوط خالی درج می شود. Nginx چنین گواهینامه ها و کلیدها را نامعتبر میداند ، بنابراین اطمینان حاصل کنید که هیچ خط خالی در فایل های شما وجود نداشته باشد.

هشدار: گواهی Origin CA Cloudflare فقط به Cloudflare اعتماد میکند و بنابراین فقط باید توسط سرور مجازی های مبدأ استفاده شود که به طور فعال به Cloudflare متصل هستند. اگر در هر لحظه Cloudflare را متوقف یا غیرفعال کنید ، گواهی Origin CA شما خطای گواهی نامعتبر را به همراه خواهد داشت.

اکنون که فایلهای کلید و مجوز را در سرور مجازی خود کپی کرده اید ، برای استفاده از آنها باید پیکربندی Nginx را به روز کنید.
مرحله 2 – نصب گواهی Origin CA در Nginx
در بخش قبلی ، با استفاده از داشبورد Cloudflare یک گواهی مبدأ و کلید خصوصی ایجاد کرده و فایل ها را در سرور مجازی خود ذخیره کردید. اکنون پیکربندی Nginx را برای استفاده از گواهی مبدا و کلید خصوصی برای اطمینان از اتصال بین سرور مجازیهای Cloudflare و سرور مجازی خود ، پیکربندی Nginx را به روز خواهید کرد.
ابتدا مطمئن شوید UFW ترافیک HTTPS را امکان پذیر می کند. Nginx Full را فعال کنید ، که پورت 80 (HTTP) و پورت 443 (HTTPS) را باز می کند:
⦁ $ sudo ufw allow ‘Nginx Full’

اکنون UFW را مجدد لود کنید:
⦁ $ sudo ufw reload

در آخر ، بررسی کنید که قوانین جدید شما مجاز باشند یا UFW فعال باشد:
⦁ $ sudo ufw status

خروجی مانند این را مشاهده خواهید کرد:
Output
Status: active

To Action From
— —— —-
OpenSSH ALLOW Anywhere
Nginx Full ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx Full (v6) ALLOW Anywhere (v6)

اکنون آماده تنظیم بلوک سرور مجازی Nginx خود هستید. Nginx در حین نصب بلوک سرور مجازی پیش فرض ایجاد می کند. اگر هنوز وجود دارد ، آن را حذف کنید ، زیرا قبلاً یک بلوک سرور مجازی اختصاصی برای دامنه خود پیکربندی کرده اید:
⦁ $ sudo rm /etc/nginx/sites-enabled/default

سپس ، فایل پیکربندی Nginx را برای دامنه خود باز کنید:
⦁ $ sudo nano /etc/nginx/sites-available/your_domain

فایل باید به صورت زیر باشد:
/etc/nginx/sites-available/your_domain
server {
listen 80;
listen [::]:80;

root /var/www/your_domain/html;
index index.html index.htm index.nginx-debian.html;

server_name your_domain www.your_domain;

location / {
try_files $uri $uri/ =404;
}
}

برای تنظیم موارد زیر فایل پیکربندی Nginx را اصلاح می کنید:
• به پورت 80 گوش دهید و کلیه درخواست ها را برای استفاده از https تغییر دهید.
• به پورت443 گوش داده و از گواهی مبدا و کلید خصوصی اضافه شده در قسمت قبلی استفاده کنید.
فایل را تغییر دهید تا به شکل زیر باشد:
/etc/nginx/sites-available/your_domain
server {
listen 80;
listen [::]:80;
server_name your_domain www.your_domain;
return 302 https://$server_name$request_uri;
}

server {

# SSL configuration

listen 443 ssl http2;
listen [::]:443 ssl http2;
ssl_certificate /etc/ssl/cert.pem;
ssl_certificate_key /etc/ssl/key.pem;

server_name your_domain www.your_domain;

root /var/www/your_domain/html;
index index.html index.htm index.nginx-debian.html;

location / {
try_files $uri $uri/ =404;
}
}

فایل را ذخیره کرده و از ویرایشگر خارج شوید.
در مرحله بعد ، اطمینان حاصل کنید که هیچ خطای نحوی در هیچ یک از فایل های تنظیمات Nginx شما وجود ندارد:
⦁ $sudo nginx -t

اگر مشکلی پیدا نکردید ، Nginx را دوباره فعال کنید تا تغییرات خود را فعال کنید:
⦁ $ sudo systemctl restart nginx

حال به بخش SSL / TLS داشبورد Cloudflare بروید ، به تب Overview بروید و حالت رمزگذاری SSL / TLS را به حالت کامل (دقیق) تغییر دهید. این به Cloudflare اطلاع می دهد تا همیشه ارتباط بین Cloudflare و سرور مجازی Nginx منشاء شما را رمزگذاری کند.

اکنون به وب سایت خود در https: // your_domain مراجعه کنید تا صحت تنظیم آن را تأیید کنید. صفحه اصلی خود را مشاهده خواهید کرد و مرورگر گزارش می دهد که سایت امن است.
در قسمت بعد ، شما Authenticated Origin Pulls را تأیید می کنید که سرور مجازی مبدا شما در واقع با Cloudflare ارتباط برقرار می کند و نه برخی دیگر از سرور مجازی ها. با این کار ، Nginx پیکربندی می شود که تنها درخواست هایی را که از گواهی کلاینت معتبر از Cloudflare استفاده می کنند ، بپذیرد. کلیه درخواستهایی که از Cloudflare عبور نکرده اند رد می شوند.
مرحله 3 – تنظیم Authenticated Origin Pulls
گواهی Origin CA به Cloudflare کمک می کند تا تایید کند که در حال گفتگو با سرور مجازی درست است. در این مرحله از تأیید هویت کلاینت TLS برای تأیید صحت سرور مجازی Nginx که با Cloudflare در حال گفتگو است ، استفاده می کند.
در یک ارتباط TLS تأیید شده توسط کلاینت ، هر دو طرف یک گواهی برای تأیید ارائه می دهند. سرور مجازی مبدا پیکربندی شده است که فقط درخواستهایی را قبول کند که از گواهی کلاینت معتبر از Cloudflare استفاده می کنند. درخواست هایی که از Cloudflare عبور نکرده اند رد می شوند زیرا گواهی Cloudflare را ندارند. این بدان معنی است که حمله گران مخرب نمی توانند اقدامات امنیتی Cloudflare را دور بزنند و مستقیماً به سرور مجازی Nginx شما متصل شوند.
Cloudflare گواهینامه های امضا شده توسط CA با گواهی زیر را ارائه می دهد:
—–BEGIN CERTIFICATE—–
MIIGCjCCA/KgAwIBAgIIV5G6lVbCLmEwDQYJKoZIhvcNAQENBQAwgZAxCzAJBgNV
BAYTAlVTMRkwFwYDVQQKExBDbG91ZEZsYXJlLCBJbmMuMRQwEgYDVQQLEwtPcmln
aW4gUHVsbDEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzETMBEGA1UECBMKQ2FsaWZv
cm5pYTEjMCEGA1UEAxMab3JpZ2luLXB1bGwuY2xvdWRmbGFyZS5uZXQwHhcNMTkx
MDEwMTg0NTAwWhcNMjkxMTAxMTcwMDAwWjCBkDELMAkGA1UEBhMCVVMxGTAXBgNV
BAoTEENsb3VkRmxhcmUsIEluYy4xFDASBgNVBAsTC09yaWdpbiBQdWxsMRYwFAYD
VQQHEw1TYW4gRnJhbmNpc2NvMRMwEQYDVQQIEwpDYWxpZm9ybmlhMSMwIQYDVQQD
ExpvcmlnaW4tcHVsbC5jbG91ZGZsYXJlLm5ldDCCAiIwDQYJKoZIhvcNAQEBBQAD
ggIPADCCAgoCggIBAN2y2zojYfl0bKfhp0AJBFeV+jQqbCw3sHmvEPwLmqDLqynI
42tZXR5y914ZB9ZrwbL/K5O46exd/LujJnV2b3dzcx5rtiQzso0xzljqbnbQT20e
ihx/WrF4OkZKydZzsdaJsWAPuplDH5P7J82q3re88jQdgE5hqjqFZ3clCG7lxoBw
hLaazm3NJJlUfzdk97ouRvnFGAuXd5cQVx8jYOOeU60sWqmMe4QHdOvpqB91bJoY
QSKVFjUgHeTpN8tNpKJfb9LIn3pun3bC9NKNHtRKMNX3Kl/sAPq7q/AlndvA2Kw3
Dkum2mHQUGdzVHqcOgea9BGjLK2h7SuX93zTWL02u799dr6Xkrad/WShHchfjjRn
aL35niJUDr02YJtPgxWObsrfOU63B8juLUphW/4BOjjJyAG5l9j1//aUGEi/sEe5
lqVv0P78QrxoxR+MMXiJwQab5FB8TG/ac6mRHgF9CmkX90uaRh+OC07XjTdfSKGR
PpM9hB2ZhLol/nf8qmoLdoD5HvODZuKu2+muKeVHXgw2/A6wM7OwrinxZiyBk5Hh
CvaADH7PZpU6z/zv5NU5HSvXiKtCzFuDu4/Zfi34RfHXeCUfHAb4KfNRXJwMsxUa
+4ZpSAX2G6RnGU5meuXpU5/V+DQJp/e69XyyY6RXDoMywaEFlIlXBqjRRA2pAgMB
AAGjZjBkMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgECMB0GA1Ud
DgQWBBRDWUsraYuA4REzalfNVzjann3F6zAfBgNVHSMEGDAWgBRDWUsraYuA4REz
alfNVzjann3F6zANBgkqhkiG9w0BAQ0FAAOCAgEAkQ+T9nqcSlAuW/90DeYmQOW1
QhqOor5psBEGvxbNGV2hdLJY8h6QUq48BCevcMChg/L1CkznBNI40i3/6heDn3IS
zVEwXKf34pPFCACWVMZxbQjkNRTiH8iRur9EsaNQ5oXCPJkhwg2+IFyoPAAYURoX
VcI9SCDUa45clmYHJ/XYwV1icGVI8/9b2JUqklnOTa5tugwIUi5sTfipNcJXHhgz
6BKYDl0/UP0lLKbsUETXeTGDiDpxZYIgbcFrRDDkHC6BSvdWVEiH5b9mH2BON60z
0O0j8EEKTwi9jnafVtZQXP/D8yoVowdFDjXcKkOPF/1gIh9qrFR6GdoPVgB3SkLc
5ulBqZaCHm563jsvWb/kXJnlFxW+1bsO9BDD6DweBcGdNurgmH625wBXksSdD7y/
fakk8DagjbjKShYlPEFOAqEcliwjF45eabL0t27MJV61O/jHzHL3dknXeE4BDa2j
bA+JbyJeUMtU7KMsxvx82RmhqBEJJDBCJ3scVptvhDMRrtqDBW5JShxoAOcpFQGm
iYWicn46nPDjgTU0bX1ZPpTpryXbvciVL5RkVBuyX2ntcOLDPlZWgxZCBp96x07F
AnOzKgZk4RzZPNAxCXERVxajn/FLcOhglVAKo5H0ac+AitlQ0ip55D2/mf8o72tM
fVQ6VpyjEXdiIXWUq/o=
—–END CERTIFICATE—–

همچنین می توانید گواهی را مستقیماً از Cloudflare در این لینک دانلود کنید.
این گواهی را کپی کنید.
سپس فایل /etc/ssl/cloudflare.crt را برای نگه داشتن گواهی Cloudflare ایجاد کنید:
⦁ $ sudo nano /etc/ssl/cloudflare.crt

گواهی را به فایل اضافه کنید. سپس فایل را ذخیره کرده و از ویرایشگر خارج شوید.
اکنون پیکربندی Nginx خود را به روز کنید تا از TLS Authenticated Origin Pulls استفاده کنید. فایل پیکربندی را برای دامنه خود باز کنید:
⦁ $ sudo nano /etc/nginx/sites-available/your_domain

دستورالعملهای ssl_client_certificate و ssl_verify_client را همانطور که در مثال زیر نشان داده شده است اضافه کنید:
/etc/nginx/sites-available/your_domain
. . .

server {

# SSL configuration

listen 443 ssl http2;
listen [::]:443 ssl http2;
ssl_certificate /etc/ssl/cert.pem;
ssl_certificate_key /etc/ssl/key.pem;
ssl_client_certificate /etc/ssl/cloudflare.crt;
ssl_verify_client on;

. . .

فایل را ذخیره کرده و از ویرایشگر خارج شوید.
سپس ، Nginx را آزمایش کنید تا مطمئن شوید که هیچ خطای نحوی در پیکربندی Nginx شما وجود ندارد:
⦁ $ sudo nginx -t

اگر مشکلی پیدا نشد ، Nginx را ریستارت کنید تا تغییرات خود را اعمال کنید:
⦁ $ sudo systemctl restart nginx

در آخر ، برای فعال کردن Authenticated Pulls ، بخش SSL / TLS را در داشبورد Cloudflare باز کنید ، به تب Origin Server بروید و گزینه Authenticated Origin Pulls را تغییر دهید.

اکنون به وب سایت خود در https: // your_domain مراجعه کنید تا صحت تنظیم آن را تأیید کنید. مانند قبل ، صفحه اصلی خود را نمایش داده خواهید کرد.
برای تأیید اینکه سرور مجازی شما فقط درخواستهای امضا شده توسط CA Cloudflare را قبول خواهد کرد ، گزینه Authenticated Origin Pulls را انتخاب کنید تا غیرفعال شود و سپس وب سایت خود را دوباره لود کنید. باید پیام خطای زیر را دریافت کنید:

اگر CA Cloudflare درخواستی را امضا نکند ، سرور مجازی مبدا شما خطایی را ایجاد می کند.
توجه: بیشتر مرورگرها درخواستها را ذخیره می کنند ، بنابراین برای دیدن تغییر فوق می توانید از حالت جستجوی Incognito/Private در مرورگر خود استفاده کنید. برای جلوگیری از عدم دسترسی به درخواست Cloudflare در هنگام تنظیم وب سایت ، به مرور کلی در داشبورد Cloudflare بروید و حالت توسعه را تغییر دهید.

اکنون که می دانید درست کار می کند به بخش SSL / TLS در داشبورد Cloudflare برگردید ، به تب Origin Server بروید و گزینه Authenticated Origin Pulls را دوباره بزنید تا فعال شود.
نتیجه
در این آموزش وب سایت خود Nginx را با رمزگذاری ترافیک بین Cloudflare و سرور مجازی Nginx با استفاده از گواهینامه Origin CA از Cloudflare ، ایمن کردید. سپس Authenticated Origin Pulls را روی سرور مجازی Nginx تنظیم میکنید تا اطمینان حاصل شود که تنها درخواستهای سرور مجازی های Cloudflare را می پذیرد و از اتصال مستقیم دیگران به سرور Nginx جلوگیری می کند.

 

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

behnam gol mohamadi بازدید : 17 پنجشنبه 30 مرداد 1399 نظرات (0)

Cloudflare سرویسی است که بین بازدید کننده و سرور مجازی مالک وب سایت قرار دارد و به عنوان یک پروکسی معکوس برای وب سایت ها عمل می کند. Cloudflare یک شبکه انتقال محتوا (CDN) ، و همچنین خدمات سرور مجازی کاهش نام دامنه توزیع شده DDoS را فراهم می کند.
Nginx یک سرور مجازی وب مشهور است که مسئول میزبانی برخی از بزرگترین و پر ترافیک ترین سایتهای اینترنت است. معمولا سازمانها وب سایتها را با Nginx ارائه کرده و از Cloudflare به عنوان ارائه دهنده CDN و DNS استفاده می کنند.
در این آموزش ، وب سایت خود را که توسط Nginx با گواهی Origin CA از Cloudflare ارائه میشود ایمن میکنید و سپس Nginx را برای استفاده از درخواستهای معتبر پیکربندی میکنید. مزایای استفاده از این ستاپ این است که شما از CDN Cloudflare و وضوح سریع DNS بهره می برید و در عین حال اطمینان حاصل می کنید که همه اتصالات از Cloudflare عبور می کنند. این مانع از رسیدن هرگونه درخواست مخرب به سرور مجازی شما می شود.
پیش نیازها
برای تکمیل این آموزش به موارد زیر نیاز دارید:
⦁ یک سرور مجازی Ubuntu 18.04 با پیروی از راهنمای ستاپ اولیه سرور مجازی Ubuntu 18.04 ، از جمله یک کاربر sudo غیر ریشه و فایروال راه اندازی شده.
⦁ Nginx بر روی سرور مجازی شما نصب شده باشد. می توانید راهنمای ما در مورد نحوه نصب Nginx را در اوبنتو 18.04 دنبال کنید.
⦁ یک حساب Cloudflare
⦁ یک دامنه ثبت شده به حساب Cloudflare شما اضافه شده باشد که به سرور مجازی Nginx شما اشاره کند. راهنمای ما در مورد چگونگی کاهش حملات DDoS علیه وب سایت خود با Cloudflare می تواند در انجام این کار به شما کمک کند. مقدمه ما در مورد اصطلاحات DNS ، مؤلفه ها و مفاهیم نیز می تواند مفید باشد.
⦁ سرور مجازی Nginx Block برای دامنه شما پیکربندی شده باشد ، که می توانید با دنبال کردن مرحله 5 نحوه نصب Nginx در اوبونتو 18.04 ، آن را انجام دهید.
مرحله 1 – تولید گواهی Origin CA TLS
Cloudflare Origin CA به شما امکان می دهد تا یک گواهی TLS رایگان امضا شده توسط Cloudflare برای نصب بر روی سرور مجازی Nginx خود تولید کنید. با استفاده از گواهی TLS تولید شده Cloudflare می توانید ارتباط بین سرور مجازی های Cloudflare و سرور مجازی Nginx خود را تضمین کنید.
برای تولید گواهی نامه با Origin CA ، در یک مرورگر وب به حساب Cloudflare خود وارد شوید. دامنه مورد نظر برای تأمین امنیت را انتخاب کرده و به بخش SSL / TLS داشبورد Cloudflare خود بروید. از آنجا به تب Origin Server بروید و بر روی دکمه Create Certificate کلیک کنید:

گزینه پیش فرض Let Cloudflare generate a private key and a CSR را انتخاب کنید.

بر روی Next کلیک کنید و گفتگویی با Origin Certificate و Private key را مشاهده خواهید کرد. شما باید گواهی مبدا و کلید خصوصی را از Cloudflare به سرور مجازی خود منتقل کنید. به دلایل امنیتی ، اطلاعات Private Key مجدداً نمایش داده نمی شود ، بنابراین قبل از کلیک بر روی Ok ، کلید سرور مجازی خود را کپی کنید.

شما از دیرکتوری / etc / ssl در سرور مجازی برای نگه داشتن گواهی مبدا و فایل های کلید خصوصی استفاده خواهید کرد. این پوشه در حال حاضر در سرور مجازی وجود دارد.
ابتدا محتویات Certificate Origin نمایش داده شده در کادر گفتگو در مرورگر خود را کپی کنید.
سپس ، در سرور مجازی خود ، /etc/ssl/cert.pem را در ویرایشگر متن مورد نظر خود باز کنید:
⦁ $ sudo nano /etc/ssl/cert.pem

محتوای گواهی را در فایل اضافه کنید. سپس ذخیره کنید و از ویرایشگر خارج شوید.
سپس به مرورگر خود بازگردید و محتویات کلید خصوصی را کپی کنید. فایل /etc/ssl/key.pem را برای ویرایش باز کنید:
⦁ $ sudo nano /etc/ssl/key.pem

کلید خصوصی را درون فایل قرار دهید ، فایل را ذخیره کنید و از ویرایشگر خارج شوید.
توجه: گاهی اوقات ، هنگامی که گواهی و کلید را از داشبورد Cloudflare کپی می کنید و آن را در فایل های مربوطه روی سرور مجازی پیست میکنید ، خطوط خالی درج می شود. Nginx چنین گواهینامه ها و کلیدها را نامعتبر میداند ، بنابراین اطمینان حاصل کنید که هیچ خط خالی در فایل های شما وجود نداشته باشد.

هشدار: گواهی Origin CA Cloudflare فقط به Cloudflare اعتماد میکند و بنابراین فقط باید توسط سرور مجازیهای مبدأ استفاده شود که به طور فعال به Cloudflare متصل هستند. اگر در هر لحظه Cloudflare را متوقف یا غیرفعال کنید ، گواهی Origin CA شما خطای گواهی نامعتبر را به همراه خواهد داشت.

اکنون که فایلهای کلید و مجوز را در سرور مجازی خود کپی کرده اید ، برای استفاده از آنها باید پیکربندی Nginx را به روز کنید.
مرحله 2 – نصب گواهی Origin CA در Nginx
در بخش قبلی ، با استفاده از داشبورد Cloudflare یک گواهی مبدأ و کلید خصوصی ایجاد کرده و فایل ها را در سرور مجازی خود ذخیره کردید. اکنون پیکربندی Nginx را برای استفاده از گواهی مبدا و کلید خصوصی برای اطمینان از اتصال بین سرور مجازیهای Cloudflare و سرور مجازی خود ، پیکربندی Nginx را به روز خواهید کرد.
ابتدا مطمئن شوید UFW ترافیک HTTPS را امکان پذیر می کند. Nginx Full را فعال کنید ، که پورت 80 (HTTP) و پورت 443 (HTTPS) را باز می کند:
⦁ $ sudo ufw allow ‘Nginx Full’

اکنون UFW را مجدد لود کنید:
⦁ $ sudo ufw reload

در آخر ، بررسی کنید که قوانین جدید شما مجاز باشند یا UFW فعال باشد:
⦁ $ sudo ufw status

خروجی مانند این را مشاهده خواهید کرد:
Output
Status: active

To Action From
— —— —-
OpenSSH ALLOW Anywhere
Nginx Full ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx Full (v6) ALLOW Anywhere (v6)

اکنون آماده تنظیم بلوک سرور مجازی Nginx خود هستید. Nginx در حین نصب بلوک سرور مجازی پیش فرض ایجاد می کند. اگر هنوز وجود دارد ، آن را حذف کنید ، زیرا قبلاً یک بلوک سرور مجازی اختصاصی برای دامنه خود پیکربندی کرده اید:
⦁ $ sudo rm /etc/nginx/sites-enabled/default

سپس ، فایل پیکربندی Nginx را برای دامنه خود باز کنید:
⦁ $ sudo nano /etc/nginx/sites-available/your_domain

فایل باید به صورت زیر باشد:
/etc/nginx/sites-available/your_domain
server {
listen 80;
listen [::]:80;

root /var/www/your_domain/html;
index index.html index.htm index.nginx-debian.html;

server_name your_domain www.your_domain;

location / {
try_files $uri $uri/ =404;
}
}

برای تنظیم موارد زیر فایل پیکربندی Nginx را اصلاح می کنید:
• به پورت 80 گوش دهید و کلیه درخواست ها را برای استفاده از https تغییر دهید.
• به پورت443 گوش داده و از گواهی مبدا و کلید خصوصی اضافه شده در قسمت قبلی استفاده کنید.
فایل را تغییر دهید تا به شکل زیر باشد:
/etc/nginx/sites-available/your_domain
server {
listen 80;
listen [::]:80;
server_name your_domain www.your_domain;
return 302 https://$server_name$request_uri;
}

server {

# SSL configuration

listen 443 ssl http2;
listen [::]:443 ssl http2;
ssl_certificate /etc/ssl/cert.pem;
ssl_certificate_key /etc/ssl/key.pem;

server_name your_domain www.your_domain;

root /var/www/your_domain/html;
index index.html index.htm index.nginx-debian.html;

location / {
try_files $uri $uri/ =404;
}
}

فایل را ذخیره کرده و از ویرایشگر خارج شوید.
در مرحله بعد ، اطمینان حاصل کنید که هیچ خطای نحوی در هیچ یک از فایل های تنظیمات Nginx شما وجود ندارد:
⦁ $sudo nginx -t

اگر مشکلی پیدا نکردید ، Nginx را دوباره فعال کنید تا تغییرات خود را فعال کنید:
⦁ $ sudo systemctl restart nginx

حال به بخش SSL / TLS داشبورد Cloudflare بروید ، به تب Overview بروید و حالت رمزگذاری SSL / TLS را به حالت کامل (دقیق) تغییر دهید. این به Cloudflare اطلاع می دهد تا همیشه ارتباط بین Cloudflare و سرور مجازی Nginx منشاء شما را رمزگذاری کند.

اکنون به وب سایت خود در https: // your_domain مراجعه کنید تا صحت تنظیم آن را تأیید کنید. صفحه اصلی خود را مشاهده خواهید کرد و مرورگر گزارش می دهد که سایت امن است.
در قسمت بعد ، شما Authenticated Origin Pulls را تأیید می کنید که سرور مجازی مبدا شما در واقع با Cloudflare ارتباط برقرار می کند و نه برخی دیگر از سرور مجازی ها. با این کار ، Nginx پیکربندی می شود که تنها درخواست هایی را که از گواهی کلاینت معتبر از Cloudflare استفاده می کنند ، بپذیرد. کلیه درخواستهایی که از Cloudflare عبور نکرده اند رد می شوند.
مرحله 3 – تنظیم Authenticated Origin Pulls
گواهی Origin CA به Cloudflare کمک می کند تا تایید کند که در حال گفتگو با سرور مجازی درست است. در این مرحله از تأیید هویت کلاینت TLS برای تأیید صحت سرور مجازی Nginx که با Cloudflare در حال گفتگو است ، استفاده می کند.
در یک ارتباط TLS تأیید شده توسط کلاینت ، هر دو طرف یک گواهی برای تأیید ارائه می دهند. سرور مجازی مبدا پیکربندی شده است که فقط درخواستهایی را قبول کند که از گواهی کلاینت معتبر از Cloudflare استفاده می کنند. درخواست هایی که از Cloudflare عبور نکرده اند رد می شوند زیرا گواهی Cloudflare را ندارند. این بدان معنی است که حمله گران مخرب نمی توانند اقدامات امنیتی Cloudflare را دور بزنند و مستقیماً به سرور مجازی Nginx شما متصل شوند.
Cloudflare گواهینامه های امضا شده توسط CA با گواهی زیر را ارائه می دهد:
—–BEGIN CERTIFICATE—–
MIIGCjCCA/KgAwIBAgIIV5G6lVbCLmEwDQYJKoZIhvcNAQENBQAwgZAxCzAJBgNV
BAYTAlVTMRkwFwYDVQQKExBDbG91ZEZsYXJlLCBJbmMuMRQwEgYDVQQLEwtPcmln
aW4gUHVsbDEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzETMBEGA1UECBMKQ2FsaWZv
cm5pYTEjMCEGA1UEAxMab3JpZ2luLXB1bGwuY2xvdWRmbGFyZS5uZXQwHhcNMTkx
MDEwMTg0NTAwWhcNMjkxMTAxMTcwMDAwWjCBkDELMAkGA1UEBhMCVVMxGTAXBgNV
BAoTEENsb3VkRmxhcmUsIEluYy4xFDASBgNVBAsTC09yaWdpbiBQdWxsMRYwFAYD
VQQHEw1TYW4gRnJhbmNpc2NvMRMwEQYDVQQIEwpDYWxpZm9ybmlhMSMwIQYDVQQD
ExpvcmlnaW4tcHVsbC5jbG91ZGZsYXJlLm5ldDCCAiIwDQYJKoZIhvcNAQEBBQAD
ggIPADCCAgoCggIBAN2y2zojYfl0bKfhp0AJBFeV+jQqbCw3sHmvEPwLmqDLqynI
42tZXR5y914ZB9ZrwbL/K5O46exd/LujJnV2b3dzcx5rtiQzso0xzljqbnbQT20e
ihx/WrF4OkZKydZzsdaJsWAPuplDH5P7J82q3re88jQdgE5hqjqFZ3clCG7lxoBw
hLaazm3NJJlUfzdk97ouRvnFGAuXd5cQVx8jYOOeU60sWqmMe4QHdOvpqB91bJoY
QSKVFjUgHeTpN8tNpKJfb9LIn3pun3bC9NKNHtRKMNX3Kl/sAPq7q/AlndvA2Kw3
Dkum2mHQUGdzVHqcOgea9BGjLK2h7SuX93zTWL02u799dr6Xkrad/WShHchfjjRn
aL35niJUDr02YJtPgxWObsrfOU63B8juLUphW/4BOjjJyAG5l9j1//aUGEi/sEe5
lqVv0P78QrxoxR+MMXiJwQab5FB8TG/ac6mRHgF9CmkX90uaRh+OC07XjTdfSKGR
PpM9hB2ZhLol/nf8qmoLdoD5HvODZuKu2+muKeVHXgw2/A6wM7OwrinxZiyBk5Hh
CvaADH7PZpU6z/zv5NU5HSvXiKtCzFuDu4/Zfi34RfHXeCUfHAb4KfNRXJwMsxUa
+4ZpSAX2G6RnGU5meuXpU5/V+DQJp/e69XyyY6RXDoMywaEFlIlXBqjRRA2pAgMB
AAGjZjBkMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgECMB0GA1Ud
DgQWBBRDWUsraYuA4REzalfNVzjann3F6zAfBgNVHSMEGDAWgBRDWUsraYuA4REz
alfNVzjann3F6zANBgkqhkiG9w0BAQ0FAAOCAgEAkQ+T9nqcSlAuW/90DeYmQOW1
QhqOor5psBEGvxbNGV2hdLJY8h6QUq48BCevcMChg/L1CkznBNI40i3/6heDn3IS
zVEwXKf34pPFCACWVMZxbQjkNRTiH8iRur9EsaNQ5oXCPJkhwg2+IFyoPAAYURoX
VcI9SCDUa45clmYHJ/XYwV1icGVI8/9b2JUqklnOTa5tugwIUi5sTfipNcJXHhgz
6BKYDl0/UP0lLKbsUETXeTGDiDpxZYIgbcFrRDDkHC6BSvdWVEiH5b9mH2BON60z
0O0j8EEKTwi9jnafVtZQXP/D8yoVowdFDjXcKkOPF/1gIh9qrFR6GdoPVgB3SkLc
5ulBqZaCHm563jsvWb/kXJnlFxW+1bsO9BDD6DweBcGdNurgmH625wBXksSdD7y/
fakk8DagjbjKShYlPEFOAqEcliwjF45eabL0t27MJV61O/jHzHL3dknXeE4BDa2j
bA+JbyJeUMtU7KMsxvx82RmhqBEJJDBCJ3scVptvhDMRrtqDBW5JShxoAOcpFQGm
iYWicn46nPDjgTU0bX1ZPpTpryXbvciVL5RkVBuyX2ntcOLDPlZWgxZCBp96x07F
AnOzKgZk4RzZPNAxCXERVxajn/FLcOhglVAKo5H0ac+AitlQ0ip55D2/mf8o72tM
fVQ6VpyjEXdiIXWUq/o=
—–END CERTIFICATE—–

همچنین می توانید گواهی را مستقیماً از Cloudflare در این لینک دانلود کنید.
این گواهی را کپی کنید.
سپس فایل /etc/ssl/cloudflare.crt را برای نگه داشتن گواهی Cloudflare ایجاد کنید:
⦁ $ sudo nano /etc/ssl/cloudflare.crt

گواهی را به فایل اضافه کنید. سپس فایل را ذخیره کرده و از ویرایشگر خارج شوید.
اکنون پیکربندی Nginx خود را به روز کنید تا از TLS Authenticated Origin Pulls استفاده کنید. فایل پیکربندی را برای دامنه خود باز کنید:
⦁ $ sudo nano /etc/nginx/sites-available/your_domain

دستورالعملهای ssl_client_certificate و ssl_verify_client را همانطور که در مثال زیر نشان داده شده است اضافه کنید:
/etc/nginx/sites-available/your_domain
. . .

server {

# SSL configuration

listen 443 ssl http2;
listen [::]:443 ssl http2;
ssl_certificate /etc/ssl/cert.pem;
ssl_certificate_key /etc/ssl/key.pem;
ssl_client_certificate /etc/ssl/cloudflare.crt;
ssl_verify_client on;

. . .

فایل را ذخیره کرده و از ویرایشگر خارج شوید.
سپس ، Nginx را آزمایش کنید تا مطمئن شوید که هیچ خطای نحوی در پیکربندی Nginx شما وجود ندارد:
⦁ $ sudo nginx -t

اگر مشکلی پیدا نشد ، Nginx را ریستارت کنید تا تغییرات خود را اعمال کنید:
⦁ $ sudo systemctl restart nginx

در آخر ، برای فعال کردن Authenticated Pulls ، بخش SSL / TLS را در داشبورد Cloudflare باز کنید ، به تب Origin Server بروید و گزینه Authenticated Origin Pulls را تغییر دهید.

اکنون به وب سایت خود در https: // your_domain مراجعه کنید تا صحت تنظیم آن را تأیید کنید. مانند قبل ، صفحه اصلی خود را نمایش داده خواهید کرد.
برای تأیید اینکه سرور مجازی شما فقط درخواستهای امضا شده توسط CA Cloudflare را قبول خواهد کرد ، گزینه Authenticated Origin Pulls را انتخاب کنید تا غیرفعال شود و سپس وب سایت خود را دوباره لود کنید. باید پیام خطای زیر را دریافت کنید:

اگر CA Cloudflare درخواستی را امضا نکند ، سرور مجازی مبدا شما خطایی را ایجاد می کند.
توجه: بیشتر مرورگرها درخواستها را ذخیره می کنند ، بنابراین برای دیدن تغییر فوق می توانید از حالت جستجوی Incognito/Private در مرورگر خود استفاده کنید. برای جلوگیری از عدم دسترسی به درخواست Cloudflare در هنگام تنظیم وب سایت ، به مرور کلی در داشبورد Cloudflare بروید و حالت توسعه را تغییر دهید.

اکنون که می دانید درست کار می کند به بخش SSL / TLS در داشبورد Cloudflare برگردید ، به تب Origin Server بروید و گزینه Authenticated Origin Pulls را دوباره بزنید تا فعال شود.
نتیجه
در این آموزش وب سایت خود Nginx را با رمزگذاری ترافیک بین Cloudflare و سرور مجازی Nginx با استفاده از گواهینامه Origin CA از Cloudflare ، ایمن کردید. سپس Authenticated Origin Pulls را روی سرور مجازی Nginx تنظیم میکنید تا اطمینان حاصل شود که تنها درخواستهای سرور مجازی های Cloudflare را می پذیرد و از اتصال مستقیم دیگران به سرور مجازی Nginx جلوگیری می کند.

 

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

behnam gol mohamadi بازدید : 21 یکشنبه 26 مرداد 1399 نظرات (0)

برای بسیاری از برنامه ها در جاوا اسکریپت ، وقتی برنامه نویس کد را به صورت خط به خط می نویسد در همان زمان اجرا می شود. به این کار اجرای همزمان گفته می شود ، زیرا سطرها یکی پس از دیگری، به ترتیبی که نوشته شده اند اجرا می شوند. با این حال ، هر دستورالعملی که شما به رایانه می دهید نیاز به اجرای فوری ندارد. به عنوان مثال ، اگر درخواست شبکه ارسال می کنید ، فرآیند اجرای کد شما باید منتظر بماند تا داده ها قبل از اجرا بر روی آن برگردند. در این حالت ، اگر در حالی که منتظر تکمیل درخواست شبکه هستید ، کد دیگری را اجرا نکند ، وقت تلف می شود. برای حل این مشکل ، توسعه دهندگان از برنامه نویسی ناهمزمان استفاده می کنند ، که در آن خطوط کد به ترتیب متفاوتی از آنچه نوشته شده اند اجرا می شوند. با برنامه نویسی ناهمزمان ، می توانیم در حالی که منتظر هستیم فعالیتهای طولانی مانند درخواست شبکه به پایان برسد، کدهای دیگری را اجرا کنیم.
کد JavaScript در یک فرآیند کامپیوتری بر روی یک رشته واحد اجرا می شود. کد آن به صورت همزمان در این رشته پردازش می شود و فقط یک دستورالعمل در هر زمان اجرا می شود. بنابراین ، اگر ما می خواستیم یک کار طولانی در این رشته انجام دهیم ، تمام کد باقی مانده تا زمان اتمام آن کار مسدود می شد. با اعمال ویژگی های برنامه نویسی ناهمزمان جاوا اسکریپت ، می توان کارهای طولانی مدت را بر روی یک رشته پس زمینه بارگذاری کرد تا از بروز این مشکل جلوگیری شود. پس از اتمام کار ، کدی که برای پردازش داده های کار نیاز داریم بر روی تک رشته اصلی قرار می گیرد.
در این آموزش ، شما می آموزید که چگونه JavaScript با کمک حلقه رویداد وظایف ناهمزمان را مدیریت می کند، به این شکل که وظیفه جدیدی را هنگام انتظار برای کار دیگر انجام می دهد. سپس برنامه ای را ایجاد می کنید که از برنامه نویسی ناهمزمان استفاده می کند تا لیستی از فیلم ها را از یک Studio Ghibli API درخواست کرده و داده ها را در یک فایل CSV ذخیره کنید. کد ناهمزمان به سه روش نوشته خواهد شد: callback ، promise ها ، و با کلمات کلیدی async/await.
توجه: طبق این نوشتار ، برنامه نویسی ناهمزمان دیگر فقط با استفاده از تماسهای برگشتی انجام نمی شود ، اما یادگیری این روش منسوخ می تواند زمینه ای را فراهم کند که نشان دهد چرا جامعه جاوا اسکریپت اکنون از promise ها استفاده میکنند. کلمات کلیدی async / await به ما این امکان را می دهد که از promise ها به روشی کوتاه تر استفاده کنیم ، و به این ترتیب روشی استاندارد برای انجام برنامه نویسی ناهمزمان در جاوا اسکریپت در زمان نوشتن این مقاله میباشد.

پیش نیازها
Node.js بر روی دستگاه توسعه شما نصب شده باشد. در این آموزش از نسخه 10.17.0 استفاده شده است. برای نصب این در macOS یا Ubuntu 18.04 ، مراحل نحوه نصب Node.js و ایجاد محیط توسعه محلی در macOS یا نصب با استفاده از یک بخش PPA را در راهنمای نحوه نصب Node.js در اوبونتو 18.04 دنبال کنید.
همچنین باید با نصب بسته ها در پروژه خود آشنا باشید. با خواندن راهنمای ما در مورد چگونگی استفاده از ماژول های Node.js با npm و pack.json سریعتر پیش روید.
مهم است که قبل از یادگیری چگونگی استفاده از توابع به صورت ناهمزمان ، برای ایجاد و اجرای توابع در جاوا اسکریپت مشکلی نداشته باشید. اگر به معرفی یا اطلاعات تکمیلی نیاز دارید می توانید راهنمای ما در مورد چگونگی تعریف توابع در JavaScript را بخوانید.
حلقه رویداد
بیایید با مطالعه عملکرد داخلی اجرای عملکرد JavaScript شروع کنیم. درک نحوه این رفتار به شما امکان می دهد تا کدهای ناهمزمان را سنجیده تر بنویسید ، و در آینده به شما در زمینه عیب یابی کد کمک می کند.
از آنجا که مترجم جاوا اسکریپت کد را اجرا می کند ، هر عملکردی که خوانده می شود به call stack در جاوا اضافه می شود. call stack یک ساختار داده لیست مانند است که در آن موارد فقط به بالا می توانند اضافه شوند و از بالا حذف شوند. stack ها از اصل “از آخر وارد شو ، از اول خارج شو” یا LIFO پیروی می کنند. اگر دو مورد را روی stack اضافه کنید ، آخرین مورد اول حذف می شود.
بگذارید با یک مثال با استفاده از call stack ، توضیح دهیم. اگر جاوا اسکریپت با یک تابع functionA () فراخوانی شود ، به call stack اضافه می شود. اگر آن تابع functionA () یکی دیگر از عملکردهای functionB () را فراخوانی کند ، سپس functionB () به قسمت بالای call stack اضافه می شود. همانطور که جاوا اسکریپت اجرای یک عملکرد را کامل می کند ، از call stack حذف می شود. بنابراین جاوا اسکریپت ابتدا functionB () را اجرا می کند ، پس از اتمام آن را از stack جدا میکند و سپس اجرای functionA () را تمام میکند و آن را از call stack حذف میکند. به همین دلیل است که عملکردهای داخلی همیشه قبل از کارکردهای بیرونی آنها اجرا می شوند.
هنگامی که جاوا اسکریپت با یک عمل ناهمزمان مواجه می شود ، مانند نوشتن یک فایل ، آن را به یک جدول در حافظه خود اضافه می کند. این جدول عملکرد را ذخیره میند ، شرط تکمیل اجرای آن و فراخوانی تابغ هنگام اتمام است. با اتمام عمل ، JavaScript عملکرد مرتبط را در صف پیام قرار می دهد. یک صف دیگر ساختار داده لیست مانند است که در آن موارد فقط می توانند به پایین اضافه شوند اما از بالا حذف شوند. در صف پیام ، اگر دو یا چند عملیات ناهمزمان برای اجرای وظایف خود آماده باشد ، عملیات ناهمزمان که ابتدا به اتمام رسیده است ، ابتدا عملکرد خود را برای اجرا مشخص می کند.
توابع در صف پیام منتظرند که به call stack اضافه شوند. این حلقه رویداد یک روند دائمی است که بررسی می کند ایا call stack خالی است یا خیر. اگر اینگونه باشد ، اولین مورد در صف پیام به call stack منتقل می شود. جاوا اسکریپت عملکردهای موجود در صف پیام را بر حسب عملکرد که در کد آن تفسیر می کند، در اولویت بندی قرار می دهد. اثر ترکیبی call stack ، صف پیام و حلقه رویداد اجازه می دهد تا هنگام مدیریت فعالیت های ناهمزمان ، کد JavaScript پردازش شود.
اکنون که درک درستی از حلقه رویداد دارید ، می دانید کد ناهمزمانی که می نویسید چگونه اجرا می شود. با استفاده از این دانش ، اکنون می توانید با سه رویکرد متفاوت ، کد ناهمزمان ایجاد کنید: callback ، promise ها ، و async / await.
برنامه نویسی ناهمزمان با callback
یک عملکرد برگشتی عملکردی است که به عنوان آرگومان به عملکرد دیگر منتقل می شود ، و بعد از اتمام کار دیگر اجرا می شود. ما از callback برای اطمینان از اجرای کد درست بعد از اتمام عملکرد ناهمزمان استفاده می کنیم.
برای مدت ها ، callback رایج ترین مکانیسم برای نوشتن کد ناهمزمان بودند ، اما اکنون اکثرا منسوخ شده اند زیرا می توانند خواندن کد را گیج کننده جلوه دهند. در این مرحله ، نمونه ای از کد ناهمزمان را با استفاده از callback می نویسید تا بتوانید از آن به عنوان مبانی اولیه استفاده کنید تا بهره وری دیگر استراتژی های دیگر را ببینید.
روشهای زیادی برای استفاده از توابع برگشتی در عملکردهای دیگر وجود دارد. به طور کلی ، آنها از این ساختار استفاده می کنند:
function asynchronousFunction([ Function Arguments ], [ Callback Function ]) {
[ Action ]
}

اگرچه برای JavaScript یا Node.js به لحاظ دستوری الزامی نیست که عملکرد callback  را به عنوان آخرین آرگومان عملکرد بیرونی را داشته باشد ، این یک روش معمول است که شناسایی callback  ها را آسان تر می کند. همچنین معمول است که توسعه دهندگان JavaScript از یک عملکرد ناشناس به عنوان callback  استفاده کنند. توابع ناشناس مواردی هستند که بدون نام ایجاد می شوند. معمولاً وقتی یک عملکرد در انتهای لیست آرگومان ها تعریف می شود ، بیشتر قابل خواندن است.
برای توضیح callback ها ، بیایید یک ماژول Node.js ایجاد کنیم که لیستی از فیلم های Studio Ghibli  را در یک فایل می نویسد. ابتدا پوشه ای ایجاد کنید که فایل جاوا اسکریپت و خروجی آن را ذخیره کند:
$ mkdir ghibliMovies
سپس آن پوشه را وارد کنید:
$ cd ghibliMovies
با ایجاد درخواست HTTP به Studio Ghibli API شروع خواهیم کرد که عملکرد callback ما نتایج آن را ثبت می کند. برای این کار ، کتابخانه ای را نصب می کنیم که به ما امکان می دهد به داده های پاسخ HTTP در یک callback دسترسی پیدا کنیم.
در ترمینال خود، npm را آغاز کنید تا بعداً بتوانیم برای بسته های خود مرجع داشته باشیم:
$ npm init -y
سپس ، كتابخانه request را نصب كنید:
$ npm i request –save
اکنون یک فایل جدید با نام callbackMovies.js در یک ویرایشگر متنی مانند nano باز کنید:
$ nano callbackMovies.js
در ویرایشگر متن خود کد زیر را وارد کنید. بیایید با ارسال یک درخواست HTTP با ماژول request  شروع کنیم:
callbackMovies.js
const request = require(‘request’);

request(‘https://ghibliapi.herokuapp.com/films’);

در خط اول ماژول درخواستی را که از طریق npm نصب شده است بارگذاری می کنیم. ماژول تابعی را برمی گرداند که می تواند درخواست HTTP ایجاد کند . سپس آن عملکرد را در request  به صورت ثابت ذخیره می کنیم.
سپس با استفاده از عملکرد request() درخواست HTTP را انجام می دهیم. اکنون بیایید با افزودن تغییرات هایلایت شده ، داده های درخواست HTTP را برای چاپ به کنسول ارسال کنیم:
callbackMovies.js
const request = require(‘request’);

request(‘https://ghibliapi.herokuapp.com/films’, (error, response, body) => {
if (error) {
console.error(`Could not send request to API: ${error.message}`);
return;
}

if (response.statusCode != 200) {
console.error(`Expected status code 200 but received ${response.statusCode}.`);
return;
}

console.log(‘Processing our list of movies’);
movies = JSON.parse(body);
movies.forEach(movie => {
console.log(`${movie[‘title’]}, ${movie[‘release_date’]}`);
});
});

وقتی از تابع request() استفاده می کنیم ، به آن دو پارامتر می دهیم:
آدرس URL وب سایتی که می خواهیم درخواست بدهیم
عملکرد callback که پس از تکمیل درخواست ، خطاها یا پاسخ های موفقیت آمیز را مدیریت می کند
عملکرد callback  ما سه آرگومان دارد: error ، response و body. هنگامی که درخواست HTTP کامل شد ، آرگومان ها بسته به نتیجه به طور خودکار مقادیر میگیرند. اگر درخواست نتواند ارسال شود ، error حاوی یک موضوع است ، اما response و body ، null خواهند بود. اگر درخواست را با موفقیت انجام داد ، پاسخ HTTP در response ذخیره می شود. اگر پاسخ HTTP ما داده ها را برگرداند (در این مثال JSON را دریافت می کنیم) سپس داده ها به صورت body تنظیم می شوند.
عملکرد callback  ما ابتدا بررسی می کند که آیا خطایی دریافت کرده ایم یا خیر. بهترین کار این است که ابتدا خطاها را در یک callback  بررسی کنید تا اجرای callback  با داده های از دست رفته ادامه پیدا نکند. در این حالت خطا و اجرای عملکرد را ثبت می کنیم. سپس کد وضعیت پاسخ را بررسی می کنیم. سرور مجازی ما ممکن است همیشه در دسترس نباشد و API ها می توانند تغییر کنند و باعث نادرست شدن درخواست های معقول شوند. با بررسی اینکه کد وضعیت 200 است ، به این معنی که درخواست “OK” است ، می توانیم اطمینان داشته باشیم که پاسخ ما همان چیزی است که انتظار داریم.
سرانجام ، body پاسخ را به یک Array تجزیه کرده و از طریق هر فیلم حلقه می کنیم تا نام و سال انتشار آن ثبت شود.
پس از ذخیره و خروج از فایل ، این اسکریپت را با دستور زیر اجرا کنید:
$ node callbackMovies.js
خروجی زیر را دریافت خواهید کرد:
Output
Castle in the Sky, 1986
Grave of the Fireflies, 1988
My Neighbor Totoro, 1988
Kiki’s Delivery Service, 1989
Only Yesterday, 1991
Porco Rosso, 1992
Pom Poko, 1994
Whisper of the Heart, 1995
Princess Mononoke, 1997
My Neighbors the Yamadas, 1999
Spirited Away, 2001
The Cat Returns, 2002
Howl’s Moving Castle, 2004
Tales from Earthsea, 2006
Ponyo, 2008
Arrietty, 2010
From Up on Poppy Hill, 2011
The Wind Rises, 2013
The Tale of the Princess Kaguya, 2013
When Marnie Was There, 2014

ما لیستی از فیلمهای Studio Ghibli را با سالی که اکران شدند دریافت کردیم. اکنون بگذارید این برنامه را با نوشتن لیست فیلم هایی که در حال حاضر در فایل هست تکمیل کنیم.
فایل callbackMovies.js را در ویرایشگر متن خود به روز کنید تا کد هایلایت شده زیر را شامل شود ، که یک فایل CSV را با داده های فیلم ما ایجاد می کند:
callbackMovies.js
const request = require(‘request’);
const fs = require(‘fs’);

request(‘https://ghibliapi.herokuapp.com/films’, (error, response, body) => {
if (error) {
console.error(`Could not send request to API: ${error.message}`);
return;
}

if (response.statusCode != 200) {
console.error(`Expected status code 200 but received ${response.statusCode}.`);
return;
}

console.log(‘Processing our list of movies’);
movies = JSON.parse(body);
let movieList = ”;
movies.forEach(movie => {
movieList += `${movie[‘title’]}, ${movie[‘release_date’]}\n`;
});

fs.writeFile(‘callbackMovies.csv’, movieList, (error) => {
if (error) {
console.error(`Could not save the Ghibli movies to a file: ${error}`);
return;
}

console.log(‘Saved our list of movies to callbackMovies.csv’);;
});
});

با دقت به تغییرات هایلایت شده ، می بینیم که ماژول fs را وارد کردیم. این ماژول در تمام نصب های Node.js استاندارد است و شامل روش writeFile () است که می تواند به صورت غیر همزمان در یک فایل بنویسد.
به جای اینکه داده ها را به کنسول وارد کنیم ، اکنون آن را به یک متغیر رشته ای movieList اضافه می کنیم. سپس از writeFile() براي ذخيره محتواي movieList در یک فایل جدید به نام callbackMovies.csv استفاده مي كنيم. سرانجام ، برای تابع writeFile () یک callback ارائه می دهیم که یک آرگومان دارد: erorr. این به ما امکان می دهد مواردی را کنترل کنیم که قادر به نوشتن روی یک فایل نیستیم ، به عنوان مثال وقتی کاربری که فرآیند node را در آن اجرا می کنیم ، آن مجوزها را ندارد.
فایل را ذخیره کرده و این برنامه Node.js را بار دیگر با دستور زیر اجرا کنید:
$ node callbackMovies.js
در پوشه ghibliMovies ، callbackMovies.csv را مشاهده خواهید کرد که دارای محتوای زیر است:
callbackMovies.csv
Castle in the Sky, 1986
Grave of the Fireflies, 1988
My Neighbor Totoro, 1988
Kiki’s Delivery Service, 1989
Only Yesterday, 1991
Porco Rosso, 1992
Pom Poko, 1994
Whisper of the Heart, 1995
Princess Mononoke, 1997
My Neighbors the Yamadas, 1999
Spirited Away, 2001
The Cat Returns, 2002
Howl’s Moving Castle, 2004
Tales from Earthsea, 2006
Ponyo, 2008
Arrietty, 2010
From Up on Poppy Hill, 2011
The Wind Rises, 2013
The Tale of the Princess Kaguya, 2013
When Marnie Was There, 2014

توجه به این نکته مهم است که ما در پاسخ به درخواست HTTP در فایل CSV خود می نویسیم. هنگامی که کد در عملکرد callback قرار دارد ، تنها پس از تکمیل درخواست HTTP برای فایل نوشته خواهد شد. اگر می خواستیم بعد از نوشتن فایل CSV خود با یک بانک اطلاعاتی ارتباط برقرار کنیم ، عملکرد غیر ناهمزمان دیگری را ایجاد می کردیم که در پاسخ به writeFile () فراخوانی می شد. هرچه کد غیر ناهمزمان بیشتری داشته باشیم ، عملکردهای callback بیشتری باید سکنی گزیده شوند.
بیایید تصور کنیم که می خواهیم پنج عملیات ناهمزمان را انجام دهیم ، هر کدام فقط در صورت کامل شدن دیگری قادر به اجرا هستند. اگر ما این را کدگذاری می کردیم ، چیزی شبیه به این داشتیم:
doSomething1(() => {
doSomething2(() => {
doSomething3(() => {
doSomething4(() => {
doSomething5(() => {
// final action
});
});
});
});
});

هنگامی که callback های تو در تو خطوط زیادی برای اجرای کد دارند ، بسیار پیچیده تر و غیرقابل خواندن می شوند. هرچه اندازه و پیچیدگی پروژه جاوا اسکریپت بزرگ تر شود ، تا زمانی که نهایتا قابل کنترل نباشد ، این اثر برجسته تر می شود. به همین دلیل ، توسعه دهندگان دیگر از callback برای انجام عملیات غیر همزمان استفاده نمی کنند. برای بهبود دستورات کد ناهمزمان ، می توانیم به جای آن از promise ها استفاده کنیم.
استفاده از promise ها برای برنامه نویسی ناهمزمان مختصر
یک promise یک موضوع JavaScript است که در آینده مقداری را به شما باز می گرداند. توابع ناهمزمان میتوانند به جای مقادیر در هم تنیده، موضوعات promise را برگردانند. اگر در آینده مقداری را دریافت کنیم ، می گوییم این promise تحقق یافته است. اگر در آینده با ارور مواجه شویم ، می گوییم این promise رد شده است. در غیر این صورت ، این promise هنوز در حالت معلق در حال کار است.
promise ها به طور کلی شکل زیر را دارند:
promiseFunction()
.then([ Callback Function for Fulfilled Promise ])
.catch([ Callback Function for Rejected Promise ])

همانطور که در این الگو نشان داده شده است ، promise ها همچنین از توابع callback استفاده می کنند. ما یک تابع callback برای متد then () داریم که وقتی یک promise برآورده می شود اجرا می شود. ما همچنین یک تابع callback برای روش catch() داریم تا خطایی را که هنگام اجرای promise اجرا می شود ، برطرف کنیم.
بیایید با بازنویسی برنامه Studio Ghibli برای استفاده از promise ها ، اولین تجربه را با promise ها بدست آوریم.
Axios یک سرویس دهنده HTTP مبتنی بر promise برای JavaScript است ، بنابراین بیایید ادامه دهیم و آن را نصب کنیم:
$ npm i axios –save
اکنون ، با ویرایشگر متن مورد نظر خود ، یک فایل جدید premMovies.js ایجاد کنید:
$ nano promiseMovies.js
برنامه ما درخواست HTTP را با axios انجام می دهد و سپس از نسخه ویژه promise داده شده مبتنی بر fs برای ذخیره در فایل جدید CSV استفاده می کند.
این کد را در premMovies.js تایپ کنید تا بتوانیم Axios را بارگذاری کنیم و یک درخواست HTTP را به فیلم API ارسال کنیم:
promiseMovies.js
const axios = require(‘axios’);

axios.get(‘https://ghibliapi.herokuapp.com/films’);

در خط اول ماژول axios را بارگذاری می کنیم ، عملکرد برگشتی را در فایل ثابت به نام axios ذخیره می کنیم. سپس از روش axios.get () برای ارسال درخواست HTTP به API استفاده می کنیم.
روش axios.get () ، promise را بر می گرداند. بگذارید این promise را زنجیره ای کنیم تا بتوانیم لیست فیلمهای Ghibli را روی کنسول چاپ کنیم:
promiseMovies.js
const axios = require(‘axios’);
const fs = require(‘fs’).promises;

axios.get(‘https://ghibliapi.herokuapp.com/films’)
.then((response) => {
console.log(‘Successfully retrieved our list of movies’);
response.data.forEach(movie => {
console.log(`${movie[‘title’]}, ${movie[‘release_date’]}`);
});
})

بگذارید آنچه را که اتفاق می افتد تجزیه کنیم. پس از درخواست HTTP GET با axios.get () ، ما از تابع then() استفاده می کنیم ، که فقط در صورت تحقق promise اجرا می شود. در این حالت ، فیلم ها را مانند مثال callbacks روی صفحه نمایش چاپ می کنیم.
برای بهبود این برنامه ، کد هایلایت شده را برای نوشتن داده های HTTP به یک فایل اضافه کنید:
promiseMovies.js
const axios = require(‘axios’);
const fs = require(‘fs’).promises;

axios.get(‘https://ghibliapi.herokuapp.com/films’)
.then((response) => {
console.log(‘Successfully retrieved our list of movies’);
let movieList = ”;
response.data.forEach(movie => {
movieList += `${movie[‘title’]}, ${movie[‘release_date’]}\n`;
});

return fs.writeFile(‘promiseMovies.csv’, movieList);
})
.then(() => {
console.log(‘Saved our list of movies to promiseMovies.csv’);
})

ما علاوه بر این ماژول fs را بار دیگر وارد می کنیم. توجه داشته باشید که پس از وارد کردن fs چگونه promise داریم. Node.js شامل نسخه مبتنی بر promise از کتابخانه fs مبتنی بر callback است، بنابراین سازگاری رو به عقب در پروژه های بعدی از بین نمیرود.
اولین عملکرد then() که پردازش درخواست HTTP را انجام می دهد ، اکنون به جای چاپ برای کنسول ، fs.writeFile () را فراخوانی می کند. از آنجا که ما نسخه fs مبتنی بر promise را وارد کردیم ، عملکرد writeFile() ما promise دیگری را برمی گرداند. به این ترتیب ، ما عملکرد then() دیگری را برای زمان تحقق promise writeFile()ایجاد می کنیم.
یک promise می تواند یک promise جدید را برگرداند و به ما امکان می دهد promise های خود را یکی پس از دیگری اجرا کنیم. این امر مسیری را برای ما فراهم می کند که چندین عملیات ناهمزمان را انجام دهیم. به این عمل، زنجیره promise گفته می شود و شبیه به callbackهای تو در تو است. then() دوم فقط پس از آنكه فایل را با موفقیت نوشتیم فراخوانی می شود.
توجه: در این مثال ، ما کد وضعیت HTTP را مانند آنچه در مثال callback انجام دادیم ، بررسی نکردیم. به طور پیش فرض ، axios در صورت دریافت کد وضعیت نشانگر خطا ، به promise خود عمل نمی کند. به همین ترتیب ، دیگر نیازی به اعتبار سنجی آن نداریم.

برای تکمیل این برنامه ، promise را با عملکرد catch() مانند چیزی که در شکل زیر هایلاین شده است زنجیر کنید:
promiseMovies.js
const axios = require(‘axios’);
const fs = require(‘fs’).promises;

axios.get(‘https://ghibliapi.herokuapp.com/films’)
.then((response) => {
console.log(‘Successfully retrieved our list of movies’);
let movieList = ”;
response.data.forEach(movie => {
movieList += `${movie[‘title’]}, ${movie[‘release_date’]}\n`;
});

return fs.writeFile(‘promiseMovies.csv’, movieList);
})
.then(() => {
console.log(‘Saved our list of movies to promiseMovies.csv’);
})
.catch((error) => {
console.error(`Could not save the Ghibli movies to a file: ${error}`);
});

اگر در زنجیره ی promise ها هیچ یک از promiseها عملی نشد، JavaScript به طور خودکار به تابع catch() می رود. به همین دلیل ما فقط یک شرط catch() داریم حتی اگر دو عملیات ناهمزمان داشته باشیم.
با اجرای دستور زیر بیایید تأیید کنیم که برنامه ما همان خروجی را تولید می کند:
$ node promiseMovies.js
در پوشه ghibliMovies ، فایل sozdaMovies.csv را مشاهده خواهید کرد که شامل موارد زیر است:
promiseMovies.csv
Castle in the Sky, 1986
Grave of the Fireflies, 1988
My Neighbor Totoro, 1988
Kiki’s Delivery Service, 1989
Only Yesterday, 1991
Porco Rosso, 1992
Pom Poko, 1994
Whisper of the Heart, 1995
Princess Mononoke, 1997
My Neighbors the Yamadas, 1999
Spirited Away, 2001
The Cat Returns, 2002
Howl’s Moving Castle, 2004
Tales from Earthsea, 2006
Ponyo, 2008
Arrietty, 2010
From Up on Poppy Hill, 2011
The Wind Rises, 2013
The Tale of the Princess Kaguya, 2013
When Marnie Was There, 2014

با promise ها ، می توانیم کد مختصرتری نسبت به callback صرف بنویسیم. زنجیره promise برای callbackها گزینه ای شفاف تر نسبت به لانه گزینی callbackها است. با این حال ، هنگامی که ما تماس های غیر همزمان برقرار میکنیم ، زنجیره promise ما طولانی تر و حفظ آن سخت تر می شود.
صریح بودن callbackها و promise ها ناشی از نیاز به ایجاد توابعی است که نتیجه کار غیر ناهمزمان را داشته باشیم. تجربه بهتر، انتظار برای نتیجه ناهمزمان و قرار دادن آن در متغیری خارج از تابع است. به این ترتیب ، می توانیم از نتایج در متغیرها استفاده کنیم بدون اینکه تابعی داشته باشیم. ما می توانیم با کلمات کلیدی async و await به این هدف برسیم.
نوشتن JavaScript با async / await
کلمات کلیدی async / await در هنگام کار با promise ها دستور دیگری را ارائه می دهند. به جای اینکه نتیجه یک promise موجود در روش then() را داشته باشیم ، نتیجه به عنوان یک مقدار مانند هر تابع دیگر بازگردانده می شود. ما یک تابع را با کلمه کلیدی async تعریف می کنیم تا به JavaScript بگوییم که این یک عملکرد ناهمزمان است که promise را برمی گرداند. از کلمه کلیدی await استفاده می کنیم تا به JavaScript بگوییم که به جای بازگرداندن خود promise هنگام اجرا ، نتایج promise را برگرداند.
به طور کلی ، استفاده از async/await این چنین است:
async function() {
await [Asynchronous Action]
}

بیایید ببینیم که چگونه استفاده از async / await می تواند برنامه Studio Ghibli ما را بهبود ببخشد. از ویرایشگر متن خود برای ایجاد و باز کردن فایل جدید asyncAwaitMovies.js استفاده کنید:
$ nano asyncAwaitMovies.js
در فایل JavaScript که به تازگی باز شده است ، بیایید با وارد کردن همان ماژول هایی که در مثال promise خود استفاده کرده ایم، شروع کنیم:
asyncAwaitMovies.js
const axios = require(‘axios’);
const fs = require(‘fs’).promises;

ورودی ها همانند premMovies.js است زیرا async / await از promise ها استفاده می کند.
اکنون ما از کلمه کلیدی async برای ایجاد تابعی با کد ناهمزمان استفاده می کنیم:
asyncAwaitMovies.js
const axios = require(‘axios’);
const fs = require(‘fs’).promises;

async function saveMovies() {}

ما یک تابع جدید به نام saveMovies () ایجاد می کنیم اما async را در ابتدای تعریف آن قرار می دهیم. این مسئله از این جهت مهم است که ما فقط می توانیم از کلمه کلیدی await در یک عملکرد غیرهمزمان استفاده کنیم.
از کلمه کلیدی await استفاده کنید تا یک درخواست HTTP ایجاد کنید که لیست فیلم ها را از Ghibli API دریافت می کند:
asyncAwaitMovies.js
const axios = require(‘axios’);
const fs = require(‘fs’).promises;

async function saveMovies() {
let response = await axios.get(‘https://ghibliapi.herokuapp.com/films’);
let movieList = ”;
response.data.forEach(movie => {
movieList += `${movie[‘title’]}, ${movie[‘release_date’]}\n`;
});
}

در عملکرد saveMovies () ما مانند گذشته درخواست HTTP را با axios.get () انجام می دهیم. این بار ، ما آن را با یک تابع then() زنجیر نمی کنیم. در عوض ، قبل از اینکه فراخوانی شود ، await را اضافه می کنیم. هنگامی که جاوا اسکریپت await را می بیند ، تنها پس از اتمام axios.get ()کد باقی مانده تابع را اجرا می کند و متغیر response را تنظیم می کند. کد دیگر داده های فیلم را ذخیره می کند بنابراین می توانیم در یک فایل بنویسیم.
بگذارید داده های فیلم را در یک فایل بنویسیم:
asyncAwaitMovies.js
const axios = require(‘axios’);
const fs = require(‘fs’).promises;

async function saveMovies() {
let response = await axios.get(‘https://ghibliapi.herokuapp.com/films’);
let movieList = ”;
response.data.forEach(movie => {
movieList += `${movie[‘title’]}, ${movie[‘release_date’]}\n`;
});
await fs.writeFile(‘asyncAwaitMovies.csv’, movieList);
}

همچنین وقتی با fs.writeFile ()در فایل مینوسیم از کلمه کلیدی await استفاده می کنیم.
برای تکمیل این عملکرد ، باید خطاهایی را پیدا کنیم که promise های ما می توانند ایجاد کنند. بیایید این کار را با کپسوله کردن کد خود در یک محفظه try/catch انجام دهیم:
asyncAwaitMovies.js
const axios = require(‘axios’);
const fs = require(‘fs’).promises;

async function saveMovies() {
try {
let response = await axios.get(‘https://ghibliapi.herokuapp.com/films’);
let movieList = ”;
response.data.forEach(movie => {
movieList += `${movie[‘title’]}, ${movie[‘release_date’]}\n`;
});
await fs.writeFile(‘asyncAwaitMovies.csv’, movieList);
} catch (error) {
console.error(`Could not save the Ghibli movies to a file: ${error}`);
}
}

از آنجا که promise ها می توانند با شکست مواجه شوند ، ما کد ناهمزمان خود را با یک عبارت try/catch رمزگذاری می کنیم. با این کار در صورت عدم موفقیت درخواست HTTP یا عملیات نوشتن فایل ، هر گونه خطایی یافت میشود.
در آخر ، بیایید تابع ناهمزمان saveMovies() را فراخوانی کنیم ، تا وقتی برنامه را با node اجرا می کنیم ، عملی شود
asyncAwaitMovies.js
const axios = require(‘axios’);
const fs = require(‘fs’).promises;

async function saveMovies() {
try {
let response = await axios.get(‘https://ghibliapi.herokuapp.com/films’);
let movieList = ”;
response.data.forEach(movie => {
movieList += `${movie[‘title’]}, ${movie[‘release_date’]}\n`;
});
await fs.writeFile(‘asyncAwaitMovies.csv’, movieList);
} catch (error) {
console.error(`Could not save the Ghibli movies to a file: ${error}`);
}
}

saveMovies();

در یک نگاه ، مانند یک بلوک کد همزمان JavaScript به نظر می رسد. عملکردهای کمتری در اطراف آن منتقل می شود که کمی ساده تر به نظر می رسد. این ترفندهای کوچک باعث می شود کد ناهمزمان با async/await راحت تر حفظ شود.
با وارد کردن این قسمت در ترمینال خود ، این تکرار برنامه را امتحان کنید:
$ node asyncAwaitMovies.js
در پوشه ghibliMovies ، فایل جدید asyncAwaitMovies.csv با محتوای زیر ایجاد می شود:
asyncAwaitMovies.csv
Castle in the Sky, 1986
Grave of the Fireflies, 1988
My Neighbor Totoro, 1988
Kiki’s Delivery Service, 1989
Only Yesterday, 1991
Porco Rosso, 1992
Pom Poko, 1994
Whisper of the Heart, 1995
Princess Mononoke, 1997
My Neighbors the Yamadas, 1999
Spirited Away, 2001
The Cat Returns, 2002
Howl’s Moving Castle, 2004
Tales from Earthsea, 2006
Ponyo, 2008
Arrietty, 2010
From Up on Poppy Hill, 2011
The Wind Rises, 2013
The Tale of the Princess Kaguya, 2013
When Marnie Was There, 2014

اکنون برای مدیریت کد ناهمزمان از ویژگیهای async/await در JavaScript استفاده کرده ایم.
نتیجه
در این آموزش ، شما یاد گرفتید که چگونه JavaScript توابع اجرایی و مدیریت عملیات ناهمزمان را با حلقه رویداد کنترل می کند. سپس برنامه هایی را نوشتید که پس از درخواست HTTP برای داده های فیلم با استفاده از تکنیک های مختلف برنامه نویسی ناهمگام ، فایل CSV ایجاد کرده اند. ابتدا ، از رویکرد منسوخ بر اساس callback استفاده کردید. سپس از promise ها ، و در نهایت async/await استفاده کردید که ترکیب promise را خلاصه تر میکند.
با درک کنونی خود از کد ناهمزمان با Node.js ، می توانید برنامه هایی را تهیه کنید که از برنامه نویسی ناهمزمان بهره مند میشوند ، مانند برنامه هایی که به تماس های API وابسته اند. به این لیست از API های عمومی نگاهی بیندازید. برای استفاده از آنها ، شما باید درخواستهای HTTP ناهمزمان مانند آنچه در این آموزش انجام دادیم را ایجاد کنید. برای مطالعه بیشتر ، سعی کنید برنامه ای بسازید که از این API ها استفاده کند تا تکنیک هایی را که در اینجا آموخته اید تمرین کنید.

 

 

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

 

behnam gol mohamadi بازدید : 16 یکشنبه 26 مرداد 1399 نظرات (0)

Cron یک برنامه زمانبندی شغلی مبتنی بر زمان است که در سیستم عاملهای یونیکس مانند، از جمله توزیع های لینوکس یافت می شود. Cron در پس زمینه اجرا می شود و کارهای برنامه ریزی شده با Cron ، که به صورت “cron jobs” شناخته میشوند به طور خودکار انجام می گردند ، و باعث می شود cron برای اتوماسیون کارهای مربوط به تعمیر و نگهداری مفید باشد.
این راهنما مروری بر نحوه برنامه ریزی کارها با استفاده از دستور ویژه cron ارائه می دهد. همچنین به چندین میانبر می رود که می توان برای نوشتن و فهم جدول کارها از آنها استفاده کرد.
پیش نیازها
برای تکمیل این راهنما ، به رایانه ای نیاز دارید که CentOS 8 در آن در حال اجرا باشد. این کامپیوتر می تواند دستگاه محلی شما ، یک ماشین مجازی یا یک سرور مجازی خصوصی مجازی باشد.
صرف نظر از این که از چه نوع رایانه ای برای دنبال کردن این راهنما استفاده می کنید ، باید یک کاربر غیر ریشه با امتیازات ادمین و پیکربندی شده داشته باشد. برای انجام این کار ، راهنمای راه اندازی سرور مجازی اولیه ما را برای CentOS 8 دنبال کنید.
نصب Cron
تقریباً هر توزیع لینوکس به صورت پیش فرض شکلی از cron را به صورت نصب شده دارد. اما ، اگر از دستگاه CentOS 8 استفاده می کنید که cron در آن نصب نشده است ، می توانید آن را با استفاده از dnfنصب کنید.
قبل از نصب cron در دستگاه CentOS 8 ، ایندکس پکیج محلی کامپیوتر را به روز کنید:
$ sudo dnf update

سپس cron را با دستور زیر نصب کنید:
$ sudo dnf install crontabs
این دستور اعلانی صادر میکند که از شما میخواهد تأیید کنید که می خواهید بسته crontabs و متعلقات آن را نصب کنید یا خیر. با فشار دادن y و سپس ENTER این کار را انجام دهید.

با این کار cron روی سیستم شما نصب می شود ، اما لازم است که Daemon را بصورت دستی شروع کنید. همچنین باید اطمینان داشته باشید که هر زمان که سرور مجازی بوت شود ، برای اجرا تنظیم شده است. می توانید هر دو این کارها را با دستور systemctl انجام دهید.

برای شروع cron daemon ، دستور زیر را اجرا کنید:
$ sudo systemctl start crond.service

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

پس از آن ، cron بر روی سیستم شما نصب می شود و برای شروع برنامه ریزی کارها برای شما آماده است.
درک نحوه کار Cron
وظایف cron در یک فایل ویژه به اسم crontab ثبت و مدیریت می شوند. هر پروفایل کاربر در سیستم می تواند crontab مخصوص به خود را داشته باشد تا بتواند کارهایی را ترتیب دهد ، که تحت / var / spool / cron ذخیره می شود.
برای برنامه ریزی یک عملکرد ، فقط کافی است crontab خود را برای ویرایش باز کنید و یک کار نوشته شده در قالب یک cron expression را اضافه کنید. ترکیب عبارات cron را می توان به دو عنصر تقسیم کرد: برنامه ریزی و دستور برای اجرا.
این دستور می تواند تقریباً هر دستوری باشد که معمولاً در خط فرمان اجرا می کنید. مولفه برنامه ریزی دستور به 5 قسمت مختلف تقسیم می شود که به ترتیب زیر نوشته می شوند:
زمان مقادیر مجاز
دقیقه 0-59
ساعت 0-23
روزی از ماه 1-31
ماه 1-12 or JAN-DEC
روز هفته 0-6 or SUN-SAT

وظایفی که با هم در یک crontab برنامه ریزی شده اند به صورت زیر ساختار یافته اند:
minute hour day_of_month month day_of_week command_to_run

در اینجا یک مثال کاربردی از یک عبارت cron آورده شده است. این عبارت هر سه شنبه ساعت 5:30 دقیقه بعد از ظهر فرمان http://www.google.com را اجرا می کند:
30 17 * * 2 curl http://www.google.com
همچنین چند کاراکتر ویژه وجود دارد که می توانید در جزء برنامه یک عبارت Cron درج کنید تا برنامه ریزی ساده تر شود:
*: در عبارات Cron ، ستاره یک متغیر عام است که “all” را نشان می دهد. بنابراین ، یک کار که با * * * * * … برنامه ریزی شده هر دقیقه از هر ساعت از هر روز از هر ماه است.
،: کاما مقادیر برنامه ریزی را برای تشکیل لیست می شکنند. اگر می خواهید یک کار در ابتدا و اواسط هر ساعت انجام شود، به جای نوشتن دو وظیفه جداگانه (به عنوان مثال ، 0 * * * * … و 30 * * * * …) ، می توانید همان عملکرد مشابه را با یک کار یعنی (0,30 * * * * …) به دست آورید.
-: یک خط فاصله طیف وسیعی از مقادیر را در قسمت برنامه نمایش می دهد. به جای داشتن 30 کار برنامه ریزی شده جداگانه برای یک فرمان ،که می خواهید 30 دقیقه اول هر ساعت اجرا شود (مانند 0 * * * * …، 1 * * * * … ، 2 * * * * … ، و غیره) ، می توانید فقط آن را به عنوان 0-29 * * * * … برنامه ریزی کنید …
/: برای بیان یک مقدار مرحله می توانید از فوروارد اسلش با ستاره استفاده کنید. به عنوان مثال ، به جای نوشتن 8 وظیفه جداگانه برای اجرای یک فرمان هر سه ساعت یک بار (مانند 0 ، 0 * * * * … ، 0 3 * * * … ، 0 6 * * * * … ، و غیره) ، می توانید آن را به صورت برنامه ریزی 0 */3 * * * …. کنید .
توجه: شما نمی توانید مقادیر گام را به صورت اختیاری بیان کنید. فقط می توانید از اعداد صحیح استفاده کنید که به طور مساوی در محدوده مجاز از قسمت مورد نظر تقسیم شوند. به عنوان مثال ، در قسمت “ساعت” فقط می توانید یک فوروارد اسلش را با 1 ، 2 ، 3 ، 4 ، 6 ، 8 یا 12 دنبال کنید.
در اینجا چند نمونه دیگر از نحوه استفاده از مؤلفه برنامه ریزی cron آورده شده است:
* * * * – فرمان را هر دقیقه اجرا کنید.
12 * * * * – دستور را 12 دقیقه بعد از هر ساعت اجرا کنید.
0,15,30,45 * * * * – فرمان را هر 15 دقیقه یک بار اجرا کنید.
/ 15 * * * * – دستور را هر 15 دقیقه یک بار اجرا کنید.
0 4 * * * – دستور را هر روز در ساعت 4 صبح اجرا کنید.
0 4 * * 2-4 – فرمان را هر سه شنبه ، چهارشنبه و پنجشنبه ساعت 4:00 صبح اجرا کنید.
20,40 */8 * 7-12 * – فرمان را در 20 و 40 دقیقه هر ساعت 8 هر روز از 6 ماه گذشته سال اجرا کنید.
اگر هر یک از این موارد برای شما گیج کننده ها بود یا برای برنامه ریزی برای کارهای مهم خود کمک میخواهید ، Cronitor یک ویرایشگر برنامه مفید Cron به نام “Crontab Guru” را ارائه می دهد که می توانید برای بررسی صحت برنامه های cron خود استفاده کنید.
مدیریت Crontabs
وقتی برنامه خود را تنظیم کردید و کاری را که می خواهید اجرا کنید، تعیین نمودید، باید آن را در جایی قرار دهید که Daemon شما قادر به خواندن آن باشد.
همانطور که قبلاً ذکر شد ، crontab یک فایل ویژه است که زمان بندی کارها را اجرا می کند. اما ، این کارها به طور مستقیم ویرایش نمیشوند. بلکه ، توصیه می شود از دستور crontab استفاده کنید. این کار به شما امکان می دهد crontab پروفایل کاربر خود را بدون تغییر امتیازات خود با sudo ، ویرایش کنید. دستور crontab همچنین در مورد خطاهای دستوری که در crontab دارید به شما اطلاع می دهد ، در حالی که ویرایش مستقیم آن این کار را نمیکند.
شما می توانید crontab خود را با دستور زیر ویرایش کنید:
$ crontab -e
با این کار ، crontab را در ویرایشگر متن پیش فرض پروفایل کاربرتان باز می کنید.
توجه: در سرور مجازی های جدید CentOS 8 ، دستور crontab -e به طور پیش فرض crontab کاربر شما را با vi باز می کند. vi یک ویرایشگر متن بسیار قدرتمند و قابل انعطاف است ، اما می تواند برای کاربرانی که تجربه کار با آن را ندارند ، کمی خسته کننده باشد.
اگر مایل به استفاده از ویرایشگر متن قابل دسترس تر به عنوان ویرایشگر پیش فرض crontab خود هستید ، می توانید nano را به همین ترتیب نصب و پیکربندی کنید.
برای این کار ، nano را با dnf نصب کنید:
$ sudo dnf install nano

وقتی از شما خواسته شد ، y و سپس ENTER را فشار دهید تا تأیید کنید که می خواهید nano نصب کنید.
برای تنظیم نانو به عنوان ویرایشگر تصویری پیش فرض پروفایل کاربر ، فایل .bash_profile را برای ویرایش باز کنید. اکنون که آن را نصب کرده اید ، می توانید این کار را با nano انجام دهید:
$ nano ~/.bash_profile
در انتهای فایل، خط زیر را اضافه کنید:
~/.bash_profile
. . .
export VISUAL=”nano”

این کار متغیر محیط visual را روی nano تنظیم میکند. visual یک متغیر محیط یونیکس است که بسیاری از برنامه ها از جمله crontab را برای ویراشگر فایل به کار میگیرد. پس از افزودن این خط، فایل را با فشردن CTRL + X، y و سپس enter ذخیره کنید و ببندید.
سپس را .bash_profile دوباره لود کنید تا shell تغییر جدید را دریافت کند:
$ . ~/.bash_profile

هنگامی که در ویرایشگر هستید ، می توانید برنامه خود را با تعریف هر کار در یک خط جدید وارد کنید. در غیر این صورت ، می توانید فعلا crontab را ذخیره کنید و ببندید. اگر crontab خود را با vi ، ویرایشگر پیش فرض CentOS 8 باز کردید ، می توانید این کار را با فشار دادن ESC انجام دهید تا مطمئن شوید در حالت فرمان vi هستید ، سپس x را تایپ کنید و ENTER را فشار دهید.
توجه داشته باشید که در سیستم های لینوکس ، crontab دیگری وجود دارد که تحت دایرکتوری / etc / ذخیره شده است. این crontab یک نوع سیستم گسترده است که دارای یک فیلد اضافی است که برای آن باید مشخصات کاربری هر کار cron تحت آن اجرا شود. این آموزش بر روی crontab های اختصاصی کاربر تمرکز دارد ، اما اگر می خواهید crontab سیستم گسترده را ویرایش کنید ، می توانید با دستور زیر این کار را انجام دهید:
$ sudo nano /etc/crontab
اگر می خواهید محتوای crontab خود را مشاهده کنید ، اما آن را ویرایش نکنید ، می توانید از دستور زیر استفاده کنید:
$ crontab -l
می توانید crontab خود را با دستور زیر پاک کنید:
هشدار: دستور زیر از شما نمی خواهد تأیید کنید که می خواهید crontab خود را پاک کنید یا خیر. فقط در صورتی آن را اجرا کنید که مطمئن هستید می خواهید آن را پاک کنید .
$ crontab -r
این دستور بلافاصله crontab کاربر را حذف می کند. با این وجود، می توانید از فلگ -i استفاده کنید تا این فرمان از شما تأیید بخواهد که آیا واقعاً می خواهید crontab کاربر را حذف کنید:
$ crontab -r -i
Output
crontab: really delete sammy’s crontab?

هنگامی که از شما این تایید خواسته شد ، باید y را وارد کنید تا crontab حذف شود یا n را وارد کنید تا کنسل شود.
مدیریت خروجی عملکرد Cron
از آنجا که کارهای Cron در پس زمینه اجرا می شوند ، همیشه مشخص نیست که آیا با موفقیت اجرا میشوند یا خیر. اکنون که می دانید چگونه از دستور crontab استفاده کنید و چگونه یک کار cron را برنامه ریزی نمایید، می توانید با روش های مختلف هدایت مجدد خروجی کارهای cron شروع به آزمایش کنید تا به شما در ردیابی موفقیت آمیز بودن آنها کمک کند.
اگر یک  mail transfer agent – مانند Sendmail – در سرور مجازی خود نصب و به درستی پیکربندی کرده اید ، می توانید خروجی کارهای cron را به آدرس ایمیل مرتبط با پروفایل کاربر لینوکس خود ارسال کنید. همچنین می توانید با ارائه تنظیمات MAILTO در بالای crontab ، آدرس ایمیل را به صورت دستی مشخص کنید.
به عنوان مثال ، می توانید خطوط زیر را به crontab اضافه کنید. این خطوط شامل عبارت MAILTO به همراه یک آدرس ایمیل مثال میباشد، و همچنین یک دستورالعمل SHELL که به shell میگوید اجرا شود ( در این مثال bash ) ، یک دستورالعمل HOME با اشاره به مسیری که در آن می توانید جستجوی باینری cron را انجام دهید، و یک کار تکی cron :
. . .

MAILTO=”example@digitalocean.com”
SHELL=/bin/bash
HOME=/

* * * * * echo ‘Run this command every minute’

این کار خاص، دستور “هر دقیقه این دستور را اجرا کن” را به همراه دارد و آن خروجی هر دقیقه به آدرس ایمیل مشخص شده پس از دستورالعمل MAILTO ارسال می شود.
همچنین می توانید برای جلوگیری از دریافت ایمیل با خروجی ، خروجی یک کار cron را به یک فایل log یا به یک مکان خالی هدایت کنید.
برای افزودن خروجی یک دستور برنامه ریزی شده در یک فایل log ، >> را به انتهای فرمان اضافه کنید که به دنبال آن نام و مکان یک فایل log به انتخاب شما قرار میگیرد ، مانند این:
* * * * * echo ‘Run this command every minute’ >> /directory/path/file.log

بهتر است بگوییم شما می خواهید از cron برای اجرای یک اسکریپت استفاده کنید اما آن را در پس زمینه اجرا کنید. برای این کار ، می توانید خروجی اسکریپت را به یک مکان خالی ، مانند / dev / null هدایت کنید که بلافاصله تمام داده های نوشته شده برای آن را حذف می کند. به عنوان مثال ، کار cron زیر یک اسکریپت PHP را اجرا می کند و آن را در پس زمینه اجرا می کند:
* * * * * /usr/bin/php /var/www/domain.com/backup.php > /dev/null 2>&1

این کار cron همچنین خطای استاندارد را – که با 2 نمایش داده میشود- به خروجی استاندارد( >&1) هدایت می کند. از آنجا که خروجی استاندارد در حال حاضر به / dev / null هدایت می شود ، اساساً به اسکریپت اجازه می دهد تا بی صدا اجرا شود. حتی اگر crontab حاوی جمله MAILTO باشد ، خروجی این فرمان به آدرس ایمیل مشخص شده ارسال نمی شود.
محدود کردن دسترسی
شما می توانید کاربران مجاز به استفاده از دستور crontab را با فایل های cron.allow و cron.deny مدیریت کنید، که هر دو در فهرست / etc / ذخیره شده اند. اگر فایل cron.deny وجود داشته باشد ، هر کاربر ذکر شده در آن از ویرایش crontab خود منع خواهد شد. اگر cron.allow وجود داشته باشد ، فقط کاربران ذکر شده در آن قادر به ویرایش crontab های خود هستند. اگر هر دو فایل وجود داشته باشد و در هر یک از کاربران یکسان قرار داشته باشد ، فایل cron.allow بر cron.deny غلبه می کند و کاربر قادر به ویرایش crontab خود خواهد بود.
به عنوان مثال ، برای رد دسترسی برای همه کاربران و سپس دسترسی به کاربر ishmael ، می توانید از ترتیب دستور زیر استفاده کنید:
$ sudo echo ALL >>/etc/cron.deny

$ sudo echo ishmael >>/etc/cron.allow
ابتدا، با افزودن ALL به فایل cron.deny ، کلیه کاربران را قفل می کنیم. سپس با اضافه کردن نام کاربری به فایل cron.allow ، به پروفایل کاربر ishmael برای اجرای کارهای cron دسترسی می دهیم.
توجه داشته باشید که اگر یک کاربر دارای امتیازات sudo است ، می تواند crontab کاربر دیگری را با دستور زیر ویرایش کند:
$ sudo crontab -u user -e
با این حال ، اگر cron.deny وجود داشته باشد و کاربرها در آن لیست شده باشند و در cron.allow ذکر نشده باشند ، پس از اجرای دستور قبلی ، خطای زیر را دریافت خواهید کرد:
Output
The user user cannot use this program (crontab)

به صورت پیش فرض، بیشتر cron daemon ها فرض خواهند کرد که همه کاربران به cron دسترسی دارند مگر اینکه cron.allow یا cron.deny وجود داشته باشد.
دستور ویژه
فرمان های کوتاه متعددی وجود دارند که می توانید در فایل crontab خود استفاده کنید تا به ساده سازی برنامه ریزی کاری کمک کند. آنها در اصل میانبرهایی هستند برای برنامه ریزی عددی معادل که به صورت زیر مشخص شده:
Shortcut Shorthand for
@hourly 0 * * * *
@daily 0 0 * * *
@weekly 0 0 * * 0
@monthly 0 0 1 * *
@yearly 0 0 1 1 *

توجه: همه cron daemon ها (به ویژه نسخه های قدیمی) نمی توانند این ترکیب را تجزیه کنند ، بنابراین قبل از اعتماد به آن ، دوبار بررسی کنید.
علاوه بر این، هر زمان که سرور مجازی شروع به کار کند، @reboot همه فرمان های بعد از خود را اجرا می کند:
@reboot echo “System start up”

استفاده از این میانبرها در هر زمان ممکن می تواند به تفسیر برنامه کارها در crontab شما کمک کند.
نتیجه
Cron یک ابزار انعطاف پذیر و قدرتمند است که می تواند بار بسیاری از وظایف مرتبط با مدیریت سیستم را کاهش دهد. هنگامی که با اسکریپت های shell ترکیب شود ، می توانید کارهایی را که معمولاً خسته کننده یا پیچیده هستند ، به طور خودکار انجام دهید.

 

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

behnam gol mohamadi بازدید : 19 یکشنبه 26 مرداد 1399 نظرات (0)

Eclipse Theia یک Cloud IDE قابل توسعه است که بر روی یک سرور مجازی از راه دور اجرا میشود و از یک مرورگر وب قابل دسترسی است. از لحاظ بصری ، به گونه ای طراحی شده است که به طور مشابه با Microsoft Visual Studio Code دیده شود و با آن کار شود. آنچه Eclipse Theia را از دیگر نرم افزارهای cloud IDE جدا می کند قابلیت توسعه آن است. می توان آن را با استفاده از افزونه های سفارشی اصلاح کرد ، که به شما امکان می دهد یک Cloud IDE متناسب با نیازهای خود تهیه کنید.
در این آموزش ،Eclipse Theia را با استفاده از Docker Compose ، به سرور مجازی Ubuntu 18.04 خود منتقل خواهید کرد. با استفاده از nginx-proxy ، یک سیستم خودکار برای Docker ، آن را در دامنه خود قرار می دهید و با استفاده از یک گواهی نامه Let Encrypt TLS ، که با استفاده از افزونه تخصصی آن تهیه می کنید ، آن را ایمن خواهید کرد. برای مشاهده نسخه جزیی تر این آموزش به راهنمای نحوه تنظیم پلتفرم Eclipse Theia Cloud IDE روی اوبونتو 18.04 مراجعه کنید.
پیش نیازها
⦁ یک سرور مجازی Ubuntu 18.04 با امتیازات اصلی و یک حساب ثانویه و غیر ریشه طبق راهنمای تنظیم اولیه سرور مجازی ما برای Ubuntu 18.04
⦁ Docker نصب شده روی سرور مجازی تان. مرحله 1 و مرحله 2 نحوه نصب Docker را در اوبونتو 18.04 دنبال کنید.
⦁ Docker Compose که روی سرور مجازی شما نصب باشد. مرحله 1 نحوه نصب Docker Compose را در اوبونتو 18.04 دنبال کنید.
⦁ نام دامنه کاملاً ثبت شده. در این آموزش کلا از theia.your_domain استفاده می شود.
⦁ یک ثبت A DNS با theia.your_domain که به آدرس IP عمومی سرور مجازی شما اشاره میکند. برای جزئیات بیشتر در مورد چگونگی اضافه کردن آنها می توانید این معرفی را در DigitalOcean DNS دنبال کنید.
مرحله 1 – استفاده از پروکسی nginx با Let’s Encrypt
دیرکتوری برای ذخیره داده ها برای Eclipse Theia ایجاد کنید
$ mkdir ~/eclipse-theia
به آن مراجعه کنید:
⦁ $ cd ~/eclipse-theia
nginx-proxy-compose.yaml را برای ذخیره پیکربندی Docker Compose برای nginx-proxy ایجاد کنید:
⦁ $ nano nginx-proxy-compose.yaml

خطوط زیر را اضافه کنید:
~/eclipse-theia/nginx-proxy-compose.yaml
version: ‘2’

services:
nginx-proxy:
restart: always
image: jwilder/nginx-proxy
ports:
– “80:80”
– “443:443”
volumes:
– “/etc/nginx/htpasswd:/etc/nginx/htpasswd”
– “/etc/nginx/vhost.d”
– “/usr/share/nginx/html”
– “/var/run/docker.sock:/tmp/docker.sock:ro”
– “/etc/nginx/certs”

letsencrypt-nginx-proxy-companion:
restart: always
image: jrcs/letsencrypt-nginx-proxy-companion
volumes:
– “/var/run/docker.sock:/var/run/docker.sock:ro”
volumes_from:
– “nginx-proxy”

در اینجا شما دو سرویس را تعریف می کنید که Docker Compose اجرا خواهد کرد ، nginx-proxy و همراه آن Let’s Encrypt. برای پروکسی ، jwilder / nginx-proxy را به عنوان تصویر مشخص میکنید، پورت های HTTP و HTTPS را نقشه برداری می کنید ، و حجم هایی را تعریف می کنید که در زمان اجرا در دسترس باشند.
فایل را ذخیره کنید و ببندید.
پیکربندی را به کار بگیرید:
⦁ docker-compose -f nginx-proxy-compose.yaml up -d

خروجی نهایی اینگونه خواهد بود:
Output
Creating network “eclipse-theia_default” with the default driver
Pulling nginx-proxy (jwilder/nginx-proxy:)…
latest: Pulling from jwilder/nginx-proxy
8d691f585fa8: Pull complete
5b07f4e08ad0: Pull complete

Digest: sha256:dfc0666b9747a6fc851f5fb9b03e65e957b34c95d9635b4b5d1d6b01104bde28
Status: Downloaded newer image for jwilder/nginx-proxy:latest
Pulling letsencrypt-nginx-proxy-companion (jrcs/letsencrypt-nginx-proxy-companion:)…
latest: Pulling from jrcs/letsencrypt-nginx-proxy-companion
89d9c30c1d48: Pull complete
668840c175f8: Pull complete

Digest: sha256:a8d369d84079a923fdec8ce2f85827917a15022b0dae9be73e6a0db03be95b5a
Status: Downloaded newer image for jrcs/letsencrypt-nginx-proxy-companion:latest
Creating eclipse-theia_nginx-proxy_1 … done
Creating eclipse-theia_letsencrypt-nginx-proxy-companion_1 … done

مرحله 2 – به کارگیری Eclipse Theia دوکرایز شده
nginx-proxy انتظار دارد که ترکیب های ورود به سیستم در فایلی پس از دامنه نمایش داده شده ، با فرمت htpasswd قرار بگیرند و در زیر فهرست / etc / nginx / htpasswd در کانتینر ذخیره شوند.
نصب htpasswd:
⦁ $ sudo apt install apache2-utils
بسته apache2-utils حاوی برنامه htpasswd است.
دیرکتوری / etc / nginx / htpasswd را ایجاد کنید:
⦁ $ sudo mkdir -p /etc/nginx/htpasswd
یک فایل برای ذخیره ورودها به سیستم برای دامنه خود ایجاد کنید:
⦁ $ sudo touch /etc/nginx/htpasswd/theia.your-domain
دستور زیر را با نام کاربری و رمز عبور اجرا کنید:
⦁ $ sudo htpasswd /etc/nginx/htpasswd/theia.your-domain username
htpasswd در انتهای فایل ، نام کاربری و جفت رمز عبور را اضافه می کند.
پیکربندی را برای استقرار Eclipse Theia ایجاد کنید:
⦁ $ nano eclipse-theia-compose.yaml
خطوط زیر را اضافه کنید:
~/eclipse-theia/eclipse-theia-compose.yaml
version: ‘2.2’

services:
eclipse-theia:
restart: always
image: theiaide/theia:next
init: true
environment:
– VIRTUAL_HOST=theia.your-domain
– LETSENCRYPT_HOST=theia.your-domain

شما یک سرویس واحد به نام eclipse-theia را با restart تنظیم شده روی always و theiaide/theia:next به عنوان تصویر کانتینر تعریف می کنید. همچنین init را روی true تنظیم میکنید. سپس دو متغیر محیط را در بخش environment مشخص می کنید: VIRTUAL_HOST و LETSENCRYPT_HOST.
فایل را ذخیره کنید و ببندید.
اکنون با اجرای دستور زیر Eclipse Theia را به کار بگیرید:
⦁ $ docker-compose -f eclipse-theia-compose.yaml up -d
خروجی نهایی مشابه زیر خواهد بود:
Output

Pulling eclipse-theia (theiaide/theia:next)…
next: Pulling from theiaide/theia
63bc94deeb28: Pull complete
100db3e2539d: Pull complete

Digest: sha256:c36dff04e250f1ac52d13f6d6e15ab3e9b8cad9ad68aba0208312e0788ecb109
Status: Downloaded newer image for theiaide/theia:next
Creating eclipse-theia_eclipse-theia_1 … done

به دامنه مورد استفاده برای Eclipse Theia بروید. مرورگر شما اعلانی را به شما نشان می دهد که از شما خواسته می شود وارد شوید. Eclipse Theia را وارد کرده و GUI ویرایشگر آن را مشاهده خواهید کرد. همچنین یک پدلاک را مشاهده خواهید کرد که نشان می دهد اتصال امن است.

نتیجه
اکنون Eclipse Theia ، یک cloud IDE همه کاره را با استفاده از Docker Compose و nginx-proxy بر روی سرور مجازی Ubuntu 18.04 خود نصب کرده اید. شما آن را با مجوز رایگان Let’s Encrypt TLS ایمن کرده اید و نمونه ای را تنظیم کرده اید تا نیاز به اعتبار ورود به سیستم از طرف کاربر داشته باشید. می توانید به صورت جداگانه روی کد منبع خود و مطالب آن کار کنید و یا با تیم خود همکاری کنید. در صورت نیاز به قابلیت های بیشتر ، می توانید نسخه دیگری از Eclipse Theia خود را نیز ایجاد کنید. برای کسب اطلاعات بیشتر در مورد چگونگی انجام این کار ، به مطالب Theia مراجعه نمایید.

Eclipse Theia یک Cloud IDE قابل توسعه است که بر روی یک سرور مجازی از راه دور اجرا میشود و از یک مرورگر وب قابل دسترسی است. از لحاظ بصری ، به گونه ای طراحی شده است که به طور مشابه با Microsoft Visual Studio Code دیده شود و با آن کار شود. آنچه Eclipse Theia را از دیگر نرم افزارهای cloud IDE جدا می کند قابلیت توسعه آن است. می توان آن را با استفاده از افزونه های سفارشی اصلاح کرد ، که به شما امکان می دهد یک Cloud IDE متناسب با نیازهای خود تهیه کنید.
در این آموزش ،Eclipse Theia را با استفاده از Docker Compose ، به سرور مجازی Ubuntu 18.04 خود منتقل خواهید کرد. با استفاده از nginx-proxy ، یک سیستم خودکار برای Docker ، آن را در دامنه خود قرار می دهید و با استفاده از یک گواهی نامه Let Encrypt TLS ، که با استفاده از افزونه تخصصی آن تهیه می کنید ، آن را ایمن خواهید کرد. برای مشاهده نسخه جزیی تر این آموزش به راهنمای نحوه تنظیم پلتفرم Eclipse Theia Cloud IDE روی اوبونتو 18.04 مراجعه کنید.
پیش نیازها
⦁ یک سرور مجازی Ubuntu 18.04 با امتیازات اصلی و یک حساب ثانویه و غیر ریشه طبق راهنمای تنظیم اولیه سرور مجازی ما برای Ubuntu 18.04
⦁ Docker نصب شده روی سرور مجازی تان. مرحله 1 و مرحله 2 نحوه نصب Docker را در اوبونتو 18.04 دنبال کنید.
⦁ Docker Compose که روی سرور مجازی شما نصب باشد. مرحله 1 نحوه نصب Docker Compose را در اوبونتو 18.04 دنبال کنید.
⦁ نام دامنه کاملاً ثبت شده. در این آموزش کلا از theia.your_domain استفاده می شود.
⦁ یک ثبت A DNS با theia.your_domain که به آدرس IP عمومی سرور مجازی شما اشاره میکند. برای جزئیات بیشتر در مورد چگونگی اضافه کردن آنها می توانید این معرفی را در DigitalOcean DNS دنبال کنید.
مرحله 1 – استفاده از پروکسی nginx با Let’s Encrypt
دیرکتوری برای ذخیره داده ها برای Eclipse Theia ایجاد کنید
$ mkdir ~/eclipse-theia
به آن مراجعه کنید:
⦁ $ cd ~/eclipse-theia
nginx-proxy-compose.yaml را برای ذخیره پیکربندی Docker Compose برای nginx-proxy ایجاد کنید:
⦁ $ nano nginx-proxy-compose.yaml

خطوط زیر را اضافه کنید:
~/eclipse-theia/nginx-proxy-compose.yaml
version: ‘2’

services:
nginx-proxy:
restart: always
image: jwilder/nginx-proxy
ports:
– “80:80”
– “443:443”
volumes:
– “/etc/nginx/htpasswd:/etc/nginx/htpasswd”
– “/etc/nginx/vhost.d”
– “/usr/share/nginx/html”
– “/var/run/docker.sock:/tmp/docker.sock:ro”
– “/etc/nginx/certs”

letsencrypt-nginx-proxy-companion:
restart: always
image: jrcs/letsencrypt-nginx-proxy-companion
volumes:
– “/var/run/docker.sock:/var/run/docker.sock:ro”
volumes_from:
– “nginx-proxy”

در اینجا شما دو سرویس را تعریف می کنید که Docker Compose اجرا خواهد کرد ، nginx-proxy و همراه آن Let’s Encrypt. برای پروکسی ، jwilder / nginx-proxy را به عنوان تصویر مشخص میکنید، پورت های HTTP و HTTPS را نقشه برداری می کنید ، و حجم هایی را تعریف می کنید که در زمان اجرا در دسترس باشند.
فایل را ذخیره کنید و ببندید.
پیکربندی را به کار بگیرید:
⦁ docker-compose -f nginx-proxy-compose.yaml up -d

خروجی نهایی اینگونه خواهد بود:
Output
Creating network “eclipse-theia_default” with the default driver
Pulling nginx-proxy (jwilder/nginx-proxy:)…
latest: Pulling from jwilder/nginx-proxy
8d691f585fa8: Pull complete
5b07f4e08ad0: Pull complete

Digest: sha256:dfc0666b9747a6fc851f5fb9b03e65e957b34c95d9635b4b5d1d6b01104bde28
Status: Downloaded newer image for jwilder/nginx-proxy:latest
Pulling letsencrypt-nginx-proxy-companion (jrcs/letsencrypt-nginx-proxy-companion:)…
latest: Pulling from jrcs/letsencrypt-nginx-proxy-companion
89d9c30c1d48: Pull complete
668840c175f8: Pull complete

Digest: sha256:a8d369d84079a923fdec8ce2f85827917a15022b0dae9be73e6a0db03be95b5a
Status: Downloaded newer image for jrcs/letsencrypt-nginx-proxy-companion:latest
Creating eclipse-theia_nginx-proxy_1 … done
Creating eclipse-theia_letsencrypt-nginx-proxy-companion_1 … done

مرحله 2 – به کارگیری Eclipse Theia دوکرایز شده
nginx-proxy انتظار دارد که ترکیب های ورود به سیستم در فایلی پس از دامنه نمایش داده شده ، با فرمت htpasswd قرار بگیرند و در زیر فهرست / etc / nginx / htpasswd در کانتینر ذخیره شوند.
نصب htpasswd:
⦁ $ sudo apt install apache2-utils
بسته apache2-utils حاوی برنامه htpasswd است.
دیرکتوری / etc / nginx / htpasswd را ایجاد کنید:
⦁ $ sudo mkdir -p /etc/nginx/htpasswd
یک فایل برای ذخیره ورودها به سیستم برای دامنه خود ایجاد کنید:
⦁ $ sudo touch /etc/nginx/htpasswd/theia.your-domain
دستور زیر را با نام کاربری و رمز عبور اجرا کنید:
⦁ $ sudo htpasswd /etc/nginx/htpasswd/theia.your-domain username
htpasswd در انتهای فایل ، نام کاربری و جفت رمز عبور را اضافه می کند.
پیکربندی را برای استقرار Eclipse Theia ایجاد کنید:
⦁ $ nano eclipse-theia-compose.yaml
خطوط زیر را اضافه کنید:
~/eclipse-theia/eclipse-theia-compose.yaml
version: ‘2.2’

services:
eclipse-theia:
restart: always
image: theiaide/theia:next
init: true
environment:
– VIRTUAL_HOST=theia.your-domain
– LETSENCRYPT_HOST=theia.your-domain

شما یک سرویس واحد به نام eclipse-theia را با restart تنظیم شده روی always و theiaide/theia:next به عنوان تصویر کانتینر تعریف می کنید. همچنین init را روی true تنظیم میکنید. سپس دو متغیر محیط را در بخش environment مشخص می کنید: VIRTUAL_HOST و LETSENCRYPT_HOST.
فایل را ذخیره کنید و ببندید.
اکنون با اجرای دستور زیر Eclipse Theia را به کار بگیرید:
⦁ $ docker-compose -f eclipse-theia-compose.yaml up -d
خروجی نهایی مشابه زیر خواهد بود:
Output

Pulling eclipse-theia (theiaide/theia:next)…
next: Pulling from theiaide/theia
63bc94deeb28: Pull complete
100db3e2539d: Pull complete

Digest: sha256:c36dff04e250f1ac52d13f6d6e15ab3e9b8cad9ad68aba0208312e0788ecb109
Status: Downloaded newer image for theiaide/theia:next
Creating eclipse-theia_eclipse-theia_1 … done

به دامنه مورد استفاده برای Eclipse Theia بروید. مرورگر شما اعلانی را به شما نشان می دهد که از شما خواسته می شود وارد شوید. Eclipse Theia را وارد کرده و GUI ویرایشگر آن را مشاهده خواهید کرد. همچنین یک پدلاک را مشاهده خواهید کرد که نشان می دهد اتصال امن است.

نتیجه
اکنون Eclipse Theia ، یک cloud IDE همه کاره را با استفاده از Docker Compose و nginx-proxy بر روی سرور مجازی Ubuntu 18.04 خود نصب کرده اید. شما آن را با مجوز رایگان Let’s Encrypt TLS ایمن کرده اید و نمونه ای را تنظیم کرده اید تا نیاز به اعتبار ورود به سیستم از طرف کاربر داشته باشید. می توانید به صورت جداگانه روی کد منبع خود و مطالب آن کار کنید و یا با تیم خود همکاری کنید. در صورت نیاز به قابلیت های بیشتر ، می توانید نسخه دیگری از Eclipse Theia خود را نیز ایجاد کنید. برای کسب اطلاعات بیشتر در مورد چگونگی انجام این کار ، به مطالب Theia مراجعه نمایید.

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

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

مقدمه
Mattermost یک پلتفرم همکاری و پیام رسانی منبع باز است که با امنیت و قابل پیکربندی ایجاد شده است و عملکرد قابل مقایسه ای را با Discord یا Slack ارائه میدهد. این برنامه پیام رسانی گروهی ، رشته ای و یک به یک ، سابقه جستجوی نامحدود و قابلیت های اشتراک فایل ، مجوزها و اعلانات دو عامل فاکتوریی را ارائه می دهد. Mattermost همچنین webhooks را برای شخصی سازی بیشتر و ادغام ربات ها فراهم می کند. به دلیل رابط وب پاسخگو و برنامه های اختصاصی تلفن همراه ، از هر نوع دستگاه مدرن قابل دسترسی است.
در این آموزش Mattermost Team Edition را روی سرور مجازی Ubuntu 20.04 خود تنظیم می کنید. ابتدا ، آن را نصب خواهید کرد و در دامنه خود قرار می دهید ، با یک مجوز رایگان رمزگذاری TLS ایمن می کنید. سپس ، اعلان های ایمیل را فعال می کنید ، برندینگ را سفارشی می کنید و صفحه پیام خود را ایجاد می کنید (به نام یک تیم درMattermost (
پیش نیازها
⦁ سرور مجازی که اوبونتو 20.04 را اجرا کند با حداقل 2 گیگابایت حافظه رم ، دسترسی به ریشه و یک حساب غیر ریشه و sudo. با دنبال کردن راهنمای تنظیم اولیه سرور مجازی می توانید این کار را انجام دهید.
⦁ MariaDB روی سرور مجازی شما نصب شده باشد. برای دیدن نحوه انجام این کار ، به نحوه نصب MariaDB در اوبونتو 20.04 مراجعه کنید. می توانید نسخه کوتاهی را که در ابتدای آموزش ذکر شده است ، دنبال کنید.
⦁ Postfix در حالت فقط ارسال بر روی سرور مجازی شما نصب شده باشد. برای تنظیم این برنامه به آموزش نحوه نصب و پیکربندی Postfix به عنوان سرور مجازی SMTP فقط ارسالی در اوبونتو 20.04 مراجعه کنید. شما می توانید از آن برای فعال کردن ارسال اعلان های ایمیل از Mattermost استفاده کنید.
⦁ Nginx بر روی سرور مجازی شما نصب شده باشد. برای راهنمایی در مورد نحوه انجام این کار ، مراحل 1 تا 4 نحوه نصب Nginx را در اوبونتو 20.04 کامل کنید.
⦁ یک نام دامنه کاملاً ثبت شده برای میزبانی Mattermost ، که به سرور مجازی شما اشاره کند. در این آموزش از materough.your_domain استفاده خواهد شد. می توانید نام دامنه را در Namecheap خریداری کنید ، به صورت رایگان در Freenom دریافت کنید ، یا از ثبت دامنه مورد نظر خود استفاده کنید.
توجه: برای کارکرد صحیح سرور مجازی SMTP Postfix ، رکوردهای PTR سرور مجازی شما باید با your_domain مطابقت داشته باشد. می توانید با وارد کردن نام میزبان در خط فرمان ، نام میزبان سرور را تأیید کنید. خروجی باید با نام سرور مجازی شما هنگام ایجاد آن مطابقت داشته باشد.

مرحله 1 – نصب Mattermost
در این بخش Mattermost را روی سرور مجازی خود تنظیم می کنید. این کار شامل دانلود آخرین نسخه ، پیکربندی آن برای استفاده از پایگاه داده MariaDB ، و ایجاد یک سرویس سیستمی است که Mattermost را همیشه در پس زمینه اجرا می کند.
دانلود Mattermost
تمام داده های مربوط به نصب Mattermost را در پوشه ای به نام ~/mattermost ذخیره خواهید کرد. با اجرای دستور زیر آن را ایجاد کنید:
⦁ $ mkdir ~/mattermost

به آن پوشه بروید:
⦁ $ cd ~/mattermost

لازم است به صفحه دانلود Mattermost در وب سایت رسمی بروید و لینک آخرین نسخه را کپی کنید. در زمان نوشتن این مقاله، آخرین نسخه 5.24.2 بوده است. آن را با استفاده از wget با دستور زیر دانلود کنید:
⦁ $ wget https://releases.mattermost.com/5.24.2/mattermost-5.24.2-linux-amd64.tar.gz

سپس با اجرای دستور زیر آرشیو را باز کنید:
⦁ $ tar -xvzf mattermost*.gz

این دستور کلیه فایل های بایگانی شده را در پوشه ای که نام آنها با mattermost شروع می شود باز می کند.
پوشه ای دقیقاً به عنوان فایل اصلی که دانلود کرده اید ، تهیه می شود که حاوی باینری های Mattermost است. آن را کپی کنید تا /opt را انتخاب کنید تا بتوانید با اجرای دستور زیر، به آن دسترسی گسترده به سیستم داشته باشید:
⦁ $ sudo cp -r mattermost /opt

سپس یک پوشه برای Mattermost ایجاد کنید ، که در آن داده های کاربر را ذخیره می کند:
⦁ $ sudo mkdir /opt/mattermost/data

توجه: Mattermost فایل ها و تصاویری را که شما و تیمتان در این دیرکتوری به اشتراک خواهید گذاشت ، ذخیره می کند ، بنابراین اطمینان حاصل کنید که فضای درایو زیادی را که در آن قرار دارد فضای خالی زیادی داشته باشید.
سپس ، برای Mattermost کاربر و گروه ایجاد کنید:
⦁ $ sudo useradd –system –user-group mattermost

سپس ، کاربر و گروه تازه ساخته آن را در پوشه داده خود قرار دهید:
⦁ $ sudo chown -R mattermost:mattermost /opt/mattermost

این کار به گونه ای انجام می شود که در صورت نفوذ ، حمله کننده به دیرکتوری Mattermost محدود می شود و نمی تواند به راحتی به بقیه سیستم دسترسی پیدا کند.
در آخر ، دیرکتوری /opt/mattermost را با گروه ها قابل نوشتن کنید:
⦁ $ sudo chmod -R g+w /opt/mattermost

اکنون که باینری های Mattermost دارای مجوزهای امن هستند ، اجازه دهید یک بانک اطلاعاتی برای آن تنظیم کنیم.
تنظیم پایگاه داده
با وارد کردن اعلان MariaDB و اجرای دستور زیر شروع کنید:
⦁ $ sudo mysql

با اجرای دستور زیر ، یک کاربر دیتابیس به نام mmuser ایجاد کنید و با یک رمز به انتخاب خود جایگزین your_mmuser_password نمایید:
⦁ mariaDB> CREATE USER ‘mmuser’@’%’ IDENTIFIED BY ‘your_mmuser_password’;

سپس برای Mattermost یک بانک اطلاعاتی ایجاد کنید:
⦁ mariaDB> CREATE DATABASE mattermost;

برای دسترسی به mmuser به مهمترین پایگاه داده ، با اجرای دستور زیر ، امتیازات دسترسی را به آن بدهید:
⦁ mariaDB> GRANT ALL PRIVILEGES ON mattermost.* TO ‘mmuser’@’%’;

سپس جداول امتیازات را مجدد لود کنید تا بلافاصله تغییرات اعمال شود:
⦁ mariaDB> FLUSH PRIVILEGES;

وقتی کارتان تمام شد ، از اعلان خارج شوید:
⦁ mariaDB> exit

با ایجاد پایگاه داده و یک کاربر همراه ، اکنون فایل پیکربندی اصلی Mattermost را ویرایش کرده و رشته اتصال صحیح پایگاه داده را تنظیم می کنید.
آن را برای ویرایش باز کنید:
⦁ $ sudo nano /opt/mattermost/config/config.json

سطرهایی را که به شکل زیر است پیدا کنید:
/opt/mattermost/config/config.json
. . .
“DriverName”: “…”
“DataSource”: “…”
. . .

آنها را مطابق شکل زیر تغییر دهید ، و your_mmuser_password را با رمز عبوری جایگزین کنید که برای حساب پایگاه داده mmuser تعیین کرده اید:
/opt/mattermost/config/config.json

“DriverName”: “mysql”
“DataSource”: “mmuser:your_mmuser_password@tcp(localhost:3306)/mattermost?charset=utf8mb4,utf8&readTimeout=30s&writeTimeout=30s”

هنگام کار ، فایل را ذخیره کنید و ببندید.
اکنون Mattermost را پیکربندی کرده اید تا از بانک اطلاعاتی تازه ایجاد شده استفاده کند، جایی که کاربران ، تیم ها و پیام ها را در آن ذخیره می کند. اکنون آماده هستید تا به ایجاد یک سرویس systemd  برای آن بپردازید.
ایجاد یک سرویس systemd
اجرای Mattermost به عنوان یک سرویس با استفاده از systemd تضمین می کند که همیشه در پس زمینه اجرا می شود.
پیکربندی سرویس را در فایلی به نام mattermost.service در دیرکتوری / lib / systemd / system ذخیره خواهید کرد ، جایی که سیستم عامل سرویس های خود را ذخیره می کند. آن را با استفاده از ویرایشگر متن خود ایجاد کنید:
⦁ $ sudo nano /lib/systemd/system/mattermost.service

خطوط زیر را اضافه کنید:
/lib/systemd/system/mattermost.service
[Unit]
Description=Mattermost
After=network.target
After=mysql.service
Requires=mysql.service

[Service]
Type=notify
User=mattermost
Group=mattermost
ExecStart=/opt/mattermost/bin/mattermost
TimeoutStartSec=3600
Restart=always
RestartSec=10
WorkingDirectory=/opt/mattermost
LimitNOFILE=49152

[Install]
WantedBy=mysql.service

در اینجا ابتدا شرح سرویس را مشخص می کنید. سپس ، اظهار می کنید که سرویس mysql باید قبل از سرویس Mattermost آغاز شود زیرا سرویس Mattermost به کار در MariDB نیاز دارد. بعد از بخش [Unit] نوع سرویس را تعیین می کنید. notify  بدان معنی است که فرایند به سیستم اطلاع داده خواهد شد که لود شده است. شما فرمانی را ارائه میکنید که اجرا می شود و رویکرد را روی always تنظیم میکند. همچنین دایرکتوری در حال کار را برای فرآیند تعریف می کنید و کاربر و گروهی که باید به عنوان آن اجرا شود.
در بخش [Install] ، سرویس دیتابیس را به عنوان مقدار پارامتر WantedBy تعیین می کنید تا اطمینان حاصل شود که Mattermost دوباره با پایگاه داده راه اندازی می شود. با به روزرسانی خودکار پایگاه داده ، حذف این تنظیمات ممکن است مشکلی ایجاد کند ، زیرا اگر ریستارت نشود ، ممکن است متوقف شود.
فایل را ذخیره کرده و ببندید ، سپس با اجرای دستور زیر کلیه خدمات را مجدد دانلود کنید:
⦁ $ sudo systemctl daemon-reload

بررسی کنید که به درستی دانلود شده است:
⦁ $ sudo systemctl status mattermost

خروجی زیر را مشاهده خواهید کرد:
Output
● mattermost.service – Mattermost
Loaded: loaded (/lib/systemd/system/mattermost.service; disabled; vendor preset: enabled)
Active: inactive (dead)

اگر systemd خطایی را گزارش کرد ، نام فایل فایل سرویس ، محل آن و اعتبار محتوای آن را دوبار بررسی کنید.
سپس با اجرای دستور زیر سرویس Mattermostرا فعال کنید:
⦁ $ sudo systemctl enable mattermost

در این مرحله ، Mattermost را دانلود کرده اید ، آن را پیکربندی کردد تا از بانک اطلاعاتی MariaDB استفاده کند ، و یک سرویس سیستمی برای آن ایجاد کردید. در مرحله بعد ، آن را در دامنه خود قرار می دهید.
مرحله 2 – قرار دادن Mattermost در معرض دامنه
در این بخش ، Nginx را به عنوان سرور مجازی پروکسی معکوس برای Mattermost پیکربندی می کنید.
قبل از پیکربندی Nginx ، باید دامنه خود را در فایل اصلی پیکربندی Mattermost مشخص کنید. آن را برای ویرایش باز کنید:
⦁ sudo nano /opt/mattermost/config/config.json

خطی را پیدا کنید که به شکل زیر باشد:
/opt/mattermost/config/config.json
. . .
“SiteURL”: “”
. . .
نام دامنه خود را در نقل قول ها وارد کنید:
/opt/mattermost/config/config.json

“SiteURL”: “http://mattermost.your_domain”

فایل را ذخیره کنید و ببندید.
همانطور که در مرحله پیش نیاز Nginx آموخته اید ، فایل های پیکربندی سایت آن تحت /etc/nginx/sites-available ذخیره می شوند و بعداً باید برای فعال شدن آنها را با /etc/nginx/sites-enabled لینک کنید.
پیکربندی را برای قرار گرفتن Mattermost در معرض دامنه خود در فایلی با نام Mattermost.conf ، تحت /etc/nginx/sites-available ذخیره خواهید کرد. با استفاده از ویرایشگر خود آن را ایجاد کنید:
⦁ $ sudo nano /etc/nginx/sites-available/mattermost.conf

خطوط زیر را اضافه کنید:
/etc/nginx/sites-available/mattermost.conf
upstream backend {
server localhost:8065;
keepalive 32;
}

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=mattermost_cache:10m max_size=3g inactive=120m use_temp_path=off;

server {
listen 80;
server_name mattermost.your_domain;

location ~ /api/v[0-9]+/(users/)?websocket$ {
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection “upgrade”;
client_max_body_size 50M;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Frame-Options SAMEORIGIN;
proxy_buffers 256 16k;
proxy_buffer_size 16k;
client_body_timeout 60;
send_timeout 300;
lingering_timeout 5;
proxy_connect_timeout 90;
proxy_send_timeout 300;
proxy_read_timeout 90s;
proxy_pass http://backend;
}

location / {
client_max_body_size 50M;
proxy_set_header Connection “”;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Frame-Options SAMEORIGIN;
proxy_buffers 256 16k;
proxy_buffer_size 16k;
proxy_read_timeout 600s;
proxy_cache mattermost_cache;
proxy_cache_revalidate on;
proxy_cache_min_uses 2;
proxy_cache_use_stale timeout;
proxy_cache_lock on;
proxy_http_version 1.1;
proxy_pass http://backend;
}
}

Mattermost.your_domain را با دامنه مورد نظر خود جایگزین کنید ، سپس فایل را ذخیره کنید و ببندید.
در این فایل ، شما تعریف می کنید که Nginx باید به پورت HTTP 80 گوش دهد. سپس ، یک name_name را تعیین می کنید که به Nginx می گوید که کدام دامنه درخواست ها را بپذیرد و از این پیکربندی خاص استفاده کند. دو بلوک بعدی اتصالات پروکسی را پیکربندی می کنند ، تا Mattermost به درستی کار کند.
برای فعال سازی این پیکربندی سایت ، باید با اجرای دستور زیر ، یک لینک به پوشه /etc/nginx/sites-enabled ایجاد کنید:
⦁ $ sudo ln -s /etc/nginx/sites-available/mattermost.conf /etc/nginx/sites-enabled/mattermost.conf

برای آزمایش اعتبار پیکربندی ، دستور زیر را اجرا کنید:
⦁ $ sudo nginx -t

خروجی زیر را مشاهده خواهید کرد:
Output
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

برای اینکه پیکربندی عملی شود ، باید Nginx را مجدداً راه اندازی کنید:
⦁ $ sudo systemctl restart nginx

سپس ، با اجرای دستور زیر سرویس Mattermostرا شروع کنید:
⦁ $ sudo systemctl start mattermost

پس از اتمام این دستور ، سعی کنید در مرورگر خود به دامنه بروید. باید صفحه ای را مشاهده کنید که از شما می خواهد وارد شوید:

اکنون نصب Mattermost را در دامنه خود دارید و در دسترس است. در مرحله بعد ، شما با استفاده از یک گواهی نامه Let’s Encrypt TLS رایگان ، آن را ایمن خواهید کرد.
مرحله 3 – ایمن کردن دامنه خود
در این بخش دامنه خود را با استفاده از گواهی نامه Let’s Encrypt TLS که با استفاده از Certbot تهیه می کنید ، ایمن می کنید.
شما باید قبلاً Certbot را به عنوان بخشی از پیش نیازها نصب کرده باشید ، بنابراین فقط باید با اجرای آن ، افزونه Nginx را نصب کنید:
⦁ $ sudo apt install python3-certbot-nginx

همچنین به عنوان بخشی از پیش شرط ها ، ufw (فایروال کامپایل نشده) را فعال کرده و آن را پیکربندی کرده اید تا امکان ترافیک HTTP رمزگذاری نشده را فراهم کند. برای دسترسی ایمن به سایت ، باید آن را پیکربندی کنید تا با اجرای دستور زیر ، ترافیک رمزگذاری شده را بپذیرید:
⦁ $ sudo ufw allow https

خروجی به این صورت خواهد بود:
Output
Rule added
Rule added (v6)
به طور مشابه با Nginx ، لازم است آن را مجدد لود کنید تا پیکربندی آن به مرحله اجرا برسد:
⦁ $ sudo ufw reload

این خروجی نشان داده می شود:
Output
Firewall reloaded
برای درخواست گواهی نامه برای دامنه خود ، دستور زیر را اجرا کنید:
⦁ $ sudo certbot –nginx -d mattermost.your_domain

در این دستور ، شما certbot را برای درخواست گواهینامه برای دامنه خود اجرا می کنید – نام دامنه را با پارامتر -d می گذرانید. پرچم –nginx به آن می گوید برای پشتیبانی از HTTPS ، پیکربندی سایت Nginx را به طور خودکار تغییر دهید. به یاد داشته باشید که materimum.your_domain را با نام دامنه خود جایگزین کنید.
اگر اولین بار است که Certbot را اجرا می کنید ، از شما خواسته می شود که یک آدرس ایمیل را برای اخطارهای فوری و پدیرش شرایط خدمات EFF ارائه کنید. سپس Certbot از Let’s Encrypt برای گواهی دامنه شما درخواست می کند. و از شما سؤال می کند که آیا مایلید همه ترافیک HTTP را به HTTPS هدایت کنید:
Output
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
1: No redirect – Make no further changes to the webserver configuration.
2: Redirect – Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you’re confident your site works on HTTPS. You can undo this
change by editing your web server’s configuration.
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
Select the appropriate number [1-2] then [enter] (press ‘c’ to cancel):

توصیه می شود برای به حداکثر رساندن امنیت گزینه دوم را انتخاب کنید. پس از وارد کردن انتخاب خود ، ENTER را فشار دهید.
خروجی شما شبیه به این خواهد بود:
Output
IMPORTANT NOTES:
– Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/mattermost.your_domain/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/mattermost.your_domain/privkey.pem
Your cert will expire on 2020-09-28. To obtain a new or tweaked
version of this certificate in the future, simply run certbot again
with the “certonly” option. To non-interactively renew *all* of
your certificates, run “certbot renew”
– Your account credentials have been saved in your Certbot
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Certbot so
making regular backups of this folder is ideal.
– If you like Certbot, please consider supporting our work by:

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

این بدان معنی است که Certbot موفق به تولید گواهینامه های TLS شده و آنها را در پیکربندی Nginx برای دامنه شما به کار می برد.
از آنجا که اکنون با استفاده از HTTPS به دامنه شما قابل دسترسی است ،باید URL دامنه خود را در فایل اصلی پیکربندی Mattermost تصحیح کنید. آن را برای ویرایش باز کنید:
⦁ $ sudo nano /opt/mattermost/config/config.json

یک بار دیگر ، خطی را پیدا کنید که به شکل زیر است:
/opt/mattermost/config/config.json
. . .
“SiteURL”: “http://mattermost.your_domain”
. . .

http را به https تغییر دهید:
/opt/mattermost/config/config.json
. . .
“SiteURL”: “https://mattermost.your_domain”
. . .

این تنها چیزی است که شما باید ویرایش کنید ، بنابراین فایل را ذخیره کنید و ببندید .
با اجرای دستور زیر Mattermost را ریستارت کنید:
⦁ $ sudo systemctl restart mattermost

اکنون می توانید دامنه Mattermost را در مرورگر خود مجدد لود کنید و یک پد لاک در سمت چپ آدرس سایت مشاهده کنید ، به این معنی که اتصال خود را به درستی ایمن کرده اید.
اکنون که گواهینامه های TLS شما با موفقیت پیکربندی شده و دامنه شما از طریق یک اتصال مطمئن در دسترس است ، آماده پیکربندی Mattermost هستید.
مرحله 4 – تنظیم Mattermost
در این بخش ، تیم خود را در Mattermost ایجاد خواهید کرد ، اعلان های ایمیل را تنظیم و برند سرور مجازی را تغییر می دهید.
هنگامی که برای اولین بار به Mattermost دسترسی پیدا می کنید ، باید یک حساب کاربری با امتیازات ادمین برای سرور مجازی خود ایجاد کنید. اگر از قبل حساب کاربری دارید ، می توانید با آن وارد شوید. پس از ورود به سیستم ، صفحه‌ای را مشاهده خواهید کرد که به شما میگوید تیمی وجود ندارد که بتوانید به آن بپیوندید.
برای رفع این مشکل ، Create a team را انتخاب کنید. صفحه ای را مشاهده خواهید کرد که از شما میخواهد تیم خود را معرفی کنید (به عنوان مثا ل Sammy):

نام مورد نظر خود را وارد کرده و روی Next کلیک کنید. سپس از شما می خواهد که آدرس وب خود را برای تیم خود ، در دامنه خود تعیین كنید ، كه این نقطه دسترسی برای تیم شما در Mattermost خواهد بود:

می توانید URL را بدون تغییر بگذارید. پس از اتمام کار ، روی « Finish » کلیک کنید. Mattermost تیم شما را ایجاد می کند و پس از گذراندن آموزش ، رابط اصلی را خواهید دید ، جایی که بیشتر وقت خود را صرف برقراری ارتباط می کنید:

رابط کاربری در مرحله بعدی با جزئیات توضیح داده خواهد شد. برای دسترسی به تنظیمات ، بر روی نام کاربری خود در گوشه بالا سمت چپ و سپس System Console کلیک کنید. فقط اگر کاربر ادمین باشید می توانید به این گزینه دسترسی پیدا کنید.

در سمت چپ یک منو وجود دارد که دسترسی به بخش هایی از پیکربندی Mattermost را در اختیار شما قرار می دهد. ابتدا اعلان های ایمیل تنظیم می کنید ، بنابراین روی گزینه SMTP که می تواند در منوی Environment یافت شود کلیک کنید:

برای اتصال به سرور مجازی Postfix که به عنوان بخشی از پیش شرط ها نصب کرده اید ، localhost  را به عنوان SMTP Server و 25 را به عنوان SMTP Server Port تایپ کنید. هنگامی که کار خود را انجام دادید ، روی دکمه آبی Save  کلیک کنید و سپس دکمه Test Connection را که در پایین قرار دارد ، بزنید. یک پیام در یک کادر سبز دریافت خواهید کرد که میگیود هنگام ارسال ایمیل خطایی گزارش نشده است. لطفاً صندوق ورودی خود را بررسی کنید.

اکنون می توانید صندوق ورودی ایمیلی را که با آن وارد سیستم شده اید ، بررسی کنید. یک پیام از Mattermost پیدا خواهید کرد ، می گویند تنظیمات ایمیل به درستی تنظیم شده است. اگر آن را دریافت نکردید ، پوشه اسپم خود را بررسی کنید. اگر خطایی از Mattermost دریافت شده ، آنچه را که وارد کرده اید ، دوباره بررسی کنید و در صورت لزوم ، یک بار دیگر آموزش قبلی را انجام دهید.
اکنون که تأیید کردید که ایمیل ها در حال کار هستند ، باید اعلان های ایمیل را با انتخاب Notifications  در زیر Site Configuration در منو فعال کنید. Enable Email Notifications را روی true  قرار دهید و Notification From Address را روی آدرس ایمیل مورد نظر خود ، مانند mattermost@your_domain ، تنظیم کنید.
از آنجا که دیگر نیازی به وجود ندارد و نظارت نمی شود ، no-reply را به عنوان Notification Display Name ، یعنی نام فرستنده ای که در کلاینت ایمیل نشان داده می شود ، تایپ کنید. برای کم کردن تعداد کل ایمیل هایی که برای اعضای تیم خود ارسال می کنید می توانید بصورت اختیاری Email Batching را برای فشرده سازی چندین پیام خوانده نشده در یک ایمیل فعال کنید. پس از پایان انجام تنظیمات ، روی Save  کلیک کنید.
شما اعلان های ایمیل را در سطح جهانی فعال کرده اید و اکنون می توانید با انتخاب گزینه Customization در زیر پیکربندی سایت ، برندینگ سرور مجازی را به طور اختیاری تغییر دهید. در اینجا می توانید نام سایت و توضیحات سایت را تنظیم کنید و همچنین یک تصویر و متن با نام تجاری سفارشی بارگذاری کنید.
می توانید با کلیک کردن روی نام کاربری خود در گوشه بالا سمت چپ و انتخاب اولین گزینه از منوی کشویی ، از System Console خارج شوید.
شما تیم خود را در Mattermost ایجاد کرده اید و اعلان های ایمیل را تنظیم کرده اید ، بنابراین درباره بحث های جدیدی که در تیم شما اتفاق می افتد ، مطلع می شوید.
نتیجه
اکنون پلتفرم پیام رسانی قابل مقیاس بندی به میزبانی خود دارید که شما و تیم تان می توانید برای همکاری در همه دستگاه ها استفاده کنید. اکنون می توانید به صورت کارآمدتر ارتباط برقرار کنید ، فایل ها را به اشتراک بگذارید و با سهولت در پیام ها و کانال ها جستجو کنید.
اگر می خواهید در مورد استفاده از رابط کاربری Mattermost اطلاعات بیشتری کسب کنید ، به مطالب رسمی مراجعه کنید.

 

برچسب‌ها:

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

Django یک چارچوب وب کامل پایتون برای توسعه وب سایت ها و برنامه های پویا است. با استفاده از Django ، می توانید به سرعت برنامه های وب Python ایجاد کرده و برای انجام لیفتینگ سنگین به این چهارچوب متکی باشید.
در این راهنما ، Django را بر روی سرور مجازی Ubuntu 20.04 راه اندازی می کنید. پس از نصب ، پروژه جدیدی را برای استفاده به عنوان پایه سایت خود شروع خواهید کرد.
روش های مختلف
بسته به نیاز شما و اینکه چگونه می خواهید محیط توسعه خود را پیکربندی کنید ، روش های مختلفی برای نصب Django وجود دارد. این روشها مزایای مختلفی دارند و ممکن است یک روش بهتر از دیگران به وضعیت خاص شما کمک کند.
برخی از روشهای مختلف عبارتند از:
• نصب جهانی از بسته ها: مخازن رسمی اوبونتو حاوی بسته های Django است که می تواند با مدیر بسته های معمولی apt نصب شود. این کار ساده است ، اما به اندازه برخی از روش های دیگر انعطاف پذیر نیست. همچنین ممکن است نسخه موجود در مخازن از نسخه های رسمی موجود در پروژه عقب تر باشد.
• با pip در محیط مجازی نصب کنید: می توانید با استفاده از ابزاری مانند venv و virtualenv ، یک محیط مختصر برای پروژه های خود ایجاد کنید. محیط مجازی به شما امکان می دهد تا Django را به همراه سایر تنظیمات و بسته های مربوط به پروژه در دایرکتوری پروژه نصب کنید بدون اینکه روی سیستم بزرگتر تأثیر بگذارد. این کار به طور معمول عملی ترین و توصیه شده ترین روش برای کار با Django است.
• نسخه توسعه را با git نصب کنید: اگر می خواهید به جای نسخه پایدار ، آخرین نسخه توسعه را نصب کنید ، می توانید کد را از repo Git به دست آورید. این کار برای بدست آوردن جدیدترین ویژگی ها / اصلاحات لازم است و می تواند در محیط مجازی شما انجام شود. نسخه های توسعه ضمانت پایداری یکسانی با نسخه های پایدار ندارند.
پیش نیازها
قبل از شروع ، باید یک کاربر غیر ریشه با امتیازات sudo در سرور مجازی Ubuntu 20.04 خود داشته باشید. برای انجام این کار ، راهنمای تنظیم اولیه سرور مجازی Ubuntu 20.04 ما را دنبال کنید.
نصب جهانی از بسته ها
اگر می خواهید Django را با استفاده از مخازن اوبونتو نصب کنید ، این روند بسیار ساده است.
ابتدا ، دیرکتوری بسته محلی خود را با apt به روز کنید:
⦁ $ sudo apt update

سپس ، بررسی کنید که کدام نسخه از Python را نصب کرده اید. 20.04 به صورت پیش فرض با Python 3.8 همراه است ، که می توانید با تایپ کردن این دستور آنها را تأیید کنید:
⦁ $ python3 -V

باید خروجی مانند این را مشاهده کنید:
Output
Python 3.8.2
سپس ، Django را نصب کنید:
⦁ $ sudo apt install python3-django

با تایپ دستور زیر می توانید تست کنید که نصب موفقیت آمیز بوده است:
⦁ $ django-admin –version

Output
2.2.12
این بدان معنی است که نرم افزار با موفقیت نصب شده است. همچنین ممکن است توجه کرده باشید که نسخه Django جدیدترین نسخه پایدار نیست. برای کسب اطلاعات بیشتر در مورد چگونگی استفاده از نرم افزار ، به سراغ مقاله نحوه ایجاد پروژه نمونه بروید.
با pip در محیط مجازی نصب کنید
انعطاف پذیرترین روش برای نصب Django بر روی سیستم شما در یک محیط مجازی است. ما به شما نحوه نصب Django را در یک محیط مجازی که با ماژول venv ، که بخشی از کتابخانه استاندارد Python 3 است ، نشان خواهیم داد. این ابزار به شما امکان می دهد محیط های مجازی Python ایجاد کرده و بسته های Python را نیز بدون اینکه روی بقیه سیستم تأثیر بگذارد ، نصب کنید. بنابراین ، می توانید بسته های Python را بر اساس هر پروژه ، صرف نظر از تضاد با شرایط دیگر پروژه ها ، انتخاب کنید.
بیایید با ریفرش کردن شاخص بسته محلی شروع کنیم:
⦁ $ sudo apt update

نسخه پایتون را که نصب کرده اید بررسی کنید:
⦁ $ python3 -V

Output
Python 3.8.2
در مرحله بعدی ، اجازه دهید pip و venv را از مخازن اوبونتو نصب کنیم:
⦁ $ sudo apt install python3-pip python3-venv

اکنون هر گاه پروژه جدیدی را شروع می کنید می توانید یک محیط مجازی برای آن ایجاد کنید. با ایجاد و رفتن به یک دیرکتوری جدید پروژه شروع کنید:
⦁ $ mkdir ~/newproject

⦁ $ cd ~/newproject

سپس ، با استفاده از دستور پایتون که با نسخه پایتون شما سازگار است ، یک محیط مجازی درون دیرکتوری پروژه ایجاد کنید. ما محیط مجازی خود را my_env خواهیم نامید ، اما شما باید آن را با نامی توصیفی جایگزین کنید:
⦁ $ python3 -m venv my_env

این دستور نسخه های مستقل Python و pip را در یک ساختار دیرکتوری جدا شده در پروژه شما نصب می کند. دایرکتوری با نام انتخابی شما ساخته می شود ، که سلسله مراتب فایل را در جایی که بسته های شما نصب می شود ، نگه می دارد.
برای نصب بسته ها در محیط جدا شده ، باید آن را با تایپ کردن دستور زیر فعال کنید:
⦁ $ source my_env/bin/activate

اعلان شما باید تغییر کند تا منعکس کننده این باشد که اکنون در محیط مجازی خود هستید. چیزی شبیه به (my_env)username@hostname:~/newproject$ به نظر می رسد.
در محیط جدید خود می توانید از pip برای نصب Django استفاده کنید. صرف نظر از نسخه پایتون ، pip را فقط وقتی در محیط مجازی خود قرار دارید ، باید pip بنامید. همچنین توجه داشته باشید که از آنجا که به صورت محلی نصب می کنید ، نیازی به استفاده از sudo ندارید:
⦁ (my_env) $ pip install django

می توانید نصب را با تایپ کردن این دستور تأیید کنید:
(my_env) $ django-admin –version

Output
3.0.8
توجه داشته باشید که نسخه شما ممکن است با نسخه نشان داده شده در اینجا متفاوت باشد.
برای ترک محیط مجازی خود ، باید دستور deactivate را از هر کجای سیستم صادر کنید:
(my_env) $ deactivate

اعلان شما باید به صفحه نمایش معمولی برگردد. هنگامی که می خواهید دوباره روی پروژه خود کار کنید ، با رفتن دوباره به دیرکتوری پروژه خود و فعال سازی، محیط مجازی خود را دوباره فعال کنید:
⦁ $ cd ~/newproject

⦁ $ source my_env/bin/activate
نصب نسخه توسعه با Git
اگر به نسخه توسعه Django نیاز دارید ، می توانید Django را از منبع Git دانلود و نصب کنید. بیایید این کار را در محیط مجازی انجام دهیم.
ابتدا شاخص بسته محلی را به روز کنید:
⦁ $ sudo apt update

نسخه پایتونی که نصب کرده اید را بررسی کنید:
⦁ $ python3 -V

Output
Python 3.8.2
سپس PIPو ENV را از منابع رسمی نصب کنید:
⦁ $ sudo apt install python3-pip python3-venv

مرحله بعدی کلون کردن مخزن django است. بین نسخه های منتشر شده ، این مخزن دارای ویژگی های به روزرسانی و رفع اشکال با هزینه احتمالی خواهد بود. با تایپ کردن دستور زیر می توانید مخزن را به دایرکتوری به نام ~ / django-dev در دیرکتوری هوم خود کلون کنید:
⦁ $ git clone git://github.com/django/django ~/django-dev

به این دیرکتوری بروید:
⦁ $ cd ~/django-dev

محیط مجازی را با استفاده از دستور پایتون که سازگار با نسخه پایتون نصب شده باشد ایجاد کنید:
⦁ $ python3 -m venv my_env

ان را فعال کنید:
⦁ $ source my_env/bin/activate

در مرحله بعد می توانید مخزن را با استفاده از pip نصب کنید. گزینه -e در حالت “قابل ویرایش” نصب خواهد شد ، که هنگام نصب از کنترل نسخه لازم است:
⦁ (my_env) $ pip install -e ~/django-dev

با تایپ کردن دستور زیر می توانید تأیید کنید که نصب موفقیت آمیز بود:
⦁ $ django-admin –version

Output
3.2
باز هم ، نسخه ای که نمایش داده می شود ممکن است با آنچه در اینجا نشان داده شده مطابقت نداشته باشد.
اکنون در محیط مجازی خود آخرین نسخه Django را دارید.
ایجاد یک پروژه نمونه
با نصب Django می توانید ساخت پروژه خود را آغاز کنید. ما به چگونگی ایجاد یک پروژه و آزمایش آن بر روی سرور مجازی توسعه شما با استفاده از یک محیط مجازی خواهیم پرداخت.
ابتدا دایرکتوری برای پروژه خود ایجاد کنید و به آن بروید:
⦁ $ mkdir ~/django-test

⦁ $ cd ~/django-test

سپس ، محیط مجازی خود را ایجاد کنید:
⦁ $ python3 -m venv my_env

محیط را فعال کنید:
⦁ $ source my_env/bin/activate

Django را نصب کنید:

⦁ (my_env) $ pip install django

برای ساخت پروژه خود می توانید از django-admin با دستور startproject استفاده کنید. ما پروژه خود را djangoproject خواهیم خواند ، اما شما می توانید آن را با نام دیگری جایگزین کنید startproject. دایرکتوری را درون دیرکتوری کار فعلی شما ایجاد می کند که شامل موارد زیر است:
• یک اسکریپت مدیریتی ، management.py ، که می توانید برای اجرای کارهای مختلف خاص Django استفاده کنید.
• دایرکتوری (با همان نام پروژه) که شامل کد پروژه واقعی است.
با این حال ، برای جلوگیری از داشتن دایرکتوری های تو در تو و بسیار زیاد ، بیایید به Django بگوییم که اسکریپت مدیریت و دیرکتوری داخلی را در دیرکتوری موجود قرار دهد (به نقطه پایانی توجه کنید):
⦁ (my_env) $ django-admin startproject djangoproject .

برای انتقال پایگاه داده (این مثال بطور پیش فرض از SQLite استفاده می کند) ، اجازه دهید از دستور migrate با استفاده از management.py استفاده کنیم. جابه جایی ها هرگونه تغییراتی را که در مدلهای Django ایجاد کرده اید در طرحواره پایگاه داده شما اعمال می کند.
برای جابه جایی پایگاه داده ، تایپ کنید:
(my_env) $ python manage.py migrate

خروجی مانند زیر را مشاهده خواهید کرد:
Output
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial… OK
Applying auth.0001_initial… OK
Applying admin.0001_initial… OK
Applying admin.0002_logentry_remove_auto_add… OK
Applying admin.0003_logentry_add_action_flag_choices… OK
Applying contenttypes.0002_remove_content_type_name… OK
Applying auth.0002_alter_permission_name_max_length… OK
Applying auth.0003_alter_user_email_max_length… OK
Applying auth.0004_alter_user_username_opts… OK
Applying auth.0005_alter_user_last_login_null… OK
Applying auth.0006_require_contenttypes_0002… OK
Applying auth.0007_alter_validators_add_error_messages… OK
Applying auth.0008_alter_user_username_max_length… OK
Applying auth.0009_alter_user_last_name_max_length… OK
Applying sessions.0001_initial… OK

در آخر ، اجازه دهید یک کاربر ادمین ایجاد کنیم تا بتوانید از رابط مدیر Djano استفاده کنید. بیایید این کار را با دستور Creatuperuser انجام دهیم:
⦁ (my_env) $ python manage.py createsuperuser

از شما خواسته می شود یک نام کاربری ، یک آدرس ایمیل و یک رمز عبور برای کاربر خود دریافت کنید.
تغییر ALLOWED_HOSTS در تنظیمات Django
برای آزمایش موفقیت آمیز برنامه ، باید یکی از دستورالعمل ها را در تنظیمات Django اصلاح کنید.
فایل تنظیمات را با تایپ کردن دستور زیر باز کنید:
(my_env) $ nano ~/django-test/djangoproject/settings.py

در داخل ، دستورالعمل ALLOWED_HOSTS را پیدا کنید. لیستی از آدرس ها یا نام دامنه را که ممکن است برای اتصال به نمونه Django استفاده شود ، تعریف می کند. یک درخواست ورودی با یک هدر میزبان که در این لیست وجود ندارد ، یک استثنا را ایجاد می کند. Django برای جلوگیری از آسیب پذیری امنیتی در کلاس خاصی نیاز دارد که شما این کار را انجام دهید.
در براکت های مربع ، آدرس های IP یا نام دامنه هایی را که با سرور مجازی Django شما مرتبط هستند ، لیست کنید. هر مورد باید در نقل قول ذکر شود ، و با ورودی های جداگانه با کاما از هم جدا شوند. اگر می خواهید برای یک دامنه کامل و هر زیر دامنه درخواست کنید ، یک دوره را تا ابتدای ورود آماده کنید:
~/django-test/djangoproject/settings.py
ALLOWED_HOSTS = [‘your_server_ip_or_domain’, ‘your_second_ip_or_domain’, . . .]

پس از اتمام ، فایل را ذخیره کنید و از ویرایشگر خود خارج شوید.
تست سرور مجازی توسعه
هنگامی که دارای کاربر شدید ، می توانید سرور مجازی توسعه Django را راه اندازی کنید تا ببینید که یک پروژه تازه Django چگونه به نظر می رسد. شما فقط باید از این موارد برای اهداف توسعه استفاده کنید. هنگامی که آماده استقرار هستید ، حتماً دستورالعمل های Django را با دقت دنبال کنید.
قبل از اینکه سرور مجازی توسعه را امتحان کنید ، مطمئن شوید که پورت مناسب را در فایروال خود باز کنید. اگر راهنمای تنظیم اولیه سرور مجازی را دنبال کرده اید و از UFW استفاده می کنید ، می توانید با دستور زیر وارد پورت 8000شوید:
(my_env) $ sudo ufw allow 8000

سرور مجازی توسعه را شروع کنید:
⦁ (my_env) $ python manage.py runserver your_server_ip:8000

به آدرس IP سرور مجازی خود و به دنبال آن: 8000 در مرورگر وب خود مراجعه کنید:
http://your_server_ip:8000
باید چیزی به این شکل را مشاهده کنید:

برای دسترسی به رابط سرور مجازی ، /admin/ به انتهای آدرس اینترنتی خود اضافه کنید:
http://your_server_ip:8000/admin/
این کار شما را به صفحه ورود به سیستم سوق می دهد:

اگر نام کاربری و رمز عبوری را که به تازگی ایجاد کرده اید وارد کنید ، به بخش اصلی مدیر سایت دسترسی خواهید داشت:

برای کسب اطلاعات بیشتر در مورد کار با رابط کاربری Django ، لطفاً به مقاله” نحوه فعالسازی و اتصال رابط کاربری ادمین Django” مراجعه کنید.
هنگامی که جستجوی سایت پیش فرض به پایان رسید ، می توانید با وارد کردن CTRL-C در ترمینال خود ، سرور مجازی توسعه را متوقف کنید.
پروژه Django که شما ایجاد کرده اید پایه ساختاری برای طراحی سایت کامل تری را فراهم می کند. برای کسب اطلاعات بیشتر در مورد نحوه ساخت برنامه های کاربردی و شخصی سازی سایت خود ، از مقالات Django استفاده کنید.
نتیجه
اکنون باید Django را بر روی سرور مجازی Ubuntu 20.04 خود نصب کرده و ابزارهای اصلی مورد نیاز برای ایجاد برنامه های وب قدرتمند را تهیه کرده باشید. همچنین باید نحوه شروع یک پروژه جدید و راه اندازی سرور مجازی توسعه دهنده را بدانید. اعمال یک چارچوب وب کامل مانند Django می تواند به پیشرفت سریعتر کمک کند و به شما امکان می دهد فقط روی جنبه های منحصر به فرد برنامه های خود متمرکز شوید.
اگر می خواهید اطلاعات بیشتری در مورد کار با Django ، از جمله بحث و گفتگوهای عمیق درباره مواردی مانند مدل ها و دیدگاه ها داشته باشید ، لطفا مجموعه های توسعه Django را ببینید.

 

برچسب‌ها:

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

به طور پیش فرض ، Jenkins با سرور مجازی داخلی Winstone خود همراه است که به پورت 8080 گوش می دهد ، و برای شروع مناسب است. با این وجود بهتر است که Jenkins را با SSL محافظت كنید تا از رمزهای عبور و داده های حساس منتقل شده از طریق رابط وب محافظت كنید.
در این آموزش ، Nginx را به عنوان یک پروکسی معکوس برای هدایت درخواست های کلاینت به Jenkins پیکربندی می کنید.
پیش نیازها
برای شروع ، به موارد زیر نیاز دارید:
⦁ یک سرور مجازی Ubuntu 20.04 با یک کاربر غیر ریشه و فعال شده با sudo فایروال ، که طبق راهنمای ستاپ اولیه سرور مجازی Ubuntu 20.04 پیکربندی شده باشد.
⦁ Jenkins طبق ماحل نحوه نصب Jenkins در اوبونتو 20.04 نصب شده باشد
⦁ Nginx طبق مراحل نحوه نصب Nginx در اوبونتو 20.04 نصب شده باشد
⦁ یک گواهی SSL برای یک دامنه تهیه شده توسط Let’s Encrypt. برای به دست آوردن این گواهینامه نحوه ایمن سازی Nginx با Let’s Encrypt در اوبونتو 20.04 را دنبال کنید. توجه داشته باشید که به یک نام دامنه ثبت شده احتیاج دارید که در اختیار داشته یا کنترل کنید. در این آموزش از نام دامنه example.com استفاده می شود.
مرحله 1 – پیکربندی Nginx
در آموزش مقدماتی نحوه ایمن سازی Nginx با Let’s Encrypt در Ubuntu 20.04 ، Nginx را تنظیم کرده اید تا از SSL در فایل /etc/nginx/sites-available/example.com استفاده کند. این فایل را برای افزودن تنظیمات پروکسی معکوس خود باز کنید:
⦁ $ sudo nano /etc/nginx/sites-available/example.com

در بلوک سرور مجازی با تنظیمات پیکربندی SSL ، ورودهای دسترسی یافته و همراه با خطای Jenkins را اضافه کنید:
/etc/nginx/sites-available/example.com
. . .
server {
. . .
# SSL Configuration
#
listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl; # managed by Certbot
access_log /var/log/nginx/jenkins.access.log;
error_log /var/log/nginx/jenkins.error.log;
. . .
}

سپس تنظیمات پروکسی را پیکربندی می کنیم. از آنجا که ما همه درخواست ها را به Jenkins ارسال می کنیم ، خط پیش فرض try_files را حذف می کنیم ، که در غیر این صورت خطای 404 قبل از رسیدن درخواست به Jenkins باز می گردد:
/etc/nginx/sites-available/example.com
. . .
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
# try_files $uri $uri/ =404; }
. . .

اکنون می خواهیم تنظیمات پروکسی را اضافه کنیم ، که شامل موارد زیر است:
proxy_params: فایل / etc / nginx / proxy_params توسط Nginx تهیه شده است و اطمینان می دهد که اطلاعات مهم ، از جمله نام میزبان ، پروتکل درخواست کلاینت و آدرس IP کلاینت ، در فایل های log حفظ میشود و در دسترس می باشد.
proxy_pass: پروتکل و آدرس سرور مجازیپروکسی را تعیین می کند ، که در این حالت سرور مجازی Jenkins از طریق localhost در پورت 8080 قابل دسترسی خواهد بود.
proxy_read_timeout: افزایش از پیش فرض 60 ثانیه Nginx به مقدار 90 ثانیه توصیه شده Jenkins را ممکن می کند.
proxy_redirect: تضمین می کند که پاسخ ها به درستی بازنویسی میشوند تا نام میزبان مناسب درج شود.
حتماً نام دامنه ایمن شده با SSL خود را برای example.com در خط proxy_redirect در کد زیر جایگزین کنید:
/etc/nginx/sites-available/example.com
Location /
. . .
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
# try_files $uri $uri/ =404;
include /etc/nginx/proxy_params;
proxy_pass http://localhost:8080;
proxy_read_timeout 90s;
# Fix potential “It appears that your reverse proxy setup is broken” error.
proxy_redirect http://localhost:8080 https://example.com;

پس از انجام این تغییرات ، فایل را ذخیره کنید و از ویرایشگر خارج شوید. راه اندازی مجدد Nginx را تا بعد از پیکربندی Jenkins متوقف میکنیم، اما می توانیم پیکربندی خود را اکنون تست کنیم:
⦁ $ sudo nginx -t

اگر همه چیز خوب پیش برود ، این فرمان برمی گردد:
Output
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

اگر اینطور نبود ، خطاهای گزارش شده را برطرف کنید تا تست موفق آمیز باشد.
توجه داشته باشید:
اگر متن proxy_pass را اشتباه پیکربندی کنید (برای مثال با اضافه کردن یک اسلش) ، در صفحه تنظیمات Jenkins چیزی شبیه به زیر خواهید یافت.

اگر این خطا را مشاهده کردید ، تنظیمات proxy_pass و proxy_redirect خود را در پیکربندی Nginx دو بار بررسی کنید.
مرحله 2 – پیکربندی Jenkins
برای همکاری Jenkins با Nginx ، باید پیکربندی Jenkins را به روز کنید تا سرور مجازی Jenkins فقط به رابط localhost گوش دهد و نه به تمام رابط ها (0.0.0.0). اگر Jenkins تمام رابط ها را تحت نظر بگیرد ، در پورت اصلی و رمز گذاری نشده آن (8080) به طور بالقوه قابل دسترسی است.
بیایید فایل پیکربندی / etc / default / jenkins را اصلاح کنیم تا این تنظیمات انجام شود:
⦁ $ sudo nano /etc/default/jenkins

خط JENKINS_ARGS را پیدا کنید و –httpListenAddress = 127.0.0.1 را به آرگومان های موجود اضافه کنید:
/etc/default/jenkins
. . .
JENKINS_ARGS=”–webroot=/var/cache/$NAME/war –httpPort=$HTTP_PORT –httpListenAddress=127.0.0.1″

فایل را ذخیره کنید و از آن خارج شوید.
برای استفاده از تنظیمات پیکربندی جدید ، Jenkins را مجدداً راه اندازی کنید:
⦁ $ sudo systemctl restart jenkins

از آنجا که systemctl خروجی را نمایش نمی دهد ، وضعیت را بررسی کنید:
⦁ $ sudo systemctl status jenkins

باید وضعیت active (exited) را در خط Active  مشاهده کنید:
Output
● jenkins.service – LSB: Start Jenkins at boot time
Loaded: loaded (/etc/init.d/jenkins; generated)
Active: active (exited) since Mon 2018-07-09 20:26:25 UTC; 11s ago
Docs: man:systemd-sysv-generator(8)
Process: 29766 ExecStop=/etc/init.d/jenkins stop (code=exited, status=0/SUCCESS)
Process: 29812 ExecStart=/etc/init.d/jenkins start (code=exited, status=0/SUCCESS)

Nginx را ریستارت کنید:
⦁ $ sudo systemctl restart nginx

وضعیت را بررسی کنید:
⦁ $ sudo systemctl status nginx

Output
● nginx.service – A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2018-07-09 20:27:23 UTC; 31s ago
Docs: man:nginx(8)
Process: 29951 ExecStop=/sbin/start-stop-daemon –quiet –stop –retry QUIT/5 –pidfile /run/nginx.pid (code=exited, status=0/SUCCESS)
Process: 29963 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Process: 29952 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Main PID: 29967 (nginx)

با راه اندازی مجدد هر دو سرور مجازی ، باید بتوانید با استفاده از HTTP یا HTTPS از دامنه بازدید کنید. درخواست های HTTP بصورت خودکار به HTTPS هدایت می شوند و سایت Jenkins با امنیت کامل ارائه می شود.
مرحله 3 – تست پیکربندی
اکنون که رمزگذاری را فعال کرده اید ، می توانید با تنظیم مجدد رمزعبور ادمین ، پیکربندی را آزمایش کنید. بیایید با مراجعه به سایت از طریق HTTP تأیید کنیم که می توانید به Jenkins برسید و به HTTPS هدایت می شوید.
در مرورگر وب خود ، http://example.com را وارد کنید و دامنه خود را با example.com جایگزین کنید. بعد از اینکه ENTER را فشار دهید ، URL باید از https شروع شود و نوار مکان باید نشان دهد که اتصال ایمن است.
می توانید نام کاربری ادمین را که در نحوه نصب Jenkins در Ubuntu 20.04 در فیلد User ایجاد کرده اید و رمز عبوری که در قسمت Password انتخاب کرده اید وارد کنید.
پس از ورود به سیستم ، می توانید رمز عبور را تغییر دهید تا مطمئن شوید که از امنیت بالا برخوردار است.
در گوشه سمت راست بالای صفحه روی نام کاربری خود کلیک کنید. در صفحه نمایه اصلی ، از لیست موجود در سمت چپ صفحه ، پیکربندی را انتخاب کنید:

با این کار شما به صفحه جدیدی می روید که می توانید یک رمز جدید وارد کرده و تأیید کنید:

با کلیک روی Save ، رمز عبور جدید را تأیید کنید. اکنون می توانید از رابط وب Jenkins ایمن استفاده کنید.
نتیجه
در این آموزش Nginx را به عنوان یک پروکسی معکوس در وب سرور مجازی داخلی Jenkins برای تأیید اعتبار و سایر اطلاعات منتقل شده از طریق رابط وب پیکربندی کردید. اکنون که Jenkins ایمن است ، می توانید یاد بگیرید که چگونه می توانید خط اتصال یکپارچه سازی مداوم را تنظیم کنید تا به طور خودکار تغییرات کد را آزمایش کنید. منابعی دیگر که باید در مورد Jenkins با آن ها آشنا شوید عبارتند از آموزش “ایجاد اولین Pipeline ” یا کتابخانه افزونه های مرتبط.

 

برچسب‌ها:

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

Discord یک برنامه چت میباشد که به میلیونها کاربر در سراسر جهان امکان ارسال پیام و گفتگوی صوتی آنلاین را در انجمن هایی به نام guilds یا سرور مجازی ها می دهد. Discord همچنین API گسترده ای را ارائه می دهد که توسعه دهندگان می توانند از آن برای ساختن رباتهای قدرتمند Discord استفاده کنند. رباتها می توانند اقدامات مختلفی مانند ارسال پیام به سرور مجازی ها ، کاربران DM -ing ، سرور مجازی های تعدیل کننده و پخش صوتی را در گپ های صوتی انجام دهند. این به توسعه دهندگان امکان می دهد تا ربات های قدرتمندی را بکار گیرند که شامل ویژگی های پیشرفته و پیچیده ای همچون ابزارهای تعدیل یا حتی بازی ها است. به عنوان مثال ، ربات ابزار Dyno به میلیون ها guilds ارائه می کند و دارای ویژگی های مفیدی مانند محافظت در برابر اسپم ، پخش کننده موسیقی و سایر کارکردها است. یادگیری نحوه ایجاد ربات های Discord به شما امکان می دهد بسیاری از امکانات را که روزانه هزاران نفر با آنها ارتباط برقرار می کنند ، به اجرا بگذارید.
در این آموزش ، با استفاده از Node.js و کتابخانه Discord.js ، یک ربات Discord را از ابتدا خواهید ساخت که به کاربران امکان می دهد به طور مستقیم با Discord API ارتباط برقرار کنند. یک پروفایل برای ربات Discord تنظیم می کنید ، علائم احراز هویت را برای ربات دریافت می کنید ، و ربات را به پردازش دستورات ، با آرگومان ها ، از کاربران توانمند می کنید.
پیش نیازها
قبل از شروع کار به موارد زیر نیاز خواهید داشت:
⦁ Node.js بر روی دستگاه توسعه شما نصب شده باشد. برای نصب این مورد روی macOS یا Ubuntu 18.04 ، مراحل نحوه نصب Node.js و ایجاد محیط توسعه محلی را در macOS یا نصب با استفاده از یک بخش PPA در مقاله نحوه نصب Node.js در اوبونتو 18.04 دنبال کنید.
⦁ هر ویرایشگر متن مورد نظر شما ، از جمله ویژوال استودیو کد ، Atom ، Sublime یا Nano.
⦁ یک حساب Discord رایگان با یک ایمیل تأیید شده و یک سرور مجازی  Discord رایگان که برای تست ربات Discord خود استفاده خواهید کرد.
مرحله 1 – راه اندازی یک ربات Discord
در این مرحله ، از رابط کاربری گرافیکی Discord استفاده می کنید تا یک ربات Discord را تنظیم کنید و نشانه ربات را دریافت کنید ، که به برنامه خود منتقل خواهید کرد.
برای ثبت ربات در پلتفرم Discord از داشبورد برنامه Discord استفاده کنید. در اینجا توسعه دهندگان می توانند برنامه های Discord از جمله رباتهای Discord را ایجاد کنند.

برای شروع ، روی New Application کلیک کنید. Discord از شما می خواهد که نام خود را برای برنامه جدید خود وارد کنید. سپس بر روی Create  کلیک کنید تا برنامه ایجاد شود.

توجه: نام برنامه شما از نام ربات مستقل است ، و لازم نیست که بات همان نام برنامه را داشته باشد.
اکنون داشبورد برنامه خود را باز کنید. برای افزودن ربات به برنامه ، به سربرگ Bot  در نوار پیمایش در سمت چپ بروید.

برای افزودن یک ربات به برنامه ، روی دکمه Add Bot کلیک کنید. هنگامی که تأیید شما را خواست ، روی Yes کلیک کنید. سپس وارد داشبورد خواهید شد که حاوی جزئیاتی از نام ربات ، نشانه احراز هویت و تصویر پروفایل شما است.

می توانید نام یا عکس پروفایل ربات خود را در اینجا روی داشبورد تغییر دهید. همچنین باید با کلیک بر روی گزینه Reveal Token و کپی کردن نشانه ای که ظاهر می شود ، رمز تصدیق ربات را کپی کنید.
اخطار: هرگز نشانه ربات خود را به اشتراک نگذارید و بارگذاری نکنید زیرا این امکان را به همه می دهد که وارد ربات شما شوند.
حال باید یک لینک دعوت ایجاد کنید که به شما امکان می دهد guilds  ربات Discord را اضافه کنید که در آن می توانید ربات را آزمایش کنید. ابتدا به تب OAuth2 داشبورد برنامه بروید. برای ایجاد لینک دعوت ، به پایین بروید و bot  را از گزینه های scopes انتخاب کنید. همچنین باید مجوزهایی را برای کنترل آنچه که ربات شما می تواند در guilds انجام دهد تعیین کنید. برای اهداف این آموزش ، Administrator را انتخاب کنید ، که به ربات شما اجازه می دهد تقریباً تمام اقدامات در guilds را انجام دهد. پیوند را با دکمه Copy کپی کنید.

سپس ، ربات را به یک سرور مجازی اضافه کنید. لینک دعوت خود را که تازه ایجاد کرده اید دنبال کنید. می توانید ربات را به منوی کشویی خود به هر سرور مجازی دیگری اضافه کنید یا مجوزهای ادمین را شامل شوید.

اکنون روی Continue کلیک کنید. اطمینان حاصل کنید که تیک باکس کنار Administrator  تیک خورده است – و مجوزهای ادمین را به ربات اعطا می کند. سپس بر روی Authorize کلیک کنید. Discord از شما می خواهد قبل از اینکه ربات به سرور مجازی ملحق شود ، CAPTCHA را حل کنید. اکنون ربات Discord را در لیست اعضاء موجود در سرور مجازی ی که به آن اضافه می کنید ، تحت offline دارید.

در نهایت با موفقیت یک ربات Discord ایجاد کرده و آن را به یک سرور مجازی اضافه کرده اید. در مرحله بعد ، یک برنامه برای ورود به ربات بنویسید.
مرحله 2 – ایجاد پروژه خود
در این مرحله ، محیط برنامه نویسی اصلی را تنظیم خواهید کرد که در آن می توانید ربات خود را بسازید و به طور برنامه ریزی شده به ربات وارد شوید.
ابتدا باید یک پوشه پروژه و فایل های پروژه ضروری برای ربات تنظیم کنید.
پوشه پروژه خود را ایجاد کنید:
⦁ $ mkdir discord-bot

به پوشه پروژه ای که اخیراً ایجاد کرده اید بروید:
⦁ $ cd discord-bot

در مرحله بعدی ، از ویرایشگر متن خود برای ایجاد فایلی با نام config.json برای ذخیره نشانه احراز هویت ربات خود استفاده کنید:
⦁ $ nano config.json

سپس کد زیر را به فایل پیکربندی اضافه کنید ، متن هایلایت شده را با نشان احراز هویت ربات خود جایگزین کنید:
config.json
{
“BOT_TOKEN”: “YOUR BOT TOKEN”
}
فایل را ذخیره کنید و از آن خارج شوید.
در مرحله بعد یک فایل pack.json ایجاد خواهید کرد که جزئیات پروژه و اطلاعات مربوط به متعلقاتی که برای پروژه استفاده خواهید کرد را ذخیره می کند. با اجرای دستور npm زیر ، یک فایل pack.json ایجاد خواهید کرد:
⦁ $ npm init

npm جزئیات مختلفی در مورد پروژه را از شما می خواهد. اگر در مورد تکمیل تنظیم این اعلان ها راهنمایی می خواهید، می توانید مقاله نحوه استفاده از ماژول های Node.js با npm و pack.json را بخوانید.
اکنون بسته discord.js را که برای تعامل با API Discord استفاده خواهید کرد ، نصب خواهید کرد. می توانید discord.js را از طریق npm با دستور زیر نصب کنید:
⦁ $ npm install discord.js

اکنون که فایل پیکربندی را تنظیم کرده و متعلقات لازم را نصب کرده اید ، آماده هستید که ساخت ربات خود را شروع کنید. در یک برنامه واقعی ، یک ربات بزرگ به چندین فایل ها تقسیم می شود ، اما برای اهداف این آموزش ، کد مربوط به ربات شما در یک فایل خواهد بود.
ابتدا فایلی به نام index.js را در پوشه discord-bot برای کد ایجاد کنید:
⦁ $ nano index.js

با درخواست متعلقات discord.js و فایل پیکربندی با نشان ربات ، کدگذاری ربات را شروع کنید:
index.js
const Discord = require(“discord.js”);
const config = require(“./config.json”);

پس از این ، دو خط کد بعدی را اضافه کنید:
index.js

const client = new Discord.Client();

client.login(config.BOT_TOKEN);

فایل خود را ذخیره کنید و از آن خارج شوید.
خط اول کد Discord.Client جدید ایجاد می کند و آن را به کلاینت ثابت اختصاص می دهد. این کلاینت تا حدی نحوه تعامل شما با Discord API است و اینکه چگونه Discord شما را از وقایعی مانند پیام های جدید مطلع می کند. در واقع کلاینت ، نماینده ربات Discord است.
خط دوم کد از روش login روی کلاینت برای ورود به ربات Discord که ایجاد کرده اید ، استفاده می کند و از توکن موجود در فایل config.json به عنوان رمز عبور استفاده می کند. توکن بهAPI Discord اطلاع می دهد که برنامه برای کدام بوت است و شما برای استفاده از ربات مجاز هستید.
اکنون ، فایل index.js را با استفاده از Node اجرا کنید:
⦁ $ node index.js

وضعیت ربات شما به صورت آنلاین در سرور مجازی Discord که به آن اضافه کردید تغییر خواهد کرد.

شما با موفقیت یک محیط برنامه نویسی تنظیم کرده اید و کد اصلی را برای ورود به یک ربات Discord ایجاد کرده اید. در مرحله بعد دستورات کاربر را کنترل خواهید کرد و ربات خود را برای انجام کارهایی مانند ارسال پیام دریافت خواهید کرد.
مرحله 3 – رسیدگی به اولین دستور کاربر
در این مرحله شما یک ربات ایجاد خواهید کرد که بتواند دستورات کاربر را کنترل کند. اولین فرمان ping خود را پیاده سازی خواهید کرد ، که با “pong” و زمان لازم برای پاسخ به دستور، جواب خواهد داد.
ابتدا باید پیامهایی را که کاربران ارسال می کنند شناسایی و دریافت کنید تا بتوانید هر فرمانی را پردازش کنید. با استفاده از روش on در کلاینت Discord ، Discord یک اعلان درباره رویدادهای جدید برای شما ارسال می کند. روش on دو آرگومان دریافت می کند: نام یک رویدادی که باید برای آن منتظر بمانید و یک تابع برای اجرا در هر زمانی که این رویداد اتفاق می افتد. با استفاده از این روش می توانید منتظر پیام رویداد باشید – هربار که یک پیام به guild  ارسال می شود که در آن ربات مجاز به مشاهده پیام ها است ، این رویداد رخ می دهد. بنابراین بیایید یک تابع ایجاد کنیم ، که هر بار یک پیام برای پردازش دستورات ارسال میشود، اجرا گردد.
ابتدا فایل خود را باز کنید:
⦁ $ nano index.js

کد زیر را به فایل خود اضافه کنید:
index.js

const client = new Discord.Client();

client.on(“message”, function(message) {

});

client.login(config.BOT_TOKEN);

این عملکرد که در رویداد message  اجرا می شود ، message  را به عنوان یک پارامتر در نظر می گیرد. message  مقدار نمونه پیام Discord.js را شامل می شود ، که حاوی اطلاعاتی در مورد پیام ارسال شده و روش هایی برای کمک به ربات در پاسخگویی است.
اکنون خط کد زیر را به تابع مدیریت فرمان خود اضافه کنید:
index.js

client.on(“message”, function(message) {
if (message.author.bot) return;
});

این خط بررسی می کند که نویسنده پیام یک ربات است یا خیر و اگر چنین باشد ، پردازش دستور را متوقف می کند. این مسئله از آن جهت مهم است که شما نمی خواهید پیام های ربات ها را پردازش کنید یا پاسخ دهید. ربات ها معمولاً نیازی به استفاده از ربات ما ندارند از این رو ، نادیده گرفتن پیام های آنها قدرت پردازش را بیشتر می کند و از جلوگیری از پاسخ های تصادفی جلوگیری می کند.
اکنون یک مدیر فرمان خواهید نوشت. برای تحقق این امر ، خوب است که فرمت معمول یک دستور Discord را بدانید. به طور معمول ، ساختار دستور Discord شامل سه قسمت به ترتیب زیر است: پیشوند ، نام فرمان و (بعضی اوقات) آرگومان های فرمان.

• پیشوند: پیشوند می تواند هر چیزی باشد ، اما به طور معمول یک قطعه علامت گذاری یا عبارت انتزاعی است که به طور معمول در ابتدای پیام نمی باشد. این بدان معناست که وقتی پیشوند را در ابتدای پیام وارد کنید ، ربات می داند که هدف این دستور پردازش آن توسط ربات است.
• نام فرمان: نام دستوری که کاربر می خواهد از آن استفاده کند. این بدان معناست که ربات می تواند از چندین دستور با قابلیت های مختلف پشتیبانی کند و به کاربران اجازه دهد با تهیه نام فرمان دیگری بین آنها انتخاب کنند.
• آرگومان ها: گاهی اوقات در صورتی که دستور نیاز به اطلاعات اضافی از کاربر داشته باشد، کاربر می تواند آرگومان ها را پس از نام فرمان ارائه کند و هر آرگومان با یک فاصله از هم جدا شود.
توجه: هیچ ساختار فرمان اجباری وجود ندارد و رباتها می توانند دستورات مورد نظر خود را پردازش کنند ، اما ساختار ارائه شده در اینجا یک ساختار کارآمد است که اکثریت قریب به اتفاق رباتها از آن استفاده می کنند.
برای شروع ایجاد یک پارسر فرمان که این فرمت را به عهده دارد ، خطوط کد زیر را به تابع مدیریت پیام اضافه کنید:
index.js

const prefix = “!”;

client.on(“message”, function(message) {
if (message.author.bot) return;
if (!message.content.startsWith(prefix)) return;
});

خط اول کد را برای اختصاص مقدار “!” به پیشوند prefix اضافه می کنید ، که به عنوان پیشوند ربات استفاده خواهید کرد.
خط دوم کد بررسی می کند که آیا محتوای پیامی که ربات پردازش می کند ، با پیشوند تنظیم شده شروع می شود و اگر اینگونه نباشد ، پیام را برای ادامه پردازش متوقف می کند.
حال باید بقیه پیام را به یک اسم فرمان و هر آرگومان موجود در پیام تبدیل کنید. خطوط هایلایت شده زیر را اضافه کنید:
index.js

client.on(“message”, function(message) {
if (message.author.bot) return;
if (!message.content.startsWith(prefix)) return;

const commandBody = message.content.slice(prefix.length);
const args = commandBody.split(‘ ‘);
const command = args.shift().toLowerCase();
});

برای حذف پیشوند از محتوای پیام و اختصاص نتیجه به ثابت commandBody از خط اول استفاده می کنید. این امر از آن جهت ضروری است که نمی خواهید پیشوند را در نام فرمان تجزیه شده درج کنید.
خط دوم پیام را با پیشوند حذف شده می گیرد و از روش split با یک اسپیس به عنوان جدا کننده بر روی آن استفاده می کند. این اسپس آن را به آرایه ای از رشته های فرعی تقسیم می کند و در هر جایی که فضایی باشد شکاف ایجاد می کند. در نتیجه آرایه ای حاوی نام دستور به دست می آید ، که در صورت وجود در پیام ، هرگونه آرگومانی موجو میباشد. شما این آرایه را به آرگومان های ثابت اختصاص می دهید.
خط سوم ، عنصر اول را از آرایه args (که همان نام دستور ارائه شده است) حذف می کند ، آن را به حروف کوچک تبدیل می کند ، و سپس آن را به دستور ثابت اختصاص می دهد. این به شما امکان می دهد نام فرمان را جدا کنید و فقط آرگومان هایی را در آرایه بگذارید. همچنین از متد toLowerCase استفاده می کنید زیرا دستورات معمولاً در رباتهای Discord به حروف کوچک و بزرگ حساس نیستند.
شما ساخت یک پارسر فرمان ، اجرای پیشوند موردنیاز و دریافت نام فرمان و هرگونه آرگومان در پیام را انجام داده اید. اکنون کد دستورات خاص را پیاده سازی و ایجاد خواهید کرد.
برای شروع اجرای دستور ping ، کد زیر را اضافه کنید:
index.js

const args = commandBody.split(‘ ‘);
const command = args.shift().toLowerCase();

if (command === “ping”) {

}
});

این دستور if بررسی کند که آیا نام دستوری که شما آن را تجزیه کرده اید (به فرمان ثابت اختصاص داده شده است) با “ping” مطابقت دارد. اگر این گونه بود ، نشان می دهد که کاربر می خواهد از دستور “pong” استفاده کند. شما می توانید کد مربوط به دستور خاص را در داخل بلوک if جای دهید. شما این الگو را برای سایر دستوراتی که می خواهید پیاده سازی کنید ، تکرار خواهید کرد.
اکنون می توانید کد دستور “ping” را پیاده سازی کنید:
index.js

if (command === “ping”) {
const timeTaken = Date.now() – message.createdTimestamp;
message.reply(`Pong! This message had a latency of ${timeTaken}ms.`);
}

فایل خود را ذخیره کنید و از آن خارج شوید.
شما می توانید بلوک فرمان “ping” را اضافه کنید که تفاوت بین زمان فعلی محاسبه شده- با استفاده از روش now در آبجکت تاریخ – و زمانی که پیام ساخته شده است را بر حسب میلی ثانیه محاسبه می کند. در واقع محاسبه می کند که چه مدت طول میکشد که پیام پردازش شود و “ping” ارائه گردد.
خط دوم با استفاده از روش reply در ثابت message  ، به دستور کاربر پاسخ می دهد. روش reply (که به کاربر اطلاع می دهد و پیام را برای کاربر مشخص شده هایلایت می کند) کاربرانی که از این دستور استفاده کرده اند ، و به دنبال آن مطالب ارائه شده به عنوان اولین آرگومان در روش را پیگیری می کند. شما الگویی الفبایی حاوی پیام و ping محاسبه شده را به عنوان پاسخی که از روش reply  استفاده خواهد کرد ارائه می کنید.
نتیجه اجرای فرمان “ping” را به دست میدهد.
ربات خود را با استفاده از دستور زیر اجرا کنید (در همان پوشه ای که index.js):
⦁ $ node index.js

اکنون می توانید از دستور “! ping” در هر کانالی استفاده کنید که ربات می تواند آن را مشاهده کند و پیام دهد ، و در نتیجه پاسخی حاصل می شود.

شما با موفقیت یک ربات ایجاد کرده اید که می تواند دستورات کاربر را کنترل کند و اولین دستور خود را پیاده سازی کرده اید. در مرحله بعد ، با اجرای یک دستور sum ، توسعه ربات خود را ادامه می دهید.
مرحله 4 – اجرای دستور Sum
اکنون با اجرای دستور “! sum” برنامه خود را گسترش می دهید. قبل از بازگشت مجموع همه آرگومان ها به کاربر ، تعداد آرگومان ها را جمع کرده و آنها را با هم جمع می کند.
اگر ربات Discord شما همچنان در حال اجرا است ، می توانید روند آن را با CTRL + C متوقف کنید.
فایل index.js خود را دوباره باز کنید:
⦁ $ nano index.js

برای شروع اجرای دستور “! sum” از یک بلوک else-if استفاده خواهید کرد. پس از بررسی نام فرمان ping ، بررسی می کند که آیا نام فرمان برابر ” sum ” است یا خیر. ما از یک بلوک else-if استفاده می کنیم ، زیرا فقط یک دستور به طور همزمان پردازش می شود ، بنابراین اگر این برنامه با نام فرمان “ping” مطابقت دارد ، لازم نیست که دستور “sum” را بررسی کنید. خطوط هایلایت زیر را به فایل خود اضافه کنید:
index.js

if (command === “ping”) {
const timeTaken = Date.now() – message.createdTimestamp;
message.reply(`Ping! This message had a latency of ${timeTaken}ms.`);
}

else if (command === “sum”) {

}
});

می توانید اجرای دستور “sum” را شروع کنید. کد مربوط به فرمان “sum” در داخل بلوک else-if که شما ایجاد کرده اید ، وارد خواهد شد. اکنون کد زیر را اضافه کنید:
index.js

else if (command === “sum”) {
const numArgs = args.map(x => parseFloat(x));
const sum = numArgs.reduce((counter, x) => counter += x);
message.reply(`The sum of all the arguments you provided is ${sum}!`);
}

شما از روش map در لیست آرگومان ها استفاده می کنید تا با استفاده از عملکرد parseFloat در هر مورد موجود در آرایه args ، یک لیست جدید ایجاد کنید. این یک آرایه جدید ایجاد می کند (مختص ثابت numArgs) که در آن همه موارد به جای رشته ها عدد هستند. این بدان معنی است که بعدا می توانید با اضافه کردن آنها به یکدیگر تعداد اعداد را با موفقیت پیدا کنید.
خط دوم از روش reduce در numArgs ثابت استفاده می کند و تابعی را ارائه می دهد که تمام عناصر موجود در لیست را جمع می کند. شما جمع همه عناصر را در numArgs به sum ثابت اختصاص می دهید.
سپس برای پاسخ دادن به دستور کاربر با الگوی الفبایی ، از روش reply در مورد پیام استفاده می کنید ، که شامل کلیه آرگومانهایی است که کاربر به ربات ارسال می کند.
این کار نتیجه اجرای دستور “sum” است. اکنون ربات را با استفاده از دستور زیر اجرا کنید (در همان پوشه ای که index.jsاست):
⦁ $ node index.js

اکنون می توانید از دستور “! sum” در هر کانالی استفاده کنید که ربات می تواند در آن مشاهده کند و پیام دهد.

در زیر یک نسخه کامل از دیرکتوری اسکریپت های index.js است:
index.js
const Discord = require(“discord.js”);
const config = require(“./config.json”);

const client = new Discord.Client();

const prefix = “!”;

client.on(“message”, function(message) {
if (message.author.bot) return;
if (!message.content.startsWith(prefix)) return;

const commandBody = message.content.slice(prefix.length);
const args = commandBody.split(‘ ‘);
const command = args.shift().toLowerCase();

if (command === “ping”) {
const timeTaken = Date.now() – message.createdTimestamp;
message.reply(`Pong! This message had a latency of ${timeTaken}ms.`);
}

else if (command === “sum”) {
const numArgs = args.map(x => parseFloat(x));
const sum = numArgs.reduce((counter, x) => counter += x);
message.reply(`The sum of all the arguments you provided is ${sum}!`);
}
});

client.login(config.BOT_TOKEN);

در این مرحله ، با اجرای دستور sum ، ربات Discord خود را توسعه داده اید.
نتیجه
یک ربات Discord را با موفقیت پیاده سازی کرده اید که می تواند دستورات مختلف کاربر و آرگومان های فرمان را کنترل کند. اگر می خواهید بات خود را گسترش دهید ، می توانید دستورات بیشتری را اجرا کنید یا قسمت های بیشتری از API Discord را امتحان کنید تا یک ربات قدرتمند Discord را تهیه کنید. می توانید مستندات Discord.js یا مستندات Discord API را مرور کنید تا دانش خود در این مورد گسترش دهید.
در حین ایجاد ربات های Discord ، همیشه باید شرایط خدمات Discord API را در نظر داشته باشید ، که بیانگر نحوه استفاده توسعه دهندگان از API Discord میباشد. همچنین می توانید این مجموعه از دستورالعمل ها را در مورد چگونگی اجرای بهتر ربات Discord بخوانید و نکاتی درباره نحوه طراحی ربات های Discord ارائه دهید. اگر می خواهید در مورد Node.js اطلاعات بیشتری کسب کنید ، مقاله نحوه کد نویسی در مجموعه های Node.js را مطالعه کنید.

 

برچسب‌ها:

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

اطلاعات کاربری
  • فراموشی رمز عبور؟
  • آرشیو
    آمار سایت
  • کل مطالب : 116
  • کل نظرات : 0
  • افراد آنلاین : 4
  • تعداد اعضا : 0
  • آی پی امروز : 20
  • آی پی دیروز : 23
  • بازدید امروز : 41
  • باردید دیروز : 29
  • گوگل امروز : 0
  • گوگل دیروز : 0
  • بازدید هفته : 92
  • بازدید ماه : 173
  • بازدید سال : 2,431
  • بازدید کلی : 7,130