سرور مجازی

  • ۰
  • ۰

Ansible ابزاری مدرن برای مدیریت پیکربندی است که کار تنظیم و نگهداری سرور محازی های از راه دور را تسهیل می کند. با یک طراحی مینیمالیستی که قصد دارد کاربران را به روز کرده و به آنها سرعت ببخشد ، به شما این امکان را می دهد تا یک یا صدها سیستم را از یک مکان مرکزی با playbook یا دستورات ad hoc کنترل کنید.
بر خلاف playbook- که شامل مجموعه کارهایی است که می توان از آنها استفاده مجدد کرد – دستورات ad hoc کارهایی هستند که شما مرتباً آنها را انجام نمی دهید ، مانند راه اندازی مجدد یک سرویس یا بازیابی اطلاعات در مورد سیستمهای از راه دور که قابل اعتماد نیستند.

در این راهنما، یاد می گیرید که چگونه از دستورات ad hoc برای انجام کارهای متداول مانند نصب بسته ها ، کپی کردن فایل ها ، و راه اندازی مجدد سرویس ها بر روی یک یا چند سرور محازی از راه دور ، از یک گره کنترل Ansible استفاده کنید.

پیش نیازها
برای پیروی از این راهنما ، به موارد زیر نیاز دارید:
• یک گره کنترل Ansible. این راهنما فرض می کند که گره کنترل شما یک دستگاه اوبونتو 20.04 است که Ansible روی آن نصب و پیکربندی شده است تا با استفاده از کلیدهای SSH به میزبان های Ansible شما متصل شود. اطمینان حاصل کنید که گره کنترل دارای یک کاربر معمولی با مجوزهای sudo است و فایروال را نیز فعال کرده است ، همانطور که در راهنمای ستاپ اولیه سرور محازی توضیح داده شده است. برای راه اندازی Ansible ، لطفا راهنمای ما در مورد نحوه نصب و پیکربندی Ansible در اوبونتو 20.04 را دنبال کنید.
• دو یا چند میزبان Ansible. میزبان Ansible هر دستگاهی است که گره کنترل Ansible شما برای خودکار سازی پیکربندی شده باشد. این راهنما فرض می کند که میزبان های Ansible شما سرور محازی های Ubuntu 20.04 از راه دور هستند. اطمینان حاصل کنید که هر میزبان Ansible دارای موارد زیر است:
o کلید عمومی SSH گره کنترل Ansible به کلیدهای مجاز کاربر کاربر اضافه شده باشد. این کاربر می تواند root یا یک کاربر معمولی با امتیازات sudo باشد. برای تنظیم این گزینه ، می توانید مرحله 2 راهنمای نحوه تنظیم کلیدهای SSH را در اوبونتو 20.04 دنبال کنید.
• یک فایل inventory بر روی گره کنترل Ansible تنظیم شده باشد. اطمینان حاصل کنید که یک فایل inventory در آن وجود دارد که شامل همه میزبان های Ansible باشد. برای انجام این کار ، لطفاً به راهنمای چگونگی تنظیم موجودی های Ansible مراجعه کنید. سپس مطمئن شوید که با اجرای تست اتصال مشخص شده در بخش تست اتصال به میزبان های Ansible ، می توانید به گره های خود متصل شوید.

آزمایش اتصال به هاست های Ansible
دستور زیر اتصال بین گره کنترل Ansible و تمام میزبان های Ansible شما را آزمایش می کند. این دستور از کاربر سیستم فعلی و کلید SSH مربوطه آن به عنوان ورود از راه دور استفاده می کند و گزینه -m را نیز شامل می شود ، که به Ansible می گوید ماژول ping را اجرا کنید. همچنین دارای پرچم -i است که به Ansible میگوید میزبان های موجود در فایل inventory مشخص شده را ping کند.
$ ansible all -i inventory -m ping

اگر اولین بار است که از طریق SSH به این سرور محازی ها وصل می شوید ، از شما خواسته می شود که صحت میزبان هایی را که از طریق Ansible به آنها وصل می شوید ، تأیید کنید. وقتی از شما خواسته شد ، yes را تایپ کنید و سپس برای تأیید ENTER را بزنید.
باید خروجی مشابه این دریافت کنید:
Output
server1 | SUCCESS => {
“changed”: false,
“ping”: “pong”
}
server2 | SUCCESS => {
“changed”: false,
“ping”: “pong”
}

هنگامی که یک پاسخ “pong” را از هاست دریافت کردید ، بدان معنی است که ارتباط زنده است و شما آماده اجرای دستورات Ansible در آن سرور محازی هستید.

تنظیم گزینه های اتصال
به طور پیش فرض ، Ansible سعی دارد با استفاده از صفحه کلید SSH مربوطه ، به عنوان کاربر از راه دور با همان نام کاربری سیستم فعلی شما ، به گره ها متصل شود.
برای اتصال به عنوان یک کاربر از راه دور متفاوت ، فرمان را با پرچم -u و نام کاربر در نظر گرفته شده اضافه کنید:
$ ansible all -i inventory -m ping -u sammy

اگر از یک کلید SSH سفارشی برای اتصال به سرور محازی های از راه دور استفاده می کنید ، می توانید آن را در زمان اجرا با گزینه –private-key ارائه دهید:
$ ansible all -i inventory -m ping –private-key=~/.ssh/custom_id

توجه: برای کسب اطلاعات بیشتر در مورد نحوه اتصال به گره ها ، لطفاً به راهنمای نحوه استفاده از Ansible ما مراجعه کنید ، که گزینه های اتصال بیشتری را نشان می دهد.

هنگامی که می توانید با استفاده از گزینه های مناسب اتصال برقرار کنید ، می توانید فایل inventory خود را تنظیم کنید تا به صورت خودکار کاربر از راه دور و کلید خصوصی خود را تنظیم کنید ، تا تفاوتی با مقادیر پیش فرض تعیین شده توسط Ansible نباشد. سپس ، لازم نیست آن پارامترها را در خط فرمان ارائه دهید.
مثال فایل inventory زیر متغیر ansible_user را فقط برای سرور محازی server1 تنظیم می کند:
~/ansible/inventory
server1 ansible_host=203.0.113.111 ansible_user=sammy
server2 ansible_host=203.0.113.112

