server

server

سه شنبه ۰۴ اردیبهشت ۰۳

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

۴ بازديد

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

نحوه نصب و استفاده از TimescaleDB در CentOS 7

نحوه تاييد صحت رمز عبور با Apache در اوبونتو 18.04 (شروع سريع)

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

نحوه نصب و استفاده ازRadamsa براي فوز كردن برنامه ها (تكنيك تست خودكار نرم افزار) و خدمات شبكه روي Ubuntu 18.04

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

چگونه مي توان با كتابخانه (library) درخواست ها در پايتون شروع به كار كرد

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

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

بسته بندي برنامه Laravel 6 براي توسعه با Docker Compose در اوبونتو 18.04

نحوه بهينه سازي درخواست هاي MySQL با ذخيره سازي ProxySQL در اوبونتو 16.04

نحوه استفاده از Ansible براي نصب و راه اندازي وردپرس با LAMP در اوبونتو 18.04

چگونه مي توان پلتفرم كد سرور Cloud IDE را در اوبونتو 18.04 تنظيم كرد (شروع سريع)

چگونه مي توان از رول هاي ansible براي انتزاع محيط زيرساختي خود استفاده كرد

نحوه پيكربندي يك خوشه Galera با MySQL در سرورهاي اوبونتو 18.04

نحوه تهيه نسخه پشتيبان و بازيابي يك خوشه Kubernetes در vpsgol با استفاده از Velero

نحوه نصب و استفاده از PostgreSQL در CentOS 7

چگونه مي توان پلتفرم Eclipse Theia Cloud IDE را روي اوبونتو 18.4 تنظيم كرد

نحوه استقرار و مديريت DNS با استفاده از DNSControl در Debian 10

چگونه مي توان پلتفرم Cloud IDE كد سرور را روي CentOS 7 تنظيم كرد

كلمات كليدي خريد سرور

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

چگونه مي توان با كتابخانه (library) درخواست ها در پايتون شروع به كار كرد

۷ بازديد

مقدمه
در بسياري از برنامه هاي وب ، اتصال به خدمات مختلف شخص ثالث با استفاده از 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

نحوه نصب و استفاده از TimescaleDB در CentOS 7

نحوه تاييد صحت رمز عبور با Apache در اوبونتو 18.04 (شروع سريع)

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

نحوه نصب و استفاده ازRadamsa براي فوز كردن برنامه ها (تكنيك تست خودكار نرم افزار) و خدمات شبكه روي Ubuntu 18.04

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

چگونه مي توان با كتابخانه (library) درخواست ها در پايتون شروع به كار كرد

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

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

بسته بندي برنامه Laravel 6 براي توسعه با Docker Compose در اوبونتو 18.04

نحوه بهينه سازي درخواست هاي MySQL با ذخيره سازي ProxySQL در اوبونتو 16.04

نحوه استفاده از Ansible براي نصب و راه اندازي وردپرس با LAMP در اوبونتو 18.04

چگونه مي توان پلتفرم كد سرور Cloud IDE را در اوبونتو 18.04 تنظيم كرد (شروع سريع)

چگونه مي توان از رول هاي ansible براي انتزاع محيط زيرساختي خود استفاده كرد

نحوه پيكربندي يك خوشه Galera با MySQL در سرورهاي اوبونتو 18.04

نحوه تهيه نسخه پشتيبان و بازيابي يك خوشه Kubernetes در vpsgol با استفاده از Velero

نحوه نصب و استفاده از PostgreSQL در CentOS 7

چگونه مي توان پلتفرم Eclipse Theia Cloud IDE را روي اوبونتو 18.4 تنظيم كرد

نحوه استقرار و مديريت DNS با استفاده از DNSControl در Debian 10

چگونه مي توان پلتفرم Cloud IDE كد سرور را روي CentOS 7 تنظيم كرد

 

كلمات كليدي خريد سرور

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

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

۴ بازديد

مقدمه
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:4b8ff392a12ed9ea17784bd3c9a8b1fa3299cac44aca35a85c90c5e3c7afacdc
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

نحوه نصب و استفاده از TimescaleDB در CentOS 7

نحوه تاييد صحت رمز عبور با Apache در اوبونتو 18.04 (شروع سريع)

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

نحوه نصب و استفاده ازRadamsa براي فوز كردن برنامه ها (تكنيك تست خودكار نرم افزار) و خدمات شبكه روي Ubuntu 18.04

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

چگونه مي توان با كتابخانه (library) درخواست ها در پايتون شروع به كار كرد

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

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

بسته بندي برنامه Laravel 6 براي توسعه با Docker Compose در اوبونتو 18.04

نحوه بهينه سازي درخواست هاي MySQL با ذخيره سازي ProxySQL در اوبونتو 16.04

نحوه استفاده از Ansible براي نصب و راه اندازي وردپرس با LAMP در اوبونتو 18.04

چگونه مي توان پلتفرم كد سرور Cloud IDE را در اوبونتو 18.04 تنظيم كرد (شروع سريع)

چگونه مي توان از رول هاي ansible براي انتزاع محيط زيرساختي خود استفاده كرد

نحوه پيكربندي يك خوشه Galera با MySQL در سرورهاي اوبونتو 18.04

نحوه تهيه نسخه پشتيبان و بازيابي يك خوشه Kubernetes در vpsgol با استفاده از Velero

نحوه نصب و استفاده از PostgreSQL در CentOS 7

چگونه مي توان پلتفرم Eclipse Theia Cloud IDE را روي اوبونتو 18.4 تنظيم كرد

نحوه استقرار و مديريت DNS با استفاده از DNSControl در Debian 10

چگونه مي توان پلتفرم Cloud IDE كد سرور را روي CentOS 7 تنظيم كرد

 

كلمات كليدي خريد سرور

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

 

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

۸ بازديد

مقدمه
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:4b8ff392a12ed9ea17784bd3c9a8b1fa3299cac44aca35a85c90c5e3c7afacdc
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

نحوه نصب و استفاده از TimescaleDB در CentOS 7

نحوه تاييد صحت رمز عبور با Apache در اوبونتو 18.04 (شروع سريع)

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

نحوه نصب و استفاده ازRadamsa براي فوز كردن برنامه ها (تكنيك تست خودكار نرم افزار) و خدمات شبكه روي Ubuntu 18.04

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

چگونه مي توان با كتابخانه (library) درخواست ها در پايتون شروع به كار كرد

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

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

بسته بندي برنامه Laravel 6 براي توسعه با Docker Compose در اوبونتو 18.04

نحوه بهينه سازي درخواست هاي MySQL با ذخيره سازي ProxySQL در اوبونتو 16.04

نحوه استفاده از Ansible براي نصب و راه اندازي وردپرس با LAMP در اوبونتو 18.04

چگونه مي توان پلتفرم كد سرور Cloud IDE را در اوبونتو 18.04 تنظيم كرد (شروع سريع)

چگونه مي توان از رول هاي ansible براي انتزاع محيط زيرساختي خود استفاده كرد

نحوه پيكربندي يك خوشه Galera با MySQL در سرورهاي اوبونتو 18.04

نحوه تهيه نسخه پشتيبان و بازيابي يك خوشه Kubernetes در vpsgol با استفاده از Velero

نحوه نصب و استفاده از PostgreSQL در CentOS 7

چگونه مي توان پلتفرم Eclipse Theia Cloud IDE را روي اوبونتو 18.4 تنظيم كرد

نحوه استقرار و مديريت DNS با استفاده از DNSControl در Debian 10

چگونه مي توان پلتفرم Cloud IDE كد سرور را روي CentOS 7 تنظيم كرد

 

كلمات كليدي خريد سرور

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

 

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

۴ بازديد

مقدمه
با حركت ابزارهاي گسترش دهنده به سمت 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 مراجعه كنيد.

 

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

نحوه تاييد صحت رمز عبور با Apache در اوبونتو 18.04

نحوه نصب و استفاده از TimescaleDB در CentOS 7

نحوه تاييد صحت رمز عبور با Apache در اوبونتو 18.04 (شروع سريع)

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

نحوه نصب و استفاده ازRadamsa براي فوز كردن برنامه ها (تكنيك تست خودكار نرم افزار) و خدمات شبكه روي Ubuntu 18.04

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

چگونه مي توان با كتابخانه (library) درخواست ها در پايتون شروع به كار كرد

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

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

بسته بندي برنامه Laravel 6 براي توسعه با Docker Compose در اوبونتو 18.04

نحوه بهينه سازي درخواست هاي MySQL با ذخيره سازي ProxySQL در اوبونتو 16.04

نحوه استفاده از Ansible براي نصب و راه اندازي وردپرس با LAMP در اوبونتو 18.04

چگونه مي توان پلتفرم كد سرور Cloud IDE را در اوبونتو 18.04 تنظيم كرد (شروع سريع)

چگونه مي توان از رول هاي ansible براي انتزاع محيط زيرساختي خود استفاده كرد

نحوه پيكربندي يك خوشه Galera با MySQL در سرورهاي اوبونتو 18.04

نحوه تهيه نسخه پشتيبان و بازيابي يك خوشه Kubernetes در vpsgol با استفاده از Velero

نحوه نصب و استفاده از PostgreSQL در CentOS 7

چگونه مي توان پلتفرم Eclipse Theia Cloud IDE را روي اوبونتو 18.4 تنظيم كرد

نحوه استقرار و مديريت DNS با استفاده از DNSControl در Debian 10

چگونه مي توان پلتفرم Cloud IDE كد سرور را روي CentOS 7 تنظيم كرد

 

كلمات كليدي خريد سرور

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

نحوه نصب و استفاده ازRadamsa براي فوز كردن برنامه ها (تكنيك تست خودكار نرم افزار) و خدمات شبكه روي Ubuntu 18.04

۹ بازديد

