x تبلیغات
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 فرانسه

نحوه نصب و استفاده ازRadamsa برای فوز کردن برنامه ها (تکنیک تست خودکار نرم افزار) و خدمات شبکه روی U

مقدمه

تهدیدهای امنیتی بطور مداوم پیچیده تر می شوند ، بنابراین توسعه دهندگان و ادمین های سیستم ها باید در دفاع و آزمایش امنیت برنامه های خود رویکردی پیشگیرانه اتخاذ کنند. روشی متداول برای آزمایش امنیت برنامه های مشتری یا خدمات شبکه، fuzzing است که شامل ارسال مکرر داده های نامعتبر یا نادرست به برنامه و تجزیه و تحلیل پاسخ آن است. این کار برای کمک به اینکه برنامه در برابر ورودی غیر منتظره که ممکن است شامل داده های نادرست یا حملات واقعی باشد، چقدر مقاومت و استحکام دارد مفید است. Radamsa یک ابزار fuzzing منبع باز است که می تواند موارد آزمایش را بر اساس داده های ورودی مشخص شده توسط کاربر ایجاد کند. Radamsa کاملاً قابل سندیت است و تاکنون در یافتن آسیب پذیری در برنامه های واقعی مانند Gzip موفق بوده است. در این آموزش ، Radamsa را با استفاده از موارد تست خود ، برای فوز تست خط فرمان و برنامه های مبتنی بر شبکه، نصب و استفاده خواهید کرد. هشدار: Radamsa ابزاری برای آزمایش نفوذ است که به شما امکان می دهد آسیب پذیری ها یا نقاط ضعف سیستم ها یا برنامه های خاص را شناسایی کنید. شما نباید از آسیب پذیری های یافت شده با Radamsa برای هر نوع رفتار بی احتیاط ، آسیب یا سوء استفاده مخرب استفاده کنید. از لحاظ اخلاقی آسیب پذیری ها باید به نگهدارنده برنامه آسیب دیده گزارش شود و بدون اجازه صریح در معرض دید عموم قرار نگیرد. پیش نیازها قبل از شروع این راهنما به موارد زیر نیاز خواهید داشت: یک سرور مجازی Ubuntu 18.04 که با دنبال کردن راهنمای راه اندازی سرور مجازی اولیه با Ubuntu 18.04نصب شده باشد، و شامل یک کاربر sudo غیر ریشه و فایروال فعال برای مسدود کردن پورت های غیر ضروری باشد. یک خط فرمان یا برنامه مبتنی بر شبکه که می خواهید آن را امتحان کنید ، به عنوان مثال Gzip ، Tcpdump ، Bind ، Apache ، jq یا هر برنامه دیگری که مورد نظر شماست. به عنوان نمونه برای اهداف این آموزش ، از jq استفاده خواهیم کرد. هشدار: Radamsa می تواند باعث شود برنامه ها یا سیستم ها به صورت ناپایدار یا crash اجرا شوند ، بنابراین فقط Radamsa را در محیطی که برای این کار آماده هستید مانند سرور اختصاصی اجرا کنید. لطفاً قبل از انجام fuzz testing در برابر آن ، از داشتن اجازه کتبی صریح از صاحب سیستم اطمینان حاصل کنید. پس از آماده شدن ، به عنوان کاربر غیر ریشه وارد سرور مجازی خود شوید. مرحله 1 - نصب Radamsa در مرحله اول ، Radamsa را دانلود و کامپایل می کنید تا در سیستم خود شروع به استفاده از آن کنید. کد منبع Radamsa در منبع رسمی GitLab موجود است. با به روز کردن فهرست بسته محلی شروع کنید تا تغییرات جدید بالادست را منعکس کنید: $ sudo apt update سپس بسته های gcc ، git ، make و wget لازم جهت تهیه کد منبع را در یک باینری قابل اجرا نصب کنید: $ sudo apt install gcc git make wget apt پس از تأیید نصب ، بسته های مشخص شده و کلیه وابستگی های مورد نیاز آنها را دانلود و نصب خواهد کرد. در مرحله بعد ، یک نسخه از کد منبع را برای Radamsa با کلون کردن آن از منبع میزبان در GitLab ، دانلود می کنید: $ git clone https://gitlab.com/akihe/radamsa.git به این ترتیب یک دایرکتوری به نام radamsa شامل کد منبع برای برنامه ایجاد خواهید کرد. برای شروع کامپایل کد به فهرست راهنما بروید: $ cd radamsa در مرحله بعد ، می توانید مراحل کامپایل را با استفاده از make انجام دهید: $ make سرانجام ، می توانید باینری Radamsa کامپایل شده را با PATH $ خود نصب کنید: $ sudo make install پس از اتمام این کار ، می توانید نسخه نصب شده را بررسی کنید تا مطمئن شوید که همه چیز کار می کند: $ radamsa --version خروجی شما شبیه به زیر خواهد بود: Output Radamsa 0.6 اگر خطای radamsa: command not found را مشاهده کردید، دوبار بررسی کنید که تمام وابستگی های لازم نصب شده اند و در هنگام کامپایل خطایی وجود ندارد. اکنون که Radamsa را نصب کردید ، می توانید برخی از موارد نمونه آزمایشی را ایجاد کنید تا ببینید که Radamsa چگونه کار می کند و برای چه چیزی می تواند مورد استفاده قرار گیرد. مرحله 2 – ارائه موارد Fuzzing Test اکنون که Radamsa نصب شده است ، می توانید از آن برای تولید برخی موارد Fuzzing Test استفاده کنید. نمونه آزمایشی بخشی از داده هاست که به عنوان ورودی برای برنامه ای که تست می کنید استفاده می شود. به عنوان مثال ، اگر در حال آزمایش یک برنامه بایگانی مانند Gzip هستید ، مورد آزمایشی ممکن است یک آرشیو فایلی باشد که می خواهید آن را فشرده سازی کنید. توجه: Radamsa داده های ورودی را با طیف گسترده ای از روش های غیر منتظره از جمله تکرار شدید ، bit flips ، تزریق کاراکتر کنترل و موارد دیگر دستکاری می کند. این کار ممکن است باعث شود که بخش پایانه شما متوقف یا ناپایدار شود ، بنابراین قبل از ادامه این کار آگاه باشید. در مرحله اول ، یک متن ساده را به Radamsa منتقل کنید تا ببینید چه اتفاقی می افتد: $ echo "Hello, world!" | radamsa این کار داده های ورودی را دستکاری (یا فوز) می کند و یک نمونه آزمایشی را تولید می کند ، به عنوان مثال: Output Hello,, world! در این حالت ، Radamsa یک کاما اضافی بین Hello و world اضافه کرد. ممکن است تغییر مهمی به نظر نرسد، اما در برخی از برنامه ها ممکن است باعث تفسیر نادرست داده ها شود. بیایید دوباره با اجرای همان دستور امتحان کنیم. خروجی متفاوتی را مشاهده خواهید کرد: Output Hello, '''''''wor'd! این بار ، چندین تک نقل قول (') به رشته وارد شد ، از جمله علامتی که روی l در world قرار گرفت. این مورد تست خاص به احتمال زیاد منجر به ایجاد مشکلاتی در برنامه خواهد شد ، زیرا اغلب از نقل قول های تک / دوتایی برای جدا کردن بخش های مختلف داده در یک لیست استفاده می شود. بیایید یک بار دیگر امتحان کنیم: Output Hello, $+$PATH\u0000`xcalc`world! در این مورد Radamsa یک رشته ورود پوسته ای را درج کرده است ، که برای تست آسیب پذیری های ورود فرمان در برنامه ای که شما آزمایش می کنید ، مفید خواهد بود. شما از Radamsa برای fuzz رشته ورودی و تولید یک سری موارد آزمایشی استفاده کرده اید. در مرحله بعد ، از Radamsa برای fuzz کردن یک برنامه خط فرمان استفاده خواهید کرد. مرحله 3 - Fuzzing برنامه خط فرمان در این مرحله ، از Radamsa استفاده می کنید تا یک برنامه خط فرمان را fuzz کرده و در مورد هرگونه کرشی که رخ می دهد گزارش دهید. تکنیک دقیق fuzzing هر برنامه بسیار متفاوت است و روشهای مختلف برای برنامه های مختلف موثرتر خواهد بود. اما در این آموزش از مثال jq استفاده خواهیم کرد که یک برنامه خط فرمان برای پردازش داده های JSON است. ممکن است برای هر برنامه مشابهی تا زمانی که از اصول کلی گرفتن برخی شکل های داده های ساختاری یا بدون ساختار تبعیت میکند، استفاده کنید، کاری با آن انجام دهید و سپس نتیجه ای دریافت کنید. به عنوان مثال این مثال همچنین با Gzip ، Grep ، bc ، tr و غیره کار می کند. اگر jq را قبلاً نصب نکردید ، می توانید آن را با استفاده از apt نصب کنید: $ sudo apt install jq اکنون jq نصب خواهد شد. برای شروع fuzzing ، یک فایل نمونه JSON ایجاد کنید که از آن به عنوان ورودی Radamsa استفاده خواهید کرد: $ nano test.json سپس داده های JSON نمونه زیر را به فایل اضافه کنید: test.json { "test": "test", "array": [ "item1: foo", "item2: bar" ] } اگر می خواهید صحت دستور JSON را بررسی کنید می توانید این فایل را با استفاده از jq تجزیه کنید: $ jq . test.json اگر JSON معتبر باشد ، jq فایل را در خروجی صادر می کند. در غیر اینصورت خطایی نمایش داده می شود که می توانید در صورت لزوم برای اصلاح دستور استفاده کنید. در مرحله بعد ، فایل JSON تست را با استفاده از Radamsa فوز کنید و سپس آن را به jq منتقل کنید. این باعث خواهد شد که jq مورد آزمایش فوز شده / دستکاری شده را به جای داده های معتبر اصلی JSON بخواند: $ radamsa test.json | jq اگر Radamsa داده های JSON را به شکلی fuzz کند که هنوز از نظر نحوی معتبر باشد ، jq داده ها را به خروجی می فرستد ، اما با هر تغییری که Radamsa در آن ایجاد کرده است. از طرف دیگر ، اگر Radamsa باعث بی اعتبار بودن داده های JSON شود ، jq خطای مربوطه را نشان می دهد. مثلا: Output parse error: Expected separator between values at line 5, column 16 نتیجه جایگزین این خواهد بود که jq قادر به پردازش درست داده های فوز شده نیست و باعث کرش یا سوء رفتار آن می شود. این همان چیزی است که در fuzzing واقعاً به دنبال آن هستید ، زیرا ممکن است نشانگر آسیب پذیری امنیتی مانند سرریز بافر یا تزریق فرمان باشد. برای آزمایش کارآمدتر در برابر آسیب پذیری هایی از این دست ، می توان از اسکریپت Bash برای خودکارسازی فرایند fuzzing استفاده کرد ، از جمله تولید موارد تست ، انتقال آنها به برنامه هدف و گرفتن هر خروجی مربوطه. فایلی با نام jq-fuzz.sh ایجاد کنید: $ nano jq-fuzz.sh محتوای دقیق اسکریپت بسته به نوع برنامه مورد نظر شما و داده های ورودی متفاوت خواهد بود ، اما در مورد jq و سایر برنامه های مشابه ، متن زیر کافی است. اسکریپت را در فایل jq-fuzz.sh کپی کنید: jq-fuzz.sh #!/bin/bash while true; do radamsa test.json > input.txt jq . input.txt > /dev/null 2>&1 if [ $? -gt 127 ]; then cp input.txt crash-`date +s%.%N`.txt echo "Crash found!" fi don این اسکریپت حاوی یک while است تا محتویات به صورت مکرر حلقه شود. هر بار که اسکریپت حلقه شود ، Radamsa یک فایل آزمایشی را بر اساس test.json تولید می کند و آن را در input.txt ذخیره می کند. فایل آزمایشی input.txt از طریق jq اجرا می شود ، آن هم با استفاده از همه خروجی های استاندارد و خطا که به / dev / null هدایت می شوند تا از پر شدن صفحه ترمینال جلوگیری شود. در آخر ، مقدار خروجی jq بررسی می شود. اگر مقدار خروجی از 127 بیشتر باشد ، نشانگر پایان مخرب (کرش) است ، سپس داده های ورودی برای بررسی در تاریخ بعدی در فایلی به نام crash ذخیره می شوند - به دنبال آن تاریخ فعلی در ثانیه ها و نانو ثانیه های یونیکس می آید. اسکریپت را به عنوان قابل اجرا علامت گذاری کنید و آن را برای اجرا تنظیم کنید تا به طور خودکار تست فوزی jq را شروع کند: $ chmod +x jq-fuzz.sh $ ./jq-fuzz.sh می توانید CTRL + C را در هر زمان صادر کنید تا اسکریپت خاتمه یابد. سپس می توانید با استفاده از ls برای نمایش فهرست دایرکتوری حاوی فایلهای کرش شده ای که ایجاد شده اند، بررسی کنید که آیا کرشی یافت شده است یا خیر. ممکن است بخواهید داده های ورودی JSON خود را بهبود بخشید زیرا احتمالاً استفاده از یک فایل ورودی پیچیده تر باعث بهبود کیفیت نتایج fuzzing می شود. از استفاده از یک فایل بزرگ یا فایلی که حاوی تعداد زیادی از داده های تکراری است ، خودداری کنید - یک فایل ورودی ایده آل اندازه کوچکی دارد ، اما همچنان ممکن است تا سر حد امکان عناصر پیچیده بسیاری داشته باشد. به عنوان مثال ، یک فایل ورودی خوب شامل نمونه هایی از داده های ذخیره شده در تمام قالب ها ، از جمله رشته ها ، اعداد صحیح ، بولی ها ، لیست ها و موضوعات ، و همچنین در صورت امکان داده های تو در تو می باشد. شما از Radamsa برای fuzz کردن یک برنامه خط فرمانی استفاده کرده اید. در مرحله بعد ، از Radamsa برای fuzz کردن درخواست ها برای خدمات شبکه استفاده خواهید کرد. مرحله 4 – فوز کردن درخواست ها برای خدمات شبکه Radamsa همچنین می تواند برای fuzzing سرویس های شبکه ، یا به عنوان مشتری یا سرور مجازی شبکه ، مورد استفاده قرار گیرد. در این مرحله ، از Radamsa برای fuzzing سرویس شبکه استفاده خواهید کرد که Radamsa به عنوان مشتری عمل می کند. هدف از fuzzing خدمات شبکه ، آزمایش چگونگی انعطاف پذیری یک سرویس شبکه خاص برای مشتریانی است که داده های ناقص و / یا مخرب را ارسال می کنند. بسیاری از خدمات شبکه مانند سرور مجازی های وب یا سرور مجازی های DNS معمولاً در معرض اینترنت قرار دارند ، به این معنی که آنها یک هدف مشترک برای مهاجمان هستند. یک سرویس شبکه ای که به اندازه کافی در برابر دریافت داده های نادرست مقاوم نیست ممکن است کرش کند یا حتی بدتر از آن این که در وضعیت باز از کار بیفتد و به مهاجمان اجازه دهد داده های حساس مانند کلیدهای رمزگذاری یا داده های کاربر را بخوانند. روش خاص برای fuzzing خدمات شبکه بسته به خدمات شبکه در آن بسیار متفاوت است، با این حال در این مثال ما از Radamsa استفاده خواهیم کرد تا یک سرور مجازی اصلی وب که محتوای HTMLاستاتیک را ارائه می دهد ، fuzz کند. در مرحله اول ، شما باید سرور مجازی وب را تنظیم کنید تا از آن برای آزمایش استفاده کنید. شما می توانید این کار را با استفاده از سرور مجازی توسعه داخلی که همراه با بسته php-cli است انجام دهید. همچنین برای آزمایش سرور مجازی وب خود به curl نیاز دارید. اگر php-cli و / یا curl نصب نکردید ، می توانید آنها را با استفاده از apt نصب کنید: $ sudo apt install php-cli curl بعد ، دایرکتوری ایجاد کنید تا فایل های سرور مجازی وب خود را در آن ذخیره کنید و به داخل آن بروید: $ mkdir ~/www $ cd ~/www سپس ، یک فایل HTML ایجاد کنید که حاوی متن نمونه است $ nano index.html موارد زیر را به فایل اضافه کنید: index.html

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 فرانسه