Ansible اکنون هنگام اتصال به سرور محازی server1 از summy به عنوان کاربر پیش فرض از راه دور استفاده می کند.
برای تنظیم کلید SSH سفارشی ، متغیر ansible_ssh_private_key_file را به شرح زیر وارد کنید:
~/ansible/inventory
server1 ansible_host=203.0.113.111 ansible_ssh_private_key_file=/home/sammy/.ssh/custom_id
server2 ansible_host=203.0.113.112

در هر دو مورد ، ما مقادیر سفارشی را فقط برای server1 تنظیم کرده ایم. اگر می خواهید از همان تنظیمات برای چندین سرور محازی استفاده کنید ، می توانید برای آن گروه child استفاده کنید:
~/ansible/inventory
[group_a]
203.0.113.111
203.0.113.112

[group_b]
203.0.113.113

[group_a:vars]
ansible_user=sammy
ansible_ssh_private_key_file=/home/sammy/.ssh/custom_id

این پیکربندی مثال فقط یک کاربر سفارشی و کلید SSH را برای اتصال به سرور محازی های ذکر شده در group_a اختصاص می دهد.

تعیین اهدافی برای اجرای فرمان
هنگام اجرای دستورات ad hoc با Ansible ، می توانید میزبان های فردی و همچنین هر ترکیبی از گروه ها ، هاست ها و زیر گروه ها را هدف قرار دهید. به عنوان مثال ، به ترتیب زیر می توانید اتصال را برای هر میزبان در یک گروه به نام سرور محازی ها بررسی کنید:
$ ansible servers -i inventory -m ping

همچنین می توانید میزبان ها و گروه های مختلفی را با جدا کردن آنها با ستون هایی مشخص کنید:
$ ansible server1:server2:dbservers -i inventory -m ping

برای درج یک استثناء در یک الگو ، از علامت تعجب ، پیشوند با کاراکتر \ ، به شرح زیر استفاده کنید. این دستور بر روی همه سرور محازی های گروه 1 اجرا می شود ، به جز server2:
$ ansible group1:\!server2 -i inventory -m ping

در صورت تمایل به اجرای یک دستور فقط بر روی سرور محازی هایی که جزئی از گروه 1 و گروه 2 هستند ،
به عنوان مثال ، باید از & استفاده کنید. فراموش نکنید که پیشوند آن را یک کاراکتر \ قرار دهید:
$ ansible group1:\&group2 -i inventory -m ping

برای کسب اطلاعات بیشتر در مورد چگونگی استفاده از الگوها هنگام تعیین اهداف برای اجرای فرمان ، لطفاً به مرحله 5 راهنمای ما در مورد نحوه تنظیم موجودی های Ansible مراجعه کنید.

اجرای ماژول های Ansible
ماژول های Ansible قطعاتی از کد هستند که می توانند از playbooks و همچنین از خط فرمان دریافت شوند تا مراحل اجرا روی گره های از راه دور را تسهیل کنند. مثالها شامل ماژول apt  ، برای مدیریت بسته های سیستم در اوبونتو و ماژول user  است که برای مدیریت کاربران سیستم استفاده می شود. دستور ping  مورد استفاده در سراسر این راهنما نیز یک ماژول است که به طور معمول برای تست اتصال از گره کنترل به هاست استفاده می شود.
Ansible با مجموعه گسترده ای از ماژول های داخلی همراه است که برخی از آنها به منظور فراهم آوردن قابلیت های کامل ، نیاز به نصب نرم افزار اضافی دارند. همچنین می توانید ماژول های دلخواه خود را با استفاده از زبان مورد نظر خود ایجاد کنید.
برای اجرای یک ماژول با آرگومان ها ، پرچم -a را به همراه گزینه های مناسب در نقل قول اضافه کنید ، مانند این:
$ ansible target -i inventory -m module -a “module options”

به عنوان نمونه ، از ماژول apt برای نصب بسته tree  روی server1 استفاده می کند:
$ ansible server1 -i inventory -m apt -a “name=tree”

اجرای دستورات Bash

هنگامی که یک ماژول از طریق گزینه -m ارائه نمی شود ، از ماژول فرمان به طور پیش فرض برای اجرای دستور مشخص شده روی سرور محازی (های) راه دور استفاده می شود.
این امر به شما امکان می دهد تا بتوانید تقریبا هر فرمانی را اجرا کنید که بطور معمول از طریق یک ترمینال SSH اجرا میشود، مادامی که کاربر در حال اتصال مجوزهای کافی داشته باشد و هیچ گونه اعلان تعاملی وجود نداشته باشد.
این مثال فرمان uptime را در کلیه سرور محازی ها از موجودی مشخص شده اجرا می کند:
$ ansible all -i inventory -a “uptime”

Output
server1 | CHANGED | rc=0 >>
14:12:18 up 55 days, 2:15, 1 user, load average: 0.03, 0.01, 0.00
server2 | CHANGED | rc=0 >>
14:12:19 up 10 days, 6:38, 1 user, load average: 0.01, 0.02, 0.00

استفاده از افزایش امتیازات برای اجرای دستورات با sudo
اگر دستور یا ماژول مورد نظر برای اجرا روی هاستهای از راه دور نیاز به امتیازات گسترده سیستم یا کاربر سیستم دیگری دارد ، لازم است که از ماژول افزایش امتیاز Ansible استفاده کنید ، که ماژولی انتزاعی برای sudo و همچنین سایر نرم افزارهای افزایش امتیاز است که توسط Ansible در سیستم عامل های مختلف پشتیبانی می شود.
به عنوان مثال ، اگر می خواهید یک فرمان tail  را برای خروجی آخرین پیام های ورود به سیستم از خطای Nginx روی سرور محازی به نام server1 از inventory ، اجرا کنید ، باید گزینه –become را به شرح زیر وارد کنید:
ansible server1 -i inventory -a “tail /var/log/nginx/error.log” –become

