سرور مجازی

۱۱۸ مطلب در مرداد ۱۳۹۹ ثبت شده است

  • ۰
  • ۰

مقدمه
صفحه گذاری مفهوم محدود کردن تعداد ردیف های برگشت یافته در یک مجموعه ثبت شده به صفحات جداگانه و منظم است تا امکان جهت گیری آسان بین آنها فراهم شود ، بنابراین وقتی یک مجموعه داده بزرگ وجود دارد می توانید صفحه گذاری خود را پیکربندی کنید تا فقط تعداد مشخصی از ردیف ها را در هر صفحه برگردانید. به عنوان مثال ، وقتی یک فروشگاه اینترنتی هزاران محصول دارد، صفحه بندی می تواند با کاهش تعداد اقلام ذکر شده در یک صفحه ، از نمایش بیش از حد کالا به کاربران جلوگیری کند ، زیرا اغلب بعید است که کاربر نیاز به مشاهده همه محصولات داشته باشد. مثال دیگر برنامه ای است که سوابق یک تلفن همراه را نشان می دهد. فعال کردن صفحه بندی در چنین مواردی ، سوابق را به چندین صفحه تقسیم می کند که می توانند در صفحه بهتر ظاهر شوند.
علاوه بر مزایای بصری برای کاربران نهایی ، صفحه بندی باعث می شود برنامه ها سریعتر شوند زیرا باعث می شود تعداد سوابق برگشتی همزمان کاهش یابد. این کار داده های لازم برای انتقال بین مشتری و سرور مجازی را محدود می کند و به حفظ منابع سرور مجازی مانند RAM کمک می کند.
در این آموزش ، شما یک اسکریپت PHP برای اتصال به پایگاه داده خود و پیاده سازی صفحه بندی با اسکریپت خود با استفاده از بند LIMIT در MySQL ایجاد خواهید کرد.
پیش نیازها
قبل از شروع به موارد زیر نیاز خواهید داشت:
⦁ یک سرور مجازی Ubuntu 18.04 که با دنبال کردن دستور العمل راه اندازی سرور مجازی اولیه با اوبونتو 18.04 ، شامل یک کاربر غیر ریشه سودو راه اندازی شده باشد.
⦁ Apache ، MySQL و PHP که روی سیستم شما نصب شده باشند. شما می توانید راهنمایی در مورد نحوه نصب Linux ، Apache ، MySQL ، PHP (LAMP) روی Ubuntu 18.04 را در این لینک دنبال کنید.
مرحله 1 – ایجاد کاربر دیتابیس و تست دیتابیس
در این آموزش یک اسکریپت PHP ایجاد خواهید کرد که به یک پایگاه داده MySQL متصل می شود ، سوابق را دریافت میکند و آنها را در یک صفحه HTML در یک جدول نمایش می دهد. اسکریپت PHP را به دو روش مختلف از مرورگر وب خود آزمایش خواهید کرد. اول ، ایجاد یک اسکریپت بدون هیچ کد صفحه بندی برای دیدن نحوه نمایش سوابق. دوم ، افزودن کد ناوبری صفحه در فایل PHP برای درک نحوه کار به صورت عملی.
کد PHP برای اهداف تصدیقی نیاز به یک کاربر MySQL و اتصال به یک بانک اطلاعاتی نمونه دارد. در این مرحله یک کاربر غیر ریشه برای پایگاه داده MySQL ، یک پایگاه داده نمونه و یک جدول برای تست اسکریپت PHP ایجاد خواهید کرد.
برای شروع به سرور مجازی خود وارد شوید. سپس با دستور زیر به سرور مجازی MySQL خود وارد شوید:
⦁ $ sudo mysql -u root -p

رمز عبور اصلی سرور مجازی MySQL خود را وارد کرده و برای ادامه ENTER را بزنید. سپس اعلان MySQL را مشاهده می کنید. برای ایجاد یک بانک اطلاعاتی نمونه ، که در این آموزش به آن test_db خواهیم گفت ، دستور زیر را اجرا کنید:
⦁ Mysql> sudo mysql -u root -p

خروجی زیر را مشاهده خواهید کرد:
Output
Query OK, 1 row affected (0.00 sec)

سپس ، یک test_user ایجاد کنید و به همه امتیازات مربوط به test_db را به کاربر اعطا کنید. PASSWORD را با یک مقدار قوی جایگزین کنید:
⦁ Mysql> GRANT ALL PRIVILEGES ON test_db.* TO ‘test_user’@’localhost’ IDENTIFIED BY ‘PASSWORD’;
Output
Query OK, 1 row affected (0.00 sec)

مجدد امتیازات MySQL را با دستور زیر لود کنید:
⦁ Mysql> FLUSH PRIVILEGES;

Output
Query OK, 1 row affected (0.00 sec)

سپس ، برای شروع مستقیم کار در پایگاه داده test_db ، به پایگاه داده test_db بروید:
⦁ Mysql> Use test_db;
Output
Database changed

اکنون یک جدول products  ایجاد کنید. جدول، محصولات نمونه شما را شامل میشود – برای این آموزش شما فقط به دو ستون برای داده ها نیاز دارید. ستون product_id به عنوان کلید اصلی برای شناسایی منحصر به فرد هر رکورد کار می کند. این ستون روی AUTO_INCREMENT تنظیم می شود تا محصول جدیدی را برای هر مورد درج شده تولید کند. شما می توانید از قسمت product_name برای تفکیک هر مورد با نام استفاده کنید:
⦁ Mysql> Create table products (product_id BIGINT PRIMARY KEY AUTO_INCREMENT, product_name VARCHAR(50) NOT NULL ) Engine = InnoDB;
Output
Query OK, 0 rows affected (0.02 sec)
برای افزودن 10 محصول برای تست به جدول products  عبارات SQL زیر را اجرا کنید:
⦁ Mysql> Insert into products(product_name) values (‘WIRELESS MOUSE’);

⦁ Mysql> Insert into products(product_name) values (‘BLUETOOTH SPEAKER’);

⦁ Mysql> Insert into products(product_name) values (‘GAMING KEYBOARD’);

⦁ Mysql> Insert into products(product_name) values (‘320GB FAST SSD’);

⦁ Mysql> Insert into products(product_name) values (’17 INCHES TFT’);

⦁ Mysql> Insert into products(product_name) values (‘SPECIAL HEADPHONES’);

⦁ Mysql> Insert into products(product_name) values (‘HD GRAPHIC CARD’);

⦁ Mysql> Insert into products(product_name) values (’80MM THERMAL PRINTER’);

⦁ Mysql> Insert into products(product_name) values (‘HDMI TO VGA CONVERTER’);

⦁ Mysql> Insert into products(product_name) values (‘FINGERPRINT SCANNER’);

این خروجی را مشاهده خواهید کرد:
Output
Query OK, 1 row affected (0.02 sec)
با اجرای دستور زیر تأیید کنید که محصولات وارد جدول شده اند:
⦁ Mysql> select * from products;
محصولات موجود در خروجی را در دو ستون مشاهده خواهید کرد:
Output
+————+———————–+
| product_id | product_name |
+————+———————–+
| 1 | WIRELESS MOUSE |
| 2 | BLUETOOTH SPEAKER |
| 3 | GAMING KEYBOARD |
| 4 | 320GB FAST SSD |
| 5 | 17 INCHES TFT |
| 6 | SPECIAL HEADPHONES |
| 7 | HD GRAPHIC CARD |
| 8 | 80MM THERMAL PRINTER |
| 9 | HDMI TO VGA CONVERTER |
| 10 | FINGERPRINT SCANNER |
+————+———————–+
10 rows in set (0.00 sec)

از MySQLخارج شوید
⦁ Mysql> quit;

با استفاده از پایگاه داده نمونه ، جدول و داده های آزمایشی موجود ، اکنون می توانید اسکریپت PHP ایجاد کنید تا داده ها در یک صفحه وب نمایش داده شود.
مرحله 2 – نمایش رکوردهای MySQL بدون صفحه بندی
اکنون یک اسکریپت PHP ایجاد می کنید که به پایگاه داده MySQL که در مرحله قبل ایجاد کرده اید متصل می شود و محصولات را در یک مرورگر وب لیست می کنید. در این مرحله ، کد PHP شما بدون هیچگونه صفحه بندی اجرا خواهد شد تا نشان دهد که چگونه سوابق جدا نشده در یک صفحه نشان داده می شوند. اگرچه در این آموزش فقط ده رکورد برای اهداف آزمایش دارید ، اما دیدن سوابق بدون صفحه بندی نشان می دهد که چرا تقسیم بندی داده ها در نهایت باعث ایجاد یک تجربه کاربری بهتر و بار کمتر روی سرور مجازی خواهد شد.
با دستور زیر فایل اسکریپت PHP را در روت document وب سایت خود ایجاد کنید:
⦁ $ sudo nano /var/www/html/pagination_test.php
سپس محتوای زیر را به فایل اضافه کنید. به یاد داشته باشید که در مرحله قبل ، PASSWORD  را با رمز عبور صحیحی که به test_user اختصاص داده اید ، جایگزین کنید:
/var/www/html/pagination_test.php
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES,false);

$sql = “select * from products”;

$stmt = $pdo->prepare($sql);

$stmt -> execute();

echo ”

“;while (($row = $stmt -> fetch(PDO::FETCH_ASSOC)) !== false) {
echo “”;echo “”;
echo “”;
echo “”;
}echo ”

“.$row[‘product_id’].” “.$row[‘product_name’].”

“;

} catch(PDOException $e) {
echo $e->getMessage();
}

?>

فایل را با فشار دادن CTRL + X ، Y و ENTER ذخیره کنید.
در این اسکریپت شما با استفاده از کتابخانه PDO (PHP Data Object) با اعتبارات دیتابیس که در مرحله 1 ایجاد کرده اید به پایگاه داده MySQL وصل می شوید.
PDO یک رابط کاربری سبک برای اتصال به پایگاه های داده است. لایه دسترسی به اطلاعات، قابل حمل تر است و می تواند در پایگاه های داده های مختلف و فقط با بازنویسی کد مینور کار کند. از آنجا که PDO از دستورات آماده پشتیبانی می کند (ویژگی برای اجرای سریعتر درخواست ها به روشی مطمئن)، از امنیت بیشتری نیز برخوردار است .
سپس ، به APO PDO دستور می دهید تا عبارت select * from products را اجرا کند و محصولات را در جدول HTML بدون صفحه بندی فهرست کند. خط $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES,false); تضمین می کند که انواع داده ها
همانطور که در پایگاه داده ظاهر می شوند، بازگردانده می شوند. این بدان معنی است که PDO ، product_id را به عنوان یک عدد صحیح و product_name را به عنوان یک رشته باز می گرداند. $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); به PDO دستور می دهد در صورت بروز خطا، به صورت استثنا عمل کند. برای اشکال زدایی آسان تر ، خطا را در داخل بلوک try{}…catch{} در PHP  مشاهده می کنید.
برای اجرای فایل اسکریپت PHP به صورت /var/www/html/pagination_test.php که ایجاد کرده اید ، آدرس زیر را که your-server-IP با آدرس IP عمومی سرور مجازی شما جایگزین شده، مشاهده کنید:
http://your-server-IP/pagination_test.php
صفحه ای را با جدول محصولات خود مشاهده خواهید کرد.

اسکریپت PHP شما مطابق آنچه انتظار می رود کار می کند؛ تمام محصولات در یک صفحه لیست میشوند. اگر هزاران محصول داشتید ، این امر باعث می شود که یک حلقه طلانی ایجاد شود و محصولات از پایگاه داده گرفته شده و در صفحه PHP بارگیری شوند.
برای غلبه بر این محدودیت ، اسکریپت PHP را تغییر داده و بند MySQL LIMIT و برخی پیوندهای navigation را در انتهای جدول قرار می دهید تا قابلیت صفحه بندی را اضافه کنید.
مرحله 3 – اجرای صفحه گذاری با PHP
در این مرحله هدف شما تقسیم داده های آزمایشی در چندین صفحه قابل کنترل است. این کار نه تنها باعث افزایش خوانایی می شود بلکه از منابع سرور مجازی نیز با کارایی بیشتری استفاده می کند. شما اسکریپت PHP را که در مرحله قبل ایجاد کرده اید برای تنظیم صفحه بندی اصلاح می کنید.
برای این کار ، بند MySQL LIMIT را اجرا خواهید کرد. قبل از افزودن این متن به اسکریپت ، بیایید نمونه ای از دستور MySQL LIMIT را ببینید:
⦁ Mysql> Select [column1, column2, column n…] from [table name] LIMIT offset, records;

بند LIMIT دو آرگومان را همانند پایان این عبارت برمیدارد. مقدار افست (offset ) تعداد رکورد هایی است که باید قبل از ردیف اول از آن پرش کنید. records  حداکثر تعداد سوابق را برای نمایش در هر صفحه تعیین می کند.
برای آزمایش صفحه بندی ، سه رکورد در هر صفحه نمایش می دهید. برای به دست آوردن تعداد کل صفحات ، باید کل سوابق را از جدول خود با ردیف هایی که می خواهید در هر صفحه نمایش دهید تقسیم کنید. سپس با استفاده از عملکرد PHP Ceil ، همانطور که در مثال زیر کد PHP زیر نشان داده شده است ، مقدار حاصل را به نزدیکترین عدد صحیح گرد کنید:
$ $total_pages=ceil($total_records/$per_page);

در زیر نسخه اصلاح شده اسکریپت PHP با کد صفحه بندی کامل آمده است. برای درج کدهای صفحه بندی و ناوبری ، فایل /var/www/html/pagination_test.php را باز کنید:
⦁ $ sudo nano /var/www/html/pagination_test.php

سپس کد هایلایت شده زیر را به فایل خود اضافه کنید:
/var/www/html/pagination_test.php
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES,false);

/* Begin Paging Info */

$page = 1;

if (isset($_GET[‘page’])) {
$page = filter_var($_GET[‘page’], FILTER_SANITIZE_NUMBER_INT);
}

$per_page = 3;

$sqlcount = “select count(*) as total_records from products”;
$stmt = $pdo->prepare($sqlcount);
$stmt->execute();
$row = $stmt->fetch();
$total_records = $row[‘total_records’];

$total_pages = ceil($total_records / $per_page);

$offset = ($page-1) * $per_page;

/* End Paging Info */

$sql = “select * from products limit :offset, :per_page”;
$stmt = $pdo->prepare($sql);
$stmt->execute([‘offset’=>$offset, ‘per_page’=>$per_page]);

echo ”

“;while ( ($row = $stmt->fetch(PDO::FETCH_ASSOC) ) !== false) {
echo “”;echo “”;
echo “”;
echo “”;
}echo ”

“.$row[‘product_id’].” “.$row[‘product_name’].”

“;

/* Begin Navigation */

echo ”

“;echo “”;if ($page-1 >= 1) {
echo “”;
}if ($page+1 <= $total_pages) {
echo “”;
}echo “”;echo ”

Previous Next

“;

/* End Navigation */

} catch(PDOException $e) {
echo $e->getMessage();
}

?>

در فایل خود از پارامترهای دیگری برای اجرای صفحه بندی استفاده کرده اید:
⦁ $page: این متغیر صفحه فعلی را در اسکریپت شما نگه می دارد. هنگام حرکت بین صفحات ، اسکریپت شما با استفاده از متغیر $ _GET [‘page’] یک پارامتر URL به نام page  را بازیابی می کند.
⦁ $per_page: این متغیر حداکثر رکوردی را که می خواهید در هر صفحه نمایش داده شود ، در اختیار دارد. در مورد خاص شما ، بهتر است در هر صفحه سه محصول لیست کنید.
⦁ $ total_records: قبل از لیست کردن محصولات ، شما یک دستور SQL را برای دریافت تعداد کل سوابق در جدول هدف خود اجرا میکنید و آن را به عنوان متغیر $ total_records تعیین میکنید.
⦁ $ offset: این متغیر نشان دهنده کل سوابقی است که باید قبل از ردیف اول از آن بگذرید. این مقدار توسط اسکریپت PHP شما با استفاده از فرمول $ offset = ($ page-1) * $ per_page محاسبه می شود. ممکن است این فرمول را با پروژه های صفحه بندی PHP تطبیق دهید. به یاد داشته باشید که می توانید متغیر $ per_page را متناسب با نیاز خود تغییر دهید. به عنوان مثال ، اگر در حال اجرای یک وب سایت یا مقدار دیگری برای یک دستگاه تلفن همراه هستید ، ممکن است آن را به مقدار 50 تغییر دهید تا پنجاه مورد در هر صفحه نمایش داده شود.
باین بار هم آدرس IP خود را در یک مرورگر ببینید و your_server_ip را با آدرس IP عمومی سرور مجازی خود جایگزین کنید:
http://your_server_ip/pagination_test.php

اکنون دکمه های navigation را در انتهای صفحه مشاهده خواهید کرد. در صفحه اول یک دکمه Previous  دریافت نمی کنید. همین مورد در صفحه آخر نیز اتفاق می افتد و دکمه صفحه بعدی یعنی Next  را نمی بینید. همچنین ، توجه داشته باشید که با مراجعه به هر صفحه ، چگونه پارامتر URL صفحه تغییر می کند.

پیوندهای navigation در انتهای صفحه با استفاده از قطعه کد PHP زیر از فایل شما حاصل می شود:
/var/www/html/pagination_test.php
. . .
if( $page-1>=1) {
echo ”

Previous

“;
}

if( $page+1<=$total_pages) {
echo ”

Next

“;
}
. . .