نحوه استفاده از Cron برای خودکارسازی کارها در اوبونتو 18.04

Cron یک برنامه زمانبندی شغلی مبتنی بر زمان است که در سیستم عاملهای مشابه یونیکس، از جمله توزیع های لینوکس یافت می شود. Cron در پس زمینه اجرا می شود و وظایف برنامه ریزی شده با Cron ، به عنوان "cron jobs" ، به صورت خودکار انجام می شوند ، و باعث می شود cron برای اتوماسیون کارهای مربوط به تعمیر و نگهداری مفید باشد. این راهنما مروری بر نحوه برنامه ریزی کارها با استفاده از دستور ویژه cron ارائه می دهد. همچنین به چندین میانبر می رود که می توان برای نوشتن و فهم برنامه های شغلی از آنها استفاده کرد. پیش نیازها برای تکمیل این راهنما ، به رایانه ای نیاز دارید که اوبونتو 18.04 در آن در حال اجرا باشد. این کامپیوتر می تواند دستگاه محلی شما ، یک ماشین مجازی یا یک سرور خصوصی مجازی باشد. صرف نظر از این که از چه نوع رایانه ای برای دنبال کردن این راهنما استفاده می کنید ، باید یک کاربر غیر ریشه با امتیازات ادمین و پیکربندی شده داشته باشد. برای انجام این کار ، راهنمای راه اندازی سرور مجازی اولیه ما را برای اوبونتو 18.04 دنبال کنید. نصب Cron تقریباً هر توزیع لینوکس به صورت پیش فرض شکلی از cron را نصب شده دارد. اما ، اگر از دستگاه اوبونتو استفاده می کنید که cron در آن نصب نشده است ، می توانید آن را با استفاده از APT نصب کنید. قبل از نصب cron در دستگاه اوبونتو ، ایندکس پکیج محلی کامپیوتر را به روز کنید: $ sudo apt update سپس cron را با دستور زیر نصب کنید: $ sudo apt install cron باید مطمئن شوید که در پس زمینه نیز تنظیم شده است: $ sudo systemctl enable cron Output Synchronizing state of cron.service with SysV service script with /lib/systemd/systemd-sysv-install. Executing: /lib/systemd/systemd-sysv-install enable cron پس از آن ، cron بر روی سیستم شما نصب می شود و برای شروع برنامه ریزی کارها برای شما آماده است. درک نحوه کار Cron وظایف cron در یک فایل ویژه به اسم crontab ثبت و مدیریت می شوند. هر پروفایل کاربر در سیستم می تواند crontab مخصوص به خود را داشته باشد تا بتواند کارهایی را ترتیب دهد ، که تحت / var / spool / cron / crontabs ذخیره می شود. برای برنامه ریزی یک کار ، فقط کافی است crontab خود را برای ویرایش باز کنید و یک کار نوشته شده در قالب یک عبارت cron را اضافه کنید. ترکیب عبارات cron را می توان به دو عنصر تقسیم کرد: برنامه ریزی و دستور اجرا. این دستور می تواند تقریباً هر دستوری باشد که معمولاً در خط فرمان اجرا می کنید. مولفه برنامه ریزی دستور به 5 قسمت مختلف تقسیم می شود که به ترتیب زیر نوشته می شوند: زمان مقادیر مجاز دقیقه 0-59 ساعت 0-23 روزی از ماه 1-31 ماه 1-12 or JAN-DEC روز هفته 0-6 or SUN-SAT وظایفی که با هم در یک crontab برنامه ریزی شده اند به صورت زیر ساختار یافته اند: minute hour day_of_month month day_of_week command_to_run در اینجا یک مثال کاربردی از یک عبارت cron آورده شده است. این عبارت هر سه شنبه ساعت 5:30 دقیقه بعد از ظهر فرمان http://www.google.com را اجرا می کند: 30 17 * * 2 curl http://www.google.com همچنین چند کاراکتر ویژه وجود دارد که می توانید در جزء برنامه یک عبارت Cron درج کنید تا برنامه ریزی ساده تر شود: *: در اصطلاحات Cron ، ستاره یک متغیر عام است که "all" را نشان می دهد. بنابراین ، یک کار که با * * * * * ... برنامه ریزی شده هر دقیقه از هر ساعت از هر روز از هر ماه است. ،: کاما مقادیر برنامه ریزی را برای تشکیل لیست می شکنند. اگر می خواهید یک کار در ابتدا و اواسط هر ساعت انجام شود، به جای نوشتن دو وظیفه جداگانه (به عنوان مثال ، 0 * * * * ... و 30 * * * * ...) ، می توانید همان عملکرد مشابه را با یک کار یعنی (0,30 * * * * ...) به دست آورید. -: یک خط فاصله طیف وسیعی از مقادیر را در قسمت برنامه نمایش می دهد. به جای داشتن 30 کار برنامه ریزی شده جداگانه برای یک فرمان ،که می خواهید 30 دقیقه اول هر ساعت اجرا شود (مانند 0 * * * * ...، 1 * * * * ... ، 2 * * * * ... ، و غیره) ، می توانید فقط آن را به عنوان 0-29 * * * * ... برنامه ریزی کنید ... /: برای بیان یک مقدار مرحله می توانید از فوروارد اسلش با ستاره استفاده کنید. به عنوان مثال ، به جای نوشتن 8 وظیفه جداگانه برای اجرای یک فرمان هر سه ساعت یک بار (مانند 0 ، 0 * * * * ... ، 0 3 * * * ... ، 0 6 * * * * ... ، و غیره) ، می توانید آن را به صورت برنامه ریزی 0 */3 * * * .... کنید . توجه: شما نمی توانید مقادیر گام را به صورت اختیاری بیان کنید. فقط می توانید از اعداد صحیح استفاده کنید که به طور مساوی در محدوده مجاز از قسمت مورد نظر تقسیم شوند. به عنوان مثال ، در قسمت "ساعت" فقط می توانید یک فوروارد اسلش را با 1 ، 2 ، 3 ، 4 ، 6 ، 8 یا 12 دنبال کنید. در اینجا چند نمونه دیگر از نحوه استفاده از مؤلفه برنامه ریزی cron آورده شده است: * * * * - فرمان را هر دقیقه اجرا کنید. 12 * * * * - دستور را 12 دقیقه بعد از هر ساعت اجرا کنید. 0,15,30,45 * * * * - فرمان را هر 15 دقیقه یک بار اجرا کنید. / 15 * * * * - دستور را هر 15 دقیقه یک بار اجرا کنید. 0 4 * * * - دستور را هر روز در ساعت 4 صبح اجرا کنید. 0 4 * * 2-4 - فرمان را هر سه شنبه ، چهارشنبه و پنجشنبه ساعت 4:00 صبح اجرا کنید. 20,40 */8 * 7-12 * - فرمان را در 20 و 40 دقیقه هر ساعت 8 هر روز از 6 ماه گذشته سال اجرا کنید. اگر هر یک از این موارد برای شما گیج کننده ها بود یا برای برنامه ریزی برای کارهای مهم خود کمک میخواهید ، Cronitor یک ویرایشگر برنامه مفید Cron به نام "Crontab Guru" را ارائه می دهد که می توانید برای بررسی صحت برنامه های cron خود استفاده کنید. مدیریت Crontabs وقتی برنامه خود را تنظیم کردید و کاری را که می خواهید اجرا کنید، تعیین نمودید، باید آن را در جایی قرار دهید که Daemon شما قادر به خواندن آن باشد. همانطور که قبلاً ذکر شد ، crontab یک فایل ویژه است که زمان بندی کارها را اجرا می کند. اما ، این کارها به طور مستقیم ویرایش نمیشوند. بلکه ، توصیه می شود از دستور crontab استفاده کنید. این کار به شما امکان می دهد crontab پروفایل کاربر خود را بدون تغییر امتیازات خود با sudo ، ویرایش کنید. دستور crontab همچنین در مورد خطاهای دستوری که در crontab دارید به شما اطلاع می دهد ، در حالی که ویرایش مستقیم آن این کار را نمیکند. شما می توانید crontab خود را با دستور زیر ویرایش کنید: $ crontab -e اگر این اولین بار است که دستور crontab را در زیر این پروفایل کاربر اجرا می کنید ، از شما خواسته می شود ویرایشگر متن پیش فرض را برای استفاده هنگام ویرایش crontab خود انتخاب کنید: Output no crontab for sammy - using an empty one Select an editor. To change later, run 'select-editor'. 1. /bin/nano <---- easiest 2. /usr/bin/vim.basic 3. /usr/bin/vim.tiny 4. /bin/ed Choose 1-4 [1]: شماره مربوط به ویرایشگر مورد نظر خود را وارد کنید. از طرف دیگر ، فقط می توانید ENTER را فشار دهید تا گزینه پیش فرض ، یعنی nano را بپذیرید. پس از انتخاب خود ، به یک قسمت جدید منتقل می شوید که حاوی برخی از دستورالعمل های اعلام شده در مورد نحوه استفاده از آن است: # Edit this file to introduce tasks to be run by cron. # # Each task to run has to be defined through a single line # indicating with different fields when the task will be run # and what command to run for the task # # To define the time you can provide concrete values for # minute (m), hour (h), day of month (dom), month (mon), # and day of week (dow) or use '*' in these fields (for 'any').# # Notice that tasks will be started based on the cron's system # daemon's notion of time and timezones. # # Output of the crontab jobs (including errors) is sent through # email to the user the crontab file belongs to (unless redirected). # # For example, you can run a backup of all your user accounts # at 5 a.m every week with: # 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/ # # For more information see the manual pages of crontab(5) and cron(8) # # m h dom mon dow command هنگامی که crontab -e را در آینده اجرا کردید ، crontab شما را در این ویرایشگر متن بطور خودکار نشان می دهد. هنگامی که در ویرایشگر هستید ، می توانید برنامه خود را با هر کار در یک خط جدید وارد کنید. یا اینکه می توانید فعلا crontab را ذخیره کرده و آن را ببندید (اگر nano را انتخاب کردید ، CTRL + X، Y ، سپس enter بزنید). توجه: در سیستم های لینوکس ، crontab دیگری وجود دارد که تحت دایرکتوری / etc / ذخیره شده است. این crontab یک نوع سیستم گسترده است که دارای یک فیلد اضافی است که برای آن باید مشخصات کاربری هر کار cron تحت آن اجرا شود. این آموزش بر روی crontab های اختصاصی کاربر تمرکز دارد ، اما اگر می خواهید crontab سیستم گسترده را ویرایش کنید ، می توانید با دستور زیر این کار را انجام دهید: $ sudo nano /etc/crontab اگر می خواهید محتوای crontab خود را مشاهده کنید ، اما آن را ویرایش نکنید ، می توانید از دستور زیر استفاده کنید: $ crontab -l می توانید crontab خود را با دستور زیر پاک کنید: هشدار: دستور زیر از شما نمی خواهد تأیید کنید که می خواهید crontab خود را پاک کنید یا خیر. فقط در صورتی آن را اجرا کنید که مطمئن هستید می خواهید آن را پاک کنید . $ crontab -r این دستور بلافاصله crontab کاربر را حذف می کند. با این وجود، می توانید از فلگ -i استفاده کنید تا این فرمان از شما تأیید بخواهد که آیا واقعاً می خواهید crontab کاربر را حذف کنید: $ crontab -r -i Output crontab: really delete sammy's crontab? (y/n) هنگامی که از شما این تایید خواسته شد ، باید y را وارد کنید تا crontab حذف شود یا n را وارد کنید تا کنسل شود. مدیریت خروجی کار Cron از آنجا که کارهای Cron در پس زمینه اجرا می شوند ، همیشه مشخص نیست که آیا با موفقیت اجرا میشوند یا خیر. اکنون که می دانید چگونه از دستور crontab استفاده کنید و چگونه یک کار cron را برنامه ریزی نمایید، می توانید با روش های مختلف هدایت مجدد خروجی کارهای cron شروع به آزمایش کنید تا به شما در ردیابی موفقیت آمیز بودن آنها کمک کند. اگر یک mail transfer agent - مانند Sendmail - در سرور مجازی خود نصب و به درستی پیکربندی کرده اید ، می توانید خروجی کارهای cron را به آدرس ایمیل مرتبط با پروفایل کاربر لینوکس خود ارسال کنید. همچنین می توانید با ارائه تنظیمات MAILTO در بالای crontab ، آدرس ایمیل را به صورت دستی مشخص کنید. به عنوان مثال ، می توانید خطوط زیر را به crontab اضافه کنید. این خطوط شامل عبارت MAILTO به همراه یک آدرس ایمیل مثال میباشد، و همچنین یک دستورالعمل SHELL که به shell میگوید اجرا شود ( در این مثال bash ) ، یک دستورالعمل HOME با اشاره به مسیری که در آن می توانید جستجوی باینری cron را انجام دهید، و یک کار تکی cron : . . . MAILTO="example@vpsgol.net" SHELL=/bin/bash HOME=/ * * * * * echo ‘Run this command every minute’ این کار خاص دستور "هر دقیقه این دستور را اجرا کن" را به همراه دارد و آن خروجی هر دقیقه به آدرس ایمیل مشخص شده پس از دستورالعمل MAILTO ارسال می شود. همچنین می توانید برای جلوگیری از دریافت ایمیل با خروجی ، خروجی یک کار cron را به یک فایل log یا به یک مکان خالی هدایت کنید. برای افزودن خروجی یک دستور برنامه ریزی شده در یک فایل log ، >> را به انتهای فرمان اضافه کنید که به دنبال آن نام و مکان یک فایل log به انتخاب شما قرار میگیرد ، مانند این: * * * * * echo ‘Run this command every minute’ >> /directory/path/file.log بهتر است بگوییم شما می خواهید از cron برای اجرای یک اسکریپت استفاده کنید اما آن را در پس زمینه اجرا کنید. برای این کار ، می توانید خروجی اسکریپت را به یک مکان خالی ، مانند / dev / null هدایت کنید که بلافاصله تمام داده های نوشته شده برای آن را حذف می کند. به عنوان مثال ، کار cron زیر یک اسکریپت PHP را اجرا می کند و آن را در پس زمینه اجرا می کند: * * * * * /usr/bin/php /var/www/domain.com/backup.php > /dev/null 2>&1 این کار cron همچنین خطای استاندارد را بازنویسی می کند - با 2 نمایش داده میشود- به خروجی استاندارد( >&1). از آنجا که خروجی استاندارد در حال حاضر به / dev / null هدایت می شود ، اساساً به اسکریپت اجازه می دهد تا بی صدا اجرا شود. حتی اگر crontab حاوی جمله MAILTO باشد ، خروجی این فرمان به آدرس ایمیل مشخص شده ارسال نمی شود. محدود کردن دسترسی شما می توانید کاربران مجاز به استفاده از دستور crontab را با فایل های cron.allow و cron.deny مدیریت کنید، که هر دو در فهرست / etc / ذخیره شده اند. اگر فایل cron.deny وجود داشته باشد ، هر کاربر ذکر شده در آن از ویرایش crontab خود منع خواهد شد. اگر cron.allow وجود داشته باشد ، فقط کاربران ذکر شده در آن قادر به ویرایش crontab های خود هستند. اگر هر دو فایل وجود داشته باشد و در هر یک از کاربران یکسان قرار داشته باشد ، فایل cron.allow بر cron.deny غلبه می کند و کاربر قادر به ویرایش crontab خود خواهد بود. به عنوان مثال ، برای انکار دسترسی به همه کاربران و سپس دسترسی به کاربر ishmael ، می توانید از ترتیب دستور زیر استفاده کنید: $ sudo echo ALL >>/etc/cron.deny $ sudo echo ishmael >>/etc/cron.allow ابتدا، با افزودن ALL به فایل cron.deny ، کلیه کاربران را قفل می کنیم. سپس با اضافه کردن نام کاربری به فایل cron.allow ، به پروفایل کاربر ishmael برای اجرای کارهای cron دسترسی می دهیم. توجه داشته باشید که اگر یک کاربر دارای امتیازات sudo است ، می تواند crontab کاربر دیگری را با دستور زیر ویرایش کند: $ sudo crontab -u user -e با این حال ، اگر cron.deny وجود داشته باشد و کاربرها در آن لیست شده باشند و در cron.allow ذکر نشده باشند ، پس از اجرای دستور قبلی ، خطای زیر را دریافت خواهید کرد: Output The user user cannot use this program (crontab) به صورت پیش فرض، بیشتر cron daemon ها فرض خواهند کرد که همه کاربران به cron دسترسی دارند مگر اینکه cron.allow یا cron.deny وجود داشته باشد. دستور ویژه فرمان های کوتاه متعددی وجود دارند که می توانید در فایل crontab خود استفاده کنید تا به ساده سازی برنامه ریزی کاری کمک کند. آنها در اصل میانبرهایی هستند برای برنامه ریزی عددی معادل که به صورت زیر مشخص شده: Shortcut Shorthand for @hourly 0 * * * * @daily 0 0 * * * @weekly 0 0 * * 0 @monthly 0 0 1 * * @yearly 0 0 1 1 * توجه: همه cron daemon ها (به ویژه نسخه های قدیمی) نمی توانند این ترکیب را تجزیه کنند ، بنابراین قبل از اعتماد به آن ، دوبار بررسی کنید. علاوه بر این، هر زمان که سرور مجازی شروع به کار کند، @reboot همه فرمان های بعد از خود را اجرا می کند: @reboot echo "System start up" استفاده از این میانبرها در هر زمان ممکن می تواند به تفسیر برنامه کارها در crontab شما کمک کند. نتیجه Cron یک ابزار انعطاف پذیر و قدرتمند است که می تواند بار بسیاری از وظایف مرتبط با مدیریت سیستم را کاهش دهد. هنگامی که با اسکریپت های shell ترکیب شود ، می توانید کارهایی را که معمولاً خسته کننده یا پیچیده هستند ، به طور خودکار انجام دهید. به عنوان مثال ، شما می توانید یک اسکریپت shell بنویسید تا بک آپ داده ها را به یک راه حل ذخیره سازی موضوعی ارسال کند و سپس آن را با استفاده از cron خودکار کنید. از این لینک ها زیر می توانید آمورش های بیشتری برای لینوکس پیدا کنید : نحوه تایید صحت رمز عبور با 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 آمریکاخر