این می تواند معادل اجرای فرمان sudo tail /var/log/nginx/error.log بر روی میزبان از راه دور ، با استفاده از کاربر سیستم فعلی محلی یا کاربر از راه دور تنظیم شده در فایل inventory شما باشد.
سیستم های افزایش امتیاز مانند sudo اغلب با درخواست رمز ورود کاربر، از شما میخواهند که تأیید اعتبار کنید. این باعث می شود که Ansible در اجرای یک دستور یا اجرای playbook شکست بخورد. سپس می توانید از گزینه –ask-become-pass یا -K استفاده کنید تا Ansible اعلان رمز عبور sudo را درخواست کند:

$ ansible server1 -i inventory -a “tail /var/log/nginx/error.log” –become -K

نصب و حذف بسته ها
مثال زیر از ماژول apt برای نصب بسته nginx در تمام گره ها از فایل inventory استفاده می کند:
$ ansible all -i inventory -m apt -a “name=nginx” –become -K

برای حذف بسته ، آرگومان state را درج کنید و آن را روی absent تنظیم کنید:.
$ ansible all -i inventory -m apt -a “name=nginx state=absent” –become -K

 

کپی کردن فایل ها
با ماژول file ، می توانید فایلها را بین گره کنترل و گره های مدیریت شده ، از هر جهت کپی کنید. دستور زیر یک فایل متنی محلی را برای همه میزبانهای از راه دور در فایل inventory مشخص شده کپی می کند:
$ ansible all -i inventory -m copy -a “src=./file.txt dest=~/myfile.txt”

برای کپی کردن فایل از سرور محازی از راه دور در گره کنترل خود ، گزینه Remote_src را نیز اضافه کنید:
$ ansible all -i inventory -m copy -a “src=~/myfile.txt remote_src=yes dest=./file.txt”

تغییر مجوزهای فایل
برای تغییر مجوزها در فایل ها و دایرکتوری ها روی گره های از راه دور خود ، می توانید از ماژول file استفاده کنید.
دستور زیر مجوزها را روی فایلی به نام file.txt که در / var / www در میزبان از راه دور قرار دارد تنظیم می کند. این قسمت کادر اجرایی فایل را روی 600 تنظیم می کند ، که مجوزهای خواندن و نوشتن را فقط برای مالک فعلی فایل فعال می کند. علاوه بر این ، مالکیت آن فایل را برای کاربر و گروهی به نام sammy تعیین می کند:
$ ansible all -i inventory -m file -a “dest=/var/www/file.txt mode=600 owner=sammy group=sammy” –become -K

از آنجا که این فایل در یک دیرکتوری قرار دارد که معمولاً متعلق به root است ، برای تغییر ویژگی های آن ممکن است به مجوزهای sudo نیاز داشته باشیم. به همین دلیل گزینه های –become و -K را شامل می شود. اینها برای اجرای دستور دارای امتیازات گسترده از سیستم تشدید امتیاز Ansible استفاده می کنند ، و این امر باعث می شود که رمز عبور sudo را برای کاربر از راه دور تهیه کنید.

ریستارت سرویس ها
شما می توانید از ماژول service برای مدیریت سرویس های در حال اجرا روی گره های از راه دور که توسط Ansible استفاده می شود ، استفاده کنید. این امر به امتیازات گسترده سیستم نیاز دارد ، بنابراین اطمینان حاصل کنید که کاربر از راه دور شما دارای مجوزهای sudo است و شما از گزینه –become برای استفاده از سیستم افزایش امتیاز Ansible استفاده می کنید. استفاده از -K باعث می شود که رمز عبور sudo را برای کاربر متصل کننده فراهم کنید.
برای ریستارت سرویس nginx در تمام میزبانهای گروهی به نام webservers ، دستور زیر را اجرا کنید:
$ ansible webservers -i inventory -m service -a “name=nginx state=restarted” –become -K

ریستارت سرور محازی ها
اگرچه Ansible یک ماژول اختصاصی برای راه اندازی مجدد سرور محازی ها ندارد ، می توانید یک دستور bash صادر کنید که فرمان /sbin/reboot را روی میزبان از راه دور فراخوانی می کند.
راه اندازی مجدد سرور محازی به امتیازات گسترده سیستم نیاز دارد ، بنابراین اطمینان حاصل کنید که کاربر از راه دور شما دارای مجوزهای sudo است و شما از گزینه –become برای استفاده از سیستم افزایش امتیاز Ansible استفاده می کنید. استفاده از -K باعث می شود رمز عبور sudo را برای کاربر متصل کننده فراهم کنید.
هشدار: دستور زیر سرور محازی (های) هدف Ansible را ریستارت می کند. این امر ممکن است باعث ایجاد اختلال موقتی در هر برنامه ای که به آن سرور محازی ها متکی است، گردد.

برای ریستارت همه سرور محازی ها در یک گروه webservers  دستور زیر را اجرا کنید :
$ ansible webservers -i inventory -a “/sbin/reboot” –become -K

جمع آوری اطلاعات در مورد گره های از راه دور
ماژول setup  اطلاعات دقیق در مورد سیستمهای از راه دور مدیریت شده توسط Ansible ، که به system facts نیز شناخته میشود را نشان می دهد.
برای به دست آوردن system facts برای server1 ، دستور زیر را اجرا کنید:
$ ansible server1 -i inventory -m setup

این دستور مقدار زیادی از داده های JSON را چاپ می کند که حاوی جزئیاتی درباره محیط سرور محازی از راه دور است. برای اینکه فقط مرتبط ترین اطلاعات چاپ شود، عبارت “gather_subset=min” را به شرح زیر وارد کنید:
$ ansible server1 -i inventory -m setup -a “gather_subset=min”

برای چاپ فقط موارد خاص JSON ، می توانید از آرگومان filter استفاده کنید. که یک الگوی wildcard را میپذیرد که برای مطابقت رشته ها ، مشابه fnmatch ، استفاده میشود. به عنوان مثال ، برای به دست آوردن اطلاعات در مورد هر دو رابط شبکه ipv4 و ipv6 ، می توانید از * ipv * به عنوان فیلتر استفاده کنید:
ansible server1 -i inventory -m setup -a “filter=*ipv*”