در اینجا ، متغیر $page تعداد صفحه فعلی را نشان می دهد. سپس برای به دست آوردن صفحه قبلی ، کد ، 1 را از متغیر کم خواهد کرد. بنابراین ، اگر در صفحه 2 هستید ، فرمول (1-2) نتیجه 1 را به شما می دهد و این صفحه قبلی است که در لینک ظاهر می شود. با این حال به خاطر داشته باشید که در صورت نتیجه بالاتر یا برابر با 1 ، صفحه قبلی را نشان می دهد.
به همین ترتیب ، برای رسیدن به صفحه بعد ، به متغیر $page عدد 1 را اضافه می کنید و همچنین باید اطمینان حاصل کنید که نتیجه $page که به پارامتر URL صفحه اضافه می کنیم از کل صفاتی که در کد PHP محاسبه کرده اید بیشتر نباشد.
در این مرحله ، اسکریپت PHP شما با صفحه بندی کار می کند و شما قادر به اجرای بند MySQL LIMIT برای navigation بهتر رکورد هستید.
نتیجه
در این آموزش ، صفحه بندی را در MySQL با PHP در سرور مجازی اوبونتو 18.04 پیاده سازی کردید. شما می توانید با استفاده از اسکریپت PHP از این مراحل با یک مجموعه رکورد بزرگتر استفاده کنید تا صفحه بندی را انجام دهید. با استفاده از صفحه بندی در وب سایت یا برنامه خود می توانید navigation بهتر کاربر و استفاده بهینه از منابع را در سرور مجازی خود ایجاد کنید.
از این لینک ها می توانید بهینه سازی بیشتری برای بانک اطلاعاتی و سایر کارهای پایگاه داده خود انجام دهید:
⦁ نحوه بهینه سازی MySQL با Query Cache در اوبونتو ⦁ 18.04
⦁ مقدمه ای بر درخواست ها در MySQL
⦁ نحوه رفع مشکلات در MySQL

 

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

مراحل ایمن سازی Apache HTTP در FreeBSD 12   –  بهینه سازی درخواست های MySQL با ذخیره سازی ProxySQL در اوبونتو 16

درک Objectهای Map و Set در JavaScript  –  استفاده از Ansible برای نصب و راه اندازی وردپرس با LAMP در اوبونتو 18

نحوه راه اندازی Eclipse Theia Cloud IDE در اوبونتو  –  چگونه می توان پلتفرم کد سرور Cloud IDE را در اوبونتو 18.04

نحوه استفاده از Cron برای خودکارسازی کارها در CentOS 8  –  چگونه می توان از رول های ansible برای انتزاع محیط زیرساختی

نحوه نوشتن کد ناهمگام (غیر همزمان) در Node.js  –  نحوه پیکربندی یک خوشه Galera با MySQL در سرورهای اوبونتو 18

راه اندازی اولیه سرور با CentOS 8  –  تهیه نسخه پشتیبان و بازیابی یک خوشه Kubernetes

نحوه تنظیم کلیدهای SSH در CentOS 8 – نحوه نصب و استفاده از PostgreSQL در CentOS 7

نحوه ساختن یک برنامه Node.js با Docker [Quickstart]  –  چگونه می توان پلتفرم Eclipse Theia Cloud IDE را روی اوبونتو

چگونه می توان هاست های مجازی Apache را در اوبونتو – مدیریت DNS با استفاده از DNSControl در Debian 10

نحوه تایید صحت رمز عبور با Apache در اوبونتو 18.04 –  چگونه می توان پلتفرم Cloud IDE کد سرور را روی CentOS 7

نحوه نصب و استفاده از TimescaleDB در CentOS 7  –  نحوه نصب Apache Kafka در Debian 10

نحوه تایید صحت رمز عبور با Apache در اوبونتو 18.04 –  نحوه نصب وردپرس با OpenLiteSpeed ​​در اوبونتو 18.04

استفاده از Cron برای خودکارسازی کارها در اوبونتو 18  –

نصب و استفاده ازRadamsa برای فوز کردن برنامه ها روی Ubuntu 18 –

نحوه راه اندازی Eclipse Theia Cloud IDE Platform در Debian 10 –

نحوه نصب Docker Compose در Debian 10  –

چگونه می توان با کتابخانه (library) درخواست ها در پایتون شروع به کار کرد –

نحوه اجرای صفحه گذاری در MySQL با PHP روی اوبونتو 18.04 –

نحوه تنظیم پلتفرم Eclipse Theia Cloud IDE در CentOS 7  –

بسته بندی برنامه Laravel 6 برای توسعه با Docker Compose در اوبونتو 18 –

 

 

کلمات کلیدی خرید سرور

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

 

برچسب‌ها:

  • behnam gol mohamadi
  • ۰
  • ۰

مقدمه
در بسیاری از برنامه های وب ، اتصال به خدمات مختلف شخص ثالث با استفاده از API طبیعی است. هنگامی که از این API ها استفاده می کنید ، می توانید به داده هایی مانند اطلاعات آب و هوا ، امتیازات ورزشی ، لیست فیلم ها ، توییت ها ، نتایج موتور جستجو و تصاویر دسترسی پیدا کنید. همچنین می توانید از API ها برای اضافه کردن عملکرد به برنامه خود استفاده کنید. نمونه هایی از این موارد پرداخت ها، برنامه زمانبندی ، ایمیل ها ، ترجمه ها ، نقشه ها و انتقال فایل ها است. اگر قرار بود هرکدام از این موارد را به تنهایی ایجاد کنید ، زمان بسیار زیادی می برد ، اما با وجود API ها ، تنها چند دقیقه طول می کشد تا به یکی متصل شوید و به ویژگی ها و داده های آن دسترسی پیدا کنید.
در این مقاله ، ما در مورد کتابخانه درخواست ها در پایتون آموزش میبینیم، که به شما امکان می دهد درخواست های HTTP را در پایتون ارسال کنید .
و از آنجا که استفاده از API به معنی ارسال درخواست HTTP و دریافت پاسخ است ، درخواست ها به شما امکان می دهد از API ها در پایتون استفاده کنید. ما استفاده از ترجمه زبان API را در اینجا نشان خواهیم داد تا بتوانید نمونه ای از نحوه عملکرد آن را ببینید.
مرور اجمالی بر درخواستهای HTTP
درخواست های HTTP نحوه عملکرد وب هستند. هر بار که به یک صفحه وب میروید ، مرورگر شما چندین درخواست به سرور مجازی صفحه وب ارائه می کند. سپس سرور مجازی با تمام داده های لازم برای ارائه صفحه پاسخ می دهد ، و مرورگر شما در واقع صفحه را ارائه می دهد تا بتوانید آن را مشاهده کنید.
روند کلی این است: یک مشتری (مانند مرورگر یا اسکریپت پایتون با استفاده از درخواست) برخی از داده ها را به URL ارسال می کند ، و سپس سرور مجازی واقع در URL اطلاعات را می خواند ، تصمیم می گیرد که با آن چه کار کند و پاسخی را به مشتری برگرداند. سرانجام ، مشتری می تواند تصمیم بگیرد که با داده های موجود در پاسخ چه کاری انجام دهد.
بخشی از داده هایی که مشتری در یک درخواست ارسال می کند ، روش درخواست است. برخی از روشهای درخواست متداول عبارتند از: GET ، POST و PUT. درخواست های GET معمولاً فقط برای خواندن داده ها بدون ایجاد تغییر در چیزی است ، در حالی که درخواست های POST و PUT معمولاً برای تغییر داده ها روی سرور مجازی است. به عنوان مثال ، Stripe API به شما امکان می دهد تا از درخواست های POST برای ایجاد شارژ جدید استفاده کنید تا کاربر بتواند چیزی را از برنامه شما خریداری کند.
توجه: این مقاله درخواستهای GET را پوشش می دهد ، زیرا ما هیچ گونه داده ای را در سرور مجازی اصلاح نمی کنیم.
هنگام ارسال درخواست از یک اسکریپت پایتون یا داخل یک برنامه وب ، شما ، به عنوان توسعه دهنده ، تصمیم می گیرید که در هر درخواست چه چیزی ارسال می شود و با پاسخ چه کاری انجام دهید. بیایید با ارسال یک درخواست به Scotch.io و سپس با استفاده از یک API ترجمه زبان ، این موضوع را کشف کنیم.
درخواست های پایتون را نصب کنید
قبل از اینکه بتوانیم کاری انجام دهیم ، باید کتابخانه را نصب کنیم. بنابراین بیایید پیش برویم و درخواست ها را با استفاده از pip نصب کنیم. در صورتی که قبلاً یک محیط مجازی نداشته اید ، بهتر است ابتدا آن را ایجاد کنید.
$ pip install requests
اولین درخواست ما
برای شروع ، اجازه دهید از درخواست هایی برای درخواست سایت Scotch.io استفاده کنیم. فایلی بنام script.py ایجاد کنید و کد زیر را به آن اضافه کنید. در این مقاله ، ما کد زیادی برای کار کردن نداریم ، بنابراین وقتی چیزی تغییر کرد ، می توانید به جای اضافه کردن خطوط جدید ، کد موجود را به روز کنید.
script.py
import requests