مقدمه
تهديدهاي امنيتي بطور مداوم پيچيده تر مي شوند ، بنابراين توسعه دهندگان و ادمين هاي سيستم ها بايد در دفاع و آزمايش امنيت برنامه هاي خود رويكردي پيشگيرانه اتخاذ كنند.
روشي متداول براي آزمايش امنيت برنامه هاي مشتري يا خدمات شبكه، 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, $+$PATHu0000`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

Hello, world!

اكنون مي توانيد سرور مجازي وب 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

Hello, world!

سرور مجازي وب شما فقط بايد به صورت محلي قابل دسترسي باشد ، بنابراين نبايد هيچ درگاهي در فايروال خود براي آن باز كنيد.
اكنون كه سرور مجازي وب تستي خود را تنظيم كرده ايد ، مي توانيد با استفاده از 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

 

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

نحوه تاييد صحت رمز عبور با Apache در اوبونتو 18.04

نحوه نصب و استفاده از TimescaleDB در CentOS 7

نحوه تاييد صحت رمز عبور با Apache در اوبونتو 18.04 (شروع سريع)

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

نحوه نصب و استفاده ازRadamsa براي فوز كردن برنامه ها (تكنيك تست خودكار نرم افزار) و خدمات شبكه روي Ubuntu 18.04

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

چگونه مي توان با كتابخانه (library) درخواست ها در پايتون شروع به كار كرد

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

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

بسته بندي برنامه Laravel 6 براي توسعه با Docker Compose در اوبونتو 18.04

نحوه بهينه سازي درخواست هاي MySQL با ذخيره سازي ProxySQL در اوبونتو 16.04

نحوه استفاده از Ansible براي نصب و راه اندازي وردپرس با LAMP در اوبونتو 18.04

چگونه مي توان پلتفرم كد سرور Cloud IDE را در اوبونتو 18.04 تنظيم كرد (شروع سريع)

چگونه مي توان از رول هاي ansible براي انتزاع محيط زيرساختي خود استفاده كرد

نحوه پيكربندي يك خوشه Galera با MySQL در سرورهاي اوبونتو 18.04

نحوه تهيه نسخه پشتيبان و بازيابي يك خوشه Kubernetes در vpsgol با استفاده از Velero

نحوه نصب و استفاده از PostgreSQL در CentOS 7

چگونه مي توان پلتفرم Eclipse Theia Cloud IDE را روي اوبونتو 18.4 تنظيم كرد

نحوه استقرار و مديريت DNS با استفاده از DNSControl در Debian 10

چگونه مي توان پلتفرم Cloud IDE كد سرور را روي CentOS 7 تنظيم كرد

كلمات كليدي خريد سرور

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

نحوه بهينه سازي درخواست هاي MySQL

۷ بازديد

ProxySQL يك t آگاه به SQL است كه مي تواند بين برنامه شما و پايگاه داده شما قرار بگيرد. اين نرم افزار بسياري از ويژگي ها ، مانند تعادل بار بين چندين سرور مجازي MySQL را ارائه ميدهد و به عنوان يك لايه حافظه پنهان براي درخواست ها عمل ميكند. در اين آموزش به ويژگي دخيره سازي ProxySQL و نحوه بهينه سازي درخواست ها براي پايگاه داده MySQL شما پرداخته مي شود.
ذخيره سازي MySQL زماني اتفاق مي افتد كه نتيجه يك درخواست به گونه اي ذخيره مي شود كه هنگامي كه آن درخواست تكرار ميگردد ، بدون نياز به مرتب سازي در پايگاه داده ، نتيجه مي تواند برگردانده شود. اين ويژگي مي تواند سرعت درخواست هاي معمول را به ميزان قابل توجهي افزايش دهد. اما در بسياري از روش هاي ذخيره سازي ، توسعه دهندگان بايد كد برنامه خود را اصلاح كنند ، كه مي تواند يك اشكال را در پايگاه داده وارد كند. براي جلوگيري از اين عمل مستعد خطا ،ProxySQL به شما امكان مي دهد يك ذخيره سازي شفاف را انجام دهيد.
در ذخيره سازي شفاف ، فقط ادمين هاي ديتابيس بايد جهت فعال كردن حافظه پنهان براي متداول ترين درخواست ها ، پيكربندي ProxySQL را تغيير دهند و اين تغييرات مي تواند از طريق رابط ادمين ProxySQL انجام شود. همه كاري كه توسعه دهنده بايد انجام دهد اتصال به پروكسي آگاه به پروتكل است ، و پروكسي تصميم مي گيرد كه آيا درخواستي را مي توان از حافظه نهان بدون ضربه زدن به سرور مجازي back-end ارائه داد يا خير.
در اين آموزش از ProxySQL براي تنظيم ذخيره سازي شفاف براي سرور مجازي MySQL در اوبونتو 16.04 استفاده خواهيد كرد. سپس مي توانيد عملكرد آن را با استفاده از mysqlslap با و بدون حافظه پنهان آزمايش كنيد تا تأثير حافظه پنهان و مدت زمان صرفه جويي در هنگام اجراي بسياري از سؤالات مشابه را نشان دهيد.
پيش نيازها
قبل از شروع اين راهنما به موارد زير نياز خواهيد داشت:
• يك سرور مجازي Ubuntu 16.04 با حداقل 2 گيگابايت رم ، با يك كاربر غير ريشه با امتيازات sudo و فايروال تنظيم شده است ، همانطور كه در راهنماي راه اندازي سرور مجازي اوليه Ubuntu 16.04 ما گفته شده است.
مرحله 1 – نصب و تنظيم سرور مجازي MySQL
ابتدا ، سرور مجازي MySQL را نصب كرده و پيكربندي مي كنيد تا توسط ProxySQL به عنوان يك سرور مجازي back-end براي ارائه خدمات به درخواست هاي كلاينت استفاده شود.
در Ubuntu 16.04 ، سرور مجازي mysql با استفاده از اين دستور قابل نصب است:
$ sudo apt-get install mysql-server

Y را فشار دهيد تا نصب را تأييد كنيد.
سپس از شما رمزعبور كاربر روت MySQL خواسته مي شود. يك رمزعبور قوي وارد كنيد و آن را براي استفاده بعدي ذخيره كنيد.
اكنون كه سرور مجازي MySQL خود را آماده كرده ايد ، آن را پيكربندي مي كنيد تا ProxySQL به درستي كار كند. براي نظارت بر سرور مجازي MySQL ، بايد يك كاربر مانيتور براي ProxySQL اضافه كنيد ، زيرا ProxySQL به جاي استفاده از اتصال TCP يا درخواست هاي HTTP GET ، به سرور مجازي پشتيبان از طريق پروتكل SQL گوش مي دهد تا مطمئن شود كه backend  در حال اجرا است. مانيتور از يك اتصال SQL ساختگي (مجازي) براي تعيين اينكه سرور مجازي در حال كار است يا خير استفاده مي كند.
ابتدا وارد پوسته MySQL شويد:
$ mysql -uroot -p
-uroot با استفاده از كاربر روت MySQL شما را وارد مي كند و –p رمزعبور كاربر root را مي خواهد. اين كاربر روت با كاربر اصلي سرور مجازي شما متفاوت است و رمز عبور چيزي است كه هنگام نصب بسته mysql-server وارد كرده ايد.
رمز عبور اصلي را وارد كنيد و ENTER را فشار دهيد.
اكنون شما دو كاربر ايجاد خواهيد كرد ، يكي به نام مانيتور براي ProxySQL و ديگري كه براي اجراي درخواست هاي مربوط به كلاينت و ارائه امتيازات مناسب به آنها استفاده ميكنيد. اين آموزش نام اين كاربر را Sammy خواهد گذاشت.
كاربر مانيتور را ايجاد كنيد:
Mysql> CREATE USER ‘monitor’@’%’ IDENTIFIED BY ‘monitor_password’;

عبارت CREATE USER براي ايجاد يك كاربر جديد استفاده مي شود كه مي تواند از IP هاي خاص متصل شود. استفاده از٪ نشانگر اتصال كاربر از هر آدرس IP است. IDENTIFIED BY كلمه عبور را براي كاربر جديد تنظيم مي كند. هر پسوردي را كه دوست داريد وارد كنيد ، اما حتماً آن را براي استفاده هاي بعدي به خاطر بسپاريد.
پس از ايجاد مانيتور كاربر ، كاربر sammy را ايجاد كنيد:
Mysql> CREATE USER ‘sammy’@’%’ IDENTIFIED BY ‘sammy_password’;

در مرحله بعدي ، به كاربران جديد خود امتياز دهيد. براي پيكربندي مانيتور دستور زير را اجرا كنيد:
Mysql> GRANT SELECT ON sys.* TO ‘monitor’@’%’;

از درخواست GRANT براي دادن امتياز به كاربران استفاده مي شود. در اينجا فقط SELECT را در تمام جداول موجود در پايگاه داده sys به كاربر مانيتور اعطا مي كنيد. فقط به اين امتياز نياز دارد تا به سرور مجازي back-end گوش دهد.
اكنون تمام امتيازات را به كليه بانكهاي اطلاعاتي به كاربر sammy اعطا كنيد:
Mysql> GRANT ALL PRIVILEGES on *.* TO ‘sammy’@’%’;

با اين كار sammy مي تواند براي تست ديتابيس شما سؤالات لازم را ايجاد كند.
با اجراي دستور زير تغييرات امتياز را اعمال كنيد:
Mysql> FLUSH PRIVILEGES;

در آخر ، از پوسته mysql خارج شويد:
Mysql> exit;

اكنون شما سرور مجازي mysql را نصب كرده ايد و كاربري ايجاد كرده ايد كه توسط ProxySQL براي نظارت بر سرور مجازي MySQL شما استفاده مي شود ، و كاربر ديگر براي اجراي درخواست هاي كلاينت ميباشد. در مرحله بعد ProxySQL را نصب و پيكربندي خواهيد كرد.
مرحله 2 – نصب و پيكربندي سرور مجازي ProxySQL
اكنون مي توانيد سرور مجازي ProxySQL را نصب كنيد ، كه به عنوان يك لايه حافظه پنهان براي درخواست هاي شما استفاده ميشود. يك لايه حافظه پنهاني به عنوان وقفه بين سرور مجازي هاي برنامه شما و سرور مجازي هاي پشتيبان بانك اطلاعاتي وجود دارد. و براي اتصال سريع به ديتابيس و ذخيره نتايج برخي از درخواست ها در حافظه خود براي دسترسي سريع بعدي استفاده مي شود.
صفحه  ProxySQL releases Github فايلهاي نصب را براي نسخه هاي رايج لينوكس ارائه مي دهد. براي اين آموزش ، از wget براي دانلود فايل نصب نسخه ProxySQL دبيان 2.0.4 استفاده مي كنيد:
$ wget https://github.com/sysown/proxysql/releases/download/v2.0.4/proxysql_2.0.4-ubuntu16_amd64.deb

سپس ، بسته را با استفاده از dpkg نصب كنيد:
$ sudo dpkg -i proxysql_2.0.4-ubuntu16_amd64.deb

پس از نصب ، ProxySQL را با اين دستور شروع كنيد:
$ sudo systemctl start proxysql

با اين دستور مي توانيد بررسي كنيد كه ProxySQL به درستي شروع شده است:
$ sudo systemctl status proxysql

خروجي مشابه اين دريافت خواهيد كرد:
Output
root@ubuntu-s-1vcpu-2gb-sgp1-01:~# systemctl status proxysql
● proxysql.service – LSB: High Performance Advanced Proxy for MySQL
Loaded: loaded (/etc/init.d/proxysql; bad; vendor preset: enabled)
Active: active (exited) since Wed 2019-06-12 21:32:50 UTC; 6 months 7 days ago
Docs: man:systemd-sysv-generator(8)
Tasks: 0
Memory: 0B
CPU: 0

اكنون زمان آن رسيده است كه به سرور مجازي ProxySQL خود وصل شويد. براي اين منظور ، از رابط SQL ادمين ProxySQL استفاده كنيد ، كه به طور پيش فرض درگاه 6032 را در localhost گوش مي دهد و از admin به عنوان نام كاربري و رمز عبور خود استفاده مي كند.
با اجراي دستور زير به رابط متصل شويد:
$ mysql -uadmin -p -h 127.0.0.1 -P6032

هنگام درخواست رمز عبور ، admin را وارد كنيد.
-uadmin نام كاربري را به عنوان admin تعيين مي كند و فلگ -h ميزبان را به عنوان localhost مشخص مي كند. درگاه 6032 است كه با استفاده از فلگ -P مشخص شده است.
در اينجا شما بايد ميزبان و پورت را به صراحت مشخص كنيد زيرا به طور پيش فرض ، كلاينت MySQL با استفاده از يك فايل محلي و پورت 3306 وصل مي شود.
اكنون كه به عنوان admin وارد پوسته mysql شده ايد ، كاربر مانيتور را پيكربندي كنيد تا ProxySQL بتواند از آن استفاده كند. ابتدا براي تنظيم مقادير دو متغير جهاني از درخواست هاي استاندارد SQL استفاده كنيد:
Mysql> UPDATE global_variables SET variable_value=’monitor’ WHERE variable_name=’mysql-monitor_username’;

Mysql> UPDATE global_variables SET variable_value=’monitor_password’ WHERE variable_name=’mysql-monitor_password’;

متغير mysql-monitor_username نام كاربري MySQL را مشخص مي كند كه براي بررسي اينكه سرور مجازي back-end كار ميكند يا نه ، استفاده مي شود. متغير mysql-monitor_password به گذرواژه اي كه هنگام اتصال به سرور مجازي back-end استفاده خواهد شد اشاره مي كند. از رمز عبوري كه براي نام كاربري مانيتور ايجاد كرده ايد استفاده كنيد.
هر بار كه تغييري در رابط ادمين ProxySQL ايجاد كنيد ، بايد از دستور LOAD مناسب براي اعمال تغييرات در نمونه در حال اجرا ProxySQL استفاده كنيد. شما متغيرهاي جهاني MySQL را تغيير داده ايد ، بنابراين آنها را به RUNTIME بارگذاري كنيد تا تغييرات اعمال شود:
Mysql> LOAD MYSQL VARIABLES TO RUNTIME;
در مرحله بعد ، تغييراتي را در بانك اطلاعاتي روي ديسك ذخيره كنيد تا تغييرات بين ريستارت ها ادامه يابد. ProxySQL براي ذخيره جداول و متغيرهاي خاص خود از پايگاه داده محلي SQLite خود استفاده مي كند:
Mysql> SAVE MYSQL VARIABLES TO DISK;

اكنون ، به ProxySQL در مورد سرور مجازي back-end اطلاع بدهيد. جدول mysql_servers اطلاعات مربوط به هر سرور مجازي پشتيبان را دارد كه ProxySQL مي تواند به آن متصل شود و از آن استفاده كند ، بنابراين با استفاده از يك عبارت SQL استاندارد INSERT با مقادير زير براي hostgroup_id ، hostname و port يك ركورد جديد اضافه كنيد:
Mysql> INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (1, ‘127.0.0.1’, 3306);

براي اعمال تغييرات ، LOAD را اجرا كرده و دوباره SAVE كنيد:
Mysql> LOAD MYSQL SERVERS TO RUNTIME;

Mysql> SAVE MYSQL SERVERS TO DISK;
سرانجام ، به ProxySQL خواهيد گفت كه كدام كاربر به سرور مجازي back-end وصل خواهد شد. Sammy را به عنوان كاربر تنظيم كرده و sammy_password را با رمز عبوري كه قبلاً ايجاد كرده ايد جايگزين كنيد:
Mysql> INSERT INTO mysql_users(username, password, default_hostgroup) VALUES (‘sammy’, ‘sammy_password’, 1);

جدول mysql_users اطلاعات مربوط به كاربراني را كه براي اتصال به سرور مجازي هاي back-end استفاده مي شوند ، در اختيار دارد. شما username ، password و default_hostgroup را مشخص كرديد.
تغييرات را دانلود و ذخيره كنيد:
Mysql> LOAD MYSQL USERS TO RUNTIME;

Mysql> SAVE MYSQL USERS TO DISK;
سپس از پوسته mysql خارج شويد:
Mysql> exit;

براي آزمايش اينكه مي توانيد با استفاده از ProxySQL به سرور مجازي پشتيبان خود متصل شويد ، درخواست تست زير را اجرا كنيد:
$ mysql -usammy -h127.0.0.1 -p -P6033 -e “SELECT @@HOSTNAME as hostname”
در اين دستور شما از فلگ -e براي اجراي يك درخواست و بستن اتصال استفاده كرده ايد. درخواست نام ميزبان سرور مجازي back-end را چاپ مي كند.
توجه: ProxySQL به طور پيش فرض براي گوش دادن به اتصالات ورودي از پورت 6033 استفاده مي كند.
خروجي به اين شكل ظاهر مي شود ، your_hostname با نام ميزبان شما جايگزين مي شود:
Output
+—————————-+
| hostname |
+—————————-+
| your_hostname |
+—————————-+

براي كسب اطلاعات بيشتر در مورد پيكربندي ProxySQL ، به مرحله 3 نحوه استفاده از ProxySQL به عنوان Load Balancer براي MySQL در اوبونتو 16.04 مراجعه كنيد.
تاكنون ، شما ProxySQL را پيكربندي كرده ايد تا از سرور مجازي MySQL خود به عنوان backend استفاده كرده و با استفاده از ProxySQL به backend وصل شويد. اكنون ، شما آماده استفاده از mysqlslap براي تست عملكرد درخواست ها بدون ذخيره سازي هستيد.
مرحله 3 – آزمايش با استفاده از mysqlslap بدون ذخيره سازي
در اين مرحله شما يك پايگاه داده تستي را دانلود مي كنيد تا بتوانيد با استفاده از mysqlslap درخواست ها را اجرا كنيد و زمان تأخير بدون حافظه نهان را تست كنيد و معيار سرعت درخواست هاي خود را تعيين نماييد. همچنين بررسي مي كنيد كه چگونه ProxySQL سوابق درخواست ها را در جدول stats_mysql_query_digest نگه مي دارد.
mysqlslap يك كلاينت شبيه سازي بار است كه به عنوان يك ابزار تست بار براي MySQL استفاده مي شود. و مي تواند يك سرور مجازي MySQL را با درخواست هاي خودكار ايجاد شده يا برخي از درخواست هاي سفارشي كه در يك پايگاه داده اجرا مي شود ، را آزمايش كند. در بسته كلاينت MySQL نصب شده وجود دارد ، بنابراين نيازي به نصب آن نيست. در عوض ، شما يك پايگاه داده را فقط براي اهداف آزمايش دانلود مي كنيد ، كه مي توانيد از mysqlslap استفاده كنيد.
در اين آموزش از يك نمونه بانك اطلاعاتي كارمند استفاده خواهيد كرد. شما از اين پايگاه داده كارمند استفاده مي كنيد زيرا داراي مجموعه اي از داده هاي بزرگ است كه مي تواند تفاوت هاي بهينه سازي درخواست را نشان دهد. اين بانك اطلاعاتي داراي شش جدول است ، اما داده هاي موجود در آن بيش از 300000 پرونده كارمند ميباشد. اين به شما كمك مي كند تا حجم كار توليدي در مقياس بزرگ را شبيه سازي كنيد.
براي دانلود پايگاه داده ، ابتدا مخزن Github را با استفاده از اين دستور كلون كنيد:
$ git clone https://github.com/datacharmer/test_db.git

سپس دايركتوري test_db را وارد كنيد و با استفاده از اين دستورات پايگاه داده را در سرور مجازي MySQL بارگذاري كنيد:
$ cd test_db

$ mysql -uroot -p < employees.sql9 اين دستور با استفاده از تغيير مسير shell براي خواندن نمايش داده هاي SQL در فايل Staff.sql و اجراي آنها در سرور مجازي MySQL براي ايجاد ساختار پايگاه داده استفاده مي كند. خروجي مانند اين را خواهيد ديد: Output INFO CREATING DATABASE STRUCTURE INFO storage engine: InnoDB INFO LOADING departments INFO LOADING employees INFO LOADING dept_emp INFO LOADING dept_manager INFO LOADING titles INFO LOADING salaries data_load_time_diff 00:00:32 پس از بارگذاري پايگاه داده روي سرور مجازي MySQL خود ، آزمايش كنيد كه mysqlslap با درخواست زير كار كند: $ mysqlslap -usammy -p -P6033 -h127.0.0.1 –auto-generate-sql –verbose mysqlslap داراي فلگ هايي مشابه كلاينت mysql است. در اينجا موارد استفاده شده در اين دستور آمده است: -u كاربر مورد استفاده براي اتصال به سرور مجازي را مشخص مي كند. -p رمزعبور كاربر را درخواست ميكند. -P با استفاده از درگاه مشخص شده متصل مي شود. -h به هاست مشخص شده متصل مي شود. Auto-generate-sql به MySQL اجازه مي دهد تا تست بارگذاري را با استفاده از درخواست هاي توليد شده خود انجام دهد. –verbose باعث مي شود كه خروجي اطلاعات بيشتري را نشان دهد. خروجي شبيه به زير را دريافت خواهيد كرد: Output Benchmark Average number of seconds to run all queries: 0.015 seconds Minimum number of seconds to run all queries: 0.015 seconds Maximum number of seconds to run all queries: 0.015 seconds Number of clients running queries: 1 Average number of queries per client: 0 در اين خروجي مي توانيد تعداد متوسط ​​، حداقل و حداكثر تعداد ثانيه هايي را كه براي اجراي كليه درخواست ها سپري شده را مشاهده كنيد. اين به شما مقياسي از مدت زمان مورد نياز براي اجراي درخواست توسط تعدادي از كلاينت ها را نشان ميدهد. در اين خروجي ، فقط يك كلاينت براي اجراي درخواست استفاده شده است. در مرحله بعد ، با نگاهي به stats_mysql_query_digest درProxySQL ببينيد mysqlslap  كدام درخواست ها را در آخرين دستور اجرا كرده است. اين به ما اطلاعاتي مانند  digest درخواست ها را مي دهد ، كه يك شكل عادي شده از عبارت SQL است كه بعداً براي فعال كردن حافظه پكيج به آنها مراجعه مي شود. با اين دستور اينترفيس ادمين ProxySQL را وارد كنيد: $ mysql -uadmin -p -h 127.0.0.1 -P6032 سپس اين درخواست را براي يافتن اطلاعات در جدول stats_mysql_query_digest اجرا كنيد: Mysql> SELECT count_star,sum_time,hostgroup,digest,digest_text FROM stats_mysql_query_digest ORDER BY sum_time DESC;

خروجي مشابه زير را مشاهده خواهيد كرد:
+————+———-+———–+——————–+———————————-+
| count_star | sum_time | hostgroup | digest | digest_text |
+————+———-+———–+——————–+———————————-+
| 1 | 598 | 1 | 0xF8F780C47A8D1D82 | SELECT @@HOSTNAME as hostname |
| 1 | 0 | 1 | 0x226CD90D52A2BA0B | select @@version_comment limit ? |
+————+———-+———–+——————–+———————————-+
2 rows in set (0.01 sec)

درخواست قبلي داده ها را از جدول stats_mysql_query_digest انتخاب مي كند ، كه شامل اطلاعات مربوط به كليه درخواست ها در ProxySQL است. در اينجا پنج ستون انتخاب شده است:
count_star: تعداد دفعاتي كه اين درخواست اجرا شد.
sum_time: زمان كل بر حسب ميلي ثانيه است كه براي اجراي اين درخواست استفاده شده است.
hostgroup: گروه ميزباني كه براي اجراي اين درخواست استفاده مي شود.
digest: دايجستي از درخواست اجرا شده.
digest_text: درخواست واقعي. در مثال اين آموزش ، درخواست دوم با استفاده از ؟ به جاي پارامترهاي متغير پارامتريزه شده است . بنابراين، select @@version_comment limit 1 و select @@version_comment limit 2 به عنوان همان درخواست با يك دايجست گروه بندي مي شوند.
اكنون كه مي دانيد چگونه داده هاي درخواست را در جدول stats_mysql_query_digest بررسي كنيد ، از پوسته mysql خارج شويد:
Mysql> exit;
بانك اطلاعاتي كه دانلود كرديد شامل برخي از جداول با داده هاي نمايشي است. اكنون با انتخاب پرونده هايي كه از from_emp آنها بزرگتر از 2000-04-20 باشد ميتوانيد درخواست ها را در dept_emp تست كنيد و ميانگين زمان اجرا را ثبت نماييد.
براي اجراي آزمون از اين دستور استفاده كنيد:
$ mysqlslap -usammy -P6033 -p -h127.0.0.1 –concurrency=100 –iterations=20 –create-schema=employees –query=”SELECT * from dept_emp WHERE from_date>’2000-04-20′” –verbose

در اينجا از چند فلگ جديد استفاده مي كنيد:
–concurrency = 100: تعداد كاربران را براي شبيه سازي تعيين مي كند ، در اين حالت 100.
–iterations=20 : باعث مي شود تست 20 بار اجرا شود و نتايج حاصل از همه آنها محاسبه شود.
–create-schema=employees: در اينجا پايگاه داده كارمندان را انتخاب كرديد.
–query=”SELECT * from dept_emp WHERE from_date>’2000-04-20′”: در اينجا درخواست اجرا شده در آزمون را مشخص كرديد.
آزمون چند دقيقه طول خواهد كشيد. پس از اتمام كار ، نتايج مشابه با موارد زير را دريافت مي كنيد:
Output
Benchmark
Average number of seconds to run all queries: 18.117 seconds
Minimum number of seconds to run all queries: 8.726 seconds
Maximum number of seconds to run all queries: 22.697 seconds
Number of clients running queries: 100
Average number of queries per client: 1

تعداد شما مي تواند كمي متفاوت باشد. اين اعداد را در جايي نگه داريد تا بعد از فعال كردن ذخيره سازي، آنها را با نتايج حاصل از مقايسه كنيد.
پس از آزمايش ProxySQL بدون حافظه پنهان ، زمان آن است كه دوباره همان تست را اجرا كنيد ، اما اين بار با فعال سازي حافظه پنهان.
مرحله 4 – آزمايش با استفاده از mysqlslap همراه با ذخيره سازي
در اين مرحله ، حافظه پنهان به ما كمك مي كند تا هنگام اجراي درخواست هاي مشابه ، تاخير را كاهش دهيم. در اينجا ، درخواست هاي اجرا شده را شناسايي مي كنيد ، دايجست آنها را از جدول stats_mysql_query_digest ProxySQL مي گيريد و از آنها براي فعال كردن حافظه پنهان استفاده مي كنيد. سپس ، دوباره تست مي كنيد تا اختلاف را بررسي كنيد.
براي فعال كردن حافظه پنهان ، بايد دايجست نمايش داده شد كه در آن ذخيره مي كنيد را بدانيد. با استفاده از اين دستور به رابط ادمين ProxySQL وارد شويد:
$ mysql -uadmin -p -h127.0.0.1 -P6032
سپس اين درخواست را مجدداً اجرا كنيد تا ليستي از درخواست ها و آنها دريافت شود:
Ysql> SELECT count_star,sum_time,hostgroup,digest,digest_text FROM stats_mysql_query_digest ORDER BY sum_time DESC;

نتيجه مشابهي با اين خواهيد گرفت:
Output
+————+————-+———–+——————–+——————————————+
| count_star | sum_time | hostgroup | digest | digest_text |
+————+————-+———–+——————–+——————————————+
| 2000 | 33727110501 | 1 | 0xC5DDECD7E966A6C4 | SELECT * from dept_emp WHERE from_date>? |
| 1 | 601 | 1 | 0xF8F780C47A8D1D82 | SELECT @@HOSTNAME as hostname |
| 1 | 0 | 1 | 0x226CD90D52A2BA0B | select @@version_comment limit ? |
+————+————-+———–+——————–+——————————————+
3 rows in set (0.00 sec)

به رديف اول نگاه كنيد. در مورد درخواستي است كه 2000 بار اجرا شده است. اين يك درخواست تست شده است كه قبلاً اجرا شده است. از دايجست آن استفاده كرده و آن را ذخيره كنيد تا در افزودن يك قانون درخواست براي ذخيره سازي استفاده شود.
چند درخواست بعدي يك قانون درخواست جديد به ProxySQL اضافه خواهد كرد كه با دايجست درخواست قبلي مطابقت دارد و يك مقدار cache_ttl براي آن قرار مي دهد. cache_ttl تعداد ميلي ثانيه هايي است كه نتيجه در حافظه ذخيره مي شود:
Mysql> INSERT INTO mysql_query_rules(active, digest, cache_ttl, apply) VALUES(1,’0xC5DDECD7E966A6C4′,2000,1);

در اين دستور شما يك ركورد جديد به جدول mysql_query_rules اضافه مي كنيد. اين جدول كليه قواعد اعمال شده قبل از اجراي يك درخواست را در خود جاي داده است. در اين مثال ، شما يك مقدار براي ستون cache_ttl اضافه مي كنيد كه باعث مي شود درخواست منطبق شده توسط دايجست داده شده براي تعداد ميلي ثانيه مشخص شده در اين ستون ذخيره بماند. عدد 1 را در ستون اعمال قرار دهيد تا مطمئن شويد كه اين قانون براي درخواست ها اعمال مي شود.
اين تغييرات را LOAD و SAVE كنيد و سپس از پوست MYSQL خارج شويد:
Mysql> LOAD MYSQL QUERY RULES TO RUNTIME;

Mysql> SAVE MYSQL QUERY RULES TO DISK;

Mysql> exit;
اكنون كه حافظه پنهان فعال است ، دوباره تست كنيد تا نتيجه را بررسي كنيد:
$ mysqlslap -usammy -P6033 -p -h127.0.0.1 –concurrency=100 –iterations=20 –create-schema=employees –query=”SELECT * from dept_emp WHERE from_date>’2000-04-20′” –verbose

اين كار خروجي شبيه به زير را ارائه مي دهد:
Output
Benchmark
Average number of seconds to run all queries: 7.020 seconds
Minimum number of seconds to run all queries: 0.274 seconds
Maximum number of seconds to run all queries: 23.014 seconds
Number of clients running queries: 100
Average number of queries per client: 1

نتيجه
در اين مقاله ، حافظه نهان شفاف را با ProxySQL تنظيم كرديد تا بتواند نتايج درخواست از پايگاه داده را ذخيره كند. شما همچنين سرعت درخواست را با و بدون حافظه پنهان آزمايش كرده ايد تا تفاوتي بين caching ايجاد كنيد.
در اين آموزش از يك سطح حافظه پنهان استفاده كرده ايد. همچنين مي توانيد حافظه نهان وب را كه جلوي يك وب سرور مجازي قرار دارد و پاسخ به درخواست هاي مشابه را ذخيره مي كند ، امتحان كنيد ، بدون اينكه به سرور مجازي هاي پشتيبان ضربه بزنيد ، پاسخ را به كلاينت ارسال مي كنيد. اين بسيار شبيه به ذخيره سازي ProxySQL است اما در سطح متفاوتي است. براي كسب اطلاعات بيشتر در مورد حافظه پنهان در وب ، اصول اوليه Caching Web خود را بررسي كنيد: اصطلاحات ، هدرهاي HTTP ، و مقدمات برنامه Caching Strategies.
سرور مجازي MySQL همچنين حافظه پنهان درخواست خود را دارد. مي توانيد در مورد آموزش بهينه سازي MySQL با Query Cache در اوبونتو 18.04 اطلاعات بيشتري در مورد آن كسب كنيد.

 

 

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

نحوه تاييد صحت رمز عبور با Apache در اوبونتو 18.04

نحوه نصب و استفاده از TimescaleDB در CentOS 7

نحوه تاييد صحت رمز عبور با Apache در اوبونتو 18.04 (شروع سريع)

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

نحوه نصب و استفاده ازRadamsa براي فوز كردن برنامه ها (تكنيك تست خودكار نرم افزار) و خدمات شبكه روي Ubuntu 18.04

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

چگونه مي توان با كتابخانه (library) درخواست ها در پايتون شروع به كار كرد

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

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

بسته بندي برنامه Laravel 6 براي توسعه با Docker Compose در اوبونتو 18.04

نحوه بهينه سازي درخواست هاي MySQL با ذخيره سازي ProxySQL در اوبونتو 16.04

نحوه استفاده از Ansible براي نصب و راه اندازي وردپرس با LAMP در اوبونتو 18.04

چگونه مي توان پلتفرم كد سرور Cloud IDE را در اوبونتو 18.04 تنظيم كرد (شروع سريع)

چگونه مي توان از رول هاي ansible براي انتزاع محيط زيرساختي خود استفاده كرد

نحوه پيكربندي يك خوشه Galera با MySQL در سرورهاي اوبونتو 18.04

نحوه تهيه نسخه پشتيبان و بازيابي يك خوشه Kubernetes در vpsgol با استفاده از Velero

نحوه نصب و استفاده از PostgreSQL در CentOS 7

چگونه مي توان پلتفرم Eclipse Theia Cloud IDE را روي اوبونتو 18.4 تنظيم كرد

نحوه استقرار و مديريت DNS با استفاده از DNSControl در Debian 10

چگونه مي توان پلتفرم Cloud IDE كد سرور را روي CentOS 7 تنظيم كرد

 

كلمات كليدي خريد سرور

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

د – خريد vps آمريكا – خريد سرور مجازي هلند – خريد وي پي اس – خريد vps هلند – خريد vps فرانسه

نحوه تاييد صحت رمز عبور با Apache در اوبونتو 18.04 (شروع سريع)

۶ بازديد

مقدمه
اين آموزش مالكيت هاي محافظت از رمز عبور در وب سرور مجازي Apache كه روي اوبونتو 18.04 اجرا مي شود ، را به شما مي آموزد. تكميل اين مراحل امنيت بيشتري را براي سرور مجازي شما فراهم مي كند تا كاربران غيرمجاز نتوانند به قسمت خاصي از صفحه شما دسترسي داشته باشند.
براي نسخه دقيق تر اين آموزش ، با توضيحات بيشتر در مورد هر مرحله ، لطفاً به نحوه تنظيم تاييد صحت رمز عبور با Apache در اوبونتو 18.04 مراجعه كنيد.
پيش نيازها
⦁ براي تكميل اين آموزش ، به دسترسي به موارد زير روي سرور مجازي Ubuntu 18.04 نياز داريد:
⦁ كاربر sudo روي سرور مجازي تان
⦁ وب سرور مجازي Apache2
⦁ سايتي كه با SSL ايمن باشد
مرحله 1 – بسته امكانات Apache را نصب كنيد
ما براي مديريت نام كاربري و كلمه عبور با دسترسي به محتواي محدود ، ابزاري با نام htpasswd را كه بخشي از بسته ي apache2-utils ميباشد نصب خواهيم كرد.
⦁ $ sudo apt update

⦁ $ sudo apt install apache2-utils

مرحله 2 – فايل رمز عبور را ايجاد كنيد
ما اولين كاربر را به صورت زير ايجاد خواهيم كرد ( first_username را با نام كاربري مورد نظر خود جايگزين كنيد):
⦁ $ sudo htpasswd -c /etc/apache2/.htpasswd first_username
از شما خواسته مي شود رمز عبور را براي كاربر ايجاد و تأييد كنيد.
آرگومان -c را براي هر كاربر ديگري كه مايل به اضافه كردن آن هستيد ، كنار بگذاريد تا فايل را رونويسي نكنيد:
⦁ $ sudo htpasswd /etc/apache2/.htpasswd another_user
مرحله 3 – پيكربندي تأييد صحت گذرواژه Apache
در اين مرحله ، بايد Apache را پيكربندي كنيم تا اين فايل را قبل از ارائه محتواي محافظت شده ما بررسي كند. ما اين كار را با استفاده از فايل هاست مجازي سايت انجام خواهيم داد ، اما اگر دسترسي نداريد يا ترجيح مي دهيد به جاي آن از فايلهاي .htaccess استفاده كنيد ، آموزش طولاني تري براي اين كار وجود دارد.
فايل ميزبان مجازي را كه مي خواهيد محدوديت آن را با يك ويرايشگر متني مانند nano اضافه كنيد ، باز كنيد:
⦁ $ sudo nano /etc/apache2/sites-enabled/default-ssl.conf
تاييد صحت بر اساس هر ديركتوري انجام مي شود. در مثال ما ، كل ريشه document را محدود خواهيم كرد ، اما شما مي توانيد اين ليست را تغيير دهيد تا فقط يك ديركتوري خاص را در فضاي وب قرار دهيد.
در اين مرحله خطوط هايلايت شده زير را در فايل خود اضافه كنيد:
/etc/apache2/sites-enabled/default-ssl.conf

ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined


AuthType Basic
AuthName “Restricted Content”
AuthUserFile /etc/apache2/.htpasswd
Require valid-user

پيكربندي را با دستور زير بررسي كنيد:
مي توانيد سرور مجازي را براي اجراي خط مشي رمز ورود خود مجدداً راه اندازي كنيد و سپس وضعيت سرور مجازي خود را بررسي كنيد.
⦁ $ sudo systemctl restart apache2

⦁ $ sudo systemctl status apache2

مرحله 4 – تأييد صحت رمز عبور
براي تأييد محافظت از محتواي خود ، سعي كنيد به محتواي محدود شده خود در يك مرورگر وب دسترسي پيدا كنيد. بايد اعلان نام كاربري و رمزعبور براي شما نمايش داده شود:

آموزشهاي مرتبط
در اينجا پيوندهايي با راهنماهاي دقيق تر مربوط به اين آموزش آمده است:
⦁ نحوه تاييد صحت رمز عبور با Apache در اوبونتو 18.04
⦁ آشنايي با فايل ها و راهنماي مهم Apache در راهنماي نصب Apache
⦁ چگونه مي توان هاست هاي مجازي Apache را در اوبونتو 16.04 تنظيم كرد
⦁ نحوه استفاده از فايل .htaccess.

 

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

نحوه تاييد صحت رمز عبور با Apache در اوبونتو 18.04

نحوه نصب و استفاده از TimescaleDB در CentOS 7

نحوه تاييد صحت رمز عبور با Apache در اوبونتو 18.04 (شروع سريع)

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

نحوه نصب و استفاده ازRadamsa براي فوز كردن برنامه ها (تكنيك تست خودكار نرم افزار) و خدمات شبكه روي Ubuntu 18.04

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

چگونه مي توان با كتابخانه (library) درخواست ها در پايتون شروع به كار كرد

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

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

بسته بندي برنامه Laravel 6 براي توسعه با Docker Compose در اوبونتو 18.04

نحوه بهينه سازي درخواست هاي MySQL با ذخيره سازي ProxySQL در اوبونتو 16.04

نحوه استفاده از Ansible براي نصب و راه اندازي وردپرس با LAMP در اوبونتو 18.04

چگونه مي توان پلتفرم كد سرور Cloud IDE را در اوبونتو 18.04 تنظيم كرد (شروع سريع)

چگونه مي توان از رول هاي ansible براي انتزاع محيط زيرساختي خود استفاده كرد

نحوه پيكربندي يك خوشه Galera با MySQL در سرورهاي اوبونتو 18.04

نحوه تهيه نسخه پشتيبان و بازيابي يك خوشه Kubernetes در vpsgol با استفاده از Velero

نحوه نصب و استفاده از PostgreSQL در CentOS 7

چگونه مي توان پلتفرم Eclipse Theia Cloud IDE را روي اوبونتو 18.4 تنظيم كرد

نحوه استقرار و مديريت DNS با استفاده از DNSControl در Debian 10

چگونه مي توان پلتفرم Cloud IDE كد سرور را روي CentOS 7 تنظيم كرد

 

كلمات كليدي خريد سرور

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

نحوه نصب و استفاده از TimescaleDB در CentOS 7

۳ بازديد

مقدمه
بسياري از برنامه ها ، مانند سيستم هاي مانيتورينگ و سيستم هاي جمع آوري داده ها ، اطلاعات را براي تجزيه و تحليل بيشتر جمع مي كنند. اين تجزيه و تحليلها اغلب به نحوه تغيير يك بخش از داده يا يك سيستم در گذشت زمان نگاه مي كنند. در اين موارد ، داده ها به عنوان يك سري زمان نمايش داده مي شوند ، و هر نقطه داده همراه با يك timestamp همراه است. نمونه اي از آن ها به اين صورت است:
2019-11-01 09:00:00 server.cpu.1 0.9
2019-11-01 09:00:00 server.cpu.15 0.8
2019-11-01 09:01:00 server.cpu.1 0.9
2019-11-01 09:01:00 server.cpu.15 0.8

اخيراً ارتباط داده هاي مجموعه زماني به لطف استقرار جديد اينترنت اشياء (IoT) و اينترنت صنعتي اشياء افزايش يافته است. تعداد بيشتر و بيشتري دستگاه وجود دارد كه اطلاعات مجموعه هاي مختلفي را جمع آوري مي كنند: از جمله ردياب هاي بدنسازي ، ساعت هاي هوشمند ، ايستگاه هاي خانگي آب و هوا و سنسورهاي مختلف. اين دستگاه ها اطلاعات زيادي را جمع مي كنند و تمام اين داده ها بايد در جايي ذخيره شوند.
بانك اطلاعاتي كلاسيك رابطه اي اغلب براي ذخيره داده ها استفاده مي شود ، اما وقتي صحبت از حجم عظيم داده هاي سري زماني است ، هميشه مناسب نيستند. هنگامي كه نياز به پردازش مقدار زيادي از داده هاي مجموعه زماني داريد ، ديتابيس رابطه اي مي تواند خيلي كند باشد. به همين دليل ، بانكهاي اطلاعاتي بهينه سازي شده اي به نام پايگاه داده هاي NoSQL ايجاد شده اند تا از مشكلات پايگاه هاي داده رابطه اي جلوگيري شود.
TimescaleDB يك پايگاه داده منبع باز است كه براي ذخيره داده هاي سري زماني بهينه شده است. اين برنامه به عنوان پسوند PostgreSQL پياده سازي شده است و سهولت استفاده از پايگاه هاي داده رابطه اي و سرعت پايگاه داده هاي NoSQL را تركيب مي كند. در نتيجه ، به شما امكان مي دهد تا از PostgreSQL براي ذخيره داده هاي تجاري و سري هاي زماني به صورت همزمان استفاده كنيد.
با دنبال كردن اين آموزش ، TimescaleDB را روي CentOS 7 تنظيم كرده ، آن را پيكربندي كرده و ياد مي گيريد كه چگونه با آن كار كنيد. شما با ايجاد پايگاه داده هاي سري زماني و ايجاد درخواست هاي ساده ان اجرا خواهيد كرد. در آخر ، خواهيد ديد كه چگونه داده هاي غير ضروري را حذف كنيد.
پيش نيازها
براي دنبال كردن اين آموزش ، به موارد زير نياز داريد:
يك سرور مجازي CentOS 7 كه با دنبال كردن راهنماي اوليه راه اندازي سرور مجازي با CentOS 7 نصب شده باشد، و شامل يك كاربر غير ريشه با امتيازات sudo و فايروال تنظيم شده با firewalld باشد. براي راه اندازي firewalld ، قسمت “پيكربندي يك فايروال ساده” در آموزش مراحل اضافي توصيه شده براي سرور مجازي هاي جديد CentOS 7 را دنبال كنيد.
PostgreSQL كه بر روي سرور مجازي شما نصب شده باشد. براي نصب و پيكربندي آن ، راهنماي نصب و استفاده از PostgreSQL در CentOS 7 را دنبال كنيد.
مرحله 1 – نصب TimescaleDB
TimescaleDB در منابع پكيجي پيش فرض CentOS در دسترس نيست ، بنابراين در اين مرحله شما آن را از منبع شخص ثالث TimescaleDB نصب خواهيد كرد.
ابتدا يك فايل منبع جديد ايجاد كنيد:
$ sudo vi /etc/yum.repos.d/timescaledb.repo

با زدن i وارد حالت insert شده و پيكربندي زير را در فايل پيست كنيد:
/etc/yum.repos.d/timescaledb.repo
[timescale_timescaledb]
name=timescale_timescaledb
baseurl=https://packagecloud.io/timescale/timescaledb/el/7/$basearch
repo_gpgcheck=1
gpgcheck=0
enabled=1
gpgkey=https://packagecloud.io/timescale/timescaledb/gpgkey
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300

پس از اتمام ، ESC را فشار دهيد تا از حالت insert خارج شويد ، سپس: wq و ENTER را براي ذخيره و خروج از فايل بزنيد. براي كسب اطلاعات بيشتر در مورد ويرايشگر متن vi و vim جانشين آن ، از نصب و استفاده از ويرايشگر متن Vim در آموزش Cloud Server استفاده كنيد.
اكنون مي توانيد مراحل نصب را ادامه دهيد. در اين آموزش از PostgreSQL نسخه 11 استفاده شده است. اگر از نسخه ديگري از PostgreSQL استفاده مي كنيد (به عنوان مثال 9.6 يا 11) ، مقدار مورد نظر را در دستور زير جايگزين كرده و آن را اجرا كنيد:
$ sudo yum install -y timescaledb-postgresql-11

TimescaleDB اكنون نصب شده و آماده استفاده است. در مرحله بعد ، آن را روشن كرده و برخي از تنظيمات مرتبط با آن را در فايل پيكربندي PostgreSQL براي بهينه سازي بانك اطلاعات تنظيم خواهيد كرد.
مرحله 2 – پيكربندي TimescaleDB
ماژول TimescaleDB با تنظيمات پيش فرض پيكربندي PostgreSQL خوب كار مي كند ، اما براي بهبود عملكرد و استفاده بهتر از منابع پردازنده ، حافظه و منابع ديسك ، توسعه دهندگان TimescaleDB پيكربندي برخي پارامترهاي فردي را پيشنهاد مي كنند. اين كار مي تواند به صورت خودكار با ابزار timescaledb-tune يا با ويرايش دستي فايل postgresql.conf سرور مجازي شما انجام شود.
در اين آموزش از ابزار timescaledb-tune استفاده خواهيد كرد. اين ابزار فايل postgresql.conf را مي خواند و به صورت تعاملي پيشنهاد ايجاد تغيير مي دهد.
براي شروع wizard پيكربندي دستور زير را اجرا كنيد:
$ sudo timescaledb-tune –pg-config=/usr/pgsql-11/bin/pg_config
ابتدا از شما خواسته مي شود مسير فايل پيكربندي PostgreSQL را تأييد كنيد:
Output
Using postgresql.conf at this path:
/var/lib/pgsql/11/data/postgresql.conf

Is this correct? [(y)es/(n)o]:

ابزار به طور خودكار مسير فايل پيكربندي را تشخيص مي دهد ، بنابراين با وارد كردن y اين كار را تأييد كنيد:
Output

Is this correct? [(y)es/(n)o]: y
Writing backup to:
/tmp/timescaledb_tune.backup201912191633

سپس ، ماژول TimescaleDB را با تايپ y در اعلان بعدي و فشار دادن ENTER فعال كنيد:
Output
shared_preload_libraries needs to be updated
Current:
#shared_preload_libraries = ”
Recommended:
shared_preload_libraries = ‘timescaledb’
Is this okay? [(y)es/(n)o]: y
success: shared_preload_libraries will be updated

بر اساس ويژگي هاي سرور مجازي خود و نسخه PostgreSQL ، به شما پيشنهاد مي شود تنظيمات خود را تنظيم كنيد. براي شروع فرآيند تنظيم ، y را فشار دهيد:
Output
Tune memory/parallelism/WAL and other settings? [(y)es/(n)o]: y
Recommendations based on 7.64 GB of available memory and 4 CPUs for PostgreSQL 11

Memory settings recommendations
Current:
shared_buffers = 128MB
#effective_cache_size = 4GB
#maintenance_work_mem = 64MB
#work_mem = 4MB
Recommended:
shared_buffers = 1955MB
effective_cache_size = 5865MB
maintenance_work_mem = 1001121kB
work_mem = 5005kB
Is this okay? [(y)es/(s)kip/(q)uit]:

timescaledb-tune به طور خودكار حافظه موجود سرور مجازي را تشخيص داده و مقادير توصيه شده را براي تنظيمات shared_buffers ، effective_cache_size ، maintenance_work_mem و work_mem محاسبه مي كند. اگر مي خواهيد در مورد چگونگي انجام اين كار اطلاعات بيشتري كسب كنيد ، صفحه GitHub را براي ديدن timescaledb-tune. چك كنيد.
اگر اين تنظيمات خوب به نظر مي رسد ، y را وارد كنيد:
Output

Is this okay? [(y)es/(s)kip/(q)uit]: y
success: memory settings will be updated

در اين مرحله ، اگر سرور مجازي شما داراي چندين CPU باشد ، توصيه هاي مربوط به تنظيمات موازي را پيدا خواهيد كرد. در حالي كه اگر يك CPU داشته باشيد ، timescaledb-tune. با استفاده از جدول زماني شما را مستقيماً به تنظيمات WAL مي فرستد.
سرور مجازي هايي كه داراي چندين CPU هستند ، با توصيه هايي مانند اين روبرو مي شوند:
Output
Parallelism settings recommendations
Current:
missing: timescaledb.max_background_workers
#max_worker_processes = 8
#max_parallel_workers_per_gather = 2
#max_parallel_workers = 8
Recommended:
timescaledb.max_background_workers = 8
max_worker_processes = 15
max_parallel_workers_per_gather = 2
max_parallel_workers = 4
Is this okay? [(y)es/(s)kip/(q)uit]:

اين تنظيمات تعداد كارگراني كه درخواست ها و كارهاي پس زمينه را پردازش مي كنند را تنظيم مي كند. مي توانيد اطلاعات بيشتري در مورد اين تنظيمات را از مطالب TimescaleDB و PostgreSQL كسب كنيد.
y را وارد كنيد و براي پذيرش اين تنظيمات enter بزنيد:
Output

Is this okay? [(y)es/(s)kip/(q)uit]: y
success: parallelism settings will be updated

در مرحله بعد ، توصيه هايي براي Write Ahead Log (WAL) پيدا خواهيد كرد:
Output
WAL settings recommendations
Current:
#wal_buffers = -1
#min_wal_size = 80MB
#max_wal_size = 1GB
Recommended:
wal_buffers = 16MB
min_wal_size = 4GB
max_wal_size = 8GB
Is this okay? [(y)es/(s)kip/(q)uit]:

WAL يكپارچگي داده ها را حفظ مي كند ، اما تنظيمات پيش فرض مي تواند باعث عدم كارآيي I / O شود كه عملكرد نوشتن را كند مي كند. براي بهينه سازي اين تنظيمات y را تايپ و وارد كنيد:
Output

Is this okay? [(y)es/(s)kip/(q)uit]: y
success: WAL settings will be updated
اكنون چند توصيه متفرقه خواهيد ديد:
Output
Miscellaneous settings recommendations
Current:
#default_statistics_target = 100
#random_page_cost = 4.0
#checkpoint_completion_target = 0.5
#max_locks_per_transaction = 64
#autovacuum_max_workers = 3
#autovacuum_naptime = 1min
#effective_io_concurrency = 1
Recommended:
default_statistics_target = 500
random_page_cost = 1.1
checkpoint_completion_target = 0.9
max_locks_per_transaction = 64
autovacuum_max_workers = 10
autovacuum_naptime = 10
effective_io_concurrency = 200
Is this okay? [(y)es/(s)kip/(q)uit]:

تمام اين پارامترهاي مختلف با هدف افزايش كارايي انجام مي شود. به عنوان مثال ، SSD ها مي توانند بسياري از درخواست هاي همزمان را پردازش كنند ، بنابراين بهترين مقدار براي eff_io_concurrency ممكن است در بين صدها مورد باشد. مي توانيد اطلاعات بيشتري در مورد اين گزينه ها را در مستندات PostgreSQL بيابيد.
براي ادامه ، y را وارد كنيد و enter بزنيد.
Output

Is this okay? [(y)es/(s)kip/(q)uit]: y
success: miscellaneous settings will be updated
Saving changes to: /var/lib/pgsql/11/data/postgresql.conf

در نتيجه ، يك فايل پيكربندي آماده را در /var/lib/pgsql/11/data/postgresql.conf دريافت خواهيد كرد.
توجه: اگر نصب را از ابتدا انجام مي دهيد ، مي توانيد فرمان اوليه را نيز با فلگ هاي –quiet و –yes اجرا كنيد ، كه به طور خودكار تمام توصيه ها را اعمال مي كند و تغييراتي در فايل پيكربندي postgresql.conf ايجاد مي كند:
$ sudo timescaledb-tune –pg-config=/usr/pgsql-11/bin/pg_config –quiet –yes
براي اينكه تغييرات پيكربندي عملي شوند ، بايد سرويس PostgreSQL را مجدداً راه اندازي كنيد:
$ sudo systemctl restart postgresql-11.service
اكنون ديتابيس با پارامترهاي بهينه در حال اجرا است و آماده همكاري با داده هاي سري زماني ميباشد. در مراحل بعدي ، كار با اين داده ها را امتحان ميكنيد: ايجاد بانك اطلاعاتي جديد و جداول هايپر و انجام عمليات.
مرحله 3 – ايجاد يك بانك اطلاعاتي جديد و Hypertable
با بهينه سازي تنظيم TimescaleDB ، شما آماده كار با داده هاي سري زماني هستيد. TimescaleDB به عنوان پسوند PostgreSQL پياده سازي مي شود ، بنابراين عمليات با داده هاي سري زماني تفاوت چنداني با عمليات داده هاي رابطه اي ندارند. در عين حال ، بانك اطلاعاتي به شما امكان مي دهد تا در آينده داده هاي سري زماني و جداول رابطه اي را آزادانه تركيب كنيد.
ابتدا يك پايگاه داده جديد ايجاد مي كنيد و پسوند TimescaleDB را براي آن فعال مي كنيد. به پايگاه داده PostgreSQL وارد شويد:
$ sudo -u postgres psql
اكنون يك ديتابيس جديد ايجاد كرده و به آن متصل شويد. اين آموزش پايگاه داده را نامگذاري مي كند:
Postgres=# CREATE DATABASE timeseries;
Postgres=# c timeseries

مي توانيد اطلاعات ديگري در مورد كار با بانك اطلاعاتي PostgreSQL را در نحوه ايجاد ، حذف و مديريت جداول در PostgreSQL در يك آموزش Cloud Server دريافت كنيد.
در آخر ، پسوند TimescaleDB را فعال كنيد:
Timeseries=# CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;
خروجي زير را مشاهده خواهيد كرد:
Output
WARNING:
WELCOME TO
_____ _ _ ____________
|_ _(_) | | | _ ___
| | _ _ __ ___ ___ ___ ___ __ _| | ___| | | | |_/ /
| | | | _ ` _ / _ / __|/ __/ _` | |/ _ | | | ___
| | | | | | | | | __/__ (_| (_| | | __/ |/ /| |_/ /
|_| |_|_| |_| |_|___||___/_____,_|_|___|___/ ____/
Running version 1.5.1
For more information on TimescaleDB, please visit the following links:

1. Getting started: https://docs.timescale.com/getting-started
2. API reference documentation: https://docs.timescale.com/api
3. How TimescaleDB is designed: https://docs.timescale.com/introduction/architecture

Note: TimescaleDB collects anonymous reports to better understand and assist our users.
For more information and how to disable, please see our docs https://docs.timescaledb.com/using-timescaledb/telemetry.

CREATE EXTENSION

نكته اوليه تعامل با داده هاي سري زماني، hypertable ها هستند ، انتزاع بسياري از جداول جداگانه كه داده ها را نگه مي دارند ، به نام chunks.
براي ايجاد يك hypertable ، با يك جدول SQL معمولي شروع كنيد و سپس از طريق تابع create_hypertable آن را به تبديل كنيد.
يك جدول تهيه كنيد كه داده ها را براي رديابي دما و رطوبت در كل دستگاه ها در طول زمان ذخيره كند:
Timeseries=# CREATE TABLE conditions (
Timeseries=# time TIMESTAMP WITH TIME ZONE NOT NULL,
Timeseries=# device_id TEXT,
Timeseries=# temperature NUMERIC,
Timeseries=# humidity NUMERIC
Timeseries=# );

اين دستور يك جدول با نام conditions شامل چهار ستون ايجاد مي كند. ستون اول جدول زماني timestamp را ذخيره مي كند كه شامل منطقه زماني است و نمي تواند خالي باشد. در مرحله بعد ، شما از ستون زمان براي تبديل جدول خود به يك Hypertable استفاده مي كنيد كه در زمان تقسيم مي شود:
Timeseries=# SELECT create_hypertable(‘conditions’, ‘time’);

اين دستور تابع create_hypertable() را فراميخواند، كه يك هايپرجدول TimescaleDB را از جدول PostgreSQL ايجاد مي كند ، و جايگزين دومي مي نمايد.
خروجي زير را دريافت خواهيد كرد:
Output
create_hypertable
————————-
(1,public,conditions,t)
(1 row)

در اين مرحله ، يك Hypertable جديد براي ذخيره داده هاي سري زماني ايجاد كرده ايد. اكنون مي توانيد با نوشتن hypertable ، آن را با داده ها پر كنيد و سپس فرايند حذف آن را اجرا كنيد.
مرحله 4 – نوشتن و حذف داده ها
در اين مرحله داده ها را با استفاده از دستورات استاندارد SQL وارد مي كنيد و مجموعه هاي زيادي از داده ها را از منابع خارجي وارد مي كنيد. اين به شما جنبه هاي پايگاه داده رابطه اي TimescaleDB را نشان مي دهد.
ابتدا دستورات ساده را امتحان كنيد. با استفاده از دستور استاندارد INSERT SQL مي توانيد داده ها را به hypertable وارد كنيد. برخي از داده هاي دما و رطوبت نمونه را براي دستگاه تئوري weather-pro-000000 با استفاده از دستور زير وارد كنيد:
Timeseries=# INSERT INTO conditions(time, device_id, temperature, humidity)
Timeseries=# VALUES (NOW(), ‘weather-pro-000000’, 84.1, 84.1);
خروجي زير را دريافت خواهيد كرد:
Output
INSERT 0 1

همچنين مي توانيد چندين رديف داده به طور همزمان وارد كنيد. موارد زير را امتحان كنيد:
Timeseries=# INSERT INTO conditions
Timeseries=# VALUES
Timeseries=# (NOW(), ‘weather-pro-000002’, 71.0, 51.0),
Timeseries=# (NOW(), ‘weather-pro-000003’, 70.5, 50.5),
Timeseries=# (NOW(), ‘weather-pro-000004’, 70.0, 50.2);
خروجي زير را دريافت خواهيد كرد:
Output
INSERT 0 3

همچنين مي توانيد مشخص كنيد كه دستور INSERT با استفاده از عبارت RETURNING برخي يا تمام داده هاي درج شده را باز گرداند:
Timeseries=# INSERT INTO conditions
Timeseries=# VALUES (NOW(), ‘weather-pro-000002’, 70.1, 50.1) RETURNING *;

خروجي زير را مشاهده خواهيد كرد:
Output
time | device_id | temperature | humidity
——————————-+——————–+————-+———-
2019-09-15 14:14:01.576651+00 | weather-pro-000002 | 70.1 | 50.1
(1 row)

اگر مي خواهيد داده ها را از hypertable حذف كنيد ، از دستور استاندارد DELETE SQL استفاده كنيد. موارد زير را انجام دهيد تا هركدام از داده ها كه داراي دماي بالاتر از 80 يا رطوبت بالاي 50 باشد ، حذف كنيد:
Timeseries=# DELETE FROM conditions WHERE temperature > 80;
Timeseries=# DELETE FROM conditions WHERE humidity > 50;

پس از عمل حذف ، توصيه مي شود از دستور VACUUM استفاده كنيد ، تا فضايي كه هنوز توسط داده هايي كه حذف شده اند مورد استفاده قرار مي گيرد آزاد شود.
Timeseries=# VACUUM conditions;

مي توانيد اطلاعات بيشتري در مورد دستور VACUUM در مستندات PostgreSQL بيابيد.
اين فرمان ها براي ورود داده ها در مقياس كوچك مناسب هستند ، اما از آنجا كه داده هاي سري زماني اغلب داده هاي عظيمي را از چندين دستگاه به طور همزمان توليد مي كنند ، دانستن چگونگي درج صدها يا هزاران سطر به طور همزمان ضروري است. اگر داده هاي منابع خارجي را به صورت ساختاري ، به عنوان مثال با فرمت csv تهيه كرده ايد ، اين كار را مي توانيد به سرعت انجام دهيد.
براي آزمايش اين مرحله ، از يك مجموعه داده نمونه استفاده مي كنيد كه داده هاي دما و رطوبت را از مكان هاي مختلف نشان مي دهد. اين داده ها توسط توسعه دهندگان TimescaleDB ايجاد شده اند تا به شما امكان دهد پايگاه داده خود را امتحان كنيد. در TimescaleDB مي توانيد اطلاعات بيشتري در مورد مجموعه داده هاي نمونه را بررسي كنيد
مستند سازي
بياييد ببينيم چگونه مي توانيد داده ها را از مجموعه داده نمونه weather_smallبه پايگاه داده خود وارد كنيد. اول ، از Postgresql خارج شويد:
Timeseries=# q
سپس مجموعه داده را دانلود كرده و آن را اكستركت كنيد:
$ cd /tmp
$ Curl https://timescaledata.blob.core.windows.net/datasets/weather_small.tar.gz -o weather_small.tar.gz
$ tar -xvzf weather_small.tar.gz

سپس ، داده هاي دما و رطوبت را به پايگاه داده خود وارد كنيد:
$ sudo -u postgres psql -d timeseries -c “COPY conditions FROM weather_small_conditions.csv CSV”
اين به بانك اطلاعاتي timeseries  متصل مي شود و دستور COPY را كه اجرا ميكند كه داده ها را از فايل انتخاب شده به قسمت conditions در hypertable كپي كند. براي چند ثانيه اجرا مي شود.
پس از وارد كردن داده ها به جدول خود ، خروجي زير را دريافت خواهيد كرد:
Output
COPY 1000000

در اين مرحله داده ها را به صورت دستي و در دسته هايي به hypertable اضافه مي كنيد. در مرحله بعدي ، به اجراي درخواست ها ادامه دهيد
مرحله 5 – جستجوي داده ها
اكنون كه جدول شما حاوي داده است ، مي توانيد درخواست هاي مختلفي را براي تجزيه و تحليل آن انجام دهيد.
براي شروع ، وارد پايگاه داده شويد:
$ sudo -u postgres psql -d timeseries
همانطور كه قبلاً ذكر شد ، براي كار با hypertables مي توانيد از دستورات استاندارد SQL استفاده كنيد. به عنوان مثال ، براي نشان دادن 10 ورودي گذشته از بخش conditions ، دستور زير را اجرا كنيد:
Timeseries=# SELECT * FROM conditions LIMIT 10;
خروجي زير را مشاهده خواهيد كرد:
Output
time | device_id | temperature | humidity
————————+——————–+——————–+———-
2016-11-15 12:00:00+00 | weather-pro-000000 | 39.9 | 49.9
2016-11-15 12:00:00+00 | weather-pro-000001 | 32.4 | 49.8
2016-11-15 12:00:00+00 | weather-pro-000002 | 39.800000000000004 | 50.2
2016-11-15 12:00:00+00 | weather-pro-000003 | 36.800000000000004 | 49.8
2016-11-15 12:00:00+00 | weather-pro-000004 | 71.8 | 50.1
2016-11-15 12:00:00+00 | weather-pro-000005 | 71.8 | 49.9
2016-11-15 12:00:00+00 | weather-pro-000006 | 37 | 49.8
2016-11-15 12:00:00+00 | weather-pro-000007 | 72 | 50
2016-11-15 12:00:00+00 | weather-pro-000008 | 31.3 | 50
2016-11-15 12:00:00+00 | weather-pro-000009 | 84.4 | 87.8
(10 rows)

اين دستور به شما امكان مي دهد ببيند چه داده اي در پايگاه داده است. از آنجا كه ديتابيس حاوي يك ميليون ركورد است ، شما از LIMIT 10 براي محدود كردن خروجي به 10 ورودي استفاده كرديد.
براي ديدن جديدترين ورودي ها ، آرايه داده ها را به زماني و به صورت نزولي مرتب كنيد:
Timeseries=# SELECT * FROM conditions ORDER BY time DESC LIMIT 20;
با اين كار 20 ورودي اخير به خروجي فرستاده مي شود.
همچنين مي توانيد يك فيلتر اضافه كنيد. به عنوان مثال ، براي ديدن ورودي هاي دستگاه Weather-Pro-000000 ، فرمان هاي زير را اجرا كنيد:
Timeseries=# SELECT * FROM conditions WHERE device_id = ‘weather-pro-000000’ ORDER BY time DESC LIMIT 10;
در اين حالت ، 10 مورد از آخرين داده هاي دما و رطوبت ثبت شده توسط دستگاه weather-pro-000000 را مشاهده خواهيد كرد.
علاوه بر دستورات استاندارد SQL ، TimescaleDB همچنين تعدادي كاركرد ويژه را ارائه مي دهد كه براي تجزيه و تحليل داده هاي سري زماني مفيد هستند. به عنوان مثال ، براي يافتن ميانه مقادير درجه حرارت ، مي توانيد از query زير با عملكرد percentile_cont استفاده كنيد:
Timeseries=# SELECT percentile_cont(0.5)
Timeseries=# WITHIN GROUP (ORDER BY temperature)
Timeseries=# FROM conditions
Timeseries=# WHERE device_id = ‘weather-pro-000000’;

خروجي زير را مشاهده خواهيد كرد:
Output
percentile_cont
—————–
40.5
(1 row)

به اين ترتيب ، دماي متوسط ​​را براي كل دوره مشاهده كه در آن سنسور weather-pro-00000 قرار دارد مشاهده مي كنيد.
براي نمايش آخرين مقادير از هر يك از سنسورها ، مي توانيد از آخرين عملكرد استفاده كنيد:
Timeseries=# select device_id, last(temperature, time)
Timeseries=# FROM conditions
Timeseries=# GROUP BY device_id;

در خروجي ليستي از تمام سنسورها و آخرين مقادير مربوط را مشاهده خواهيد كرد.
براي بدست آوردن مقادير اوليه از عملكرد first استفاده كنيد.
مثال زير پيچيده تر است. ميانگين دما ، حداقل و حداكثر دما براي سنسور انتخاب شده در 24 ساعت گذشته را نشان مي دهد:
Timeseries=# SELECT time_bucket(‘1 hour’, time) “hour”,
Timeseries=# trunc(avg(temperature), 2) avg_temp,
Timeseries=# trunc(min(temperature), 2) min_temp,
Timeseries=# trunc(max(temperature), 2) max_temp
Timeseries=# FROM conditions
Timeseries=# WHERE device_id = ‘weather-pro-000000’
Timeseries=# GROUP BY “hour” ORDER BY “hour” DESC LIMIT 24;

در اينجا شما از تابع time_bucket استفاده كرده ايد كه به عنوان نسخه قدرتمند تابع PostgreSQL date_trunc عمل مي كند. در نتيجه خواهيد ديد كه در كدام دوره از روز دماي هوا افزايش يا كاهش مي يابد:
Output
hour | avg_temp | min_temp | max_temp
————————+———-+———-+———-
2016-11-16 21:00:00+00 | 42.00 | 42.00 | 42.00
2016-11-16 20:00:00+00 | 41.92 | 41.69 | 42.00
2016-11-16 19:00:00+00 | 41.07 | 40.59 | 41.59
2016-11-16 18:00:00+00 | 40.11 | 39.79 | 40.59
2016-11-16 17:00:00+00 | 39.46 | 38.99 | 39.79
2016-11-16 16:00:00+00 | 38.54 | 38.19 | 38.99
2016-11-16 15:00:00+00 | 37.56 | 37.09 | 38.09
2016-11-16 14:00:00+00 | 36.62 | 36.39 | 37.09
2016-11-16 13:00:00+00 | 35.59 | 34.79 | 36.29
2016-11-16 12:00:00+00 | 34.59 | 34.19 | 34.79
2016-11-16 11:00:00+00 | 33.94 | 33.49 | 34.19
2016-11-16 10:00:00+00 | 33.27 | 32.79 | 33.39
2016-11-16 09:00:00+00 | 33.37 | 32.69 | 34.09
2016-11-16 08:00:00+00 | 34.94 | 34.19 | 35.49
2016-11-16 07:00:00+00 | 36.12 | 35.49 | 36.69
2016-11-16 06:00:00+00 | 37.02 | 36.69 | 37.49
2016-11-16 05:00:00+00 | 38.05 | 37.49 | 38.39
2016-11-16 04:00:00+00 | 38.71 | 38.39 | 39.19
2016-11-16 03:00:00+00 | 39.72 | 39.19 | 40.19
2016-11-16 02:00:00+00 | 40.67 | 40.29 | 40.99
2016-11-16 01:00:00+00 | 41.63 | 40.99 | 42.00
2016-11-16 00:00:00+00 | 42.00 | 42.00 | 42.00
2016-11-15 23:00:00+00 | 42.00 | 42.00 | 42.00
2016-11-15 22:00:00+00 | 42.00 | 42.00 | 42.00
(24 rows)

مي توانيد عملكردهاي مفيدي را در مستندات TimescaleDB بيابيد.
اكنون مي دانيد كه چگونه مي توانيد داده هاي خود را اداره كنيد. در مرحله بعدي ، نحوه حذف داده هاي غير ضروري و نحوه فشرده سازي داده ها را مرور خواهيد كرد.
مرحله 6 – پيكربندي فشرده سازي و حذف داده ها
با جمع آوري داده ها ، فضاي بيشتري در هارد ديسك شما جاي مي گيرد. براي صرفه جويي در فضا ، آخرين نسخه TimescaleDB يك ويژگي فشرده سازي داده را ارائه مي دهد. اين ويژگي به هيچ وجه نيازي به تنظيمات فايل سيستم نخواهد داشت و مي توان از آن براي كارآمد ساختن سريعتر پايگاه داده استفاده كرد. براي اطلاعات بيشتر در مورد نحوه عملكرد اين فشرده سازي ، به مقاله فشرده سازي از TimescaleDB نگاهي بيندازيد.
ابتدا فشرده سازي hypertable خود را فعال كنيد:
Timeseries=# ALTER TABLE conditions SET (
Timeseries=# timescaledb.compress,
Timeseries=# timescaledb.compress_segmentby = ‘device_id’
Timeseries=# );

داده هاي زير را دريافت خواهيد كرد:
Output
NOTICE: adding index _compressed_hypertable_2_device_id__ts_meta_sequence_num_idx ON _timescaledb_internal._compressed_hypertable_2 USING BTREE(device_id, _ts_meta_sequence_num)
ALTER TABLE

توجه: همچنين مي توانيد TimescaleDB را براي فشرده سازي داده ها در مدت زماني مشخص تنظيم كنيد. به عنوان مثال ، شما مي توانيد اجرا كنيد:
Timeseries=# SELECT add_compress_chunks_policy(‘conditions’, INTERVAL ‘7 days’);
در اين مثال ، داده ها بعد از يك هفته به طور خودكار فشرده مي شوند.
مي توانيد آمار مربوط به داده هاي فشرده شده را با اين دستور مشاهده كنيد:
Timeseries=# SELECT *
Timeseries=# FROM timescaledb_information.compressed_chunk_stats;

سپس ليستي از بخش ها را با وضعيت آنها مشاهده خواهيد كرد: وضعيت فشرده سازي و ميزان فضاي داده هاي فشرده نشده و فشرده شده در بايت ها.
اگر به مدت طولاني نيازي به ذخيره داده نداريد ، مي توانيد داده هاي قديمي را حذف كنيد تا حتي فضاي بيشتري آزاد شود. براي اين كار يك تابع ويژه drop_chunks وجود دارد. به شما امكان مي دهد بخش هايي با داده هاي قديمي تر از زمان مشخص شده را حذف كنيد:
Timeseries=# SELECT drop_chunks(interval ’24 hours’, ‘conditions’);
اين درخواست تمام قسمت ها را از بخش conditions در hypertable كه فقط شامل داده هاي قديمي تر از روز قبل است ، خالي مي كند.
خروجي زير را دريافت خواهيد كرد:
Output
drop_chunks
—————————————-
_timescaledb_internal._hyper_1_2_chunk
(1 row)

براي حذف خودكار داده هاي قديمي ، مي توانيد يك كار cron را پيكربندي كنيد. براي كسب اطلاعات بيشتر در مورد نحوه استفاده از cron براي اتوماسيون كارهاي مختلف سيستم ، به آموزش ما مراجعه كنيد.
از پايگاه داده خارج شويد:
Timeseries=# /q
بعد ، crontab خود را با دستور زير ويرايش كنيد ، كه بايد از پوسته اجرا شود:
$ crontab -e
اكنون خط زير را به انتهاي فايل اضافه كنيد:
crontab

0 1 * * * /usr/bin/psql -h localhost -p 5432 -U postgres -d postgres -c “SELECT drop_chunks(inte

اين كار داده هاي منسوخ را كه قديمي تر از يك روز هستند را ساعت 1 صبح هر روز حذف مي كند.
نتيجه
اكنون TimescaleDB را روي سرور مجازي CentOS خود تنظيم كرده ايد. همچنين ايجاد Hypertables ، قرار دادن داده ها در آن ، جستجوي داده ها ، فشرده سازي و حذف سوابق غير ضروري را امتحان كرديد. با استفاده از اين مثالها ، مي توانيد از مزاياي كليدي TimescaleDB نسبت به سيستم هاي معمول مديريت پايگاه داده رابطه اي براي ذخيره داده هاي سري زماني استفاده كنيد ، از جمله:
• نرخ پذيرش بيشتر داده ها
• عملكرد سريعتر درخواست ها
• ويژگي هاي زمان گرا

 

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

نحوه تاييد صحت رمز عبور با Apache در اوبونتو 18.04

نحوه نصب و استفاده از TimescaleDB در CentOS 7

نحوه تاييد صحت رمز عبور با Apache در اوبونتو 18.04 (شروع سريع)

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

نحوه نصب و استفاده ازRadamsa براي فوز كردن برنامه ها (تكنيك تست خودكار نرم افزار) و خدمات شبكه روي Ubuntu 18.04

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

چگونه مي توان با كتابخانه (library) درخواست ها در پايتون شروع به كار كرد

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

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

بسته بندي برنامه Laravel 6 براي توسعه با Docker Compose در اوبونتو 18.04

نحوه بهينه سازي درخواست هاي MySQL با ذخيره سازي ProxySQL در اوبونتو 16.04

نحوه استفاده از Ansible براي نصب و راه اندازي وردپرس با LAMP در اوبونتو 18.04

چگونه مي توان پلتفرم كد سرور Cloud IDE را در اوبونتو 18.04 تنظيم كرد (شروع سريع)

چگونه مي توان از رول هاي ansible براي انتزاع محيط زيرساختي خود استفاده كرد

نحوه پيكربندي يك خوشه Galera با MySQL در سرورهاي اوبونتو 18.04

نحوه تهيه نسخه پشتيبان و بازيابي يك خوشه Kubernetes در vpsgol با استفاده از Velero

نحوه نصب و استفاده از PostgreSQL در CentOS 7

چگونه مي توان پلتفرم Eclipse Theia Cloud IDE را روي اوبونتو 18.4 تنظيم كرد

نحوه استقرار و مديريت DNS با استفاده از DNSControl در Debian 10

چگونه مي توان پلتفرم Cloud IDE كد سرور را روي CentOS 7 تنظيم كرد

 

كلمات كليدي خريد سرور

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

نحوه تاييد صحت رمز عبور با Apache در اوبونتو 18.04

۴ بازديد

مقدمه
به عنوان يك مدير وب ، ممكن است محدود كردن برخي قسمت هاي يك وب سايت براي بازديد كنندگان ، چه به طور موقت و چه به صورت دائمي ، ارزشمند باشد. در حالي كه برنامه هاي وب ممكن است روش هاي تأييد صحت و اجازه قانوني خود را ارائه دهند ، مي توانيد به خود وب سرور مجازي نيز اعتماد كنيد تا دسترسي را محدود كنيد.
اين آموزش به شما مالكيت هاي محافظت از رمز عبور در وب سرور مجازي Apache كه روي اوبونتو 18.04 در حال اجرا است را مي آموزد تا امنيت بيشتري براي سرور مجازي شما فراهم مي كند.
پيش نيازها
براي تكميل اين آموزش ، به دسترسي به سرور مجازي اوبونتو 18.04 نياز داريد.
علاوه بر اين ، قبل از شروع به تنظيمات زير نياز خواهيد داشت:
• كاربر sudo روي سرور مجازي خود: با دنبال كردن راهنماي تنظيم اوليه سرور مجازي Ubuntu 18.04 مي توانيد يك كاربر با امتيازات sudo ايجاد كنيد.
• سرور مجازي وب Apache2: اگر قبلاً آن را راه اندازي نكرده ايد ، آموزش نحوه نصب وب سرور مجازي Apache در Ubuntu 18.04 مي تواند شما را راهنمايي كند.
• سايتي كه با SSL ايمن شده باشد: نحوه تنظيم اين كار بستگي به اين دارد كه شما يك نام دامنه براي سايت خود داشته باشيد يا نه.
o اگر نام دامنه داريد ، مي توانيد سايت خود را با Let’s Encrypt كه گواهي نامه هاي رايگان و قابل اعتماد ارائه مي دهد ، ايمن كنيد. براي تنظيم ، دستورالعمل Let’s Encrypt براي Apache را دنبال كنيد.
o اگر دامنه نداريد و فقط از اين پيكربندي براي آزمايش يا استفاده شخصي استفاده مي كنيد ، مي توانيد به جاي آن از يك گواهي خود امضا شده استفاده كنيد. اين همان رمزگذاري را ارائه مي دهد اما بدون اعتبار دامنه. براي راه اندازي Apache ، راهنماي SSL خود امضا شده را دنبال كنيد.
وقتي همه اينها فراهم شد ، به عنوان كاربر sudo وارد سرور مجازي خود شويد و ادامه كارهاي زير را انجام دهيد.
مرحله 1 – نصب بسته امكانات Apache
بياييد با بروزرساني سرور مجازي و نصب بسته اي كه به آن نياز خواهيم داشت ، شروع كنيم. براي تكميل اين آموزش ، ما از ابزاري به نام htpasswd ، بخشي از بسته apache2-utils ، براي ايجاد فايل و مديريت نام كاربري و كلمه عبور مورد نياز براي دسترسي به محتواي محدود استفاده خواهيم كرد.
⦁ $ sudo apt update

⦁ $ sudo apt install apache2-utils

با استفاده از اين نصب ، اكنون به دستور htpasswd دسترسي داريم.
مرحله 2 – ايجاد فايل رمز عبور
دستور htpasswd به ما امكان مي دهد يك فايل رمز عبور ايجاد كنيم كه Apache بتواند از آن براي تأييد اعتبار كاربران استفاده كند. براي اين منظور يك فايل مخفي با نام .htpasswd در ديركتوري پيكربندي / etc / apache2 خود ايجاد خواهيم كرد.
اولين باري كه از اين ابزار استفاده مي كنيم ، براي ايجاد رمز عبور مشخص شده بايد گزينه -c را اضافه كنيم. يك نام كاربري (در اين مثال sammy ) در انتهاي دستور براي ايجاد يك ورودي جديد در فايل مشخص مي كنيم:
⦁ $ sudo htpasswd -c /etc/apache2/.htpasswd sammy

از شما خواسته مي شود رمز عبور را براي كاربر تهيه و تأييد كنيد.
آرگومان -c را براي هر كاربر ديگري كه مايل به اضافه كردن آن هستيد ، كنار بگذاريد تا فايل را رونويسي نكنيد:
⦁ $ sudo htpasswd /etc/apache2/.htpasswd another_user
اگر محتويات فايل را مشاهده كنيم ، مي توانيم نام كاربري و رمز عبور رمزگذاري شده براي هر ركورد را مشاهده كنيم:
⦁ $ cat /etc/apache2/.htpasswd
Output
sammy:$apr1$.0CAabqX$rb8lueIORA/p8UzGPYtGs/
another_user:$apr1$fqH7UG8a$SrUxurp/Atfq6j7GL/VEC1

اكنون كاربران و رمزهاي عبور خود را با فرمتي داريم كه Apache مي تواند آنها را بخواند.
مرحله 3 – پيكربندي تاييد صحت گذرواژه Apache
در اين مرحله ، بايد Apache را پيكربندي كنيم تا اين فايل را قبل از ارائه محتواي محافظت شده ما بررسي كند. ما مي توانيم اين كار را از دو طريق انجام دهيم: يا مستقيماً در فايل هاست مجازي يك سايت يا با قرار دادن فايل هاي .htaccess در دايركتوري هايي كه نياز به محدوديت دارند. به طور كلي بهتر است از فايل هاست مجازي استفاده كنيد ، اما اگر نياز داريد كه كاربران غير root بتوانند محدوديت دسترسي خود را مديريت كنند ، محدوديت هاي موجود در كنترل نسخه را در كنار وب سايت بررسي كنيد ، يا يك برنامه وب با استفاده از فايل هاي .htaccess براي اهداف ديگر داشته باشيد. گزينه دوم را بررسي كنيد.
گزينه اي را انتخاب كنيد كه متناسب با نياز شما باشد.
گزينه 1: پيكربندي كنترل دسترسي در تعريف هاست مجازي (ارجح)
گزينه اول ويرايش پيكربندي Apache و افزودن محافظت از رمز عبور به فايل هاست مجازي است. به طور كلي عملكرد بهتري خواهد داشت زيرا از انرژي گذاشتن براي خواندن فايل هاي پيكربندي توزيع شده جلوگيري مي كند. اين گزينه نياز به دسترسي به پيكربندي دارد ، كه هميشه در دسترس نيست ، اما وقتي دسترسي داشته باشيد ، انجام آن توصيه مي شود.
با باز كردن فايل هاست مجازي كه مي خواهيد محدوديتي براي آن ايجاد كنيد ، شروع كنيد. به عنوان مثال ، ما از فايل پيش فرض ssl.conf استفاده خواهيم كرد كه هاست مجازي پيش فرض نصب شده از طريق بسته آپاچي اوبونتو را در اختيار شما قرار مي دهد. فايل را با يك ويرايشگر متن خط فرمان مانند nano باز كنيد:
⦁ $ sudo nano /etc/apache2/sites-enabled/default-ssl.conf
در آن ، با كامنت هاي تهي شده ، فايل بايد چيزي شبيه به اين باشد:
/etc/apache2/sites-enabled/default-ssl.conf

ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

احراز هويت بر اساس هر ديركتوري انجام مي شود. براي تنظيم احراز هويت ، بايد دايركتوري مورد نظر خود را با بلوك محدود كنيد. در مثال ما ، كل ريشه document را محدود خواهيم كرد ، اما شما مي توانيد اين ليست را تغيير دهيد تا فقط يك ديركتوري خاص را در فضاي وب قرار دهيد:
/etc/apache2/sites-enabled/default-ssl.conf

ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined



در اين بخش دايركتوري ، مشخص كنيد كه ما در حال انجام تنظيمات تاييد صحت Basic هستيم. براي AuthName ، يك نام بخش يا قلمرو انتخاب كنيد كه هنگام درخواست تاييد ، براي كاربر نمايش داده مي شود. از راهنماي AuthUserFile براي نشان دادن فايل رمزعبوري كه ايجاد كرديم به Apache استفاده كنيد. در آخر ، اين شرط را الزامي كنيد كه فقط يك كاربر معتبر بتواند به اين منبع دسترسي داشته باشد ، اين بدان معني است كه هر كسي كه بتواند هويت خود را با رمز عبور تأييد كند ، مجاز خواهد بود وارد شود:
/etc/apache2/sites-enabled/default-ssl.conf

ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined


AuthType Basic
AuthName “Restricted Content”
AuthUserFile /etc/apache2/.htpasswd
Require valid-user

پس از اتمام فايل را ذخيره كنيد و ببنديد. اگر از nano استفاده مي كنيد ، مي توانيد اين كار را با فشار دادن CTRL X و سپس Y و enter انجام دهيد.
قبل از راه اندازي مجدد سرور مجازي وب ، مي توانيد پيكربندي را با دستور زير بررسي كنيد:
⦁ $ sudo apache2ctl configtest
اگر همه چيز بررسي شود و Syntax OK را به عنوان خروجي دريافت كنيد ، مي توانيد سرور مجازي را مجدداً راه اندازي كنيد تا password policy خود را اجرا كنيد. از آنجا كه systemctl نتيجه تمام دستورات مديريت سرويس را نشان نمي دهد ، ما از اين وضعيت براي اطمينان از اجراي سرور مجازي استفاده خواهيم كرد:
⦁ $ sudo systemctl restart apache2

⦁ $ sudo systemctl status apache
اكنون بايد از رمز عبور دايركتوري كه مشخص كرديد محافظت شود.
گزينه 2: پيكربندي كنترل دسترسي با فايل هاي .htaccess
Apache مي تواند از فايل هاي .htaccess استفاده كند تا به موارد خاصي از پيكربندي در يك ديركتوري محتوا امكان تنظيم دهد. از آنجا كه Apache مجبور است در هر درخواستي كه شامل دايركتوري است و مي تواند بر عملكرد تأثير منفي بگذارد ، اين فايل ها را دوباره بخواند، گزينه 1 ترجيح داده مي شود ، اما اگر در حال حاضر از فايل htaccess استفاده مي كنيد يا نياز داريد كه به كاربران غير root اجازه دهيد محدوديت ها را مديريت كنند، فايل هاي htaccess معقول به نظر ميرسند.
براي فعال كردن حفاظت از رمز عبور با استفاده از فايل هاي .htaccess ، فايل اصلي پيكربندي Apache را با يك ويرايشگر متن خط فرمان مانند nano باز كنيد:
⦁ $ sudo nano /etc/apache2/apache2.conf
بلوك را براي ديركتوري / var / www كه ريشه document را دارد ، پيدا كنيد. پردازش .htaccess را با تغيير دستور AllowOverride در آن بلوك از None به All روشن كنيد:
/etc/apache2/apache2.conf
. . .


Options Indexes FollowSymLinks
AllowOverride All
Require all granted

. . .

پس از اتمام فايل را ذخيره كنيد و ببنديد. اگر از nano استفاده مي كنيد ، مي توانيد اين كار را با فشار دادن CTRL X و سپس Y و enter انجام دهيد.
در مرحله بعد ، بايد براي محدود كردن يك فايل .htaccess را به دايركتوري مورد نظر اضافه كنيم. در توصيحات ما ، كل ريشه document (كل وب سايت) كه در / var / www / html مستقر است محدود خواهد شود، اما مي توانيد اين فايل را در هر دايركتوري كه مايل به محدود كردن دسترسي هستيد، قرار دهيد:
$ sudo nano /var/www/html/.htaccess
در اين فايل ، مشخص كنيد كه ما مايل به تأييد اعتبار basic هستيد. براي AuthName ، يك نام قلمرو انتخاب كنيد كه هنگام درخواست صحت اعتبار ، براي كاربر نمايش داده مي شود. از راهنماي AuthUserFile براي نشان دادن Apache به فايل رمز عبوري كه ايجاد كرديم استفاده كنيد. در آخر ، ما به يك كاربر معتبر براي دسترسي به اين منبع نياز خواهيم داشت ، به اين معني كه هركسي كه بتواند هويت خود را با رمز عبور تأييد كند ، مجاز به ورود خواهد بود:
/var/www/html/.htaccess
AuthType Basic
AuthName “Restricted Content”
AuthUserFile /etc/apache2/.htpasswd
Require valid-user

فايل را ذخيره كنيد و ببنديد. مجدد سرور مجازي وب را راه اندازي كنيد تا كلمه عبور با فايل .htaccess از كليه محتويات موجود در يا تحت ديركتوري محافظت كند و از وضعيت systemctl براي تأييد موفقيت راه اندازي مجدد استفاده كنيد:
⦁ $ sudo systemctl restart apache2

⦁ $ sudo systemctl status apache2
دايركتوري كه مشخص كرديد اكنون بايد با رمز محافظت شود.
مرحله 4 – تأييد صحت رمز عبور
براي تأييد اينكه از محتواي شما محافظت ميشود ، سعي كنيد به محتواي محدود شده خود در يك مرورگر وب دسترسي پيدا كنيد. بايد با يك درخواست نام كاربري و رمزعبور مواجه شويد:

اگر اعتبارات صحيح را وارد كنيد ، به شما اجازه داده ميشود به محتوا دسترسي پيدا كنيد. اگر اعتبارات را اشتباه وارد كنيد يا “cancel” را بزنيد ، صفحه خطاي “unauthorized” را مشاهده مي كنيد:

نتيجه
تبريك مي گوييم! اگر تا اينجا را دنبال كرديد، اكنون تأييد اعتبار اوليه را براي سايت خود تنظيم كرده ايد.
موارد بيشتري وجود دارد كه مي توانيد با پيكربندي Apache و .htaccess انجام دهيد. براي كسب اطلاعات بيشتر در مورد انعطاف پذيري و قدرت پيكربندي Apache ، يكي از اين آموزش ها را امتحان كنيد:
⦁ براي درك بهتر فايل پيكربندي اصلي ، بخش آشنايي با فايل ها و راهنماي مهم Apache را مطالعه كنيد.
⦁ در راهنماي نحوه تنظيم هاست مجازي Apache رويUbuntu 16.04 اطلاعات بيشتري در مورد فايلهاي هاست مجازي كسب كنيد.
⦁ در راهنماي ما در مورد نحوه استفاده از فايل htaccess ، در مورد بازنويسي آدرس هاي اينترنتي ، شخصي سازي صفحات خطا مانند پيام ” Unauthorized ” در بالا ، يا قرار دادن عناصر مشترك در تمام صفحات خود با سرور مجازي جانبي اطلاعات كسب كنيد.

 

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

نحوه تاييد صحت رمز عبور با Apache در اوبونتو 18.04

نحوه نصب و استفاده از TimescaleDB در CentOS 7

نحوه تاييد صحت رمز عبور با Apache در اوبونتو 18.04 (شروع سريع)

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

نحوه نصب و استفاده ازRadamsa براي فوز كردن برنامه ها (تكنيك تست خودكار نرم افزار) و خدمات شبكه روي Ubuntu 18.04

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

چگونه مي توان با كتابخانه (library) درخواست ها در پايتون شروع به كار كرد

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

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

بسته بندي برنامه Laravel 6 براي توسعه با Docker Compose در اوبونتو 18.04

نحوه بهينه سازي درخواست هاي MySQL با ذخيره سازي ProxySQL در اوبونتو 16.04

نحوه استفاده از Ansible براي نصب و راه اندازي وردپرس با LAMP در اوبونتو 18.04

چگونه مي توان پلتفرم كد سرور Cloud IDE را در اوبونتو 18.04 تنظيم كرد (شروع سريع)

چگونه مي توان از رول هاي ansible براي انتزاع محيط زيرساختي خود استفاده كرد

نحوه پيكربندي يك خوشه Galera با MySQL در سرورهاي اوبونتو 18.04

نحوه تهيه نسخه پشتيبان و بازيابي يك خوشه Kubernetes در vpsgol با استفاده از Velero

نحوه نصب و استفاده از PostgreSQL در CentOS 7

چگونه مي توان پلتفرم Eclipse Theia Cloud IDE را روي اوبونتو 18.4 تنظيم كرد

نحوه استقرار و مديريت DNS با استفاده از DNSControl در Debian 10

چگونه مي توان پلتفرم Cloud IDE كد سرور را روي CentOS 7 تنظيم كرد

 

كلمات كليدي خريد سرور

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