Output
server1 | SUCCESS => {
“ansible_facts”: {
“ansible_all_ipv4_addresses”: [
“203.0.113.111”,
“10.0.0.1”
],
“ansible_all_ipv6_addresses”: [
“fe80::a4f5:16ff:fe75:e758”
],
“ansible_default_ipv4”: {
“address”: “203.0.113.111”,
“alias”: “eth0”,
“broadcast”: “203.0.113.111”,
“gateway”: “203.0.113.1”,
“interface”: “eth0”,
“macaddress”: “a6:f5:16:75:e7:58”,
“mtu”: 1500,
“netmask”: “255.255.240.0”,
“network”: “203.0.113.0”,
“type”: “ether”
},
“ansible_default_ipv6”: {}
},
“changed”: false
}

اگر می خواهید میزان استفاده از دیسک را بررسی کنید ، می توانید یک دستور Bash را با استفاده از ابزار df اجرا کنید ، به شرح زیر:
$ ansible all -i inventory -a “df -h”

Output

server1 | CHANGED | rc=0 >>
Filesystem Size Used Avail Use% Mounted on
udev 3.9G 0 3.9G 0% /dev
tmpfs 798M 624K 798M 1% /run
/dev/vda1 155G 2.3G 153G 2% /
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/vda15 105M 3.6M 101M 4% /boot/efi
tmpfs 798M 0 798M 0% /run/user/0

server2 | CHANGED | rc=0 >>
Filesystem Size Used Avail Use% Mounted on
udev 2.0G 0 2.0G 0% /dev
tmpfs 395M 608K 394M 1% /run
/dev/vda1 78G 2.2G 76G 3% /
tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
/dev/vda15 105M 3.6M 101M 4% /boot/efi
tmpfs 395M 0 395M 0% /run/user/0

نتیجه
در این راهنما ، ما نحوه استفاده از دستورات adible ad hoc را برای مدیریت سرور محازی های از راه دور ، از جمله نحوه اجرای کارهای متداول شامل ریستارت یک سرویس یا کپی کردن یک فایل از گره کنترل به سرور محازی های از راه دور که توسط آن قابل کنترل است ، نشان دادیم. همچنین نحوه جمع آوری اطلاعات از گره های از راه دور با استفاده از پارامترهای محدود کننده و فیلتر را مشاهده کردیم.
به عنوان یک منبع اضافی ، می توانید مستندات رسمی Ansible را در مورد دستورات ad hoc بررسی کنید.

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

  • behnam gol mohamadi
  • ۰
  • ۰

DDEV یک ابزار منبع باز است که از Docker برای ساختن محیط های توسعه محلی برای بسیاری از چارچوب های مختلف PHP استفاده می کند. با استفاده از قدرت کانتینر کردن ، DDEV می تواند نحوه کار روی چندین پروژه که از چندین پشته فناوری و چندین سرور مجازی ابری استفاده می کنند ، بسیار ساده نماید. DDEV شامل قالب هایی برای WordPress ، Laravel ، Magento ، TYPO3 ، Drupal و موارد دیگر است.
Drupal 9 در تاریخ 3 ژوئن 2020 برای Drupal CMS منتشر شد. Drupal که به دلیل سهولت در استفاده و کتابخانه گسترده ای از ماژول ها و تم ها شناخته شده است ، یک چارچوب محبوب PHP برای ساخت و نگهداری وب سایت ها و برنامه های مختلف در هر اندازه است.
در این آموزش شما با استفاده از DDEV اقدام به تهیه وب سایت Drupal 9 در دستگاه محلی خود خواهید کرد. این کار به شما امکان می دهد تا ابتدا وب سایت خود را بسازید و سپس وقتی آماده شدید ، پروژه خود را به یک سرور مجازی تولید مستقر کنید.

پیش نیازها
برای تکمیل این آموزش ، به موارد زیر نیاز دارید:
• یک دستگاه محلی که لینوکس یا macOS را اجرا می کند
⦁ برای macOS: مدیر بسته Homebrew ، که شما برای نصب DDEV استفاده خواهید کرد. برای نصب Homebrew در دستگاه محلی خود ، مرحله سوم – نصب و راه اندازی Homebrew را در این آموزش Ruby دنبال کنید.
⦁ Docker و Docker Compose روی دستگاه محلی شما نصب باشد.
o برای لینوکس: می توانید Docker و Docker Compose را با این دو آموزش نصب کنید: نحوه نصب و استفاده از Docker و نحوه نصب Docker Compose. توزیع لینوکس خود را از لیست انتخاب کرده و دستورالعمل های موجود را دنبال کنید.
o برای macOS: Docker Compose قبلاً به عنوان بخشی از جعبه ابزار Docker در دسترس بود ، اما جعبه ابزار Docker اکنون یک راه حل اساسی است. امروز ، Docker رسما توصیه می کند که Docker Desktop را نصب کنید ، که شامل Docker Compose ، Docker Engine و موارد دیگر می باشد. برای نصب Docker Desktop در macOS ، راهنمای رسمی Docker را دنبال کنید. برای اطلاعات بیشتر می توانید راهنمای رسمی شروع کار Docker Desktop را مطالعه کنید. اگر قبلاً از Docker Toolbox برای نصب ابزارهای مختلف Docker استفاده می کردید ، می توانید در مورد تفاوت های بین Docker Toolbox و Docker Desktop و چگونگی همزیستی آنها ، این مقاله رسمی را بخوانید.

توجه: توسعه Drupal 9 با استفاده از DDEV روی یک سرور مجازی از راه دور امکان پذیر است ، اما برای دسترسی به localhost در یک مرورگر وب ، به یک راه حل نیاز خواهید داشت. دستور DDEV ddev share با ngrok کار می کند ، که تونل ایمن را برای شما و سایر ذینفعان در سرور مجازی شما ایجاد می کند تا سایت توسعه خود را مشاهده کنید. برای استفاده شخصی ، همچنین می توانید یک رابط کاربری گرافیکی را بر روی سرور مجازی راه دور خود نصب کنید و از طریق یک مرورگر وب در داخل رابط به سایت توسعه خود دسترسی پیدا کنید برای این کار می توانید راهنمای ما در مورد نحوه نصب و پیکربندی VNC در اوبونتو 20.04 را دنبال کنید. برای یک راه حل GUI حتی سریعتر ، می توانید راهنمای ما در مورد راه اندازی دسک تاپ از راه دور با X2Go در اوبونتو 20.04 را دنبال کنید.