res = requests.get(‘https://scotch.io’)

print(res)

بنابراین تمام کار این کد ارسال یک درخواست GET به Scotch.io است. این همان نوع درخواستی است که مرورگر شما برای مشاهده این صفحه ارسال می کند ، اما تنها تفاوت این است که درخواست ها نمی توانند HTML را ارائه دهند ، بنابراین در عوض شما فقط HTML خام و سایر اطلاعات پاسخ را دریافت خواهید کرد.
ما در اینجا از تابع .get () استفاده می کنیم ، اما درخواست ها به شما امکان می دهد از سایر عملکردها مانند .post () و .put () برای ارسال آن درخواست ها نیز استفاده کنید.
می توانید با اجرای فایل script.py آن را اجرا کنید.
$ python script.py
و آنچه در عوض دریافت می کنید این است:

کدهای وضعیت
اولین کاری که می توانیم انجام دهیم بررسی کد وضعیت است. کدهای HTTP از 1XX تا 5XX متغیر است. کدهای وضعیت مشترک که احتمالاً دیده اید 200 ، 404 و 500 هستند.
در اینجا یک مرور اجمالی از آنچه که کد وضعیت دارد به شرح زیر است:
⦁ 1XX – اطلاعات
⦁ 2XX – موفقیت
⦁ 3XX – تغییر مسیر
⦁ 4XX – خطای مشتری (شما خطایی انجام دادید)
⦁ 5XX – خطای سرور مجازی (آنها خطایی ایجاد کردند)
به طور کلی ، آنچه که شما هنگام انجام درخواست های خود به دنبال آن هستید ، کد وضعیت در رده 200 تایی ها است.
درخواست ها تشخیص می دهند که کدهای وضعیت 4XX و 5XX خطا هستند ، بنابراین اگر این کدهای وضعیت برگردانده شوند ، موضوع پاسخ از درخواست به False ارزیابی می شود.
با بررسی پاسخ برای واقعیت می توانید تست کنید که آیا یک درخواست با موفقیت پاسخ داده است. مثلا:
script.py
if res:
print(‘Response OK’)
else:
print(‘Response Failed’)

پیام “پاسخ موفق نبود” فقط در صورت بازگشت کد وضعیت 400 یا 500 ظاهر می شود. سعی کنید URL را به چیز بی معنی تغییر دهید تا عدم موفقیت پاسخ را با 404 ببینید.
با افزودن موارد زیر می توانید مستقیماً به کد وضعیت نگاهی بیندازید:
script.py
print(res.status_code)

با این کار کد وضعیت به طور مستقیم به شما نشان داده می شود تا بتوانید شماره را خودتان بررسی کنید.

هدرها
موارد دیگری که می توانید از پاسخ دریافت کنید هدرها هستند. می توانید با استفاده از فرهنگ نامه هدرها در موضوع پاسخ ، به آنها نگاهی بیندازید.
script.py
print(res.headers)

هدرها به همراه درخواست ارسال می شوند و در پاسخ بازگردانده می شوند. هدرها به این دلیل استفاده می شوند تا هم مشتری و هم سرور مجازی بدانند چگونه داده هایی را که در پاسخ / پاسخ ارسال می شوند ، تفسیر کنند.
هدرهای مختلفی را می بینیم که برگردانده می شوند. در بسیاری از مواقع نیازی به استفاده مستقیم از اطلاعات هدر ندارید ، اما در صورت نیاز وجود دارند.
نوع محتوا معمولاً چیزی است که ممکن است به آن احتیاج داشته باشید زیرا فرمت داده ها ، به عنوان مثال HTML ، JSON ، PDF ، متن ، و غیره را نشان میدهد. اما نوع محتوا به طور معمول توسط درخواست ها تعیین میشود تا بتوانید به داده هایی که بازگردانده می شوند دسترسی پیدا کنید.
متن پاسخ
و در آخر اینکه ، اگر به res.text نگاهی بیندازیم (این برای داده های متنی کار می کند ، مانند یک صفحه HTML مانند چیزی که در حال مشاهده هستید) ، می توانیم تمام HTML مورد نیاز برای ساخت صفحه اصلی Scotch را مشاهده کنیم. ارائه نخواهد شد ، اما می بینیم که متعلق به Scotch است. اگر آن را در یک فایل ذخیره کرده اید و آن را باز کنید ، چیزی را مشاهده می کنید که شبیه به سایت Scotch میباشد. در یک وضعیت واقعی ، درخواست های چندگانه برای یک صفحه وب واحد برای بارگیری مواردی مانند تصاویر ، اسکریپت ها و شیت استایل وجود دارد ، بنابراین اگر فقط HTML را در یک فایل ذخیره کنید ، چیزی شبیه به آنچه در صفحه Scotch.io مرورگرتان به نظر می رسد نخواهد بود زیرا فقط یک درخواست واحد برای بدست آوردن داده های HTML انجام شده است.
script.py
print(res.text)

استفاده از API ترجمه
اکنون بیایید به سراغ یک چیز جالب تر برویم. ما از API ترجمه Yandex برای اجرای درخواست ترجمه متن به زبان دیگر استفاده خواهیم کرد.
برای استفاده از API ، ابتدا باید ثبت نام کنید. پس از ورود ، به Translate API بروید و یک کلید API ایجاد کنید. پس از داشتن کلید API ، آن را به صورت ثابت به فایل خود اضافه کنید. در اینجا لینکی وجود دارد که می توانید تمام آن کارها را انجام دهید: https://tech.yandex.com/translate/
script.py
API_KEY = ‘your yandex api key’

دلیل اینکه به یک کلید API احتیاج داریم این است که Yandex بتواند هر بار که بخواهیم از API آنها استفاده کنیم بتواند ما را تأیید کند. کلید API نوعی تأیید اعتبار ساده است ، زیرا هنگام ارسال ، به انتهای URL درخواست اضافه می شود.
برای دانستن اینکه کدام URL را برای استفاده از API باید ارسال کنیم ، می توانیم به مستندات Yandex مراجعه کنیم.
اگر به آنجا بنگریم ، تمام اطلاعات مورد نیاز برای استفاده از Translate API آنها برای ترجمه متن را خواهیم دید.

وقتی URL را با امپرسند (&) ، علامت سؤال (؟) و با علائم مساوی (=) می بینیم ، می توانید مطمئن باشید که URL برای درخواست های GET است. این نمادها پارامترهایی را نشان می دهد که همراه با URL هستند.
به طور معمول موارد موجود در براکت های مربع ([]) اختیاری خواهد بود. در این حالت ، قالب ، گزینه ها و پاسخ به تماس اختیاری هستند ، در حالی که کلید ، متن و زبان برای درخواست لازم میباشند.
بنابراین بیایید کدی را برای ارسال به آن URL اضافه کنیم. می توانید اولین درخواستی را که ایجاد کردیم با این جایگزین کنید:
script.py
url = ‘https://translate.yandex.net/api/v1.5/tr.json/translate’
res = requests.get(url)

دو روش وجود دارد که می توانیم پارامترها را اضافه کنیم. می توانیم مستقیماً آن را به انتهای URL اضافه کنیم ، یا می توانیم از درخواست هایی بخواهیم این کار را برای ما انجام دهند. برای انجام دومی ، می توانیم یک دیکشنری برای پارامترهای خود ایجاد کنیم. سه مورد مورد نیاز ما کلید ، متن و زبان هستند. بیایید فرهنگ نامه را با استفاده از کلید API ، ‘Hello’ برای متن ، و “en-es” به عنوان زبان ایجاد کنیم ، به این معنی که می خواهیم از انگلیسی به اسپانیایی ترجمه کنیم.
اگر نیاز به دانستن کدهای زبانی دیگر دارید ، می توانید در این لینک جستجو کنید. شما به دنبال ستون 639-1 هستید.
ما یک فرهنگ لغت پارامتری را با استفاده از تابع disc () و عبور از کلیدها و مقادیر مورد نظر در فرهنگ لغت خود ایجاد می کنیم.
script.py
params = dict(key=API_KEY, text=’Hello’, lang=’en-es’)

حالا دیکشنری پارامترها را برمیداریم و آن را به تابع .get () منتقل می کنیم.
script.py
res = requests.get(url, params=params)

وقتی از این طریق از پارامترها عبور کردیم ، درخواست ها پیش می روند و پارامترها را به آدرس URL برای ما اضافه می کنند.
اکنون بیایید عبارت چاپی را برای متن پاسخ اضافه کنیم و ببینیم چه چیزی در پاسخ باز می گردد.
script.py
print(res.text)

سه چیز را می بینیم. کد وضعیت را می بینیم که دقیقاً همان کد وضعیت خود پاسخ است ، زبانی را که مشخص کردیم می بینیم و متن ترجمه شده را در داخل لیست مشاهده می کنیم. بنابراین باید متن Hola را برای متن ترجمه شده ببینید.
دوباره به عنوان کد زبان en-fr را امتحان کنید و اکنون باید در پاسخ ‘Bonjour’ را مشاهده کنید.
script.py
params = dict(key=API_KEY, text=’Hello’, lang=’en-fr’)

بیایید نگاهی به عناوین برای این پاسخ خاص بیندازیم.
script.py
print(res.headers)

بدیهی است که هدرها باید متفاوت باشند زیرا ما با یک سرور مجازی دیگر ارتباط برقرار می کنیم ، اما در این حالت نوع محتوا به جای text/html ، application/json است. این بدان معنی است که داده ها را می توان به صورت JSON تفسیر کرد.
هنگامی که application/json نوع محتوای پاسخ است ، می توانیم با استفاده از درخواست ها، پاسخ ها را به یک فرهنگ لغت تبدیل و به گونه ای لیست کنیم که بتوانیم راحت تر به داده دسترسی پیدا کنیم.
برای تجزیه و تحلیل داده ها به عنوان JSON ، از روش .json () در موضوع پاسخ استفاده می کنیم.
اگر آن را چاپ کنید ، خواهید دید که داده ها یکسان به نظر می رسند ، اما قالب کمی متفاوت است.
script.py
json = res.json()
print(json)

دلیل متفاوت بودن آن به این دلیل است که دیگر متن ساده ای که از res.text دریافت میکردید، نیست. این بار نسخه چاپی یک فرهنگ لغت است.
بهتر است بگوییم که می خواهیم به متن دسترسی پیدا کنیم. از آنجا که اکنون یک فرهنگ لغت است ، می توانیم از کلید متن استفاده کنیم.
script.py
print(json[‘text’])

و اکنون فقط داده های مربوط به آن یک کلید را می بینیم. در این حالت ما به دنبال لیست یک مورد هستیم ، بنابراین اگر می خواستیم آن متن را مستقیماً در لیست قرار دهیم ، می توانیم از طریق فهرست به آن دسترسی پیدا کنیم.
script.py
print(json[‘text’][0])

و اکنون تنها چیزی که می بینیم کلمه ترجمه شده است.
بنابراین مطمئناً اگر موارد را در پارامترهای خود تغییر دهیم ، نتایج متفاوتی خواهیم گرفت. بیایید متن را برای ترجمه از Hello به Goodbye تغییر دهیم ، زبان مقصد را به اسپانیایی برگردانیم و درخواست را دوباره ارسال کنیم.
script.py
params = dict(key=API_KEY, text=’Goodbye’, lang=’en-es’)

سعی کنید متن طولانی تر را به زبان های مختلف ترجمه کنید و ببینید چه پاسخی به API می دهد.
موارد خطای Translate API
در آخر ، به یک مورد خطا نگاه خواهیم کرد. همه چیز همیشه کار نمی کند ، بنابراین باید بدانیم چه زمانی این اتفاق می افتد.
با حذف یک کاراکتر ، کلید API خود را تغییر دهید. وقتی این کار را کردید دیگر کلید API شما معتبر نخواهد بود. سپس یک درخواست را ارسال کنید.
اگر به کد وضعیت نگاهی بیندازید ، این چیزی است که بدست می آورید:
script.py
print(res.status_code)

بنابراین وقتی از API استفاده می کنید ، بهتر است بررسی کنید که آیا موارد موفقیت آمیز هستند یا خیر ، بنابراین می توانید با توجه به نیاز برنامه خود ، موارد خطا را برطرف کنید.
نتیجه
این چیزی است که ما آموخته ایم:
• درخواست های HTTP چگونه کار می کند
• کدهای وضعیت مختلف ممکن در یک پاسخ
• نحوه ارسال درخواست و دریافت پاسخ با استفاده از کتابخانه درخواست ها در پایتون
• نحوه استفاده از API translate برای ترجمه متن
• چگونگی تبدیل پاسخ های محتوای application/JSON به فرهنگ لغت
اگر می خواهید کارهای بیشتری انجام دهید ، این لیست را بررسی کنید تا API های مختلف موجود را ببینید و سعی کنید از آنها با درخواست های پایتون استفاده کنید.

 

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

چگونه می توان هاست های مجازی Apache را در اوبونتو 18.04 –  نحوه اجرای صفحه گذاری در MySQL با PHP روی اوبونتو 18.04

نصب پشته Nginx، MySQL، PHP LEMP در CentOS 8 –  نحوه تنظیم پلتفرم Eclipse Theia Cloud IDE در CentOS 7

نحوه نصب پشته یا استک Nginx ، MySQL ، PHP LEMP  –  بسته بندی برنامه Laravel 6 برای توسعه با Docker Compose

مراحل ایمن سازی Apache HTTP در FreeBSD 12  –  بهینه سازی درخواست های MySQL با ذخیره سازی ProxySQL در اوبونتو 16

درک Objectهای Map و Set در JavaScript  –  استفاده از Ansible برای نصب و راه اندازی وردپرس با LAMP در اوبونتو 18

نحوه راه اندازی Eclipse Theia Cloud IDE در اوبونتو –  چگونه می توان پلتفرم کد سرور Cloud IDE را در اوبونتو 18.04

نحوه استفاده از Cron برای خودکارسازی کارها در CentOS 8  – چگونه می توان از رول های ansible برای انتزاع محیط زیرساختی

نحوه نوشتن کد ناهمگام (غیر همزمان) در Node.js  –  نحوه پیکربندی یک خوشه Galera با MySQL در سرورهای اوبونتو 18

راه اندازی اولیه سرور با CentOS 8  – تهیه نسخه پشتیبان و بازیابی یک خوشه Kubernetes

نحوه تنظیم کلیدهای SSH در CentOS 8  –  نحوه نصب و استفاده از PostgreSQL در CentOS 7

نحوه ساختن یک برنامه Node.js با Docker  Quickstart  –  چگونه می توان پلتفرم Eclipse Theia Cloud IDE را روی اوبونتو

چگونه می توان هاست های مجازی Apache را در اوبونتو  –  مدیریت DNS با استفاده از DNSControl در Debian 10

نحوه تایید صحت رمز عبور با Apache در اوبونتو 18.04  –  چگونه می توان پلتفرم Cloud IDE کد سرور را روی CentOS 7

نحوه نصب و استفاده از TimescaleDB در CentOS 7  –   نحوه نصب Apache Kafka در Debian 10

نحوه تایید صحت رمز عبور با Apache در اوبونتو 18.04–  نحوه نصب وردپرس با OpenLiteSpeed ​​در اوبونتو 18.04

استفاده از Cron برای خودکارسازی کارها در اوبونتو 18 –

نصب و استفاده ازRadamsa برای فوز کردن برنامه ها روی Ubuntu 18 –

نحوه راه اندازی Eclipse Theia Cloud IDE Platform در Debian 10  –

نحوه نصب Docker Compose در Debian 10  –

چگونه می توان با کتابخانه (library) درخواست ها در پایتون شروع به کار کرد  –

 

 

کلمات کلیدی خرید سرور

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

 

برچسب‌ها:

  • behnam gol mohamadi
  • ۰
  • ۰

مقدمه
Docker ابزاری عالی برای خودکار سازی برنامه های کاربردی لینوکس در کانتینرهای نرم افزاری است ، اما برای بهره گیری کامل از پتانسیل آن ، هر یک از اجزای برنامه باید در کانتینر شخصی خود اجرا شود. برای برنامه های کاربردی پیچیده با اجزای فراوان ، که همه کانتینرها را با هم برای راه اندازی ، برقراری ارتباط و خاموش کردن به کار میگیرند ، خیلی سریع می توانند ناخوشایند شوند.
انجمن Docker با یک راه حل محبوب به نام Fig روبرو شد که به شما این امکان را می دهد تا از یک فایل YAML استفاده کنید تا همه کانتینرها و پیکربندی های Docker خود را بر روی آن تنظیم کنید. این امر چنان محبوب شد که تیم Docker تصمیم گرفت تا Docker Compos را بر اساس منبع Fig بسازد ، که اکنون مستهلک شده است. Docker Compose به کاربران این امکان را می دهد تا فرآیندهای کانتینرهای داکر را از جمله راه اندازی ، خاموش کردن و تنظیم لینک ها و والیوم های داخل کانتینری را هماهنگ کنند.
در این آموزش ، آخرین نسخه Docker Compose را برای کمک به شما در مدیریت برنامه های چند کانتینری روی یک سرور مجازی Debian 10 نصب خواهید کرد.
پیش نیازها
برای دنبال کردن این مقاله ، به این موارد نیاز دارید:
یک سرور مجازی Debian 10 و یک کاربر غیر root با امتیازات sudo . این لینک در مورد تنظیم اولیه سرور مجازی با آموزش Debian 10 نحوه انجام این دستورالعمل های مرحله 1 و مرحله 2 نحوه نصب و استفاده از Docker در Debian 10 نصب شده است
توجه: اگرچه پیش نیازها دستورالعمل نصب Docker در Debian 10 را ارائه می دهند ، دستورات docker در این مقاله باید بعد از نصب Docker روی سیستم عامل های دیگر کار کنند.

مرحله 1 – نصب Docker Compose
اگرچه می توانید Docker Compose را از منابع رسمی Debian نصب کنید ، اما نسخه های متعدد فرعی بعد از آخرین نسخه موجود است ، بنابراین در این آموزش آن را از منبع Docker’s GitHub نصب خواهید کرد. دستورالعمل کمی متفاوت از آنچه در صفحه نسخه ها خواهید یافت ، میباشد. این دستور با استفاده از فلگ -o برای مشخص کردن فایل خروجی به جای تغییر مسیر خروجی ، از وارد شدن به خطای ” permission denied ” ناشی از استفاده از sudo جلوگیری می کند.
نسخه فعلی را بررسی کنید و در صورت لزوم آن را در دستور زیر به روز کنید:
$ sudo curl -L https://github.com/docker/compose

/releases/download/1.25.3/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

سپس مجوزها را تنظیم خواهیم کرد:
$ sudo chmod +x /usr/local/bin/docker-compose

سپس با بررسی نسخه تأیید خواهیم کرد که نصب با موفقیت انجام شد:
$ docker-compose –version
با این کار نسخه ای که نصب کردیم چاپ خواهد شد:
Output
docker-compose version 1.25.3, build d4d1b42b

اکنون که Docker Compose نصب شده است ، ما آماده اجرای یک مثال ” Hello World ” هستیم.
مرحله 2 – اجرای یک کانتینر با Docker Compose
رجیستری داکر عمومی ، Docker Hub ، شامل تصویر Hello World برای نمایش و آزمایش است. این حداقل تنظیمات مورد نیاز برای اجرای یک کانتینر را با استفاده از Docker Compose نشان می دهد: یک فایل YAML که یک تصویر واحد را فراخوانی می کند. ما این تنظیمات حداقل را برای اجرای کانتینرهای hello-world ایجاد خواهیم کرد.
ابتدا دایرکتوری برای فایل YAML ایجاد کنید و به آن سوییچ کنید:
$ mkdir hello-world

$ cd hello-world

سپس فایل YAML را ایجاد کنید:
$ nano docker-compose.yml

مطالب زیر را در فایل قرار داده ، فایل را ذخیره کرده و از ویرایشگر متن خارج شوید:
docker-compose.yml
my-test:
image: hello-world

خط اول در فایل YAML به عنوان بخشی از نام کانتینر استفاده می شود. خط دوم مشخص می کند از کدام تصویر برای ایجاد کانتینر استفاده کنید. هنگامی که ما دستور docker-compose up را اجرا می کنیم ، به دنبال یک تصویر محلی با نامی که مشخص کردیم ، یعنی hello-world هستیم. با این جایگزینی ، فایل را ذخیره کرده و خارج می شویم.
با فرمان docker images می توانید به صورت دستی به تصاویر موجود در سیستم ما نگاه کنید:
$ docker images
هنگامی که هیچ تصاویر محلی وجود ندارد ، فقط عناوین ستون نمایش داده می شود:
Output
REPOSITORY TAG IMAGE ID CREATED SIZE

اکنون ، اگر هنوز در فهرست ~ / hello-world هستید ، دستور زیر را اجرا کنید:
$ docker-compose up

اولین باری که دستور را اجرا می کنید ، اگر هیچ تصویری محلی به نام hello-world وجود ندارد ، Docker Compose آن را از منبع عمومی Docker Hub بیرون می کشد:
Output
Pulling my-test (hello-world:)…
latest: Pulling from library/hello-world
9db2ca6ccae0: Pull complete
Digest: sha256:4b8ff392a12ed9ea17784bd3c9a8b1fa3299

cac44aca35a85c90c5e3c7afacdc
Status: Downloaded newer image for hello-world:latest
. . .

پس از کشیدن تصویر ، docker-compose یک کانتینر ایجاد می کند ، ضمیمه می کند و برنامه hello را اجرا می کند ، که به نوبه خود تأیید می کند که نصب در حال کار است:
Output
. . .
Creating helloworld_my-test_1…
Attaching to helloworld_my-test_1
my-test_1 |
my-test_1 | Hello from Docker.
my-test_1 | This message shows that your installation appears to be working correctly.
my-test_1 |
. . .

سپس توضیحی درباره آنچه انجام داده چاپ می کند:
Output
To generate this message, Docker took the following steps:
my-test_1 | 1. The Docker client contacted the Docker daemon.
my-test_1 | 2. The Docker daemon pulled the “hello-world” image from the Docker Hub.
my-test_1 | (amd64)
my-test_1 | 3. The Docker daemon created a new container from that image which runs the
my-test_1 | executable that produces the output you are currently reading.
my-test_1 | 4. The Docker daemon streamed that output to the Docker client, which sent it
my-test_1 | to your terminal.

کانتینرهای داکر فقط تا زمانی که دستور فعال است اجرا می شوند ، بنابراین پس از پایان کار hello ، کانتینر متوقف شد. در نتیجه ، هنگامی که به فرآیندهای فعال نگاه می کنیم ، سرصفحات ستون ظاهر می شود ، اما کانتینرهای hello world لیست نمی شود زیرا در حال اجرا نیست:
$ docker ps
Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

با استفاده از فلگ -a می توانید اطلاعات کانتینر را که در مرحله بعدی به آن نیاز دارید را مشاهده کنید. این همه کانتینرها را نشان می دهد، و نه فقط موارد فعال:
$ docker ps -a

Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
06069fd5ca23 hello-world “/hello” 35 minutes ago Exited (0) 35 minutes ago hello-world_my-test_1

این خروجی اطلاعاتی را نشان می دهد که باید پس از اتمام کار با کانتینر از آن حذف کنید.
مرحله 3 – حذف تصویر (اختیاری)
برای جلوگیری از استفاده غیر ضروری از فضا دیسک ، تصویر محلی را حذف خواهیم کرد. برای انجام این کار ، ما باید تمام کانتینرهای حاوی تصویر را با استفاده از دستور docker rm حذف کنیم ، به دنبال آن یا CONTAINER ID یا NAME حذف می شود. در مثال زیر ، ما از دستور docker ps -a که اخیراً اجرا کردیم، استفاده می کنیم. حتماً شناسه کانتینر خود را جایگزین کنید:
$ docker rm 06069fd5ca23

پس از حذف همه کانتینرهای حاوی تصویر ، می توانیم تصویر را حذف کنیم:
$ docker rmi hello-world

نتیجه
شما Docker Compose را روی Debian 10 نصب کرده اید، نصب خود را با اجرای یک مثال Hello World آزمایش کرده و تصویر و کانتینر مورد آزمایش را حذف کرده اید.
در حالی که مثال Hello World نصب شما را تأیید کرد ، این پیکربندی ساده یکی از مزایای اصلی Docker Compose را نشان نمی دهد – آن هم توانایی بالا و پایین آوردن گروهی از کانتینرهای Docker به صورت همزمان. برای دیدن نحوه استفاده از Docker Compose با جزئیات بیشتر ، به نحوه نصب وردپرس با Docker Compose نگاهی بیندازید.

 

 

 

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

چگونه می توان هاست های مجازی Apache را در اوبونتو 18.04 –  نحوه اجرای صفحه گذاری در MySQL با PHP روی اوبونتو 18.04

نصب پشته Nginx، MySQL، PHP LEMP در CentOS 8 –  نحوه تنظیم پلتفرم Eclipse Theia Cloud IDE در CentOS 7

نحوه نصب پشته یا استک Nginx ، MySQL ، PHP LEMP  –  بسته بندی برنامه Laravel 6 برای توسعه با Docker Compose

مراحل ایمن سازی Apache HTTP در FreeBSD 12  –  بهینه سازی درخواست های MySQL با ذخیره سازی ProxySQL در اوبونتو 16

درک Objectهای Map و Set در JavaScript  –  استفاده از Ansible برای نصب و راه اندازی وردپرس با LAMP در اوبونتو 18

نحوه راه اندازی Eclipse Theia Cloud IDE در اوبونتو –  چگونه می توان پلتفرم کد سرور Cloud IDE را در اوبونتو 18.04

نحوه استفاده از Cron برای خودکارسازی کارها در CentOS 8  – چگونه می توان از رول های ansible برای انتزاع محیط زیرساختی

نحوه نوشتن کد ناهمگام (غیر همزمان) در Node.js  –  نحوه پیکربندی یک خوشه Galera با MySQL در سرورهای اوبونتو 18

راه اندازی اولیه سرور با CentOS 8  – تهیه نسخه پشتیبان و بازیابی یک خوشه Kubernetes

نحوه تنظیم کلیدهای SSH در CentOS 8  –  نحوه نصب و استفاده از PostgreSQL در CentOS 7

نحوه ساختن یک برنامه Node.js با Docker  Quickstart  –  چگونه می توان پلتفرم Eclipse Theia Cloud IDE را روی اوبونتو

چگونه می توان هاست های مجازی Apache را در اوبونتو  –  مدیریت DNS با استفاده از DNSControl در Debian 10

نحوه تایید صحت رمز عبور با Apache در اوبونتو 18.04  –  چگونه می توان پلتفرم Cloud IDE کد سرور را روی CentOS 7

نحوه نصب و استفاده از TimescaleDB در CentOS 7  –   نحوه نصب Apache Kafka در Debian 10

نحوه تایید صحت رمز عبور با Apache در اوبونتو 18.04–  نحوه نصب وردپرس با OpenLiteSpeed ​​در اوبونتو 18.04

استفاده از Cron برای خودکارسازی کارها در اوبونتو 18 –

نصب و استفاده ازRadamsa برای فوز کردن برنامه ها روی Ubuntu 18 –

نحوه راه اندازی Eclipse Theia Cloud IDE Platform در Debian 10  –

نحوه نصب Docker Compose در Debian 10  –

چگونه می توان با کتابخانه (library) درخواست ها در پایتون شروع به کار کرد  –

 

 

کلمات کلیدی خرید سرور

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

 

برچسب‌ها:

  • behnam gol mohamadi
  • ۰
  • ۰

مقدمه
با حرکت ابزارهای گسترش دهنده به سمت cloud ، تطابق پذیری پلتفرم cloud IDE (محیط پیشرفت ادغام شده) در حال رشد است. Cloud IDE ها از هر نوع دستگاه مدرن از طریق مرورگرهای وب قابل دسترسی هستند و برای سناریوهای همکاری در زمان واقعی مزایای بسیاری را ارائه می دهند. کار کردن در یک Cloud IDE ، یک محیط توسعه و آزمایش یکپارچه را برای شما و تیم شما ایجاد می کند ، در عین حال ناسازگاری های پلتفرم را به حداقل می رساند. چون از طریق مرورگرهای وب قابل دسترسی است ، Cloud IDE ها از هر نوع دستگاه مدرن در دسترس هستند.
Eclipse Theia یک Cloud IDE قابل توسعه است که بر روی یک سرور مجازی از راه دور اجرا میشود و از یک مرورگر وب قابل دسترسی است. از لحاظ بصری ، به گونه ای طراحی شده است که به طور مشابه با Microsoft Visual Studio Code دیده شود و کار کند ، به این معنی که از بسیاری از زبان های برنامه نویسی پشتیبانی می کند ، دارای یک طرح انعطاف پذیر و یک ترمینال یکپارچه است. آنچه Eclipse Theia را از دیگر نرم افزارهای cloud IDE جدا می کند قابلیت توسعه آن است. می توان آن را با استفاده از افزونه های سفارشی اصلاح کرد ، که به شما امکان می دهد یک Cloud IDE متناسب با نیازهای خود تهیه کنید.
در این آموزش ،Eclipse Theia را با استفاده از Docker Compose ، یک ابزار سازمان دهی حرفه ای، در سرور مجازی Debian 10 خود به کار خواهید گرفت. با استفاده از nginx-proxy ، یک سیستم خودکار برای Docker ، آن را در دامنه خود قرار می دهید که فرایند پیکربندی Nginx را ساده تر می کند تا به عنوان یک پروکسی معکوس برای یک کانتینر سرویس دهد. همچنین با استفاده از یک گواهی Let’s Encrypt TLS رایگان ، که با استفاده از افزونه تخصصی آن تهیه می کنید ، آن را ایمن خواهید کرد. در پایان ، شما باید Eclipse Theia را روی سرور مجازی Debian 10 خود از طریق HTTPS در دسترس داشته باشید و از کاربر بخواهید وارد شود.
پیش نیازها
⦁ یک سرور مجازی Debian 10 با امتیازات اصلی و یک حساب ثانویه و غیر ریشه. می توانید با دنبال کردن راهنمای تنظیم اولیه سرور مجازی برای Debian 10 ، این تنظیمات را انجام دهید. برای این آموزش کاربر غیر ریشه sammy است.
⦁ Docker نصب شده روی سرور مجازی شما. مرحله 1 و مرحله 2 نحوه نصب Docker را در Debian 10 دنبال کنید. برای آشنایی با Docker ، به اکوسیستم Docker: مقدمه ای بر مؤلفه های مشترک مراجعه کنید.
⦁ Docker compose نصب شده روی سرور مجازی تان. مرحله 1 نحوه نصب Docker Compose را در Debian 10 دنبال کنید.
⦁ نام دامنه کاملاً ثبت شده. در این آموزش کلا از theia.your_domain استفاده می شود. می توانید نام دامنه را در Namecheap خریداری کنید ، یکی از آنها را به صورت رایگان در Freenom دریافت کنید ، یا از ثبت دامنه مورد نظر خود استفاده کنید.
⦁ یک ثبت A DNS با theia.your_domain که به آدرس IP عمومی سرور مجازی شما اشاره میکند. برای جزئیات بیشتر در مورد چگونگی اضافه کردن آنها می توانید این معرفی را در vpsgol DNS دنبال کنید.
مرحله 1 – استفاده از پروکسی nginx با Let’s Encrypt
در این بخش nginx-proxy و افزونه Let’s Encrypt را با استفاده از Docker Compose به کار میگیرید. این امر امکان تهیه و نوسازی گواهی خودکار TLS را فراهم می کند ، به طوری که هنگام استقرار Eclipse Theia از طریق HTTPS در دامنه شما قابل دسترسی خواهد بود.
برای اهداف این آموزش ، تمام فایل ها را تحت ~ / eclipse-theia ذخیره می کنید. با اجرای دستور زیر دایرکتوری ایجاد کنید:
⦁ $ mkdir ~/eclipse-theia
به آن مراجعه کنید:
⦁ $ cd ~/eclipse-theia
پیکربندی Docker Compose را برای nginx-proxy در فایلی به نام nginx-proxy-compose.yaml ذخیره خواهید کرد. آن را با استفاده از ویرایشگر متن خود ایجاد کنید:
⦁ $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 را نقشه برداری می کنید ، و والیوم هایی را تعریف می کنید که در زمان اجرا در دسترس شما خواهد بود.
والیوم ها دایرکتوری هایی در سرور مجازی شما هستند که سرویس تعریف شده به آنها دسترسی کامل خواهد داشت ، که بعداً برای تنظیم تأیید اعتبار کاربر از آنها استفاده خواهید کرد. برای دستیابی به این هدف ، از والیوم اول لیست استفاده می کنید ، که دایرکتوری محلی / etc / nginx / htpasswd را به همان قسمت موجود در داخل آن نگاشت می کشد. در آن پوشه ، nginx-proxy انتظار دارد فایلی را به نام دامنه هدف پیدا کند ، که حاوی اطلاعات ورود به سیستم برای احراز هویت کاربر در قالب htpasswd (username:hashed_password) است.
برای افزودن ، تصویر Docker را نامگذاری می کنید و با تعیین یک والیوم امکان دسترسی به سوکت Docker را می دهید. سپس ، مشخص می کنید که این افزونه باید دسترسی به والیوم های تعریف شده برای nginx-proxy را ادامه دهد. هر دو سرویس امکان تنظیم restart روی always را دارند که به Docker دستور می دهد کانتینر را در صورت خرابی یا ریبوت سیستم، مجدداً راه اندازی کند.
فایل را ذخیره کنید و ببندید.
پیکربندی را با اجرای دستور زیر انجام دهید:
⦁ $ docker-compose -f nginx-proxy-compose.yaml up -d
در اینجا نام فایل nginx-proxy-compose.yaml را در پارامتر -f دستور docker-compose می گذارید ، که فایل را برای اجرا مشخص می کند. سپس ، فعل UP را می گذرانید که به آن دستور می دهد کانتینرها را اجرا کند. فلگ -d حالت جداشده را فعال می سازد ، به این معنی که Docker Compose کانتینرها را در پس زمینه اجرا می کند.
خروجی نهایی به شرح زیر خواهد بود:
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

nginx-proxy و همراهش Let’s Encrypt را با استفاده از Docker Compose به کار گرفته اید. اکنون می توانید Eclipse Theia را در دامنه خود تنظیم کرده و آن را ایمن کنید.
مرحله 2 – به کارگیری Eclipse Theia دوکر شده
در این بخش ، فایلی را ایجاد خواهید کرد که شامل هر ترکیب ورود به سیستم مجاز میباشد که کاربر باید آن را وارد کند. سپس Eclipse Theia را با استفاده از Docker Compose به سرور مجازی خود منتقل می کنید و با استفاده از nginx-proxy آن را در دامنه امن خود قرار می دهید.
همانطور که در مرحله قبل توضیح داده شد ، nginx-proxy انتظار دارد که ترکیب های ورود به سیستم در فایلی به نام دامنه در معرض ، با فرمت htpasswd قرار بگیرند و در دایرکتوری / etc / nginx / htpasswd در کانتینر ذخیره شوند. همانطور که در پیکربندی nginx-proxy مشخص کرده ایم ، دایرکتوری محلی که به دایرکتوری مجازی نگاشت می کند ، نیازی به یکسان بودن ندارد.
برای ایجاد ترکیبات ورود ، ابتدا با اجرای دستور زیر باید htpasswd را نصب کنید:
⦁ $ sudo apt install apache2-utils
پکیج httpd-tools حاوی برنامه htpasswd است.
دایرکتوری / etc / nginx / htpasswd را ایجاد کنید:
⦁ $ sudo mkdir -p /etc/nginx/htpasswd
فایلی ایجاد کنید که ورود به سیستم را برای دامنه شما ذخیره کند:
⦁ $ sudo touch /etc/nginx/htpasswd/theia.your_domain
به یاد داشته باشید theia.your_domain را با دامنه Eclipse Theia خود جایگزین کنید.
برای افزودن نام کاربری و رمز ورود ، دستور زیر را اجرا کنید:
⦁ $ sudo htpasswd /etc/nginx/htpasswd/theia.your_domain username
USERNAME را با نام کاربری که می خواهید اضافه کنید جایگزین کنید. از شما دوبار رمز عبور خواسته می شود. پس از ارائه آن ، htpasswd نام کاربری و جفت رمز عبور را در انتهای فایل اضافه می کند. می توانید این دستور را به هر تعداد ورود به سیستم که میخواهید تکرار کنید.
اکنون ، پیکربندی را برای استقرار Eclipse Theia ایجاد خواهید کرد. شما آن را در فایلی به نام eclipse-theia-compose.yaml ذخیره خواهید کرد. آن را با استفاده از ویرایشگر متن خود ایجاد کنید:
⦁ $ 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 با ریستارت تنظیم شده روی ALWAYS و theiaide/theia:next را به عنوان تصویر کانتینر تعریف می کنید: شما همچنین می توانید init را روی true تنظیم کنید تا به Docker دستور دهید هنگام اجرای Eclipse Theia در داخل کانتینر ، از init به عنوان مدیر اصلی فرآیند استفاده کند.
سپس دو متغیر محیط را در بخش environment مشخص می کنید: VIRTUAL_HOST و LETSENCRYPT_HOST. اولین مورد به پروکسی nginx منتقل می شود و به آن می گوید کانتینر چه دامنه ای را باید در معرض دید قرار دهید ، در حالی که دومی توسط افزونه Let’s Encrypt آن استفاده می شود و مشخص می کند که برای کدام دامنه درخواست گواهینامه TLS شود. مگر اینکه یک wildcard را به عنوان مقدار VIRTUAL_HOST تعیین کنید ، این دو مقدار باید یکسان باشند.
به یاد داشته باشید theia.your_domain را با دامنه مورد نظر خود جایگزین کنید ، سپس فایل را ذخیره کنید و ببندید. اکنون با اجرای دستور زیر 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 می شوید و بلافاصله رابط کاربری گرافیکی آن را مشاهده می کنید. در نوار آدرس یک پدلاک را مشاهده خواهید کرد که نشان می دهد اتصال امن است. اگر این را بلافاصله مشاهده نکردید ، چند دقیقه صبر کنید تا مجوزهای TLS ارائه شود ، سپس صفحه را مجدد لود کنید.

اکنون که می توانید به راحتی به cloud IDE خود دسترسی داشته باشید ، در مرحله بعد شروع به استفاده از ویرایشگر خواهید کرد.

مرحله 3 – استفاده از رابط Eclipse Theia
در این بخش به بررسی برخی از ویژگی های رابط Eclipse Theia می پردازید.
در سمت چپ IDE ، یک ردیف عمودی از چهار دکمه وجود دارد که متداول ترین ویژگی های مورد استفاده را در یک صفحه جانبی باز می کند.
این نوار قابل تنظیم است بنابراین می توانید این نماها این نوار قابل سفارشی سازی است، بنابراین میتوانید این نمایه ها را به ترتیب دیگری جابجا کنید یا آنها را از نوار حذف کنید. به طور پیش فرض ، اولین نمای پانل Explorer را باز می کند که ناوبری شبیه به درخت ساختار پروژه را فراهم می کند. می توانید پوشه ها و فایل های خود را در اینجا مدیریت کنید – ایجاد کنید ، حذف کنید، جابجا کنید و در صورت لزوم تغییر نام دهید.
بعد از ایجاد فایل جدید از طریق منوی File ، یک فایل خالی را در یک برگه جدید باز خواهید کرد. پس از ذخیره ، می توانید نام فایل را در صفحه جانبی Explorer مشاهده کنید. برای ایجاد پوشه ها بر روی نوار کناری Explorer کلیک راست کرده و روی New Folder کلیک کنید. می توانید پوشه ای را با کلیک روی نام آن و همچنین کشیدن و رها کردن فایل ها و پوشه ها به قسمتهای بالای لیست گسترش دهید تا آنها را به یک مکان جدید منتقل کنید.

دو گزینه بعدی دسترسی به جستجو و جایگزینی قابلیت ها را فراهم می کند. پس از آن ، مورد بعدی نمایی از سیستم های کنترل منبع را که ممکن است از آنها استفاده کنید ، مانند Git ، ارائه می دهد.
نمای نهایی گزینه اشکال زدایی است که کلیه اقدامات متداول را برای اشکال زدایی در پنل ارائه می دهد. می توانید پیکربندی های اشکال زدایی را در فایل launch.json ذخیره کنید.

قسمت اصلی GUI ویرایشگر شماست که می توانید با استفاده از زبانه ها برای ویرایش کد خود جدا کنید. می توانید نمای ویرایش خود را به یک سیستم شبکه یا به فایل های جانبی تغییر دهید. مانند همه IDE های مدرن ، Eclipse Theia از هایلایت دستوری برای کد شما پشتیبانی می کند.

می توانید با وارد کردن CTRL + SHIFT + `، یا با کلیک کردن بر روی Terminal در منوی بالا ، و انتخاب گزینه New Terminal ، به ترمینال دسترسی پیدا کنید. ترمینال در یک پانل پایین باز خواهد شد و دایرکتوری کار آن روی فضای کاری پروژه تنظیم می شود ، که شامل فایل ها و پوشه های نمایش داده شده در پانل سمت Explorer است.

شما یک نمای کلی در سطح بالا از رابط Eclipse Theia جستجو کرده اید و برخی از متداول ترین ویژگی ها را مرور کرده اید.

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

 

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

چگونگی استفاده از migrations و seeders دیتابیس –  نحوه نصب Docker Compose در Debian 10

نحوه نصب R روی اوبونتو 18.04  – چگونه می توان با کتابخانه (library) درخواست ها در پایتون شروع به کار کرد

چگونه می توان هاست های مجازی Apache را در اوبونتو 18.04 –  نحوه اجرای صفحه گذاری در MySQL با PHP روی اوبونتو 18.04

نصب پشته Nginx، MySQL، PHP LEMP در CentOS 8  –  نحوه تنظیم پلتفرم Eclipse Theia Cloud IDE در CentOS 7

نحوه نصب پشته یا استک Nginx ، MySQL ، PHP LEMP – بسته بندی برنامه Laravel 6 برای توسعه با Docker Compose

مراحل ایمن سازی Apache HTTP در FreeBSD 12   –  بهینه سازی درخواست های MySQL با ذخیره سازی ProxySQL در اوبونتو 16

درک Objectهای Map و Set در JavaScript – استفاده از Ansible برای نصب و راه اندازی وردپرس با LAMP در اوبونتو 18

نحوه راه اندازی Eclipse Theia Cloud IDE در اوبونتو  –  چگونه می توان پلتفرم کد سرور Cloud IDE را در اوبونتو 18.04

نحوه استفاده از Cron برای خودکارسازی کارها در CentOS 8  – چگونه می توان از رول های ansible برای انتزاع محیط زیرساختی

نحوه نوشتن کد ناهمگام (غیر همزمان) در Node.js  –  نحوه پیکربندی یک خوشه Galera با MySQL در سرورهای اوبونتو 18

راه اندازی اولیه سرور با CentOS 8  –  تهیه نسخه پشتیبان و بازیابی یک خوشه Kubernetes

نحوه تنظیم کلیدهای SSH در CentOS 8  –  نحوه نصب و استفاده از PostgreSQL در CentOS 7

نحوه ساختن یک برنامه Node.js با Docker  Quickstart –  چگونه می توان پلتفرم Eclipse Theia Cloud IDE را روی اوبونتو

چگونه می توان هاست های مجازی Apache را در اوبونتو  –   مدیریت DNS با استفاده از DNSControl در Debian 10

نحوه تایید صحت رمز عبور با Apache در اوبونتو 18.04  –  چگونه می توان پلتفرم Cloud IDE کد سرور را روی CentOS 7

نحوه نصب و استفاده از TimescaleDB در CentOS 7 –  نحوه نصب Apache Kafka در Debian 10

نحوه تایید صحت رمز عبور با Apache در اوبونتو 18.04 –  نحوه نصب وردپرس با OpenLiteSpeed ​​در اوبونتو 18.04

استفاده از Cron برای خودکارسازی کارها در اوبونتو 18 –

نصب و استفاده ازRadamsa برای فوز کردن برنامه ها روی Ubuntu 18  –

نحوه راه اندازی Eclipse Theia Cloud IDE Platform در Debian 10  –

 

 

کلمات کلیدی خرید سرور

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

 

برچسب‌ها:

  • behnam gol mohamadi
  • ۰
  • ۰

مقدمه
تهدیدهای امنیتی بطور مداوم پیچیده تر می شوند ، بنابراین توسعه دهندگان و ادمین های سیستم ها باید در دفاع و آزمایش امنیت برنامه های خود رویکردی پیشگیرانه اتخاذ کنند.
روشی متداول برای آزمایش امنیت برنامه های مشتری یا خدمات شبکه، fuzzing است که شامل ارسال مکرر داده های نامعتبر یا نادرست به برنامه و تجزیه و تحلیل پاسخ آن است. این کار برای کمک به اینکه برنامه در برابر ورودی غیر منتظره که ممکن است شامل داده های نادرست یا حملات واقعی باشد، چقدر مقاومت و استحکام دارد مفید است.
Radamsa یک ابزار fuzzing منبع باز است که می تواند موارد آزمایش را بر اساس داده های ورودی مشخص شده توسط کاربر ایجاد کند. Radamsa کاملاً قابل سندیت است و تاکنون در یافتن آسیب پذیری در برنامه های واقعی مانند Gzip موفق بوده است.
در این آموزش ، Radamsa را با استفاده از موارد تست خود ، برای فوز تست خط فرمان و برنامه های مبتنی بر شبکه، نصب و استفاده خواهید کرد.
هشدار: Radamsa ابزاری برای آزمایش نفوذ است که به شما امکان می دهد آسیب پذیری ها یا نقاط ضعف سیستم ها یا برنامه های خاص را شناسایی کنید. شما نباید از آسیب پذیری های یافت شده با Radamsa برای هر نوع رفتار بی احتیاط ، آسیب یا سوء استفاده مخرب استفاده کنید. از لحاظ اخلاقی آسیب پذیری ها باید به نگهدارنده برنامه آسیب دیده گزارش شود و بدون اجازه صریح در معرض دید عموم قرار نگیرد.
پیش نیازها
قبل از شروع این راهنما به موارد زیر نیاز خواهید داشت:
یک سرور مجازی Ubuntu 18.04 که با دنبال کردن راهنمای راه اندازی سرور مجازی اولیه با Ubuntu 18.04نصب شده باشد، و شامل یک کاربر sudo غیر ریشه و فایروال فعال برای مسدود کردن پورت های غیر ضروری باشد.
یک خط فرمان یا برنامه مبتنی بر شبکه که می خواهید آن را امتحان کنید ، به عنوان مثال Gzip ، Tcpdump ، Bind ، Apache ، jq یا هر برنامه دیگری که مورد نظر شماست. به عنوان نمونه برای اهداف این آموزش ، از jq استفاده خواهیم کرد.
هشدار: Radamsa می تواند باعث شود برنامه ها یا سیستم ها به صورت ناپایدار یا crash اجرا شوند ، بنابراین فقط Radamsa را در محیطی که برای این کار آماده هستید مانند سرور اختصاصی اجرا کنید. لطفاً قبل از انجام fuzz testing در برابر آن ، از داشتن اجازه کتبی صریح از صاحب سیستم اطمینان حاصل کنید.

پس از آماده شدن ، به عنوان کاربر غیر ریشه وارد سرور مجازی خود شوید.
مرحله 1 – نصب Radamsa
در مرحله اول ، Radamsa را دانلود و کامپایل می کنید تا در سیستم خود شروع به استفاده از آن کنید. کد منبع Radamsa در منبع رسمی GitLab موجود است.
با به روز کردن فهرست بسته محلی شروع کنید تا تغییرات جدید بالادست را منعکس کنید:
$ sudo apt update
سپس بسته های gcc ، git ، make و wget لازم جهت تهیه کد منبع را در یک باینری قابل اجرا نصب کنید:
$ sudo apt install gcc git make wget

apt پس از تأیید نصب ، بسته های مشخص شده و کلیه وابستگی های مورد نیاز آنها را دانلود و نصب خواهد کرد.
در مرحله بعد ، یک نسخه از کد منبع را برای Radamsa با کلون کردن آن از منبع میزبان در GitLab ، دانلود می کنید:
$ git clone https://gitlab.com/akihe/radamsa.git

به این ترتیب یک دایرکتوری به نام radamsa شامل کد منبع برای برنامه ایجاد خواهید کرد. برای شروع کامپایل کد به فهرست راهنما بروید:
$ cd radamsa
در مرحله بعد ، می توانید مراحل کامپایل را با استفاده از make انجام دهید:
$ make

سرانجام ، می توانید باینری Radamsa کامپایل شده را با PATH $ خود نصب کنید:
$ sudo make install

پس از اتمام این کار ، می توانید نسخه نصب شده را بررسی کنید تا مطمئن شوید که همه چیز کار می کند:
$ radamsa –version

خروجی شما شبیه به زیر خواهد بود:
Output
Radamsa 0.6

اگر خطای radamsa: command not found را مشاهده کردید، دوبار بررسی کنید که تمام وابستگی های لازم نصب شده اند و در هنگام کامپایل خطایی وجود ندارد.
اکنون که Radamsa را نصب کردید ، می توانید برخی از موارد نمونه آزمایشی را ایجاد کنید تا ببینید که Radamsa چگونه کار می کند و برای چه چیزی می تواند مورد استفاده قرار گیرد.
مرحله 2 – ارائه موارد Fuzzing Test
اکنون که Radamsa نصب شده است ، می توانید از آن برای تولید برخی موارد Fuzzing Test استفاده کنید.
نمونه آزمایشی بخشی از داده هاست که به عنوان ورودی برای برنامه ای که تست می کنید استفاده می شود. به عنوان مثال ، اگر در حال آزمایش یک برنامه بایگانی مانند Gzip هستید ، مورد آزمایشی ممکن است یک آرشیو فایلی باشد که می خواهید آن را فشرده سازی کنید.
توجه: Radamsa داده های ورودی را با طیف گسترده ای از روش های غیر منتظره از جمله تکرار شدید ، bit flips ، تزریق کاراکتر کنترل و موارد دیگر دستکاری می کند. این کار ممکن است باعث شود که بخش پایانه شما متوقف یا ناپایدار شود ، بنابراین قبل از ادامه این کار آگاه باشید.
در مرحله اول ، یک متن ساده را به Radamsa منتقل کنید تا ببینید چه اتفاقی می افتد:
$ echo “Hello, world!” | radamsa

این کار داده های ورودی را دستکاری (یا فوز) می کند و یک نمونه آزمایشی را تولید می کند ، به عنوان مثال:
Output
Hello,, world!

در این حالت ، Radamsa یک کاما اضافی بین Hello و world اضافه کرد. ممکن است تغییر مهمی به نظر نرسد، اما در برخی از برنامه ها ممکن است باعث تفسیر نادرست داده ها شود.
بیایید دوباره با اجرای همان دستور امتحان کنیم. خروجی متفاوتی را مشاهده خواهید کرد:
Output
Hello, ”””’wor’d!

این بار ، چندین تک نقل قول (‘) به رشته وارد شد ، از جمله علامتی که روی l در world قرار گرفت. این مورد تست خاص به احتمال زیاد منجر به ایجاد مشکلاتی در برنامه خواهد شد ، زیرا اغلب از نقل قول های تک / دوتایی برای جدا کردن بخش های مختلف داده در یک لیست استفاده می شود.
بیایید یک بار دیگر امتحان کنیم:
Output
Hello, $+$PATH\u0000`xcalc`world!

در این مورد Radamsa یک رشته ورود پوسته ای را درج کرده است ، که برای تست آسیب پذیری های ورود فرمان در برنامه ای که شما آزمایش می کنید ، مفید خواهد بود.
شما از Radamsa برای fuzz رشته ورودی و تولید یک سری موارد آزمایشی استفاده کرده اید. در مرحله بعد ، از Radamsa برای fuzz کردن یک برنامه خط فرمان استفاده خواهید کرد.
مرحله 3 – Fuzzing برنامه خط فرمان
در این مرحله ، از Radamsa استفاده می کنید تا یک برنامه خط فرمان را fuzz کرده و در مورد هرگونه کرشی که رخ می دهد گزارش دهید.
تکنیک دقیق fuzzing هر برنامه بسیار متفاوت است و روشهای مختلف برای برنامه های مختلف موثرتر خواهد بود. اما در این آموزش از مثال jq استفاده خواهیم کرد که یک برنامه خط فرمان برای پردازش داده های JSON است.
ممکن است برای هر برنامه مشابهی تا زمانی که از اصول کلی گرفتن برخی شکل های داده های ساختاری یا بدون ساختار تبعیت میکند، استفاده کنید، کاری با آن انجام دهید و سپس نتیجه ای دریافت کنید. به عنوان مثال این مثال همچنین با Gzip ، Grep ، bc ، tr و غیره کار می کند.
اگر jq را قبلاً نصب نکردید ، می توانید آن را با استفاده از apt نصب کنید:
$ sudo apt install jq
اکنون jq نصب خواهد شد.
برای شروع fuzzing ، یک فایل نمونه JSON ایجاد کنید که از آن به عنوان ورودی Radamsa استفاده خواهید کرد:
$ nano test.json

سپس داده های JSON نمونه زیر را به فایل اضافه کنید:
test.json
{
“test”: “test”,
“array”: [
“item1: foo”,
“item2: bar”
]
}

اگر می خواهید صحت دستور JSON را بررسی کنید می توانید این فایل را با استفاده از jq تجزیه کنید:
$ jq . test.json

اگر JSON معتبر باشد ، jq فایل را در خروجی صادر می کند. در غیر اینصورت خطایی نمایش داده می شود که می توانید در صورت لزوم برای اصلاح دستور استفاده کنید.
در مرحله بعد ، فایل JSON تست را با استفاده از Radamsa فوز کنید و سپس آن را به jq منتقل کنید. این باعث خواهد شد که jq مورد آزمایش فوز شده / دستکاری شده را به جای داده های معتبر اصلی JSON بخواند:
$ radamsa test.json | jq

اگر Radamsa داده های JSON را به شکلی fuzz کند که هنوز از نظر نحوی معتبر باشد ، jq داده ها را به خروجی می فرستد ، اما با هر تغییری که Radamsa در آن ایجاد کرده است.
از طرف دیگر ، اگر Radamsa باعث بی اعتبار بودن داده های JSON شود ، jq خطای مربوطه را نشان می دهد. مثلا:
Output
parse error: Expected separator between values at line 5, column 16

نتیجه جایگزین این خواهد بود که jq قادر به پردازش درست داده های فوز شده نیست و باعث کرش یا سوء رفتار آن می شود. این همان چیزی است که در fuzzing واقعاً به دنبال آن هستید ، زیرا ممکن است نشانگر آسیب پذیری امنیتی مانند سرریز بافر یا تزریق فرمان باشد.
برای آزمایش کارآمدتر در برابر آسیب پذیری هایی از این دست ، می توان از اسکریپت Bash برای خودکارسازی فرایند fuzzing استفاده کرد ، از جمله تولید موارد تست ، انتقال آنها به برنامه هدف و گرفتن هر خروجی مربوطه.
فایلی با نام jq-fuzz.sh ایجاد کنید:
$ nano jq-fuzz.sh

محتوای دقیق اسکریپت بسته به نوع برنامه مورد نظر شما و داده های ورودی متفاوت خواهد بود ، اما در مورد jq و سایر برنامه های مشابه ، متن زیر کافی است.
اسکریپت را در فایل jq-fuzz.sh کپی کنید:
jq-fuzz.sh
#!/bin/bash
while true; do
radamsa test.json > input.txt
jq . input.txt > /dev/null 2>&1
if [ $? -gt 127 ]; then
cp input.txt crash-`date +s%.%N`.txt
echo “Crash found!”
fi
don

این اسکریپت حاوی یک while است تا محتویات به صورت مکرر حلقه شود. هر بار که اسکریپت حلقه شود ، Radamsa یک فایل آزمایشی را بر اساس test.json تولید می کند و آن را در input.txt ذخیره می کند.
فایل آزمایشی input.txt از طریق jq اجرا می شود ، آن هم با استفاده از همه خروجی های استاندارد و خطا که به / dev / null هدایت می شوند تا از پر شدن صفحه ترمینال جلوگیری شود.
در آخر ، مقدار خروجی jq بررسی می شود. اگر مقدار خروجی از 127 بیشتر باشد ، نشانگر پایان مخرب (کرش) است ، سپس داده های ورودی برای بررسی در تاریخ بعدی در فایلی به نام crash ذخیره می شوند – به دنبال آن تاریخ فعلی در ثانیه ها و نانو ثانیه های یونیکس می آید.
اسکریپت را به عنوان قابل اجرا علامت گذاری کنید و آن را برای اجرا تنظیم کنید تا به طور خودکار تست فوزی jq را شروع کند:
$ chmod +x jq-fuzz.sh

$ ./jq-fuzz.sh
می توانید CTRL + C را در هر زمان صادر کنید تا اسکریپت خاتمه یابد. سپس می توانید با استفاده از ls ​​برای نمایش فهرست دایرکتوری حاوی فایلهای کرش شده ای که ایجاد شده اند، بررسی کنید که آیا کرشی یافت شده است یا خیر.
ممکن است بخواهید داده های ورودی JSON خود را بهبود بخشید زیرا احتمالاً استفاده از یک فایل ورودی پیچیده تر باعث بهبود کیفیت نتایج fuzzing می شود. از استفاده از یک فایل بزرگ یا فایلی که حاوی تعداد زیادی از داده های تکراری است ، خودداری کنید – یک فایل ورودی ایده آل اندازه کوچکی دارد ، اما همچنان ممکن است تا سر حد امکان عناصر پیچیده بسیاری داشته باشد. به عنوان مثال ، یک فایل ورودی خوب شامل نمونه هایی از داده های ذخیره شده در تمام قالب ها ، از جمله رشته ها ، اعداد صحیح ، بولی ها ، لیست ها و موضوعات ، و همچنین در صورت امکان داده های تو در تو می باشد.
شما از Radamsa برای fuzz کردن یک برنامه خط فرمانی استفاده کرده اید. در مرحله بعد ، از Radamsa برای fuzz کردن درخواست ها برای خدمات شبکه استفاده خواهید کرد.
مرحله 4 – فوز کردن درخواست ها برای خدمات شبکه
Radamsa همچنین می تواند برای fuzzing سرویس های شبکه ، یا به عنوان مشتری یا سرور مجازی شبکه ، مورد استفاده قرار گیرد. در این مرحله ، از Radamsa برای fuzzing سرویس شبکه استفاده خواهید کرد که Radamsa به عنوان مشتری عمل می کند.
هدف از fuzzing خدمات شبکه ، آزمایش چگونگی انعطاف پذیری یک سرویس شبکه خاص برای مشتریانی است که داده های ناقص و / یا مخرب را ارسال می کنند. بسیاری از خدمات شبکه مانند سرور مجازی های وب یا سرور مجازی های DNS معمولاً در معرض اینترنت قرار دارند ، به این معنی که آنها یک هدف مشترک برای مهاجمان هستند. یک سرویس شبکه ای که به اندازه کافی در برابر دریافت داده های نادرست مقاوم نیست ممکن است کرش کند یا حتی بدتر از آن این که در وضعیت باز از کار بیفتد و به مهاجمان اجازه دهد داده های حساس مانند کلیدهای رمزگذاری یا داده های کاربر را بخوانند.
روش خاص برای fuzzing خدمات شبکه بسته به خدمات شبکه در آن بسیار متفاوت است، با این حال در این مثال ما از Radamsa استفاده خواهیم کرد تا یک سرور مجازی اصلی وب که محتوای HTMLاستاتیک را ارائه می دهد ، fuzz کند.
در مرحله اول ، شما باید سرور مجازی وب را تنظیم کنید تا از آن برای آزمایش استفاده کنید. شما می توانید این کار را با استفاده از سرور مجازی توسعه داخلی که همراه با بسته php-cli است انجام دهید. همچنین برای آزمایش سرور مجازی وب خود به curl نیاز دارید.
اگر php-cli و / یا curl نصب نکردید ، می توانید آنها را با استفاده از apt نصب کنید:
$ sudo apt install php-cli curl
بعد ، دایرکتوری ایجاد کنید تا فایل های سرور مجازی وب خود را در آن ذخیره کنید و به داخل آن بروید:

$ mkdir ~/www

$ cd ~/www
سپس ، یک فایل HTML ایجاد کنید که حاوی متن نمونه است
$ nano index.html

موارد زیر را به فایل اضافه کنید:
index.html
<h1>Hello, world!</h1>

اکنون می توانید سرور مجازی وب PHP خود را اجرا کنید. لازم است بتوانید ضمن استفاده از بخش ترمینال دیگر ، ورود به سیستم سرور مجازی وب را مشاهده کنید ، بنابراین یک بخش ترمینال و SSH دیگر را برای این کار باز کنید:
$ cd ~/www

$ php -S localhost:8080

این دستور خروجی شبیه به زیر را در پی خواهد داشت:
Output
PHP 7.2.24-0ubuntu0.18.04.1 Development Server started at Wed Jan 1 16:06:41 2020
Listening on http://localhost:8080
Document root is /home/user/www
Press Ctrl-C to quit.

اکنون می توانید به بخش ترمینال اصلی خود برگردید و آزمایش کنید که وب سرور مجازی با استفاده از curl کار می کند یا نه:
$ curl localhost:8080

با این کار نمونه فایل index.html که قبلاً ایجاد کرده اید به خروجی فرستاده می شود:
Output
<h1>Hello, world!</h1>

سرور مجازی وب شما فقط باید به صورت محلی قابل دسترسی باشد ، بنابراین نباید هیچ درگاهی در فایروال خود برای آن باز کنید.
اکنون که سرور مجازی وب تستی خود را تنظیم کرده اید ، می توانید با استفاده از Radamsa ، آن را fuzz کنید.
ابتدا باید یک نمونه HTTP نمونه ایجاد کنید تا از آن به عنوان داده ورودی برای Radamsa استفاده شود. یک فایل جدید برای ذخیره در آن ایجاد کنید:
$ nano http-request.txt

سپس ، درخواست HTTP نمونه زیر را در فایل کپی کنید:
http-request.txt
GET / HTTP/1.1
Host: localhost:8080
User-Agent: test
Accept: */*

در مرحله بعد ، می توانید از Radamsa برای ارسال این درخواست HTTP به سرور مجازی وب محلی خود استفاده کنید. برای انجام این کار ، باید از Radamsa به عنوان سرویس دهنده TCP استفاده کنید ، که می تواند با مشخص کردن آدرس IP و پورت برای اتصال به آن انجام شود:
$ radamsa -o 127.0.0.1:8080 http-request.txt

توجه: توجه داشته باشید که استفاده از Radamsa به عنوان مشتری TCP به طور بالقوه باعث می شود که داده های نادرست / مخرب از طریق شبکه منتقل شوند. این مسئله ممکن است مشکل ساز شود ، بنابراین باید فقط به شبکه هایی که مجاز به آزمایش آنها هستید دسترسی داشته باشید یا ترجیحا فقط از آدرس localhost (127.0.0.1) استفاده کنید.
در نهایت ، اگر گزارش های خروجی را برای سرور مجازی وب محلی خود مشاهده کنید ، خواهید دید که این درخواست ها را دریافت کرده است ، اما به احتمال زیاد آنها را به عنوان نامعتبر / نادرست پردازش نکرده است.
گزارش های خروجی در پنجره ترمینال دوم شما قابل مشاهده خواهند بود:
Output
[Wed Jan 1 16:26:49 2020] 127.0.0.1:49334 Invalid request (Unexpected EOF)
[Wed Jan 1 16:28:04 2020] 127.0.0.1:49336 Invalid request (Malformed HTTP request)
[Wed Jan 1 16:28:05 2020] 127.0.0.1:49338 Invalid request (Malformed HTTP request)
[Wed Jan 1 16:28:07 2020] 127.0.0.1:49340 Invalid request (Unexpected EOF)
[Wed Jan 1 16:28:08 2020] 127.0.0.1:49342 Invalid request (Malformed HTTP request)

برای دستیابی به نتایج بهینه و اطمینان از ثبت کرش ها ، بهتر است یک اسکریپت اتوماسیون مشابه آنچه در مرحله 3 استفاده شده است بنویسید. همچنین باید از یک فایل ورودی پیچیده تر استفاده کنید ، که ممکن است حاوی اضافاتی مانند هدرهای HTTP بیشتر باشد.
با استفاده از Radamsa که به عنوان یک سرویس دهنده TCP عمل می کند ، یک سرویس شبکه را fuzz کرده اید. در مرحله بعد ، یک سرویس دهنده شبکه را با Radamsa به عنوان سرور مجازی fuzz می کنید.
مرحله 5 – Fuzzing برنامه های مشتری شبکه
در این مرحله ، از Radamsa برای آزمایش fuzz کردن یک برنامه مشتری شبکه استفاده خواهید کرد. این کار با رهگیری پاسخ های یک سرویس شبکه و fuzz کردن آنها قبل از دریافت توسط مشتری حاصل می شود.
هدف از این نوع fuzzing ، آزمایش میزان مقاومت برنامه های مشتری شبکه در برابر دریافت داده های نادرست یا مخرب از خدمات شبکه است. به عنوان مثال ، آزمایش یک مرورگر وب (مشتری) کهHTML ناقص از یک سرور مجازی وب (سرویس شبکه) دریافت میکند یا آزمایش یک مشتری DNS که پاسخ DNS نادرست از یک سرور مجازی DNS دریافت منماید.
همانند مورد fuzzing برنامه های خط فرمان یا خدمات شبکه، تکنیک دقیق برای fuzzing هر برنامه سرویس دهنده شبکه بطور قابل توجهی متفاوت است ، اما در این مثال از Whois استفاده خواهید کرد که یک برنامه ارسال یا دریافت ساده مبتنی بر TCP است.
از برنامه whois برای ارسال درخواست به سرور مجازی های WHOIS و دریافت سوابق WHOIS به عنوان پاسخ استفاده می شود. WHOIS روی درگاه TCP 43 با متن واضح کار می کند ، و آن را به عنوان کاندیدای خوبی برای آزمایش fuzz مبتنی بر شبکه تبدیل می کند.
اگر قبلاً whois  را که نداشته اید ، می توانید آن را با استفاده از apt نصب کنید:
$ sudo apt install whois
در مرحله اول ، به نمونه پاسخ whoisنیاز خواهید داشت که از آن به عنوان داده ورودی استفاده کنید. شما می توانید این کار را با ایجاد درخواست whois و ذخیره کردن خروجی در یک فایل انجام دهید. شما می توانید از هر دامنه مورد نظر خود در اینجا استفاده کنید زیرا برنامه whois را بصورت محلی و با استفاده از داده های نمونه محلی آزمایش می کنید:
$ whois example.com > whois.txt
در مرحله بعد ، باید Radamsa را به عنوان سرور مجازی  تنظیم کنید که نسخه های fuzz شده این پاسخ whois را ارائه می دهد. هنگامی که Radamsa در حالت سرور مجازی کار می کند ، می توانید استفاده از ترمینال خود را ادامه دهید ، بنابراین توصیه می شود برای این کار بخش ترمینال و اتصال SSH دیگری را به سرور مجازی خود باز کنید:
اکنون Radamsa در حالت سرور مجازی TCP در حال اجرا است و هر زمان که اتصال به سرور مجازی برقرار شود ، بدون توجه به دریافت اطلاعات درخواست ، یک نسخه فازی از whois.txt را ارائه می دهد.
اکنون می توانید به آزمایش برنامه مشتری whois بروید. برای هر دامنه مورد نظر خود باید یک درخواست whois عادی را تهیه کنید (لازم نیست همان اطلاعاتی باشد که برای نمونه داده ها است) ، اما با whois به سرور مجازی محلی Radamsa خود اشاره کردید:
$ whois -h localhost:4343 example.com
پاسخ، داده های نمونه شما خواهد بود اما توسط Radamsa فوز شده است. تا زمانی که Radamsa در حال اجرا است می توانید به درخواست های خود به سرور مجازی محلی ادامه دهید و هر بار پاسخ فوز شده متفاوت را ارائه می دهد.
مانند fuzzing خدمات شبکه ، برای بهبود کارآیی این آزمایش کلاینت شبکه و اطمینان از یافت هر گونه کرش ، بهتر است یک اسکریپت اتوماسیون مشابه آنچه در مرحله 3 استفاده می شود بنویسید.
در این مرحله آخر ، از Radamsa برای انجام آزمایش fuzzing یک برنامه مشتری شبکه استفاده کردید.
نتیجه
در این مقاله Radamsa را تنظیم کرده اید و از آن برای فوز کردن یک برنامه خط فرمان ، یک سرویس شبکه و یک مشتری شبکه استفاده کردید. اکنون دانش بنیادی لازم برای آزمایش fuzzing برنامه های خود را دارید ، امیدوارم که نتیجه آن استحکام و مقاومت آنها در مقابل حمله باشد.
اگر می خواهید در مورد Radamsa بیشتر بدانید ، توصیه میشود فایل Radamsa README را با جزئیات مرور کنید ، زیرا حاوی اطلاعات فنی بیشتر و نمونه هایی از چگونگی استفاده از این ابزار است:
فایل README Radamsa
همچنین ممکن است بخواهید برخی از ابزارهای دیگر fuzzing مانند American Fuzzy Lop (AFL) را که یک ابزار فوز پیشرفته است و برای آزمایش برنامه های باینری با سرعت و دقت بسیار بالا طراحی شده است ، بررسی کنید:
American Fuzzy Lop

 

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

چگونگی استفاده از migrations و seeders دیتابیس –  نحوه نصب Docker Compose در Debian 10

نحوه نصب R روی اوبونتو 18.04  – چگونه می توان با کتابخانه (library) درخواست ها در پایتون شروع به کار کرد

چگونه می توان هاست های مجازی Apache را در اوبونتو 18.04 –  نحوه اجرای صفحه گذاری در MySQL با PHP روی اوبونتو 18.04

نصب پشته Nginx، MySQL، PHP LEMP در CentOS 8  –  نحوه تنظیم پلتفرم Eclipse Theia Cloud IDE در CentOS 7

نحوه نصب پشته یا استک Nginx ، MySQL ، PHP LEMP – بسته بندی برنامه Laravel 6 برای توسعه با Docker Compose

مراحل ایمن سازی Apache HTTP در FreeBSD 12   –  بهینه سازی درخواست های MySQL با ذخیره سازی ProxySQL در اوبونتو 16

درک Objectهای Map و Set در JavaScript – استفاده از Ansible برای نصب و راه اندازی وردپرس با LAMP در اوبونتو 18

نحوه راه اندازی Eclipse Theia Cloud IDE در اوبونتو  –  چگونه می توان پلتفرم کد سرور Cloud IDE را در اوبونتو 18.04

نحوه استفاده از Cron برای خودکارسازی کارها در CentOS 8  – چگونه می توان از رول های ansible برای انتزاع محیط زیرساختی

نحوه نوشتن کد ناهمگام (غیر همزمان) در Node.js  –  نحوه پیکربندی یک خوشه Galera با MySQL در سرورهای اوبونتو 18

راه اندازی اولیه سرور با CentOS 8  –  تهیه نسخه پشتیبان و بازیابی یک خوشه Kubernetes

نحوه تنظیم کلیدهای SSH در CentOS 8  –  نحوه نصب و استفاده از PostgreSQL در CentOS 7

نحوه ساختن یک برنامه Node.js با Docker  Quickstart –  چگونه می توان پلتفرم Eclipse Theia Cloud IDE را روی اوبونتو

چگونه می توان هاست های مجازی Apache را در اوبونتو  –   مدیریت DNS با استفاده از DNSControl در Debian 10

نحوه تایید صحت رمز عبور با Apache در اوبونتو 18.04  –  چگونه می توان پلتفرم Cloud IDE کد سرور را روی CentOS 7

نحوه نصب و استفاده از TimescaleDB در CentOS 7 –  نحوه نصب Apache Kafka در Debian 10

نحوه تایید صحت رمز عبور با Apache در اوبونتو 18.04 –  نحوه نصب وردپرس با OpenLiteSpeed ​​در اوبونتو 18.04

استفاده از Cron برای خودکارسازی کارها در اوبونتو 18 –

نصب و استفاده ازRadamsa برای فوز کردن برنامه ها روی Ubuntu 18  –

نحوه راه اندازی Eclipse Theia Cloud IDE Platform در Debian 10  –

 

 

کلمات کلیدی خرید سرور

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

 

برچسب‌ها:

  • behnam gol mohamadi
  • ۰
  • ۰

SSH یا همان پوسته ایمن پروتکل رمزگذاری شده است که برای اداره و برقراری ارتباط با سرور مجازی ها استفاده می شود. هنگام کار با سرور مجازی CentOS ، احتمالاً بیشتر وقت خود را در یک بخش ترمینال متصل به سرور مجازی خود از طریق SSH سپری خواهید کرد.
در این راهنما ، ما روی تنظیم کلیدهای SSH برای سرور مجازی CentOS 8 تمرکز خواهیم کرد. کلیدهای SSH روشی ساده و مطمئن برای ورود به سرور مجازی شما را ارائه می دهند و برای همه کاربران توصیه می شوند.
مرحله 1 – ایجاد جفت کلید RSA
اولین قدم ایجاد یک جفت کلیدی در دستگاه مشتری (معمولاً رایانه محلی شما) است:
$ ssh-keygen
به طور پیش فرض ، ssh-keygen یک جفت کلید RSA 2048 بیتی ایجاد می کند ، که برای اکثر موارد استفاده به اندازه کافی ایمن است (ممکن است شما به صورت اختیاری فلگ -b 4096 را ارائه دهید تا یک کلید بزرگتر 4096 بیتی ایجاد کنید).
پس از وارد کردن فرمان ، باید اعلان زیر را مشاهده کنید:
Output
Generating public/private rsa key pair.
Enter file in which to save the key (/your_home/.ssh/id_rsa):

ENTER را فشار دهید تا جفت کلید را در زیردیرکتوری.ssh / در دیرکتوری هوم خود ذخیره کنید ، یا یک مسیر جایگزین را مشخص کنید.
اگر قبلاً یک جفت کلید SSH ایجاد کرده بودید ، ممکن است پیغام زیر را مشاهده کنید:
Output
/home/your_home/.ssh/id_rsa already exists.
Overwrite (y/n)?

اگر تصمیم به بازنویسی کلید در دیسک دارید ، دیگر نمی توانید با استفاده از کلید قبلی ، تأیید اعتبار کنید. در انتخاب بله بسیار مراقب باشید ، زیرا این یک روند مخرب است که قابل برگشت نیست.
سپس باید اعلان زیر را مشاهده کنید:
Output
Enter passphrase (empty for no passphrase):

در اینجا ممکن است به صورت اختیاری یک عبارت عبور مطمئن را وارد کنید ، که بسیار توصیه می شود. یک عبارت عبور برای جلوگیری از ورود کاربران غیرمجاز ، یک لایه امنیتی دیگر به کلید شما اضافه می کند.
سپس باید خروجی زیر را مشاهده کنید:
Output
Your identification has been saved in /your_home/.ssh/id_rsa.
Your public key has been saved in /your_home/.ssh/id_rsa.pub.
The key fingerprint is:
a9:49:2e:2a:5e:33:3e:a9:de:4e:77:11:58:b6:90:26 username@remote_host
The key’s randomart image is:
+–[ RSA 2048]—-+
| ..o |
| E o= . |
| o. o |
| .. |
| ..S |
| o o. |
| =o.+. |
|. =++.. |
|o=++. |
+—————–+

اکنون یک کلید عمومی و خصوصی دارید که می توانید از آن برای تأیید اعتبار استفاده کنید. مرحله بعدی این است که کلید عمومی را روی سرور مجازی خود وارد کنید تا بتوانید از ورود مبتنی بر کلید SSH به سیستم استفاده کنید.
مرحله 2 – کپی کردن کلید عمومی روی سرور مجازی CentOS
سریعترین راه برای کپی کردن کلید عمومی خود در هاست CentOS ، استفاده از ابزاری به نام ssh-copy-id است. در صورت وجود، این روش بسیار توصیه می شود. اگر ssh-copy-id را در دستگاه مشتری خود ندارید ، میتوانید یکی از دو روش جایگزین زیر را دنبال کنید (کپی کردن از طریق SSH مبتنی بر گذرواژه یا کپی کردن کلید به صورت دستی).
کپی کردن کلید عمومی خود با استفاده از ssh-copy-id
ابزار ssh-copy-id بصورت پیش فرض در بسیاری از سیستم عامل ها گنجانده شده است ، بنابراین ممکن است شما آن را در سیستم محلی خود در دسترس داشته باشید. برای کار با این روش ، شما باید از قبل دسترسی SSH مبتنی بر رمز عبور به سرور مجازی خود را داشته باشید.
برای استفاده از این امکان ، فقط باید هاست از راه دور که می خواهید به آن متصل شوید و حساب کاربری که رمز ورود دسترسی SSH به آن را دارید مشخص کنید. این اکانتی است که کلید SSH عمومی شما در آن کپی می شود:
$ ssh-copy-id username@remote_host
ممکن است پیام زیر را مشاهده کنید:
Output
The authenticity of host ‘203.0.113.1 (203.0.113.1)’ can’t be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes

این بدان معنی است که رایانه محلی شما هاست از راه دور را تشخیص نمی دهد. احتمالا اولین باری است که به هاست جدید وصل می شوید. بله را تایپ کنید و ENTER را برای ادامه فشار دهید.
در مرحله بعد ، این ابزار اکانت محلی شما را برای کلید id_rsa.pub که قبلاً ایجاد کردیم ، اسکن می کند. وقتی کلید را پیدا کرد ، از شما خواسته میشود رمز ورود به حساب کاربری از راه دور را وارد کنید:
Output
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed — if you are prompted now it is to install the new keys
username@203.0.113.1’s password:

گذرواژه را وارد کنید (تایپ کردن شما برای اهداف امنیتی نمایش داده نمی شود) و ENTER را فشار دهید. این ابزار با استفاده از گذرواژه ای که شما ارائه داده اید ، به هاست از راه دور متصل می شود. سپس محتویات کلید ~ / .ssh / id_rsa.pub خود را در فایل ~/.ssh/authorized_keys اکانت از راه دور کپی می کند.
باید خروجی زیر را مشاهده کنید:
Output
Number of key(s) added: 1

Now try logging into the machine, with: “ssh ‘username@203.0.113.1′”
and check to make sure that only the key(s) you wanted were added.

در این مرحله ، کلید id_rsa.pub شما در حساب راه دور بارگذاری شده است. می توانید به مرحله 3 بروید.
کپی کردن کلید عمومی با استفاده از SSH
اگر ssh-copy-id را در دسترس ندارید ، اما دسترسی SSH مبتنی بر رمز عبور به یک حساب کاربری روی سرور مجازی خود را دارید ، می توانید کلیدهای خود را با استفاده از یک روش معمولی SSH بارگذاری کنید.
ما می توانیم این کار را با استفاده از دستور cat انجام دهیم تا محتوای کلید عمومی SSH را در رایانه محلی خود بخوانیم و از طریق اتصال SSH به سرور مجازی از راه دور pipe بزنیم.
از طرف دیگر ، می توانیم اطمینان حاصل کنیم که دیرکتوری ~ / .ssh وجود دارد و دارای مجوزهای صحیح تحت حسابی است که ما از آن استفاده می کنیم.
سپس می توانیم محتویاتی را که به آن پیوند زده ایم را درون یک فایل به نام authorized_keys در این دیرکتوری به خروجی بفرستیم. ما از نماد تغییر مسیر >> برای افزودن محتوا به جای رونوشت استفاده خواهیم کرد. این به ما امکان می دهد بدون از بین بردن کلیدهای قبلی اضافه شده ، کلیدهایی را اضافه کنیم.
فرمان کامل به این شکل است:
$ cat ~/.ssh/id_rsa.pub | ssh username@remote_host “mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys”
ممکن است پیام زیر را مشاهده کنید:
Output
The authenticity of host ‘203.0.113.1 (203.0.113.1)’ can’t be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes

این بدان معنی است که رایانه محلی شما هاست از راه دور را تشخیص نمی دهد. احتمالا اولین باری است که به هاست جدید وصل می شوید. بله را تایپ کنید و ENTER را برای ادامه فشار دهید.
پس از آن ، از شما خواسته می شود رمزعبور حساب کاربری از راه دور را وارد کنید:
Output
username@203.0.113.1’s password:

پس از وارد کردن گذرواژه ، محتوای کلید id_rsa.pub شما در انتهای فایل authorized_keys حساب کاربری از راه دور کپی می شود. اگر موفقیت آمیز بود ، به مرحله 3 بروید.
کپی کردن کلید عمومی به صورت دستی
اگر دسترسی SSH مبتنی بر رمز عبور به سرور مجازی خود ندارید ، باید مراحل فوق را به صورت دستی انجام دهید.
ما به طور دستی محتوای فایل id_rsa.pub خود را به فایل ~/.ssh/authorized_keysدر دستگاه از راه دور شما اضافه خواهیم کرد.
برای نمایش محتوای کلید id_rsa.pub خود ، این دستور را در رایانه محلی خود تایپ کنید:
$ cat ~/.ssh/id_rsa.pub
محتوای کلید را مشاهده خواهید کرد ، که باید چیزی شبیه به این باشد:
Output
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle7Q+bqgZ8SeeM8wzytsY+dVGcBxF6N4JS+zVk5eMcV385gG3Y6ON3EG112n6d+SMXY0OEBIcO6x+PnUSGHrSgpBgX7Ks1r7xqFa7heJLLt2wWwkARptX7udSq05paBhcpB0pHtA1Rfz3K2B+ZVIpSDfki9UVKzT8JUmwW6NNzSgxUfQHGwnW7kj4jp4AT0VZk3ADw497M2G/12N0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE+ZHDSCuURNsAInVzgYo9xgJDW8wUw2o8U77+xiFxgI5QSZX3Iq7YLMgeksaO4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL/zkOhvJCACK6Vb15mDOeCSq54Cr7kvS46itMosi/uS66+PujOO+xt/2FWYepz6ZlN70bRly57Q06J+ZJoc9FfBCbCyYH7U/ASsmY095ywPsBo1XQ9PqhnN1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWhcrRf4G2fJLRcGUr9q8/lERo9oxRm5JFX6TCmj6kmiFqv+Ow9gI0x8GvaQ== sammy@host

با استفاده از روش دیگری که در دسترس دارید ، به هاست از راه دور خود وارد شوید.
پس از دسترسی به حساب کاربری خود در سرور مجازی راه دور ، باید اطمینان حاصل کنید که دیرکتوری ~ / .ssh وجود دارد. این دستور در صورت لزوم دایرکتوری ایجاد می کند یا در صورت وجود هیچ کاری انجام نمی دهد:
$ mkdir -p ~/.ssh
اکنون ، می توانید فایل authorized_keys را وارد کنید و یا اصلاح کنید. می توانید مطالب مربوط به فایل id_rsa.pub خود را به انتهای فایل authorized_keys اضافه کنید و در صورت لزوم با استفاده از این دستور آن را ایجاد کنید:
$ echo public_key_string >> ~/.ssh/authorized_keys
در دستور فوق ، public_key_string را با خروجی دستور cat ~/.ssh/id_rsa.pub که بر روی سیستم محلی خود اجرا کرده اید ، جایگزین کنید. باید با ssh-rsa AAAA… شروع شود .
سرانجام ، ما اطمینان خواهیم یافت که دیرکتوری ~ / .shsh و فایل authorized_keys مجموعه مجوزهای مناسب را دارند:
$ chmod -R go= ~/.ssh
به طور بازگشتی همه مجوزهای “group” و “other” را برای دیرکتوری ~ / .ssh / حذف می کند.
اگر برای تنظیم کلیدها برای یک حساب کاربری از root استفاده می کنید ، مهم است که دیرکتوری ~ / .ssh متعلق به کاربر باشد و نه برای root :
$ chown -R sammy:sammy ~/.ssh
در این آموزش کاربر Sammy نامگذاری شده است اما باید نام کاربری مناسب را در دستور فوق جایگزین کنید.
اکنون می توانیم با سرور مجازی CentOS خود احراز هویت مبتنی بر کلید را امتحان کنیم.
مرحله 3 – ورود به سرور مجازی CentOS با استفاده از کلیدهای SSH
اگر یکی از مراحل فوق را با موفقیت انجام داده اید ، اکنون می توانید بدون رمز ورود حساب راه دور وارد سیستم هاست راه دور شوید.
مرحله اولیه همانند احراز هویت مبتنی بر رمز عبور است:
$ ssh username@remote_host
اگر اولین بار است که به این هاست متصل می شوید (در صورتی که آخرین روش را در بالا استفاده کردید) ، ممکن است چیزی شبیه به این را مشاهده کنید:
Output
The authenticity of host ‘203.0.113.1 (203.0.113.1)’ can’t be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes

این بدان معنی است که رایانه محلی شما هاست از راه دور را تشخیص نمی دهد. بله را تایپ کنید و سپس ENTER را برای ادامه فشار دهید.
اگر هنگام ایجاد جفت کلید خود در مرحله 1 ، عبارت عبور ارائه نکردید ، بلافاصله وارد سیستم می شوید. اگر یک عبارت عبور را ارائه کرده باشید، اکنون از شما خواسته می شود آن را وارد کنید. پس از تأیید اعتبار ، باید یک بخش پوسته جدید با حساب پیکربندی شده روی سرور مجازی CentOS باز شود.
اگر تأیید هویت مبتنی بر کلید موفقیت آمیز بود ، ادامه مطلب را بخوانید تا بیاموزید چگونه با غیرفعال کردن تأیید هویت مبتنی بر رمزعبور سرور مجازی SSH ، امنیت بیشتری در سیستم خود داشته باشید.
مرحله 4 – غیرفعال کردن احراز هویت (Authentication) رمز عبور در سرور مجازی شما
اگر توانستید با استفاده از SSH و بدون رمز ورود به حساب خود وارد شوید ، تأیید هویت مبتنی بر کلید SSH را با موفقیت پیکربندی کرده اید. با این حال ، مکانیسم تأیید اعتبار مبتنی بر رمز عبور شما هنوز فعال است ، به این معنی که سرور مجازی شما هنوز در معرض حملات جدی است.
قبل از انجام مراحل در این بخش ، مطمئن شوید که احراز هویت مبتنی بر کلید SSH را برای حساب اصلی در این سرور مجازی پیکربندی کرده اید ، یا ترجیحاً احراز هویت مبتنی بر کلید SSH را برای یک حساب غیر root در این سرور مجازی با امتیازات sudo پیکربندی کرده اید. در این مرحله، ورودهای مبتنی بر رمز عبور به سیستم قفل خواهد شد ، بنابراین بسیار مهم است اطمینان حاصل کنید که هنوز هم می توانید دسترسی ادمین داشته باشید.
هنگامی که تأیید کردید که حساب از راه دور شما دارای امتیازات ادمین است ، با کلیدهای SSH ، به صورت ریشه یا با یک حساب دارای امتیازات سودو وارد سرور مجازی راه دور خود شوید. سپس فایل پیکربندی Daemon SSH را باز کنید:
$ sudo vi /etc/ssh/sshd_config
در داخل فایل ، یک راهنمایی با نام PasswordAuthentication را جستجو کنید. ممکن است با # توضیح داده شود. i را فشار دهید تا vi را در حالت درج قرار دهید ، و سپس خط را uncomment کنید و مقدار را روی no تنظیم نمایید. با این کار توانایی ورود به سیستم از طریق SSH با استفاده از گذرواژه های اکانت غیرفعال می شود:
/etc/ssh/sshd_config

PasswordAuthentication no

پس از اتمام ایجاد تغییرات ، ESC و سپس: wq را برای نوشتن تغییرات در فایل فشار دهید و خارج شوید. برای اجرای واقعی این تغییرات ، باید سرویس sshd را مجدداً راه اندازی کنیم:
$ sudo systemctl restart sshd
برای احتیاط ، قبل از بستن بخش فعلی خود ، یک پنجره ترمینال جدید باز کنید و آزمایش کنید که سرویس SSH به درستی کار می کند:
$ ssh username@remote_host
هنگامی که تأیید کردید که سرویس SSH همچنان به درستی کار می کند ، می توانید با اطمینان تمام بخش های فعلی سرور مجازی را ببندید.
اکنون Daemon SSH در سرور مجازی CentOS شما فقط به کلیدهای SSH پاسخ می دهد. تأیید هویت مبتنی بر گذرواژه با موفقیت غیرفعال شد.
نتیجه
اکنون باید بتوانید تأیید هویت مبتنی بر کلید SSH را روی سرور مجازی خود پیکربندی کنید ، که به شما امکان می دهد بدون ارائه رمز ورود به حساب کاربری خود وارد شوید.
اگر می خواهید در مورد کار با SSH اطلاعات بیشتری کسب کنید ، به راهنمای ضروریات SSH ما نگاهی بیندازید.

 

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

نحوه نصب Nginx در CentOS 8  –  استفاده از Cron برای خودکارسازی کارها در اوبونتو 18

پکیج کردن و انتشار برنامه Snap در اوبونتو 18 – نصب و استفاده ازRadamsa برای فوز کردن برنامه ها روی Ubuntu 18

استقرارهای تولید Node.js خود را با Shipit در CentOS 7 –  نحوه راه اندازی Eclipse Theia Cloud IDE Platform در Debian 10

چگونگی استفاده از migrations و seeders دیتابیس  –  نحوه نصب Docker Compose در Debian 10

نحوه نصب R روی اوبونتو 18.04 – چگونه می توان با کتابخانه (library) درخواست ها در پایتون شروع به کار کرد

چگونه می توان هاست های مجازی Apache را در اوبونتو 18.04  –  نحوه اجرای صفحه گذاری در MySQL با PHP روی اوبونتو 18.04

نصب پشته Nginx، MySQL، PHP LEMP در CentOS 8 – نحوه تنظیم پلتفرم Eclipse Theia Cloud IDE در CentOS 7

نحوه نصب پشته یا استک Nginx ، MySQL ، PHP LEMP  –  بسته بندی برنامه Laravel 6 برای توسعه با Docker Compose

مراحل ایمن سازی Apache HTTP در FreeBSD 12  – بهینه سازی درخواست های MySQL با ذخیره سازی ProxySQL در اوبونتو 16

درک Objectهای Map و Set در JavaScript  –  استفاده از Ansible برای نصب و راه اندازی وردپرس با LAMP در اوبونتو 18

نحوه راه اندازی Eclipse Theia Cloud IDE در اوبونتو  –  چگونه می توان پلتفرم کد سرور Cloud IDE را در اوبونتو 18.04

نحوه استفاده از Cron برای خودکارسازی کارها در CentOS 8   –  چگونه می توان از رول های ansible برای انتزاع محیط زیرساختی

نحوه نوشتن کد ناهمگام (غیر همزمان) در Node.js –  نحوه پیکربندی یک خوشه Galera با MySQL در سرورهای اوبونتو 18

راه اندازی اولیه سرور با CentOS 8 –   تهیه نسخه پشتیبان و بازیابی یک خوشه Kubernetes

نحوه تنظیم کلیدهای SSH در CentOS 8 –  نحوه نصب و استفاده از PostgreSQL در CentOS 7

نحوه ساختن یک برنامه Node.js با Docker  Quickstart  –  چگونه می توان پلتفرم Eclipse Theia Cloud IDE را روی اوبونتو

چگونه می توان هاست های مجازی Apache را در اوبونتو  –  مدیریت DNS با استفاده از DNSControl در Debian 10

نحوه تایید صحت رمز عبور با Apache در اوبونتو 18.04 –  چگونه می توان پلتفرم Cloud IDE کد سرور را روی CentOS 7

نحوه نصب و استفاده از TimescaleDB در CentOS 7 – نحوه نصب Apache Kafka در Debian 10

نحوه تایید صحت رمز عبور با Apache در اوبونتو 18.04  –  نحوه نصب وردپرس با OpenLiteSpeed ​​در اوبونتو 18.04

 

 

کلمات کلیدی خرید سرور

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

 

برچسب‌ها:

  • behnam gol mohamadi
  • ۰
  • ۰

وقتی برای اولین بار یک سرور مجازی جدید CentOS 8 ایجاد می کنید ، چند مرحله پیکربندی وجود دارد که باید بعداً به عنوان بخشی از راه اندازی اولیه انجام دهید. این کار باعث افزایش امنیت و قابلیت استفاده سرور مجازی شما می شود و پایه و اساس محکمی را برای اقدامات بعدی به شما می دهد.
مرحله 1 – ورود به عنوان Root
برای ورود به سرور مجازی خود ، باید آدرس IP عمومی سرور مجازی خود را بدانید. به رمز عبور نیز احتیاج دارید یا اگر کلید SSH را برای تأیید اعتبار نصب کرده اید ، کلید خصوصی برای حساب کاربر root است. اگر قبلاً به سرور مجازی خود وارد نشده اید ، میتوانید مطالب مربوط به نحوه اتصال به دراپلت خود با SSH را دنبال کنید ، که این روند را با جزئیات پوشش می دهد.
اگر از قبل به سرور مجازی خود وصل نشده اید ، اکنون با استفاده از دستور زیر به عنوان کاربر root وارد سیستم شوید (بخش هایلایت شده فرمان را با آدرس IP عمومی سرور مجازی خود جایگزین کنید):
$ ssh root@ your_server_ip
در صورت وجود هشدار درباره تایید هاست، آن را اکسپت کنید. اگر از تأیید اعتبار استفاده می کنید ، رمز ورود خود را وارد کنید. اگر از یک کلید SSH استفاده می کنید که از عبارت عبور محافظت می شود ، ممکن است از شما خواسته شود اولین بار که از هر کلید استفاده می کنید ، کلمه عبور را وارد کنید. اگر این اولین بار است که با گذرواژه وارد سرور مجازی می شوید ، ممکن است از شما خواسته شود رمزعبور root را تغییر دهید.
درباره ریشه
کاربر root کاربر ادمین در محیط لینوکس است و امتیازات بسیار گسترده ای دارد. به دلیل افزایش امتیازات حساب اصلی ، بهتر است از استفاده منظم از آن خودداری کنید. این به آن دلیل است که بخشی از قدرت ذاتی حساب root ، توانایی ایجاد تغییرات بسیار مخرب ، حتی به طور تصادفی است.
به این ترتیب ، مرحله بعدی راه اندازی یک حساب کاربری جایگزین با محدوده کاهش نفوذ برای کار روزانه است. این حساب همچنان در صورت لزوم می تواند امتیازات بیشتری را کسب کند.
مرحله 2 – ایجاد یک کاربر جدید
پس از ورود به عنوان root ، می توانید از این پس حساب کاربری جدیدی را که ما برای ورود به سیستم استفاده خواهیم کرد ایجاد کنید.
این مثال یک کاربر جدید به نام sammy ایجاد می کند ، اما شما باید آن را با هر نام کاربری که ترجیح می دهید جایگزین کنید:
# adduser sammy
در مرحله بعد ، یک رمزعبور قوی برای کاربر sammy تنظیم کنید:
# passwd sammy
از شما خواسته می شود که رمز عبور را دو بار وارد کنید. پس از انجام این کار ، کاربر شما آماده استفاده خواهد بود ، اما ابتدا به این کاربر امتیازات اضافی می دهیم تا از دستور sudo استفاده کند. این به ما امکان می دهد در صورت لزوم دستورات را به عنوان root اجرا کنیم.
مرحله 3 – اعطای امتیازات ادمین
اکنون ، یک حساب کاربری جدید با امتیازات منظم حساب داریم. با این حال ، ممکن است گاهی اوقات به انجام کارهای ادمین نیاز داشته باشیم.
برای جلوگیری از عدم ورود کاربر عادی و ورود به سیستم به عنوان حساب اصلی ، می توانیم برای حساب عادی خود چیزی را که به عنوان “superuser” یا امتیازات اصلی شناخته می شود تنظیم کنیم. این به کاربر عادی ما امکان می دهد با قرار دادن کلمه sudo قبل از هر دستور ، دستوراتی را با امتیازات ادمین اجرا کند.
برای افزودن این امتیازات به کاربر جدید خود ، باید کاربر جدید را به گروه wheel اضافه کنیم. به طور پیش فرض ، در CentOS 8 ، کاربرانی که به گروه wheel تعلق دارند ، مجاز به استفاده از دستور sudo هستند.
به عنوان root ، این دستور را اجرا کنید تا کاربر جدید خود را به گروه wheel اضافه کنید (کلمه هایلایت شده را با نام کاربری جدید خود جایگزین کنید):
# usermod -aG wheel sammy
اکنون ، هنگامی که به عنوان کاربر معمولی خود وارد سیستم شدید، می توانید قبل از دستورات sudo را تایپ کنید تا اقدامات خود را با امتیازات فوق کاربری انجام دهید.
مرحله 4 – تنظیم فایروال ساده
فایروال ها سطح ساده امنیتی را برای سرور مجازی شما فراهم می کنند. این برنامه ها وظیفه رد ترافیک در هر پورت روی سرور مجازی شما را دارند ، به استثنای آن درگاه ها / خدماتی که صریحاً تأیید کرده اید. CentOS برای انجام این عملکرد خدماتی به نام firewalld دارد. ابزاری به نام firewall-cmd برای پیکربندی رویکردهای فایروال firewalld  استفاده می شود.
توجه: اگر سرور مجازی های شما روی vpsgol در حال اجرا هستند ، می توانید به طور اختیاری به جای فایروال UFW از vpsgol Cloud Firewalls  استفاده کنید. ما توصیه می کنیم فقط از یک فایروال در یک زمان استفاده کنید تا از قوانین متناقض برای رفع اشکال جلوگیری کنید.
ابتدا firewalld را نصب کنید:
# dnf install firewalld -y
پیکربندی پیش فرض firewalld امکان اتصال به ssh را فراهم می کند ، بنابراین می توانیم فایروال را فوراً روشن کنیم:
# systemctl start firewalld
وضعیت سرویس را بررسی کنید تا مطمئن شوید که شروع شده است:
# systemctl status firewalld
Output
firewalld.service – firewalld – dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2020-02-06 16:39:40 UTC; 3s ago
Docs: man:firewalld(1)
Main PID: 13180 (firewalld)
Tasks: 2 (limit: 5059)
Memory: 22.4M
CGroup: /system.slice/firewalld.service
└─13180 /usr/libexec/platform-python -s /usr/sbin/firewalld –nofork –nopid

توجه داشته باشید که هم active  است و هم enabled باشد ، به این معنی که در صورت راه اندازی مجدد سرور مجازی به طور پیش فرض شروع شود.
اکنون که سرویس به روز شده است ، می توانیم از ابزار Firewall-cmd برای دریافت و تنظیم اطلاعات رویکردی برای فایروال استفاده کنیم.
ابتدا لیست کنید که کدام سرویس در حال حاضر مجاز است:
# firewall-cmd –permanent –list-all
Output
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0 eth1
sources:
services: cockpit dhcpv6-client ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:

برای دیدن خدمات بیشتری که می توانید با نام خود فعال کنید ، این دستور را تایپ کنید:
# firewall-cmd –get-services
برای افزودن سرویس موردنیاز ، از فلگ –add service استفاده کنید:
# firewall-cmd –permanent –add-service=http
این سرویس http را اضافه می کند و باعث می شود که ترافیک TCP ورودی به پورت 80 وارد شود. پیکربندی بعد از بارگذاری مجدد فایروال به روز می شود:
# firewall-cmd –reload
بخاطر داشته باشید که مجبور خواهید بود برای هرگونه خدمات اضافی که بعداً پیکربندی خواهید کرد ، فایروال (با خدمات یا پورت ها ) را صریحا باز کنید.
مرحله 5 – فعال کردن دسترسی خارجی برای کاربر معمولی شما
اکنون که ما یک کاربر معمولی غیر ریشه برای استفاده روزانه داریم ، باید اطمینان حاصل کنیم که می توانیم از آن برای SSH به سرور مجازی خود استفاده کنیم.
توجه: تا زمانی که تأیید نکنید که می توانید با کاربر جدید خود وارد سیستم شوید و از sudo استفاده کنید ، توصیه می کنیم که به عنوان root وارد شوید. به این ترتیب ، اگر مشکلی دارید می توانید به عنوان root عیب یابی کرده و هرگونه تغییر لازم را انجام دهید. اگر از Droplet vpsgol استفاده می کنید و با اتصال SSH root خود مشکل دارید ، می توانید با استفاده از کنسول vpsgol وارد Droplet شوید.
روند پیکربندی دسترسی SSH برای کاربر جدید شما به این بستگی دارد که آیا حساب اصلی سرور مجازی شما از رمز عبور یا از کلیدهای SSH برای تأیید اعتبار استفاده می کند.
اگر حساب Root از تایید صحت (authentication) رمز عبور استفاده می کند
اگر با استفاده از گذرواژه وارد حساب اصلی خود شده اید ، تأیید رمز عبور برای SSH فعال می شود. با باز کردن بخش ترمینال جدید و استفاده از SSH با نام کاربری جدید خود می توانید به حساب کاربری جدید خود SSH کنید:
$ ssh sammy@your_server_ip
بعد از وارد کردن رمزعبور معمولی کاربر ، وارد سیستم می شوید. به یاد داشته باشید اگر نیاز به اجرای یک فرمان با امتیازات ادمین دارید ، قبل از این کار sudo را تایپ کنید:
$ sudo command_to_run
برای اولین بار در هر بخش (و به صورت دوره ای بعد از آن) رمزعبور کاربر معمولی از شما خواسته می شوید.
برای تقویت امنیت سرور مجازی خود ، ما به شدت توصیه می کنیم به جای استفاده از تایید صحت رمز عبور ، کلیدهای SSH را تنظیم کنید. برای یادگیری نحوه پیکربندی تایید صحت مبتنی بر کلید ، راهنمای ما را در مورد تنظیم کلیدهای SSH در CentOS 8 را دنبال کنید.
اگر حساب Root از authentication کلید SSH استفاده می کند
اگر با استفاده از کلیدهای SSH به حساب اصلی خود وارد شده اید ، تأیید رمز عبور برای SSH غیرفعال است. برای ورود موفقیت آمیز به سیستم ، باید یک کپی از کلید عمومی خود را به فایل ~/.ssh/authorized_keys کاربر جدید اضافه کنید.
از آنجا که کلید عمومی شما در حال حاضر در فایل ~/.ssh/authorized_keys حساب اصلی در سرور مجازی است ، می توانیم آن فایل و ساختار دیرکتوری را در حساب کاربری جدید خود کپی کنیم.
ساده ترین روش برای کپی کردن فایل ها با مالکیت صحیح و مجوزها ، با دستور rsync است. با این کار فهرست دایرکتوری کاربر root استفاده می شود ، مجوزها را نگه میدارد و صاحبان فایل را تغییر میدهد و همه این کارها را در یک دستور واحد انجام میدهد. اطمینان حاصل کنید که قسمت هایلایت شده فرمان زیر را تغییر دهید تا با نام کاربر معمولی شما مطابقت داشته باشد:
توجه: فرمان rsync با منابع و مقصدهایی که به یک اسلش ختم شده متفاوت از مواردی که بدون اسلش هستند ، رفتار می کند. هنگام استفاده از rsync در زیر ، مطمئن شوید که دیرکتوری منبع (~ / .ssh) شامل یک اسلش دنباله ای نباشد (بررسی کنید تا مطمئن شوید که از ~/.ssh/ استفاده نمی کنید).
اگر به طور اتفاقی یک اسلش دنباله دار را به این فرمان اضافه کنید ، rsync محتویات دیرکتوری ~ / .ssh حساب root را به جای کپی کردن کل ساختار دیرکتوری. / .ssh در دیرکتوری هوم کاربر سودو کپی می کند. فایل ها در مکان اشتباه قرار خواهند گرفت و SSH قادر به یافتن و استفاده از آنها نخواهد بود.
# rsync –archive –chown=sammy:sammy ~/.ssh /home/sammy
اکنون ، دوباره به ترمینال جدید در دستگاه محلی خود بروید، بخش SSH جدید را با کاربر غیر ریشه خود باز کنید:
$ ssh sammy@your_server_ip
بدون استفاده از رمز ورود باید به حساب کاربری جدید وارد شوید. به یاد داشته باشید ، اگر نیاز به اجرای یک فرمان با امتیازات ادمین داشتید ، sudo را قبل از آن تایپ کنید:
$ sudo command_to_run
برای اولین بار در هر بخش (و به صورت دوره ای بعد از آن) رمزعبور کاربر معمولی از شما خواسته می شوید.
نتیجه
در این مرحله ، شما یک پایه محکم برای سرور مجازی خود دارید. اکنون می توانید هرکدام از نرم افزارهای مورد نیاز خود را بر روی سرور مجازی خود نصب کنید.

 

 

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

نحوه نصب Nginx در CentOS 8  –  استفاده از Cron برای خودکارسازی کارها در اوبونتو 18

پکیج کردن و انتشار برنامه Snap در اوبونتو 18 – نصب و استفاده ازRadamsa برای فوز کردن برنامه ها روی Ubuntu 18

استقرارهای تولید Node.js خود را با Shipit در CentOS 7 –  نحوه راه اندازی Eclipse Theia Cloud IDE Platform در Debian 10

چگونگی استفاده از migrations و seeders دیتابیس  –  نحوه نصب Docker Compose در Debian 10

نحوه نصب R روی اوبونتو 18.04 – چگونه می توان با کتابخانه (library) درخواست ها در پایتون شروع به کار کرد

چگونه می توان هاست های مجازی Apache را در اوبونتو 18.04  –  نحوه اجرای صفحه گذاری در MySQL با PHP روی اوبونتو 18.04

نصب پشته Nginx، MySQL، PHP LEMP در CentOS 8 – نحوه تنظیم پلتفرم Eclipse Theia Cloud IDE در CentOS 7

نحوه نصب پشته یا استک Nginx ، MySQL ، PHP LEMP  –  بسته بندی برنامه Laravel 6 برای توسعه با Docker Compose

مراحل ایمن سازی Apache HTTP در FreeBSD 12  – بهینه سازی درخواست های MySQL با ذخیره سازی ProxySQL در اوبونتو 16

درک Objectهای Map و Set در JavaScript  –  استفاده از Ansible برای نصب و راه اندازی وردپرس با LAMP در اوبونتو 18

نحوه راه اندازی Eclipse Theia Cloud IDE در اوبونتو  –  چگونه می توان پلتفرم کد سرور Cloud IDE را در اوبونتو 18.04

نحوه استفاده از Cron برای خودکارسازی کارها در CentOS 8   –  چگونه می توان از رول های ansible برای انتزاع محیط زیرساختی

نحوه نوشتن کد ناهمگام (غیر همزمان) در Node.js –  نحوه پیکربندی یک خوشه Galera با MySQL در سرورهای اوبونتو 18

راه اندازی اولیه سرور با CentOS 8 –   تهیه نسخه پشتیبان و بازیابی یک خوشه Kubernetes

نحوه تنظیم کلیدهای SSH در CentOS 8 –  نحوه نصب و استفاده از PostgreSQL در CentOS 7

نحوه ساختن یک برنامه Node.js با Docker  Quickstart  –  چگونه می توان پلتفرم Eclipse Theia Cloud IDE را روی اوبونتو

چگونه می توان هاست های مجازی Apache را در اوبونتو  –  مدیریت DNS با استفاده از DNSControl در Debian 10

نحوه تایید صحت رمز عبور با Apache در اوبونتو 18.04 –  چگونه می توان پلتفرم Cloud IDE کد سرور را روی CentOS 7

نحوه نصب و استفاده از TimescaleDB در CentOS 7 – نحوه نصب Apache Kafka در Debian 10

نحوه تایید صحت رمز عبور با Apache در اوبونتو 18.04  –  نحوه نصب وردپرس با OpenLiteSpeed ​​در اوبونتو 18.04

 

 

کلمات کلیدی خرید سرور

خرید 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 ها استفاده کند تا تکنیک هایی را که در اینجا آموخته اید تمرین کنید.

 

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

نحوه نصب Nginx در CentOS 8  –  استفاده از Cron برای خودکارسازی کارها در اوبونتو 18

پکیج کردن و انتشار برنامه Snap در اوبونتو 18 – نصب و استفاده ازRadamsa برای فوز کردن برنامه ها روی Ubuntu 18

استقرارهای تولید Node.js خود را با Shipit در CentOS 7 –  نحوه راه اندازی Eclipse Theia Cloud IDE Platform در Debian 10

چگونگی استفاده از migrations و seeders دیتابیس  –  نحوه نصب Docker Compose در Debian 10

نحوه نصب R روی اوبونتو 18.04 – چگونه می توان با کتابخانه (library) درخواست ها در پایتون شروع به کار کرد

چگونه می توان هاست های مجازی Apache را در اوبونتو 18.04  –  نحوه اجرای صفحه گذاری در MySQL با PHP روی اوبونتو 18.04

نصب پشته Nginx، MySQL، PHP LEMP در CentOS 8 – نحوه تنظیم پلتفرم Eclipse Theia Cloud IDE در CentOS 7

نحوه نصب پشته یا استک Nginx ، MySQL ، PHP LEMP  –  بسته بندی برنامه Laravel 6 برای توسعه با Docker Compose

مراحل ایمن سازی Apache HTTP در FreeBSD 12  – بهینه سازی درخواست های MySQL با ذخیره سازی ProxySQL در اوبونتو 16

درک Objectهای Map و Set در JavaScript  –  استفاده از Ansible برای نصب و راه اندازی وردپرس با LAMP در اوبونتو 18

نحوه راه اندازی Eclipse Theia Cloud IDE در اوبونتو  –  چگونه می توان پلتفرم کد سرور Cloud IDE را در اوبونتو 18.04

نحوه استفاده از Cron برای خودکارسازی کارها در CentOS 8   –  چگونه می توان از رول های ansible برای انتزاع محیط زیرساختی

نحوه نوشتن کد ناهمگام (غیر همزمان) در Node.js –  نحوه پیکربندی یک خوشه Galera با MySQL در سرورهای اوبونتو 18

راه اندازی اولیه سرور با CentOS 8 –   تهیه نسخه پشتیبان و بازیابی یک خوشه Kubernetes

نحوه تنظیم کلیدهای SSH در CentOS 8 –  نحوه نصب و استفاده از PostgreSQL در CentOS 7

نحوه ساختن یک برنامه Node.js با Docker  Quickstart  –  چگونه می توان پلتفرم Eclipse Theia Cloud IDE را روی اوبونتو

چگونه می توان هاست های مجازی Apache را در اوبونتو  –  مدیریت DNS با استفاده از DNSControl در Debian 10

نحوه تایید صحت رمز عبور با Apache در اوبونتو 18.04 –  چگونه می توان پلتفرم Cloud IDE کد سرور را روی CentOS 7

نحوه نصب و استفاده از TimescaleDB در CentOS 7 – نحوه نصب Apache Kafka در Debian 10

نحوه تایید صحت رمز عبور با Apache در اوبونتو 18.04  –  نحوه نصب وردپرس با OpenLiteSpeed ​​در اوبونتو 18.04

 

 

کلمات کلیدی خرید سرور

خرید 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@vpsgol.net”
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 ترکیب شود ، می توانید کارهایی را که معمولاً خسته کننده یا پیچیده هستند ، به طور خودکار انجام دهید.

 

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

نحوه نصب Nginx در CentOS 8  –  استفاده از Cron برای خودکارسازی کارها در اوبونتو 18

پکیج کردن و انتشار برنامه Snap در اوبونتو 18 – نصب و استفاده ازRadamsa برای فوز کردن برنامه ها روی Ubuntu 18

استقرارهای تولید Node.js خود را با Shipit در CentOS 7 –  نحوه راه اندازی Eclipse Theia Cloud IDE Platform در Debian 10

چگونگی استفاده از migrations و seeders دیتابیس  –  نحوه نصب Docker Compose در Debian 10

نحوه نصب R روی اوبونتو 18.04 – چگونه می توان با کتابخانه (library) درخواست ها در پایتون شروع به کار کرد

چگونه می توان هاست های مجازی Apache را در اوبونتو 18.04  –  نحوه اجرای صفحه گذاری در MySQL با PHP روی اوبونتو 18.04

نصب پشته Nginx، MySQL، PHP LEMP در CentOS 8 – نحوه تنظیم پلتفرم Eclipse Theia Cloud IDE در CentOS 7

نحوه نصب پشته یا استک Nginx ، MySQL ، PHP LEMP  –  بسته بندی برنامه Laravel 6 برای توسعه با Docker Compose

مراحل ایمن سازی Apache HTTP در FreeBSD 12  – بهینه سازی درخواست های MySQL با ذخیره سازی ProxySQL در اوبونتو 16

درک Objectهای Map و Set در JavaScript  –  استفاده از Ansible برای نصب و راه اندازی وردپرس با LAMP در اوبونتو 18

نحوه راه اندازی Eclipse Theia Cloud IDE در اوبونتو  –  چگونه می توان پلتفرم کد سرور Cloud IDE را در اوبونتو 18.04

نحوه استفاده از Cron برای خودکارسازی کارها در CentOS 8   –  چگونه می توان از رول های ansible برای انتزاع محیط زیرساختی

نحوه نوشتن کد ناهمگام (غیر همزمان) در Node.js –  نحوه پیکربندی یک خوشه Galera با MySQL در سرورهای اوبونتو 18

راه اندازی اولیه سرور با CentOS 8 –   تهیه نسخه پشتیبان و بازیابی یک خوشه Kubernetes

نحوه تنظیم کلیدهای SSH در CentOS 8 –  نحوه نصب و استفاده از PostgreSQL در CentOS 7

نحوه ساختن یک برنامه Node.js با Docker  Quickstart  –  چگونه می توان پلتفرم Eclipse Theia Cloud IDE را روی اوبونتو

چگونه می توان هاست های مجازی Apache را در اوبونتو  –  مدیریت DNS با استفاده از DNSControl در Debian 10

نحوه تایید صحت رمز عبور با Apache در اوبونتو 18.04 –  چگونه می توان پلتفرم Cloud IDE کد سرور را روی CentOS 7

نحوه نصب و استفاده از TimescaleDB در CentOS 7 – نحوه نصب Apache Kafka در Debian 10

نحوه تایید صحت رمز عبور با Apache در اوبونتو 18.04  –  نحوه نصب وردپرس با OpenLiteSpeed ​​در اوبونتو 18.04

 

 

کلمات کلیدی خرید سرور

خرید 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 مراجعه نمایید

 

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

نحوه نصب Nginx در CentOS 8  –  استفاده از Cron برای خودکارسازی کارها در اوبونتو 18

پکیج کردن و انتشار برنامه Snap در اوبونتو 18 – نصب و استفاده ازRadamsa برای فوز کردن برنامه ها روی Ubuntu 18

استقرارهای تولید Node.js خود را با Shipit در CentOS 7 –  نحوه راه اندازی Eclipse Theia Cloud IDE Platform در Debian 10

چگونگی استفاده از migrations و seeders دیتابیس  –  نحوه نصب Docker Compose در Debian 10

نحوه نصب R روی اوبونتو 18.04 – چگونه می توان با کتابخانه (library) درخواست ها در پایتون شروع به کار کرد

چگونه می توان هاست های مجازی Apache را در اوبونتو 18.04  –  نحوه اجرای صفحه گذاری در MySQL با PHP روی اوبونتو 18.04

نصب پشته Nginx، MySQL، PHP LEMP در CentOS 8 – نحوه تنظیم پلتفرم Eclipse Theia Cloud IDE در CentOS 7

نحوه نصب پشته یا استک Nginx ، MySQL ، PHP LEMP  –  بسته بندی برنامه Laravel 6 برای توسعه با Docker Compose

مراحل ایمن سازی Apache HTTP در FreeBSD 12  – بهینه سازی درخواست های MySQL با ذخیره سازی ProxySQL در اوبونتو 16

درک Objectهای Map و Set در JavaScript  –  استفاده از Ansible برای نصب و راه اندازی وردپرس با LAMP در اوبونتو 18

نحوه راه اندازی Eclipse Theia Cloud IDE در اوبونتو  –  چگونه می توان پلتفرم کد سرور Cloud IDE را در اوبونتو 18.04

نحوه استفاده از Cron برای خودکارسازی کارها در CentOS 8   –  چگونه می توان از رول های ansible برای انتزاع محیط زیرساختی

نحوه نوشتن کد ناهمگام (غیر همزمان) در Node.js –  نحوه پیکربندی یک خوشه Galera با MySQL در سرورهای اوبونتو 18

راه اندازی اولیه سرور با CentOS 8 –   تهیه نسخه پشتیبان و بازیابی یک خوشه Kubernetes

نحوه تنظیم کلیدهای SSH در CentOS 8 –  نحوه نصب و استفاده از PostgreSQL در CentOS 7

نحوه ساختن یک برنامه Node.js با Docker  Quickstart  –  چگونه می توان پلتفرم Eclipse Theia Cloud IDE را روی اوبونتو

چگونه می توان هاست های مجازی Apache را در اوبونتو  –  مدیریت DNS با استفاده از DNSControl در Debian 10

نحوه تایید صحت رمز عبور با Apache در اوبونتو 18.04 –  چگونه می توان پلتفرم Cloud IDE کد سرور را روی CentOS 7

نحوه نصب و استفاده از TimescaleDB در CentOS 7 – نحوه نصب Apache Kafka در Debian 10

نحوه تایید صحت رمز عبور با Apache در اوبونتو 18.04  –  نحوه نصب وردپرس با OpenLiteSpeed ​​در اوبونتو 18.04

 

 

کلمات کلیدی خرید سرور

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

 

برچسب‌ها:

  • behnam gol mohamadi