نحوه استفاده از Cron برای خودکارسازی کارها در اوبونتو 18.04

Cron یک برنامه زمانبندی شغلی مبتنی بر زمان است که در سیستم عاملهای مشابه یونیکس، از جمله توزیع های لینوکس یافت می شود. Cron در پس زمینه اجرا می شود و وظایف برنامه ریزی شده با Cron ، به عنوان "cron jobs" ، به صورت خودکار انجام می شوند ، و باعث می شود cron برای اتوماسیون کارهای مربوط به تعمیر و نگهداری مفید باشد. این راهنما مروری بر نحوه برنامه ریزی کارها با استفاده از دستور ویژه cron ارائه می دهد. همچنین به چندین میانبر می رود که می توان برای نوشتن و فهم برنامه های شغلی از آنها استفاده کرد. پیش نیازها برای تکمیل این راهنما ، به رایانه ای نیاز دارید که اوبونتو 18.04 در آن در حال اجرا باشد. این کامپیوتر می تواند دستگاه محلی شما ، یک ماشین مجازی یا یک سرور خصوصی مجازی باشد. صرف نظر از این که از چه نوع رایانه ای برای دنبال کردن این راهنما استفاده می کنید ، باید یک کاربر غیر ریشه با امتیازات ادمین و پیکربندی شده داشته باشد. برای انجام این کار ، راهنمای راه اندازی سرور مجازی اولیه ما را برای اوبونتو 18.04 دنبال کنید. نصب Cron تقریباً هر توزیع لینوکس به صورت پیش فرض شکلی از cron را نصب شده دارد. اما ، اگر از دستگاه اوبونتو استفاده می کنید که cron در آن نصب نشده است ، می توانید آن را با استفاده از APT نصب کنید. قبل از نصب cron در دستگاه اوبونتو ، ایندکس پکیج محلی کامپیوتر را به روز کنید: $ sudo apt update سپس cron را با دستور زیر نصب کنید: $ sudo apt install cron باید مطمئن شوید که در پس زمینه نیز تنظیم شده است: $ sudo systemctl enable cron Output Synchronizing state of cron.service with SysV service script with /lib/systemd/systemd-sysv-install. Executing: /lib/systemd/systemd-sysv-install enable cron پس از آن ، cron بر روی سیستم شما نصب می شود و برای شروع برنامه ریزی کارها برای شما آماده است. درک نحوه کار Cron وظایف cron در یک فایل ویژه به اسم crontab ثبت و مدیریت می شوند. هر پروفایل کاربر در سیستم می تواند crontab مخصوص به خود را داشته باشد تا بتواند کارهایی را ترتیب دهد ، که تحت / var / spool / cron / crontabs ذخیره می شود. برای برنامه ریزی یک کار ، فقط کافی است crontab خود را برای ویرایش باز کنید و یک کار نوشته شده در قالب یک عبارت cron را اضافه کنید. ترکیب عبارات cron را می توان به دو عنصر تقسیم کرد: برنامه ریزی و دستور اجرا. این دستور می تواند تقریباً هر دستوری باشد که معمولاً در خط فرمان اجرا می کنید. مولفه برنامه ریزی دستور به 5 قسمت مختلف تقسیم می شود که به ترتیب زیر نوشته می شوند: زمان مقادیر مجاز دقیقه 0-59 ساعت 0-23 روزی از ماه 1-31 ماه 1-12 or JAN-DEC روز هفته 0-6 or SUN-SAT وظایفی که با هم در یک crontab برنامه ریزی شده اند به صورت زیر ساختار یافته اند: minute hour day_of_month month day_of_week command_to_run در اینجا یک مثال کاربردی از یک عبارت cron آورده شده است. این عبارت هر سه شنبه ساعت 5:30 دقیقه بعد از ظهر فرمان http://www.google.com را اجرا می کند: 30 17 * * 2 curl http://www.google.com همچنین چند کاراکتر ویژه وجود دارد که می توانید در جزء برنامه یک عبارت Cron درج کنید تا برنامه ریزی ساده تر شود: *: در اصطلاحات Cron ، ستاره یک متغیر عام است که "all" را نشان می دهد. بنابراین ، یک کار که با * * * * * ... برنامه ریزی شده هر دقیقه از هر ساعت از هر روز از هر ماه است. ،: کاما مقادیر برنامه ریزی را برای تشکیل لیست می شکنند. اگر می خواهید یک کار در ابتدا و اواسط هر ساعت انجام شود، به جای نوشتن دو وظیفه جداگانه (به عنوان مثال ، 0 * * * * ... و 30 * * * * ...) ، می توانید همان عملکرد مشابه را با یک کار یعنی (0,30 * * * * ...) به دست آورید. -: یک خط فاصله طیف وسیعی از مقادیر را در قسمت برنامه نمایش می دهد. به جای داشتن 30 کار برنامه ریزی شده جداگانه برای یک فرمان ،که می خواهید 30 دقیقه اول هر ساعت اجرا شود (مانند 0 * * * * ...، 1 * * * * ... ، 2 * * * * ... ، و غیره) ، می توانید فقط آن را به عنوان 0-29 * * * * ... برنامه ریزی کنید ... /: برای بیان یک مقدار مرحله می توانید از فوروارد اسلش با ستاره استفاده کنید. به عنوان مثال ، به جای نوشتن 8 وظیفه جداگانه برای اجرای یک فرمان هر سه ساعت یک بار (مانند 0 ، 0 * * * * ... ، 0 3 * * * ... ، 0 6 * * * * ... ، و غیره) ، می توانید آن را به صورت برنامه ریزی 0 */3 * * * .... کنید . توجه: شما نمی توانید مقادیر گام را به صورت اختیاری بیان کنید. فقط می توانید از اعداد صحیح استفاده کنید که به طور مساوی در محدوده مجاز از قسمت مورد نظر تقسیم شوند. به عنوان مثال ، در قسمت "ساعت" فقط می توانید یک فوروارد اسلش را با 1 ، 2 ، 3 ، 4 ، 6 ، 8 یا 12 دنبال کنید. در اینجا چند نمونه دیگر از نحوه استفاده از مؤلفه برنامه ریزی cron آورده شده است: * * * * - فرمان را هر دقیقه اجرا کنید. 12 * * * * - دستور را 12 دقیقه بعد از هر ساعت اجرا کنید. 0,15,30,45 * * * * - فرمان را هر 15 دقیقه یک بار اجرا کنید. / 15 * * * * - دستور را هر 15 دقیقه یک بار اجرا کنید. 0 4 * * * - دستور را هر روز در ساعت 4 صبح اجرا کنید. 0 4 * * 2-4 - فرمان را هر سه شنبه ، چهارشنبه و پنجشنبه ساعت 4:00 صبح اجرا کنید. 20,40 */8 * 7-12 * - فرمان را در 20 و 40 دقیقه هر ساعت 8 هر روز از 6 ماه گذشته سال اجرا کنید. اگر هر یک از این موارد برای شما گیج کننده ها بود یا برای برنامه ریزی برای کارهای مهم خود کمک میخواهید ، Cronitor یک ویرایشگر برنامه مفید Cron به نام "Crontab Guru" را ارائه می دهد که می توانید برای بررسی صحت برنامه های cron خود استفاده کنید. مدیریت Crontabs وقتی برنامه خود را تنظیم کردید و کاری را که می خواهید اجرا کنید، تعیین نمودید، باید آن را در جایی قرار دهید که Daemon شما قادر به خواندن آن باشد. همانطور که قبلاً ذکر شد ، crontab یک فایل ویژه است که زمان بندی کارها را اجرا می کند. اما ، این کارها به طور مستقیم ویرایش نمیشوند. بلکه ، توصیه می شود از دستور crontab استفاده کنید. این کار به شما امکان می دهد crontab پروفایل کاربر خود را بدون تغییر امتیازات خود با sudo ، ویرایش کنید. دستور crontab همچنین در مورد خطاهای دستوری که در crontab دارید به شما اطلاع می دهد ، در حالی که ویرایش مستقیم آن این کار را نمیکند. شما می توانید crontab خود را با دستور زیر ویرایش کنید: $ crontab -e اگر این اولین بار است که دستور crontab را در زیر این پروفایل کاربر اجرا می کنید ، از شما خواسته می شود ویرایشگر متن پیش فرض را برای استفاده هنگام ویرایش crontab خود انتخاب کنید: Output no crontab for sammy - using an empty one Select an editor. To change later, run 'select-editor'. 1. /bin/nano <---- easiest 2. /usr/bin/vim.basic 3. /usr/bin/vim.tiny 4. /bin/ed Choose 1-4 [1]: شماره مربوط به ویرایشگر مورد نظر خود را وارد کنید. از طرف دیگر ، فقط می توانید ENTER را فشار دهید تا گزینه پیش فرض ، یعنی nano را بپذیرید. پس از انتخاب خود ، به یک قسمت جدید منتقل می شوید که حاوی برخی از دستورالعمل های اعلام شده در مورد نحوه استفاده از آن است: # Edit this file to introduce tasks to be run by cron. # # Each task to run has to be defined through a single line # indicating with different fields when the task will be run # and what command to run for the task # # To define the time you can provide concrete values for # minute (m), hour (h), day of month (dom), month (mon), # and day of week (dow) or use '*' in these fields (for 'any').# # Notice that tasks will be started based on the cron's system # daemon's notion of time and timezones. # # Output of the crontab jobs (including errors) is sent through # email to the user the crontab file belongs to (unless redirected). # # For example, you can run a backup of all your user accounts # at 5 a.m every week with: # 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/ # # For more information see the manual pages of crontab(5) and cron(8) # # m h dom mon dow command هنگامی که crontab -e را در آینده اجرا کردید ، crontab شما را در این ویرایشگر متن بطور خودکار نشان می دهد. هنگامی که در ویرایشگر هستید ، می توانید برنامه خود را با هر کار در یک خط جدید وارد کنید. یا اینکه می توانید فعلا crontab را ذخیره کرده و آن را ببندید (اگر nano را انتخاب کردید ، CTRL + X، Y ، سپس enter بزنید). توجه: در سیستم های لینوکس ، crontab دیگری وجود دارد که تحت دایرکتوری / etc / ذخیره شده است. این crontab یک نوع سیستم گسترده است که دارای یک فیلد اضافی است که برای آن باید مشخصات کاربری هر کار cron تحت آن اجرا شود. این آموزش بر روی crontab های اختصاصی کاربر تمرکز دارد ، اما اگر می خواهید crontab سیستم گسترده را ویرایش کنید ، می توانید با دستور زیر این کار را انجام دهید: $ sudo nano /etc/crontab اگر می خواهید محتوای crontab خود را مشاهده کنید ، اما آن را ویرایش نکنید ، می توانید از دستور زیر استفاده کنید: $ crontab -l می توانید crontab خود را با دستور زیر پاک کنید: هشدار: دستور زیر از شما نمی خواهد تأیید کنید که می خواهید crontab خود را پاک کنید یا خیر. فقط در صورتی آن را اجرا کنید که مطمئن هستید می خواهید آن را پاک کنید . $ crontab -r این دستور بلافاصله crontab کاربر را حذف می کند. با این وجود، می توانید از فلگ -i استفاده کنید تا این فرمان از شما تأیید بخواهد که آیا واقعاً می خواهید crontab کاربر را حذف کنید: $ crontab -r -i Output crontab: really delete sammy's crontab? (y/n) هنگامی که از شما این تایید خواسته شد ، باید y را وارد کنید تا crontab حذف شود یا n را وارد کنید تا کنسل شود. مدیریت خروجی کار Cron از آنجا که کارهای Cron در پس زمینه اجرا می شوند ، همیشه مشخص نیست که آیا با موفقیت اجرا میشوند یا خیر. اکنون که می دانید چگونه از دستور crontab استفاده کنید و چگونه یک کار cron را برنامه ریزی نمایید، می توانید با روش های مختلف هدایت مجدد خروجی کارهای cron شروع به آزمایش کنید تا به شما در ردیابی موفقیت آمیز بودن آنها کمک کند. اگر یک mail transfer agent - مانند Sendmail - در سرور مجازی خود نصب و به درستی پیکربندی کرده اید ، می توانید خروجی کارهای cron را به آدرس ایمیل مرتبط با پروفایل کاربر لینوکس خود ارسال کنید. همچنین می توانید با ارائه تنظیمات MAILTO در بالای crontab ، آدرس ایمیل را به صورت دستی مشخص کنید. به عنوان مثال ، می توانید خطوط زیر را به crontab اضافه کنید. این خطوط شامل عبارت MAILTO به همراه یک آدرس ایمیل مثال میباشد، و همچنین یک دستورالعمل SHELL که به shell میگوید اجرا شود ( در این مثال bash ) ، یک دستورالعمل HOME با اشاره به مسیری که در آن می توانید جستجوی باینری cron را انجام دهید، و یک کار تکی cron : . . . MAILTO="example@vpsgol.net" SHELL=/bin/bash HOME=/ * * * * * echo ‘Run this command every minute’ این کار خاص دستور "هر دقیقه این دستور را اجرا کن" را به همراه دارد و آن خروجی هر دقیقه به آدرس ایمیل مشخص شده پس از دستورالعمل MAILTO ارسال می شود. همچنین می توانید برای جلوگیری از دریافت ایمیل با خروجی ، خروجی یک کار cron را به یک فایل log یا به یک مکان خالی هدایت کنید. برای افزودن خروجی یک دستور برنامه ریزی شده در یک فایل log ، >> را به انتهای فرمان اضافه کنید که به دنبال آن نام و مکان یک فایل log به انتخاب شما قرار میگیرد ، مانند این: * * * * * echo ‘Run this command every minute’ >> /directory/path/file.log بهتر است بگوییم شما می خواهید از cron برای اجرای یک اسکریپت استفاده کنید اما آن را در پس زمینه اجرا کنید. برای این کار ، می توانید خروجی اسکریپت را به یک مکان خالی ، مانند / dev / null هدایت کنید که بلافاصله تمام داده های نوشته شده برای آن را حذف می کند. به عنوان مثال ، کار cron زیر یک اسکریپت PHP را اجرا می کند و آن را در پس زمینه اجرا می کند: * * * * * /usr/bin/php /var/www/domain.com/backup.php > /dev/null 2>&1 این کار cron همچنین خطای استاندارد را بازنویسی می کند - با 2 نمایش داده میشود- به خروجی استاندارد( >&1). از آنجا که خروجی استاندارد در حال حاضر به / dev / null هدایت می شود ، اساساً به اسکریپت اجازه می دهد تا بی صدا اجرا شود. حتی اگر crontab حاوی جمله MAILTO باشد ، خروجی این فرمان به آدرس ایمیل مشخص شده ارسال نمی شود. محدود کردن دسترسی شما می توانید کاربران مجاز به استفاده از دستور crontab را با فایل های cron.allow و cron.deny مدیریت کنید، که هر دو در فهرست / etc / ذخیره شده اند. اگر فایل cron.deny وجود داشته باشد ، هر کاربر ذکر شده در آن از ویرایش crontab خود منع خواهد شد. اگر cron.allow وجود داشته باشد ، فقط کاربران ذکر شده در آن قادر به ویرایش crontab های خود هستند. اگر هر دو فایل وجود داشته باشد و در هر یک از کاربران یکسان قرار داشته باشد ، فایل cron.allow بر cron.deny غلبه می کند و کاربر قادر به ویرایش crontab خود خواهد بود. به عنوان مثال ، برای انکار دسترسی به همه کاربران و سپس دسترسی به کاربر ishmael ، می توانید از ترتیب دستور زیر استفاده کنید: $ sudo echo ALL >>/etc/cron.deny $ sudo echo ishmael >>/etc/cron.allow ابتدا، با افزودن ALL به فایل cron.deny ، کلیه کاربران را قفل می کنیم. سپس با اضافه کردن نام کاربری به فایل cron.allow ، به پروفایل کاربر ishmael برای اجرای کارهای cron دسترسی می دهیم. توجه داشته باشید که اگر یک کاربر دارای امتیازات sudo است ، می تواند crontab کاربر دیگری را با دستور زیر ویرایش کند: $ sudo crontab -u user -e با این حال ، اگر cron.deny وجود داشته باشد و کاربرها در آن لیست شده باشند و در cron.allow ذکر نشده باشند ، پس از اجرای دستور قبلی ، خطای زیر را دریافت خواهید کرد: Output The user user cannot use this program (crontab) به صورت پیش فرض، بیشتر cron daemon ها فرض خواهند کرد که همه کاربران به cron دسترسی دارند مگر اینکه cron.allow یا cron.deny وجود داشته باشد. دستور ویژه فرمان های کوتاه متعددی وجود دارند که می توانید در فایل crontab خود استفاده کنید تا به ساده سازی برنامه ریزی کاری کمک کند. آنها در اصل میانبرهایی هستند برای برنامه ریزی عددی معادل که به صورت زیر مشخص شده: Shortcut Shorthand for @hourly 0 * * * * @daily 0 0 * * * @weekly 0 0 * * 0 @monthly 0 0 1 * * @yearly 0 0 1 1 * توجه: همه cron daemon ها (به ویژه نسخه های قدیمی) نمی توانند این ترکیب را تجزیه کنند ، بنابراین قبل از اعتماد به آن ، دوبار بررسی کنید. علاوه بر این، هر زمان که سرور مجازی شروع به کار کند، @reboot همه فرمان های بعد از خود را اجرا می کند: @reboot echo "System start up" استفاده از این میانبرها در هر زمان ممکن می تواند به تفسیر برنامه کارها در crontab شما کمک کند. نتیجه Cron یک ابزار انعطاف پذیر و قدرتمند است که می تواند بار بسیاری از وظایف مرتبط با مدیریت سیستم را کاهش دهد. هنگامی که با اسکریپت های shell ترکیب شود ، می توانید کارهایی را که معمولاً خسته کننده یا پیچیده هستند ، به طور خودکار انجام دهید. به عنوان مثال ، شما می توانید یک اسکریپت shell بنویسید تا بک آپ داده ها را به یک راه حل ذخیره سازی موضوعی ارسال کند و سپس آن را با استفاده از cron خودکار کنید. از این لینک ها زیر می توانید آمورش های بیشتری برای لینوکس پیدا کنید : نحوه تایید صحت رمز عبور با 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 آمریکاخر

نحوه بهینه سازی درخواست های 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 آمریکاخر