مرحله 1 – نصب DDEV
در این مرحله DDEV را روی دستگاه محلی خود نصب خواهید کرد. گزینه 1 شامل دستورالعمل هایی برای macOS است در حالی که گزینه 2 دستورالعمل هایی را برای لینوکس ارائه می دهد. این آموزش بر روی نسخه DDEV 1.15.0 تست شده است.

گزینه 1 – نصب DDEV روی macOS
DDEV توصیه می کند که کاربران macOS ابزار خود را با استفاده از مدیر بسته Homebrew نصب کنند. برای نصب جدیدترین نسخه پایدار از دستور brew زیر استفاده کنید:
⦁ $ brew tap drud/ddev && brew install drud/ddev/ddev

اگر جدیدترین نسخه مطلق را ترجیح می دهید ، می توانید از brew برای نصب ddev-edge استفاده کنید:
⦁ $ brew tap drud/ddev-edge && brew install drud/ddev-edge/ddev

اگر نسخه DDEV را قبلاً نصب کرده اید ، یا می خواهید نسخه خود را به روز کنید ، DDEV را خاموش کنید و برای بروزرسانی نصب خود از brew استفاده کنید:
⦁ $ ddev poweroff

$ $ brew upgrade ddev

پس از نصب یا به روزرسانی DDEV ، نسخه ddev را برای تأیید نرم افزار خود اجرا کنید:
⦁ $ ddev version

خروجی مانند این را مشاهده خواهید کرد:
Output
DDEV-Local version v1.15.0
commit v1.15.0
db drud/ddev-dbserver-mariadb-10.2:v1.15.0
dba phpmyadmin/phpmyadmin:5
ddev-ssh-agent drud/ddev-ssh-agent:v1.15.0
docker 19.03.8
docker-compose 1.25.5
os darwin
router drud/ddev-router:v1.15.0
web drud/ddev-webserver:v1.15.0

DDEV شامل یک رابط قدرتمند CLI یا خط فرمان است. ddev را اجرا کنید تا در مورد برخی دستورات معمول مطلع شوید:
⦁ $ ddev

خروجی زیر را مشاهده خواهید کرد:
Output
Create and maintain a local web development environment.
Docs: https://ddev.readthedocs.io
Support: https://ddev.readthedocs.io/en/stable/#support

Usage:
ddev [command]

Available Commands:
auth A collection of authentication commands
composer Executes a composer command within the web container
config Create or modify a ddev project configuration in the current directory
debug A collection of debugging commands
delete Remove all project information (including database) for an existing project
describe Get a detailed description of a running ddev project.
exec Execute a shell command in the container for a service. Uses the web service by default.
export-db Dump a database to a file or to stdout
help Help about any command
hostname Manage your hostfile entries.
import-db Import a sql file into the project.
import-files Pull the uploaded files directory of an existing project to the default public upload directory of your project.
list List projects
logs Get the logs from your running services.
pause uses ‘docker stop’ to pause/stop the containers belonging to a project.
poweroff Completely stop all projects and containers
pull Pull files and database using a configured provider plugin.
restart Restart a project or several projects.
restore-snapshot Restore a project’s database to the provided snapshot version.
sequelpro This command is not available since sequel pro.app is not installed
share Share project on the internet via ngrok.
snapshot Create a database snapshot for one or more projects.
ssh Starts a shell session in the container for a service. Uses web service by default.
start Start a ddev project.
stop Stop and remove the containers of a project. Does not lose or harm anything unless you add –remove-data.
version print ddev version and component versions

Flags:
-h, –help help for ddev
-j, –json-output If true, user-oriented output will be in JSON format.
-v, –version version for ddev

Use “ddev [command] –help” for more information about a command.

برای اطلاعات بیشتر در مورد استفاده از DDEV CLI ، به اسناد رسمی DDEV مراجعه کنید.
با نصب DDEV در دستگاه محلی خود ، اکنون آماده نصب Drupal 9 هستید و شروع به توسعه وب سایت خواهید کرد.

گزینه 2 – نصب DDEV در لینوکس
در سیستم عامل لینوکس می توانید DDEV را با استفاده از Homebrew برای لینوکس یا با استفاده از اسکریپت نصب رسمی نصب کنید. در اوبونتو ، با به روزرسانی لیست بسته های خود در مدیر بسته apt شروع کنید (شما می توانید از Debian استفاده کنید ، در غیر این صورت از مدیر بسته معادل مرتبط با توزیع لینوکس خود استفاده نمایید):
⦁ $ sudo apt update

اکنون برخی از بسته های پیش شرط را از مخزن رسمی اوبونتو نصب کنید:
⦁ $ sudo apt install build-essential apt-transport-https ca-certificates software-properties-common curl

این بسته ها به شما امکان می دهند اسکریپت نصب DDEV را از مخزن رسمی GitHub آنها دانلود کنید.
اکنون اسکریپت را دانلود کنید:
⦁ $ curl -O https://raw.githubusercontent.com/drud/ddev/master/scripts/install_ddev.sh

قبل از اجرای اسکریپت ، آن را در nano یا ویرایشگر متن مورد نظر خود باز کرده و محتویات آن را بررسی کنید:
nano install_ddev.sh

پس از بررسی محتوای اسکریپت و رضایت ، فایل را ذخیره کنید و ببندید . اکنون آماده اجرای اسکریپت نصب هستید.
برای اجرای اسکریپت از دستور chmod استفاده کنید:

⦁ $ chmod +x install_ddev.sh

اکنون اسکریپت را اجرا کنید:
⦁ $ ./install_ddev.sh

فرآیند نصب ممکن است از شما بخواهد که برخی از تنظیمات را تأیید کنید یا رمز عبور sudo خود را وارد کنید. پس از اتمام نصب ، DDEV را در سیستم عامل لینوکس خود در دسترس خواهید داشت.
نسخه ddev را برای تأیید نرم افزار خود اجرا کنید:
⦁ $ ddev version

خروجی مانند این را مشاهده خواهید کرد:
Output
DDEV-Local version v1.15.0
commit v1.15.0
db drud/ddev-dbserver-mariadb-10.2:v1.15.0
dba phpmyadmin/phpmyadmin:5
ddev-ssh-agent drud/ddev-ssh-agent:v1.15.0
docker 19.03.8
docker-compose 1.25.5
os linux
router drud/ddev-router:v1.15.0
web drud/ddev-webserver:v1.15.0

DDEV یک CLI قدرتمند یا رابط خط فرمان است. ddev را بدون هیچ چیز دیگری اجرا کنید تا در مورد برخی دستورات متداول کسب اطلاعات کنید:
⦁ $ ddev

خروجی زیر را مشاهده خواهید کرد:
Output
Create and maintain a local web development environment.
Docs: https://ddev.readthedocs.io
Support: https://ddev.readthedocs.io/en/stable/#support

Usage:
ddev [command]

Available Commands:
auth A collection of authentication commands
composer Executes a composer command within the web container
config Create or modify a ddev project configuration in the current directory
debug A collection of debugging commands
delete Remove all project information (including database) for an existing project
describe Get a detailed description of a running ddev project.
exec Execute a shell command in the container for a service. Uses the web service by default.
export-db Dump a database to a file or to stdout
help Help about any command
hostname Manage your hostfile entries.
import-db Import a sql file into the project.
import-files Pull the uploaded files directory of an existing project to the default public upload directory of your project.
list List projects
logs Get the logs from your running services.
pause uses ‘docker stop’ to pause/stop the containers belonging to a project.
poweroff Completely stop all projects and containers
pull Pull files and database using a configured provider plugin.
restart Restart a project or several projects.
restore-snapshot Restore a project’s database to the provided snapshot version.
sequelpro This command is not available since sequel pro.app is not installed
share Share project on the internet via ngrok.
snapshot Create a database snapshot for one or more projects.
ssh Starts a shell session in the container for a service. Uses web service by default.
start Start a ddev project.
stop Stop and remove the containers of a project. Does not lose or harm anything unless you add –remove-data.
version print ddev version and component versions

Flags:
-h, –help help for ddev
-j, –json-output If true, user-oriented output will be in JSON format.
-v, –version version for ddev

Use “ddev [command] –help” for more information about a command.

برای اطلاعات بیشتر در مورد استفاده از DDEV CLI ، می توانید به اسناد رسمی DDEV مراجعه کنید.
با نصب DDEV در دستگاه محلی خود ، اکنون آماده استقرار Drupal 9 و توسعه وب سایت هستید.

مرحله 2 – استقرار یک سایت جدید Drupal 9 با استفاده از DDEV
با اجرای DDEV ، اکنون از آن برای ایجاد یک سیستم فایل اختصاصی Drupal ، نصب Drupal 9 استفاده کرده و سپس یک پروژه وب سایت استاندارد را آغاز می کنید.
ابتدا یک دایرکتوری root Project ایجاد می کنید و سپس به آن میروید. تمام دستورات باقی مانده را از این مکان اجرا خواهید کرد. در این آموزش از d9test استفاده می شود ، اما آزاد هستید که دیرکتوری خود را هر چیز دیگری بنامید. با این حال توجه داشته باشید ، که DDEV به خوبی با اسم های خط فاصله دار کار نمی کند. بهتر است از اسامی دیرکتوری مانند my-project یا drupal-site-1 اجتناب شود.
دایرکتوری اصلی پروژه خود را ایجاد کرده و به داخل آن بروید:
⦁ $ mkdir d9test

⦁ $ cd d9test

DDEV در ایجاد شاخه های دیرکتوری که مطابق با سیستم عاملهای خاص CMS هستند ، سرآمد است. برای ایجاد یک ساختار دایرکتوری خاص برای Drupal 9 از دستور پیکربندی ddev استفاده کنید:
⦁ $ ddev config –project-type=drupal9 –docroot=web –create-docroot

خروجی مانند این را مشاهده خواهید کرد:
Output
Creating a new ddev project config in the current directory (/Users/sammy/d9test)
Once completed, your configuration will be written to /Users/sammy/d9test/.ddev/config.yaml

Created docroot at /Users/sammy/d9test/web
You have specified a project type of drupal9 but no project of that type is found in /Users/sammy/d9test/web
Ensuring write permissions for d9new
No settings.php file exists, creating one
Existing settings.php file includes settings.ddev.php
Configuration complete. You may now run ‘ddev start’.

از آنجا که شما –project-type = drupal9 را به دستور ddev config خود منتقل کردید ، DDEV چندین زیرشاخه و فایل ایجاد کرده است که نمایانگر سازمان پیش فرض برای وب سایت Drupal است. درخت دایرکتوری پروژه شما اکنون به صورت زیر خواهد بود:

A Drupal 9 directory tree
.
├── .ddev
│   ├── .gitignore
│   ├── config.yaml
│   ├── db-build
│   │   └── Dockerfile.example
│   └── web-build
│   └── Dockerfile.example
└── web
└── sites
└── default
├── .gitignore
├── settings.ddev.php
└── settings.php

6 directories, 7 files

.ddev / پوشه اصلی تنظیمات ddev خواهد بود. web/ معیار پروژه جدید شما خواهد بود که شامل فایل های settings.خاصی است. در حال حاضر داربست اولیه برای پروژه جدید Drupal خود را دارید.
قدم بعدی شما تنظیم اولیه سیستم عامل است که باعث می شود کانتینرهای لازم و تنظیمات شبکه ایجاد شود. DDEV به پورت های 80 و 443 متصل می شود ، بنابراین اگر سرور مجازی وبی مانند Apache و یا هر چیز دیگری که از آن پورت ها استفاده می کند روی دستگاه خود دارید ، قبل از ادامه کار آن سرویس ها را متوقف کنید.
برای تنظیم اولیه سیستم عامل خود از دستور start ddev استفاده کنید:
⦁ $ ddev start

این کار باعث می شود تمام کانتینرهای مستقر در Docker برای پروژه شما ساخته شود ، که شامل یک کانتینر وب ، یک کانتینر دیتابیس و phpmyadmin است. پس از تکمیل اولیه ، خروجی مانند این را مشاهده خواهید کرد (ممکن است شماره پورت شما متفاوت باشد):
Output

Successfully started d9test
Project can be reached at http://d9test.ddev.site http://127.0.0.1:32773

توجه: به یاد داشته باشید که DDEV در اینجا کانتینرهای Docker را در پشت صحنه شروع می کند. اگر می خواهید آن کانتینرها را مشاهده کنید یا تأیید کنید که در حال اجرا هستند ، می توانید همیشه از دستور docker ps استفاده کنید:
⦁ $ docker ps

در کنار هر کانتینر دیگری که هم اکنون در حال کار هستید ، چهار کانتینر جدید پیدا خواهید کرد که هر یک تصویر متفاوتی دارند:
php-myadmin, ddev-webserver, ddev-router, و  ddev-dbserver-mariadb.

ddev start با موفقیت کانتینرهای شما را ساخته و خروجی با دو URL به شما داده است. در حالی که این خروجی می گوید که پروژه شما “می تواند در http://d9test.ddev.site و http://127.0.0.1:32773” حاصل شود ، بازدید از این URL ها در حال حاضر خطایی را به همراه خواهد داشت. با شروع Drupal 8 ، هسته Drupal و ماژول های مربوطه مانند متعلقات کار می کنند. بنابراین ، ابتدا باید نصب Drupal را با استفاده از Composer ، مدیر بسته برای پروژه های PHP ، قبل از هر چیزی در مرورگر وب خود نصب کنید.
یکی از مفیدترین و ظریف ترین ویژگی های DDEV این است که می توانید دستورات Composer را از طریق DDEV CLI به محیط کانتینرایز خود منتقل کنید. این بدان معنی است که می توانید تنظیمات خاص دستگاه خود را از محیط توسعه جدا کنید. دیگر نیازی به مدیریت مسیرهای مختلف فایل ، متعلقات و نسخه های مربوط به آن که عموماً با توسعه PHP محلی همراه است ، ندارید. علاوه بر این ، می توانید به سرعت بین پروژه های مختلف با استفاده از چارچوب های مختلف و پشته های فناوری با حداقل تلاش ، جابه جا شوید.
برای دانلود drupal/recommended-project از دستور ddev composer استفاده کنید. این دستور هسته Drupal ، کتابخانه های آن و سایر منابع مرتبط را دانلود می کند و سپس یک پروژه پیش فرض ایجاد می کند:
⦁ $ ddev composer create “drupal/recommended-project”

اکنون یک جزء نهایی به نام Drush یا Drupal Shell را دانلود کنید. در این آموزش فقط از یک دستور drush استفاده خواهد شد و این آموزش جایگزینی را ارائه می دهد ، اما drush یک CLI قدرتمند برای توسعه Drupal است که می تواند کارایی شما را بهبود بخشد.
برای نصب drush از ddev composer استفاده کنید:
⦁ $ ddev composer require “drush/drush”

اکنون یک پروژه پیش فرض Drupal 9 ساخته اید و drush را نصب کرده اید. پروژه خود را در یک مرورگر مشاهده خواهید کرد و تنظیمات وب سایت خود را پیکربندی می کنید.

مرحله 3 – پیکربندی پروژه Drupal 9 شما
اکنون که Drupal 9 را نصب کردید می توانید از پروژه جدید خود در مرورگرتان بازدید کنید. برای انجام این کار ، می توانید ddev را دوباره راه اندازی کرده و یکی از دو URL را که از آن خارج شده است کپی کنید ، یا می توانید از دستور زیر استفاده کنید ، که به طور خودکار سایت شما را در یک پنجره مرورگر جدید راه اندازی می کند:
⦁ $ ddev launch

با Drupal installation wizard استاندارد روبرو می شوید.

در اینجا شما دو گزینه دارید. می توانید از این رابط کاربر استفاده کنید و wizard را از طریق نصب دنبال کنید ، یا می توانید به ترمینال خود برگردید و یک دستور drush را از ddev عبور دهید. گزینه دوم فرایند نصب را خودکار می کند و مدیر را به عنوان نام کاربری و رمز عبور خود تنظیم می کند.
گزینه 1 – استفاده از Wizard
در مرورگر خود به wizard برگردید. در قسمت انتخاب زبان ، زبانی را از منوی کشویی انتخاب کنید و روی  Save and continue کلیک کنید. اکنون نمایه نصب را انتخاب کنید. می توانید بین Standard ، Minimal و Demo انتخاب کنید. انتخاب خود را انجام داده و سپس بر روی  Save and continue کلیک کنید. Drupal به طور خودکار نیازهای شما را تأیید می کند ، یک بانک اطلاعاتی را راه اندازی می کند و سایت شما را نصب می کند. آخرین مرحله شما این است که چند تنظیات انجام دهید. یک نام سایت و یک آدرس ایمیل سایت که به دامنه شما ختم می شود اضافه کنید. سپس نام کاربری و رمز عبور را انتخاب کنید. یک رمز عبور قوی انتخاب کنید و اعتبارات خود را در جایی ایمن نگه دارید. در آخر ، یک آدرس ایمیل خصوصی را که مرتباً بررسی می کنید ، اضافه کنید ، تنظیمات منطقه ای را اضافه کرده و Save and continue را بزنید.
سایت جدید شما با یک پیام خوش آمدید لود می شود.

گزینه 2 – استفاده از خط فرمان
از دیرکتوری اصلی پروژه خود ، این دستور ddev exec را اجرا کنید تا یک سایت پیش فرض Drupal را با استفاده از drush نصب کنید:
⦁ $ ddev exec drush site:install –account-name=admin –account-pass=admin

این کار سایت شما را درست مانند wizard فقط با برخی تنظیمات boilerplate ایجاد می کند. نام کاربری و رمز عبور شما admin خواهند بود.
اکنون سایت را راه اندازی کنید تا در مرورگر خود مشاهده کنید:
⦁ $ ddev launch

اکنون آماده ساخت وب سایت خود هستید ، اما بهتر است بررسی صحت مجوزهای مربوط به دیرکتوری /sites/web/default را در نظر بگیرید. وقتی به صورت محلی کار می کنید ، نگرانی مهمی نیست ، اما اگر این مجوزها را به یک سرور مجازی تولید منتقل کنید ، خطرات امنیتی ایجاد می کنند.

مرحله 4 – بررسی مجوزهای خود
در حین نصب wizard یا وقتی صفحه استقبال شما لود می شود ، ممکن است هشداری در مورد تنظیمات مجوزها در دیرکتوری /sites/web/default و یک فایل در آن دیرکتوری مشاهده کنید: settings.php.
پس از اجرای اسکریپت نصب ، Drupal سعی خواهد کرد مجوزهای دیرکتوری web/sites/default را برای همه گروهها مطالعه و اجرا کند: این تنظیمات مجوز 555 است. همچنین سعی خواهد کرد مجوزهای default/settings.php را روی read-only یا 444 تنظیم کنید. اگر با این اخطار مواجه شدید ، این دو دستور chmod را از دیرکتوری اصلی پروژه خود اجرا کنید. عدم انجام این کار خطر امنیتی را به همراه دارد:
⦁ $ chmod 555 web/sites/default

⦁ $ chmod 444 web/sites/default/settings.php

برای تأیید اینکه مجوزهای درستی دارید ، این دستور ls را با کلیدهای a ، l ، h و d اجرا کنید:
⦁ $ ls -alhd web/sites/default web/sites/default/settings.php

بررسی کنید که مجوزهای شما با خروجی زیر مطابقت دارد:
Output
dr-xr-xr-x 8 sammy staff 256 Jul 21 12:56 web/sites/default
-r–r–r– 1 sammy staff 249 Jul 21 12:12 web/sites/default/settings.php

اکنون آماده ساخت وب سایت Drupal 9 در دستگاه محلی خود هستید.

مرحله 5 – ایجاد اولین پست در Drupal
برای آزمایش برخی از قابلیت های Drupal ، اکنون با استفاده از UI وب ، پستی ایجاد خواهید کرد.
از صفحه اولیه سایت خود ، روی دکمه محتوا در لبه سمت چپ بالای دیرکتوری کلیک کنید. اکنون روی دکمه آبی رنگ add content کلیک کنید. یک صفحه جدید ظاهر می شود روی Article کلیک کنید و صفحه دیگری ظاهر می شود.

هر عنوان و محتوایی را که دوست دارید اضافه کنید. در صورت آماده بودن ، روی دکمه save  آبی کلیک کنید.
اولین پست شما در وب سایت شما ظاهر می شود

 

 

 

شما اکنون به لطف Docker و DDEV ، یک وب سایت Drupal 9 را در دستگاه محلی خود ایجاد کرده اید و هیچ گونه تعامل با یک سرور مجازی ندارید. در مرحله بعد ، می توانید کانتینر DDEV را برای انطباق گردش کار خود مدیریت کنید.

مرحله 6 – مدیریت کانتینر DDEV
هنگامی که پروژه خود را به پایان رسانید ، یا وقتی می خواهید استراحت کنید ، می توانید بدون نگرانی در مورد از دست رفتن داده ، کانتینر DDEV خود را متوقف کنید. DDEV می تواند تعویض سریع متن را در بین بسیاری از پروژه ها مدیریت کند. این یکی از مفیدترین ویژگی های آن است. کد و داده های شما همیشه در دیرکتوری پروژه شما نگه داشته می شود ، حتی پس از متوقف کردن یا حذف کانتینر DDEV.
برای آزادسازی منابع ، می توانید DDEV را در هر زمان متوقف کنید. از دیرکتوری اصلی پروژه خود ، دستور زیر را اجرا کنید:
⦁ $
⦁ $ ddev stop

DDEV در سطح جهانی در دسترس است ، بنابراین می توانید دستورات ddev را از هرجایی اجرا کنید ، تا زمانی که پروژه DDEV را مشخص کنید:
⦁ $ ddev stop d9test

همچنین می توانید همه پروژه های خود را به طور هم زمان با استفاده از لیست ddev مشاهده کنید:
⦁ $ ddev list

DDEV شامل بسیاری از دستورات مفید دیگر است.
می توانید DDEV را مجدداً راه اندازی کنید و در هر زمان توسعه محلی خود را ادامه دهید.

نتیجه
در این آموزش شما از Docker و قدرت کانتینرایز برای ایجاد یک سایت Drupal به صورت محلی و به کمک DDEV استفاده کرده اید. DDEV همچنین با IDE های زیادی ادغام خوبی دارد و اشکال زدایی داخلی PHP را برای Atom ، PHPStorm و کد ویژوال استودیو (vscode) فراهم می کند. از اینجا ، می توانید در مورد ایجاد محیط های توسعه برای Drupal با DDEV یا ساخت سایر فریم ورک های PHP مانند وردپرس اطلاعات بیشتری کسب کنید.

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

  • behnam gol mohamadi
  • ۰
  • ۰

نمونه 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
  • ۰
  • ۰

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
  • ۰
  • ۰

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
  • ۰
  • ۰

برای بسیاری از برنامه ها در جاوا اسکریپت ، وقتی برنامه نویس کد را به صورت خط به خط می نویسد در همان زمان اجرا می شود. به این کار اجرای همزمان گفته می شود ، زیرا سطرها یکی پس از دیگری، به ترتیبی که نوشته شده اند اجرا می شوند. با این حال ، هر دستورالعملی که شما به رایانه می دهید نیاز به اجرای فوری ندارد. به عنوان مثال ، اگر درخواست شبکه ارسال می کنید ، فرآیند اجرای کد شما باید منتظر بماند تا داده ها قبل از اجرا بر روی آن برگردند. در این حالت ، اگر در حالی که منتظر تکمیل درخواست شبکه هستید ، کد دیگری را اجرا نکند ، وقت تلف می شود. برای حل این مشکل ، توسعه دهندگان از برنامه نویسی ناهمزمان استفاده می کنند ، که در آن خطوط کد به ترتیب متفاوتی از آنچه نوشته شده اند اجرا می شوند. با برنامه نویسی ناهمزمان ، می توانیم در حالی که منتظر هستیم فعالیتهای طولانی مانند درخواست شبکه به پایان برسد، کدهای دیگری را اجرا کنیم.
کد 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
  • ۰
  • ۰

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
  • ۰
  • ۰

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
  • ۰
  • ۰

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
  • ۰
  • ۰

به طور پیش فرض ، 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