بازنويسي URL را با mod_rewrite براي Apache در Debian 10

۷۴ بازديد

ماژول mod_rewrite در Apache به شما امكان مي دهد URL ها را با روشي تميزتر بازنويسي كنيد ، مسيرهاي قابل خواندن توسط انسان را به رشته هاي جستار سازگار با كد تبديل كنيد. همچنين به شما امكان مي دهد URL ها را بر اساس شرايط بازنويسي كنيد.
فايل .htaccess به شما امكان مي دهد بدون دسترسي به فايلهاي پيكربندي سرور مجازي ، قوانين بازنويسي را ايجاد و اعمال كنيد. با قرار دادن فايل .htaccess در ريشه وب سايت خود ، مي توانيد بازنويسي ها را بر اساس هر سايت يا هر دايركتوري مديريت كنيد.
در اين آموزش ، شما مي توانيد mod_rewrite را فعال كرده و از فايلهاي .htaccess براي ايجاد يك تغيير مسير URL اصلي استفاده كنيد و سپس چند مورد استفاده پيشرفته را جستجو كنيد.
پيش نيازها
براي دنبال كردن اين آموزش ، به موارد زير نياز داريد:
يك سرور مجازي Debian 10 با دنبال كردن راهنماي ستاپ اوليه سرور مجازي Debian 10 تنظيم شده باشد، و شامل كاربر sudo غير ريشه و يك فايروال باشد.
Apache كه طبق مراحل 1 و 2 نحوه نصب وب سرور مجازي Apache در Debian 10 نصب شده باشد.

مرحله 1 – فعال كردن mod_rewrite
براي اينكه Apache بتواند قوانين بازنويسي را درك كند ، ابتدا بايد mod_rewrite را فعال كنيم. قبلاً نصب شده است ، اما در نصب پيش فرض Apache غيرفعال است. براي فعال كردن ماژول از دستور a2enmod استفاده كنيد:
$ sudo a2enmod rewrite

با اين كار ماژول فعال مي شود يا به شما هشدار مي دهد كه ماژول از قبل فعال شده است. براي اجراي اين تغييرات ، Apache را مجدداً راه اندازي كنيد:
$ sudo systemctl restart apache2

اكنون mod_rewrite كاملاً فعال است. در مرحله بعدي يك فايل .htaccess را براي تعريف قوانين بازنويسي براي تغيير مسيرها تنظيم خواهيم كرد.
مرحله 2 – تنظيم .htaccess
فايل .htaccess به ما امكان مي دهد قوانين بازنويسي خود را بدون دسترسي به فايل هاي پيكربندي سرور مجازي اصلاح كنيم. به همين دليل ، .htaccess براي امنيت برنامه وب شما بسيار مهم است. زماني كه پيش از نام فايل وجود دارد، اطمينان مي دهد كه فايل پنهان شده است.

توجه: هر قانوني كه بتوانيد در يك فايل .htaccess قرار دهيد ، مي تواند مستقيماً در فايل هاي پيكربندي سرور مجازي قرار گيرد. در حقيقت ، مطالب رسمي Apache توصيه مي كند از فايل هاي پيكربندي سرور مجازي به جاي .htaccess به دليل زمان پردازش سريعتر استفاده كنيد.
با اين حال ، در اين مثال ساده ، افزايش عملكرد ناچيز خواهد بود. علاوه بر اين ، تنظيم قوانين در .htaccess راحت است ، به خصوص با چندين وب سايت در همان سرور مجازي. نيازي به راه اندازي مجدد سرور مجازي براي ايجاد تغييرات يا اعمال امتيازات اصلي براي ويرايش قوانين ، ساده سازي نگهداري و روند ايجاد تغييرات با يك حساب بدون امتياز نيست. نرم افزارهاي منبع باز محبوب مانند WordPress و Joomla براي ايجاد تغييرات و قوانين اضافي در صورت تقاضا به فايلهاي .htaccess متكي هستند.
قبل از شروع استفاده از فايل هاي .htaccess ، بايد تنظيمات ديگري را تنظيم و ايمن كنيد.
به طور پيش فرض ، Apache با استفاده از فايل .htaccess اعمال قوانين بازنويسي را ممنوع مي كند ، بنابراين ابتدا بايد تغييراتي در فايل اعمال كنيد. فايل پيش فرض پيكربندي Apache را با استفاده از nano يا ويرايشگر متن مورد علاقه خود باز كنيد:
$ sudo nano /etc/apache2/sites-available/000-default.conf

در داخل آن فايل ، بلوك را كه از خط اول شروع مي شود ، پيدا خواهيد كرد. در داخل آن بلوك ، بلوك جديد زير را اضافه كنيد تا فايل پيكربندي شما مانند زير شود. مطمئن شويد كه همه بلوك ها به درستي قرار گرفته اند:
/etc/apache2/sites-available/000-default.conf


Options Indexes FollowSymLinks
AllowOverride All
Require all granted

. . .

فايل را ذخيره كنيد و ببنديد. اگر از nano استفاده كرده ايد ، اين كار را با فشار دادن CTRL + X ، Y ، سپس enter انجام دهيد.
سپس ، پيكربندي خود را بررسي كنيد:
$ sudo apache2ctl configtest

اگر خطايي وجود ندارد ، Apache را مجدداً راه اندازي كنيد تا تغييرات خود را به مرحله اجرا برسانيد:
$ sudo systemctl restart apache2

اكنون ، يك فايل .htaccess را در ريشه وب ايجاد كنيد:
$ sudo nano /var/www/html/.htaccess

اين خط را در بالاي فايل جديد اضافه كنيد تا موتور بازنويسي فعال شود.
var/www/html/.htaccess
RewriteEngine on

فايل را ذخيره كرده و خارج شويد.
اكنون يك فايل .htaccess عملياتي داريد كه مي توانيد از آن استفاده كنيد تا قوانين مسيريابي برنامه وب خود را كنترل كنيد. در مرحله بعد ، يك فايل وب سايت نمونه را ايجاد خواهيم كرد كه براي نشان دادن قوانين بازنويسي استفاده خواهيم كرد.
مرحله 3 – پيكربندي بازنويسي URL
در اينجا ، يك بازنويسي URL پايه را تنظيم مي كنيم كه URL هاي زيبا را به مسيرهاي واقعي به صفحات تبديل مي كند. به طور خاص ، ما به كاربران اين امكان را مي دهيم كه به http: // your_server_ip / about دسترسي پيدا كنند و صفحه اي به نام about.html را به نمايش بگذارند.
با ايجاد فايلي با نام about.html در ريشه وب شروع كنيد:
$ sudo nano /var/www/html/about.html

كد HTML زير را در فايل كپي كنيد ، سپس آن را ذخيره كرده و ببنديد.
/var/www/html/about.html


About Us


About Us



شما مي توانيد به اين صفحه به آدرس http: //your_server_ip/about.html دسترسي پيدا كنيد ، اما توجه داشته باشيد كه اگر سعي كنيد به http: // your_server_ip / About دسترسي پيدا كنيد ، خطاي 404 Not Found  را مشاهده خواهيد كرد. در عوض براي دسترسي به صفحه با استفاده از /about، يك قانون بازنويسي ايجاد خواهيم كرد.
همه RewriteRules از اين قالب پيروي مي كنند:
General RewriteRule structure
RewriteRule pattern substitution [flags]

RewriteRule دستورالعمل را مشخص مي كند
patternيك عبارت معمولي است كه رشته مورد نظر را از URL مطابقت مي دهد ، همان چيزي است كه بيننده در مرورگر تايپ مي كند.
substitution مسير URL واقعي است ، يعني مسير فايلي كه Apache ارائه مي كند.
flags پارامترهاي اختياري هستند كه مي توانند نحوه عملكرد قانون را تغيير دهند.
بياييد قانون بازنويسي URL را ايجاد كنيم. فايل .htaccess را باز كنيد:
$ sudo nano /var/www/html/.htaccess

بعد از اولين خط ، RewriteRule زير را اضافه كنيد و فايل را ذخيره كنيد:
/var/www/html/.htaccess
RewriteEngine on
RewriteRule ^about$ about.html [NC]

در اين حالت ، ^about$ الگو است ، about.html جايگزين است ، و [NC] يك پرچم است. مثال ما از چند كاراكتر با معني خاص استفاده مي كند:
^ شروع URL را نشان مي دهد ، بعد از your_server_ip /.
$ نشانگر پايان URL است.
about با رشته “درباره” منطبق ميشود
About.html فايل واقعي است كه كاربر به آن دسترسي پيدا مي كند.
[NC] يك پرچم است كه قانون را نسبت به نمونه غير حساس مي كند.
اكنون مي توانيد به مرورگر خود به http: // your_server_ip / about دسترسي پيدا كنيد. در حقيقت ، با اين قانون كه در بالا نشان داده شده است ، آدرس هاي اينترنتي زير به about.html نيز اشاره مي كنند:
http: // your_server_ip / about ، به دليل تعريف قانون.
http: // your_server_ip / About ، چون اين قانون حساسيتي ندارد.
http: //your_server_ip/about.html ، زيرا نام اصلي فايل هميشه كار خواهد كرد.
با اين حال ، موارد زير كار نخواهد كرد:
http: // your_server_ip / about / ، زيرا اين قانون به صراحت بيان مي كند كه ممكن است هيچ چيز ديگري بعد از about وجود نداشته باشد ، زيرا كاراكتر $ بعد از آن ظاهر مي شود.
http: // your_server_ip / contact ، زيرا با رشته about در قانون مطابقت ندارد.
اكنون يك فايل .htaccess عملياتي با يك قانون پايه داريد كه مي توانيد نيازهاي خود را تغيير داده و گسترش دهيد. در بخش هاي بعدي ، دو نمونه ديگر از دستورالعمل هاي متداول را نشان خواهيم داد.
مثال 1 – ساده سازي رشته هاي پرس و جو با RewriteRule
برنامه هاي وب اغلب از رشته هاي پرس و جو استفاده مي كنند ، كه با استفاده از علامت سؤال (؟) بعد از آدرس به URL اضافه مي شوند. پارامترهاي جداگانه با استفاده از ampersand (&) محدود مي شوند. رشته هاي پرس و جو ممكن است براي انتقال داده هاي اضافي بين صفحات برنامه فردي استفاده شود.
به عنوان مثال ، يك صفحه نتيجه جستجو كه به زبان PHP نوشته شده است ، مي تواند از URL مانند http://example.com/results.php?item=shirt&season=summer استفاده كند. در اين مثال ، دو پارامتر اضافي به اسكريپت نرم افزار result.php موهومي منتقل مي شود: item ، با مقدار shirt ، و season با مقدار summer. برنامه ممكن است از اطلاعات رشته پرس و جو براي ايجاد صفحه مناسب براي بازديد كننده استفاده كند.
قوانين بازنويسي Apache اغلب براي ساده كردن پيوندهاي طولاني و ناخوشايند به عنوان مثال URL فوق به URLهاي مناسب تر كه تايپ و تفسير بصري آسان تري دارند ، به كار مي روند. در اين مثال ، ما مي خواهيم لينك بالا را ساده كنيم تا به http://example.com/shirt/summer تبديل شود. مقادير پارامتر shirt و summer هنوز در آدرس هستند ، اما بدون نام رشته و نام اسكريپت.
در اينجا يك قانون براي انجام اين كار وجود دارد:
Simple substition
RewriteRule ^shirt/summer$ results.php?item=shirt&season=summer [QSA]

summer / shirt به طور واضح در آدرس درخواستي مطابقت دارد و به Apache گفته مي شود كه به جاي results.php?item=shirt&season=summer را ارائه دهد.
پرچم هاي [QSA] معمولاً در قوانين بازنويسي استفاده مي شوند. آنها به Apache مي گويند هر رشته درخواست اضافي را در URL ارائه شده اضافه كند ، بنابراين اگر بازديد كننده http://example.com/shirt/summer?page=2 را تايپ كند، سرور مجازي با results.php?item=shirt&season=summer&page=2 پاسخ مي دهد. بدون آن ، رشته پرس و جو اضافي دور ريخته مي شود.
در حالي كه اين روش به جلوه مطلوب دست مي يابد ، هم نام آيتم و هم فصل به طور خاص كدگذاري مي شوند. اين بدان معني است كه اين قانون براي ساير موارد ، مانند pants ، يا فصول ديگر مانند winter كار نخواهد كرد.
براي عمومي تر كردن اين قاعده ، مي توانيم از عبارات منظم براي مطابقت با قسمت هاي آدرس اصلي استفاده كنيم و از آن قسمت ها در الگوي جايگزين استفاده كنيم. قانون اصلاح شده به اين شكل در خواهد آمد:
Simple substition
RewriteRule ^([A-Za-z0-9]+)/(summer|winter|fall|spring) results.php?item=$1&season=$2 [QSA]

اولين گروه عبارت معمول در پرانتز با رشته اي حاوي حروف الفبا و اعدادي مانند shirt يا pants مطابقت دارد و بخش منطبق را به عنوان متغير $1 ذخيره مي كند. دومين گروه عبارت معمول در پرانتز دقيقاً summer ، winter ، fall يا spring را مطابقت ميدهد و به همين ترتيب بخش سازگار را به عنوان $2 ذخيره مي كند.
بخش هاي منطبق پس از آن در URL نتيجه به صورت متغيرهاي item و season به جاي مقادير shirt و summer استفاده مي شوند.
موارد فوق مثلاً http://example.com/pants/summer را به http://example.com/results.php?item=pants&season=summer تبديل مي كند. اين مثال همچنين مناسب آينده است ، به شما امكان مي دهد چندين مورد و فصل را به طور صحيح با استفاده از يك قانون واحد بازنويسي كنيد.
مثال 2 – اضافه كردن شرايط با منطق با استفاده از RewriteConds
قوانين بازنويسي الزاماً هميشه يك به يك و بدون محدوديت ارزيابي نمي شوند. دستورالعمل RewriteCond به ما امكان مي دهد شرايطي را براي قوانين بازنويسي خود اضافه كنيم تا كنترل كنيم چه زماني اين قوانين پردازش مي شوند. كليه RewriteConds با فرمت زير عمل مي كنند:
General RewriteCond structure
RewriteCond TestString Condition [Flags]

RewriteCond دستورالعمل RewriteCond را مشخص مي كند.
TestString رشته اي است كه بايد در برابر آن آزمايش كنيد.
Condition الگو يا شرط مطابقت است.
Flags پارامترهاي اختياري هستند كه ممكن است شرايط و قوانين ارزيابي را تغيير دهند.
اگر نتيجه ارزيابي RewriteCond درست باشد ، RewriteRule بعدي در نظر گرفته مي شود. اگر درست نباشد ، اين قانون كنار گذاشته مي شود. چندين RewriteConds ممكن است يكي پس از ديگري مورد استفاده قرار گيرند ، اگرچه همه بايد براي ارزيابي قانون بعدي درست باشند.
به عنوان نمونه ، فرض مي كنيم شما مي خواهيد به جاي نشان دادن صفحه خطاي استاندارد  404 Not Found ، همه درخواست ها را به فايل ها يا ديركتوري هاي غير موجود در سايت خود برگردانيد. اين امر با قوانين زير حاصل ميشود:
Redirect all requests to non-existent files and directories to home page
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /

%{REQUEST_FILENAME} رشته اي براي بررسي است. در اين حالت ، نام فايل درخواستي است ، كه متغير سيستمي براي هر درخواست ميباشد.
-f يك شرايط داخلي است كه تأييد مي كند كه آيا نام درخواست شده در ديسك وجود دارد و يك فايل است. ! يك عامل منفي كننده است. تركيب! -f فقط درصورتي كه نام مشخص شده وجود نداشته باشد يا فايل نباشد ، درست ارزيابي مي شود.
• به طور مشابه ،! -d فقط درصورتي كه نام مشخص شده وجود نداشته باشد يا ديركتوري نباشد ، درست ارزيابي مي شود.
RewriteRule در خط نهايي فقط براي درخواست به فايل ها يا دايركتوري هاي غير موجود وارد خواهد شد. خود RewriteRule بسيار ساده است و هر درخواستي را به ريشه / وب سايت هدايت مي كند.
نتيجه
mod_rewrite به شما امكان مي دهد URL هاي قابل خواندن توسط انسان ايجاد كنيد. در اين آموزش ، ياد گرفتيد كه چگونه از دستورالعمل RewriteRule براي هدايت URL ها استفاده كنيد ، از جمله آنهايي كه رشته هاي پرس و جو دارند. همچنين ياد گرفتيد كه چگونه URL ها را با استفاده از دستورالعمل RewriteCond به صورت مشروط هدايت كنيد.
اگر مي خواهيد در مورد mod_rewrite اطلاعات بيشتري كسب كنيد ، به mod_rewrite Introduction و مستندات رسمي Apache براي mod_rewrite نگاهي بيندازيد.

 

 

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

استفاده از nsh براي دستورات از راه دور اوبونتو 18 –  ميزباني وب سايت با Caddy اوبونتو 18

تنظيم سرور ذخيره سازي آبجكت با استفاده از Minio در اوبونتو 18  –  ضبط و اشتراك گذاري ترمينال با Terminalizer اوبونتو

تنظيم مسيريابي شرطي و پاسخگو با React Router v4  –  ايجاد يك URL كوتاه كننده با Django و GraphQL

يك برنامه رديابي سلامت را با React ،GraphQL و Okta –  ساخت برنامه ******** زمان حقيقي React و GraphQL

به روزرساني فيلترهاي مرتب سازي Angular (زاويه اي) –  با استفاده از React ، Superagent و API اينستاگرام

نحوه ساختن يك برنامه جهاني با Nuxt.js و Django –  دكمه دانلود با ريزتعاملات با CSS ، anime.js و segment.js

نحوه اضافه كردن عكسهاي پيشرفته در Node و Express  –  با Vue ،GraphQL و Apollo Client يك وبلاگ ساخت

يك برنامه SSR با روتر Preact ، Unistore و Preact بسازيد  –  ساخت برنامه هاي وب پيشرونده با Angular

اشكال زدايي JavaScript در توليد با نقشه هاي منبع  –  مي توان با Koa برنامه “سلام جهاني” ساخت

ساختن يك برنامه با Node ، React ، Okta  –   مديريت حالت فرم در React با Redux Form

نحوه تنظيم Laravel ، Nginx و MySQL  –  ارتقاء از AngularJS به Angular با ngUpgrade

استفاده از ويژوال استوديو از راه دور  –  احراز هويت API با JSON Web Tokens و Passport

راه اندازي يك پروژه React با Parcel  –  ايجاد Swiper مانند Netflix را در Vue

ساختن يك ربات تلگرام با Laravel و BotMan  –  استفاده از map، filter، و reduce در جاوااسكريپت

چگونه مي توان موتور جستجوي زمان واقعي را با Vue  –  ساختن سيستم مستندات (Documentation) با Vue و VuePress

استفاده از اشتراك زنده با كد ويژوال استوديو  –  ساخت يك مقياس اندازه گيري قدرت رمز عبور را در React

شروع عملي GraphQL با Node.js و Express  –  ساخت يك برنامه آب و هوا در Django

نحوه نصب Discourse روي Ubuntu 18  –  تأييد رمز عبور با استفاده از درخواست فرم Laravel

نحوه نصب MySQL در CentOS 8  –  استفاده از پسوند PDO PHP براي انجام تراكنش MySQL

نصب و پيكربندي SNMP Daemon و Client در Ubuntu 18  –  نصب Linux، Nginx، MariaDB،PHP در Debian 10

 

 

ايمن كردن Apache با Let’s Encrypt در Debian 10

۷۷ بازديد

تنظيم برنامه Node.js براي توليد در CentOS 7

۵۷ بازديد

.js يك محيط زمان اجراي جاواسكريپت منبع باز است كه مي توانيد برنامه هاي شبكه و سرور مجازي را به راحتي بسازيد. اين پلتفرم روي لينوكس ، OS X ، FreeBSD و ويندوز اجرا مي شود و برنامه هاي آن به زبان JavaScript نوشته شده اند. برنامه هاي Node.js را مي توان در خط فرمان اجرا كرد اما ما به شما ياد مي دهيم كه چگونه آنها را به عنوان يك سرويس اجرا كنيد ، بنابراين به صورت خودكار در هنگام ريبوت يا خرابي مجدداً راه اندازي مي شوند ، و مي توانيد از آنها در يك محيط توليد استفاده كنيد.
در اين آموزش ، تنظيم محيط Node.js آماده توليد را كه از دو سرور مجازي CentOS 7 تشكيل شده است ، پوشش خواهيم داد. يك سرور مجازي برنامه هاي Node.js را مديريت مي كند كه توسط PM2 اداره مي شود ، و ديگري دسترسي به برنامه را از طريق يك پروكسي معكوس Nginx به سرور مجازي برنامه فراهم مي كند.
نسخه اوبونتو اين آموزش را مي توان در اين لينك پيدا كرد.
پيش نيازها
اين راهنما از دو سرور مجازي CentOS 7 با شبكه خصوصي (در يك مركز داده) استفاده مي كند. شبكه هاي خصوصي را مي توان در هنگام ايجاد (در بخش Select additional options) روي سرور مجازي هاي جديد پيكربندي كرد. با نامهاي زير را به آنها ميدهيم:
app: سرور مجازي ي كه در آن Node.js ، برنامه Node.js و PM2 را نصب خواهيم كرد .
web: سرور مجازيي كه در آن سرور مجازي وب Nginx را نصب خواهيم كرد ، كه به عنوان يك پروكسي معكوس براي برنامه شما عمل مي كند. كاربران براي دريافت برنامه Node.js شما به آدرس IP عمومي اين سرور مجازي دسترسي پيدا مي كنند.
توجه: -گر قصد داريد از يك سرور مجازي موجود كه در حال حاضر شبكه هاي خصوصي پيكربندي شده ندارد ، استفاده كنيد، به مستندات vpsgol تحت عنوان نحوه فعال سازي شبكه خصوي روي دراپلت مراجعه كنيد .
قبل از شروع اين راهنما ، بايد يك كاربر معمولي غير ريشه داشته باشيد كه داراي امتيازات sudo و روي هر دو سرور مجازي شما تنظيم شده باشد – اين همان كاربري است كه بايد با آن به سرور مجازي خود وارد شويد. با پيروي از راهنماي تنظيم اوليه سرور مجازي CentOS 7 مي توانيد نحوه پيكربندي يك حساب كاربري معمولي را ياد بگيريد.
دستورات اجرا شده بر روي سرور مجازي app:
⦁ $ an_example_command_on_app

دستورات اجرا شده بر روي سرور مجازي web:
⦁ $ an_example_command_on_web

استفاده از يك سرور مجازي واحد براي اين آموزش امكان پذير است ، اما بايد در طول مسير چند تغيير ايجاد كنيد. هر جايي كه از آدرس IP خصوصي سرور مجازي app استفاده ميشود، به سادگي از آدرس IP localhost ، يعني 127.0.0.1 استفاده كنيد.
در اينجا نموداري از تنظيمات شما پس از دنبال كردن اين آموزش آورده شده است:

اگر مي خواهيد به جاي آدرس IP عمومي آن ، از طريق نام دامنه به سرور مجازي وب خود دسترسي پيدا كنيد ، يك نام دامنه خريداري كنيد و سپس اين آموزش ها را دنبال كنيد:
• نحوه تنظيم نام ميزبان با vpsgol
• چگونه از ثبت كنندگان دامنه به نام سرور مجازي vpsgol اشاره كنيم
بياييد با نصب ران تايم Node.js در سرور مجازي app شروع كنيم.
مرحله 1 – نصب Node.js
آخرين نسخه LTS Node.js را بر روي سرور مجازي app نصب خواهيم كرد.
با استفاده از كاربر معمولي و غير ريشه با امتيازات sudo به سرور مجازي app خود SSH كنيد.
در سرور مجازي app ، اجازه دهيد براي دانلود فايل پيكربندي مخزن NodeSource RPM از Curl استفاده كنيم:
⦁ $ curl -L -o nodesource_setup.sh https://rpm.nodesource.com/setup_10.x

CURL از پروتكل HTTPS براي دانلود اسكريپت ستاپ بر روي سرور مجازي شما استفاده مي كند ، و خروجي شامل اطلاعات مربوط به دانلود ميباشد:
Output
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 11109 100 11109 0 0 70128 0 –:–:– –:–:– –:–:– 70757

در مرحله بعد ، بايد محتواي اسكريپت را بازرسي كنيد. دستور زير اسكريپت راه اندازي NodeSource را در كنسول سرور مجازي هاي شما باز مي كند ، كه مي توانيد با استفاده از اسكريپت راه اندازي NodeSource (از مخزن Github توزيع هاي NodeSource) براي تأييد صحت اسكريپتي كه به درستي دانلود كرده است ، cross-reference انجام دهيد:
⦁ $ vi nodesource_setup.sh

پس از رضايت از فايل ، با تايپ كردن: q از vi خارج شويد تا به خط فرمان بازگرديد.
اكنون بياييد اسكريپت تنظيم را اجرا كنيم تا مخزن NodeSource RPM را نصب كنيم. اين كار ما را قادر مي سازد از داخل مدير بسته yum به مخزن NodeSource دسترسي پيدا كنيم:
⦁ $ sudo -E bash nodesource_setup.sh

اسكريپت براي مرجع ما اطلاعات مربوط به ستاپ را صادر مي كند:
Output
## Installing the NodeSource Node.js 10.x repo…

## Inspecting system…

+ rpm -q –whatprovides redhat-release || rpm -q –whatprovides centos-release || rpm -q –whatprovides cloudlinux-release || rpm -q –whatprovides sl-release
+ uname -m

## Confirming “el7-x86_64” is supported…

+ curl -sLf -o /dev/null ‘https://rpm.nodesource.com/pub_10.x/el/7/x86_64/nodesource-release-el7-1.noarch.rpm’

## Downloading release setup RPM…

+ mktemp
+ curl -sL -o ‘/tmp/tmp.2aCcULVx8n’ ‘https://rpm.nodesource.com/pub_10.x/el/7/x86_64/nodesource-release-el7-1.noarch.rpm’

## Installing release setup RPM…

+ rpm -i –nosignature –force ‘/tmp/tmp.2aCcULVx8n’

## Cleaning up…

+ rm -f ‘/tmp/tmp.2aCcULVx8n’

## Checking for existing installations…

+ rpm -qa ‘node|npm’ | grep -v nodesource

## Run `sudo yum install -y nodejs` to install Node.js 10.x and npm.
## You may also need development tools to build native addons:
sudo yum install gcc-c++ make
## To install the Yarn package manager, run:
curl -sL https://dl.yarnpkg.com/rpm/yarn.repo | sudo tee /etc/yum.repos.d/yarn.repo
sudo yum install yarn

قبل از نصب Node.js مهم است كه تمام اطلاعات ذخيره شده از yum را پاك كنيد. پاك كردن حافظه نهان اطمينان حاصل خواهد كرد كه yum از اتصال شبكه براي دريافت Node.js از مخازن جديد NodeSource ما استفاده مي كند (كه از بروز هرگونه درگيري احتمالي ناشي از بسته هاي منسوخ شده جلوگيري مي كند):
⦁ $ sudo yum clean all

در مرحله بعد همه ابرداده ها را براي repo هاي yum فعال شده دانلود و استفاده خواهيم كرد. اين كار اطمينان حاصل مي كند كه جستارهاي yum ما در اسرع وقت تكميل ميشوند:
⦁ $ sudo yum makecache fast

براي كامپايل و نصب add-ons بومي از npm نيز بايد ابزارهاي ساخت را نصب كنيم:
⦁ $ sudo yum install -y gcc-c++ make

اكنون مي توانيم آخرين نسخه بسته Node.js را نصب كنيم:
⦁ $ sudo yum install -y nodejs

با بررسي نسخه خود با اين دستور ، تأييد كنيد كه Node نصب شده است:
⦁ $ node -v

خروجي شما شماره نسخه شما را نشان مي دهد:
اكنون ران تايم Node.js نصب شده است و آماده اجراي يك برنامه است. بياييد يك برنامه Node.js بنويسيم.
مرحله 2 – ايجاد برنامه Node.js
اكنون يك برنامه Hello World ايجاد خواهيم كرد كه به سادگي “Hello World” را به هر درخواست HTTP باز مي گرداند. اين يك برنامه نمونه است كه به شما در راه اندازي Node.js كمك مي كند ، كه مي توانيد برنامه خود را جايگزين آن كنيد فقط مطمئن شويد كه برنامه خود ر به گونه اي اصلاح كرده ايد كه به آدرس هاي IP و پورت هاي مناسب گوش دهيد.
از آنجا كه مي خواهيم برنامه Node.js ما درخواستهايي را كه از سرور مجازي پروكسي معكوس (web) مي آيند ، ارائه كند ، ما از رابط شبكه خصوصي سرور مجازي app خود براي ارتباطات بين سرور مجازي استفاده خواهيم كرد. آدرس شبكه خصوصي سرور مجازي app خود را جستجو كنيد.
اگر از يك دراپلت vpsgol به عنوان سرور مجازي خود استفاده مي كنيد ، مي توانيد آدرس IP خصوصي سرور مجازي را از طريق سرويس Metadata جستجو كنيد. در سرور مجازي app ، از دستور curl براي بازيابي آدرس IP استفاده كنيد:
⦁ $ curl -sw “n” http://169.254.169.254/metadata/v1/interfaces/private/0/ipv4/address

بهتر است خروجي (آدرس IP خصوصي) را كپي كنيد ، زيرا براي پيكربندي برنامه Node.js استفاده خواهد شد.
در مرحله بعد ، برنامه Node.js خود را براي ويرايش ايجاد و باز كنيد. براي اين آموزش از vi براي ويرايش يك برنامه نمونه به نام hello.js استفاده خواهيم كرد:
⦁ $ vi hello.js

كد زير را در فايل وارد كنيد و حتما آدرس IP خصوصي سرور مجازي app را براي هر دو مورد هايلايت شده APP_PRIVATE_IP_ADDRESS جايگزين كنيد. در صورت تمايل ، مي توانيد در هر دو مكان ، پورت هايلايت شده ، 8080 را جايگزين كنيد (حتما از پورت غير ادمين ، يعني 1024 يا بالاتر استفاده كنيد):
hello.js
var http = require(‘http’);
http.createServer(function (req, res) {
res.writeHead(200, {‘Content-Type’: ‘text/plain’});
res.end(‘Hello Worldn’);
}).listen(8080, ‘APP_PRIVATE_IP_ADDRESS’);
console.log(‘Server running at http://APP_PRIVATE_IP_ADDRESS:8080/’);

اكنون با فشار دادن ESC براي خروج از حالت –INSERT—فايل را ذخيره كنيد و از آن خارج شويد ، و پس از آن: wq را براي نوشتن و ترك برنامه در يك فرمان واحد وارد كنيد.
اين برنامه Node.js به سادگي آدرس و پورت IP مشخص شده را دنبال مي دهد و “Hello World” را با يك كد موفقيت 200 HTTP برمي گرداند. بدان معنا كه برنامه فقط از سرور مجازي هاي همان شبكه خصوصي مانند سرور مجازي وب ما قابل دسترسي است.
اگر مي خواهيد تست كنيد كه برنامه شما كار مي كند ، اين دستور node را روي سرور مجازي app اجرا كنيد:
⦁ $ node hello.js

توجه: اجراي يك برنامه Node.js به اين روش ، دستورات اضافي را مسدود مي كند تا اينكه با فشار دادن CTRL + C ، برنامه بسته شود.

اگر براي اولين بارآزمايش كنيم كه سرور مجازي web ما قادر به برقراري ارتباط با برنامه Node.js در app است ، مقدار زيادي از اشكال زدايي Nginx ذخيره مي شود.
براي تست برنامه ، بخش ترمينال ديگري را باز كرده و به سرور مجازي web خود متصل شويد. از آنجا كه سرور مجازي web در همان شبكه خصوصي قرار دارد ، بايد بتواند با استفاده از curl به آدرس IP خصوصي سرور مجازي app برسد. حتماً در آدرس IP سرور مجازي app ، APP_PRIVATE_IP_ADDRESS و پورت را در صورت تغيير جايگزين كنيد:
⦁ $ curl http://APP_PRIVATE_IP_ADDRESS:8080

اگر خروجي زير را مشاهده كنيد ، برنامه به درستي كار مي كند و آدرس و پورت IP مناسب را گوش مي دهد:
Node Application Output
Hello World

اگر خروجي مناسب را نمي بينيد ، مطمئن شويد كه برنامه Node.js شما در حال اجرا است و براي گوش دادن به آدرس IP و درگاه مناسب پيكربندي شده است.
در سرور مجازي app ، با فشار دادن CTRL + C ، برنامه را به اجبار ببنديد.
مرحله 3 – نصب و استفاده از PM2
اكنون PM2 را نصب خواهيم كرد كه يك مدير پروسه براي برنامه هاي Node.js است. PM2 روشي آسان براي مديريت و daemon كردن برنامه ها (اجراي آنها به عنوان يك سرويس) فراهم مي كند.
ما براي نصب PM2 روي سرور مجازي app خود از ماژول هاي بسته بندي شده Node (NPM) استفاده خواهيم كرد كه در واقع يك مدير بسته براي ماژول هاي Node است كه با Node.js نصب مي كند. براي نصب PM2 از اين دستور استفاده كنيد:
⦁ $ sudo npm install pm2@latest -g

ما چند كاربرد اصلي PM2 را پوشش خواهيم داد.
اولين كاري كه بايد انجام دهيد اينست كه از دستور pm2 start براي اجراي برنامه خود ، hello.js ، در پس زمينه استفاده كنيد:
⦁ $ pm2 start hello.js

اين كار همچنين برنامه شما را به ليست فرآيند PM2 اضافه مي كند ، كه با هر بار شروع برنامه، خروجي به بيرون ميفرستد:
Output
┌──────────┬────┬──────┬───────┬────────┬─────────┬────────┬─────────────┬──────────┐
│ App name │ id │ mode │ pid │ status │ restart │ uptime │ memory │ watching │
├──────────┼────┼──────┼───────┼────────┼─────────┼────────┼─────────────┼──────────┤
│ hello │ 0 │ fork │ 30099 │ online │ 0 │ 0s │ 14.227 MB │ disabled │
└──────────┴────┴──────┴───────┴────────┴─────────┴────────┴─────────────┴──────────┘

همانطور كه مشاهده مي كنيد ، PM2 بطور خودكار نام برنامه (بر اساس نام فايل ، بدون پسوند .js) و شناسه PM2 را اختصاص مي دهد. PM2 همچنين اطلاعات ديگري مانند PID روند ، وضعيت فعلي آن و استفاده از حافظه را نگه ميدارد.
برنامه هايي كه تحت PM2 در حال اجرا هستند در صورت خراب شدن برنامه يا بسته شدن برنامه به صورت خودكار مجدداً راه اندازي مي شوند ، اما براي شروع برنامه (بوت يا ريبوت)، بايد يك گام ديگر انجام شود. خوشبختانه ، PM2 با فرمان startup  راهي آسان براي انجام اين كار فراهم مي كند.
فرمان فرعي startup  براي راه اندازي PM2 و فرآيندهاي مديريت شده آن روي بوت هاي سرور مجازي ، يك اسكريپت راه اندازي ايجاد و پيكربندي مي كند. در مورد مثال ما ، بايد سيستم اوليه در حال اجرا كه systemd است را مشخص كنيد:
⦁ $ sudo pm2 startup systemd

خروجي مانند زير را مشاهده خواهيد كرد ، كه نشان مي دهد سرويس PM2 نصب شده است:
Output
[PM2] Generating system init script in /etc/systemd/system/pm2.service
[PM2] Making script booting at startup…
[PM2] -systemd- Using the command:
su root -c “pm2 dump && pm2 kill” && su root -c “systemctl daemon-reload && systemctl enable pm2 && systemctl start pm2”
[PM2] Dumping processes
[PM2] Stopping PM2…
[PM2] All processes have been stopped and deleted
[PM2] PM2 stopped
[PM2] Done.

براي اطمينان از اينكه PM2 مي داند از چه برنامه هايي براي شروع كار استفاده مي كند ، بايد ليست روند فعلي را ذخيره كنيم. براي ذخيره ليست:
⦁ $ pm2 save

خروجي مانند زير را مشاهده خواهيد كرد ، كه نشان مي دهد ليست فرآيند PM2 ذخيره شده است:
Output
[PM2] Saving current process list…
[PM2] Successfully saved in /home/deployer/.pm2/dump.pm2

اكنون برنامه هاي مديريت شده PM2 شما بايد بطور خودكار در بوت شروع شوند.
PM2 فرمان هاي فرعي زيادي را در اختيار شما قرار مي دهد تا بتوانيد اطلاعات مربوط به برنامه هاي خود را مديريت و جستجو كنيد. توجه داشته باشيد كه اجراي PM2 بدون هيچگونه آرگوماني ، صفحه راهنمايي شامل استفاده مثال را نمايش مي دهد كه استفاده از PM2 را با جزئيات بيشتر از اين بخش از آموزش پوشش مي دهد.
يك برنامه را با اين دستور متوقف كنيد (نام برنامه يا شناسه PM2 برنامه را مشخص كنيد):
⦁ $ pm2 stop example

برنامه را با اين دستور مجدداً راه اندازي كنيد (نام برنامه يا شناسه PM2 برنامه را مشخص كنيد):
⦁ $ pm2 restart example

ليست برنامه هايي كه در حال حاضر توسط PM2 مديريت مي شوند را مي توان با فرمان فرعي list جستجو كرد:
⦁ $ pm2 list

با استفاده از فرمان فرعي info مي توانيد اطلاعات بيشتري در مورد يك برنامه خاص را پيدا كنيد (نام يا شناسه برنامه PM2 را مشخص كنيد):
⦁ $ pm2 info example

مانيتور فرآيند PM2 را مي توان با فرمان فرعي monit انجام داد. اين كار وضعيت برنامه ، CPU و استفاده از حافظه را نشان مي دهد:
⦁ $ pm2 monit

توجه: اجراي دستور monit PM2 دستورات اضافي را مسدود مي كند تا برنامه با فشار دادن CTRL + C بسته شود.
اكنون كه برنامه Node.js شما در حال اجرا و توسط PM مديريت مي شود، بياييد پروكسي معكوس را تنظيم كنيم.
مرحله 4 – تنظيم سرور مجازي پروكسي معكوس Nginx
اكنون كه برنامه شما در حال اجراست و يك آدرس IP خصوصي را شنود ميكنيد، بايد راهي براي دسترسي كاربران خود تنظيم كنيد. ما يك سرور مجازي وب Nginx را به عنوان يك پروكسي معكوس براي اين منظور تنظيم مي كنيم. اين آموزش يك سرور مجازي Nginx را از scratchتنظيم مي كند. اگر قبلاً تنظيمات سرور مجازي Nginx را انجام داده ايد ، مي توانيد فقط بلوك location را در بلوك سرور مجازي مورد نظر خود كپي كنيد (اطمينان حاصل كنيد كه location با هيچ بخشي از محتواي موجود سرور مجازي وب شما مغايرت نداشته باشد).
در سرور مجازي web ، بياييد بسته epel-releaseرا با استفاده از yum نصب كنيم:
⦁ $ sudo yum install epel-release

سپس Nginx را نصب كنيد:
⦁ $ sudo yum install nginx

اكنون فايل پيكربندي Nginx را براي ويرايش باز كنيد:
⦁ $ sudo vi /etc/nginx/nginx.conf

ابتدا خطي را كه server_name تعريف شده است ، در بلوك پيش فرض سرور مجازي پيدا كنيد. بايد چيزي شبيه به اين باشد:
nginx.conf excerpt — server_name (before)
server_name _;

نام سرور مجازي را به روز كنيد تا زيرنويس (_) را با نام دامنه خود براي دستور server_name جايگزين كنيد (يا اگر آدرس دامنه نداريد آدرس IP را جايگزين كنيد).
nginx.conf excerpt — server_name (after)
server_name your-domain;

سپس خطي را كه location/ تعريف شده است (معمولاً چند خط زير server_name) ، در همان بلوك پيش فرض سرور مجازي پيدا كنيد. بايد چيزي شبيه به اين باشد:
nginx.conf excerpt — location / (before)
location / {
}

آن را با بلوك كد زير جايگزين كنيد و مطمئن شويد آدرس IP خصوصي سرور مجازي app را جايگزين APP_PRIVATE_IP_ADDRESS كنيد. علاوه بر اين ، در صورت تنظيم برنامه براي گوش دادن به پورت هاي مختلف، پورت (8080) را تغيير دهيد:
/etc/nginx/nginx.conf excerpt — location / (after)
location / {
غير مجاز مي باشد_pass http://APP_PRIVATE_IP_ADDRESS:8080;
غير مجاز مي باشد_http_version 1.1;
غير مجاز مي باشد_set_header Upgrade $http_upgrade;
غير مجاز مي باشد_set_header Connection ‘upgrade’;
غير مجاز مي باشد_set_header Host $host;
غير مجاز مي باشد_cache_bypass $http_upgrade;
}

اين كار سرور مجازي web را پيكربندي مي كند تا به عنوان ريشه به درخواست ها پاسخ دهد. با فرض اينكه سرور مجازي ما در your-domain موجود است ، دسترسي به http://your-domain/ از طريق يك مرورگر وب ، درخواست را به آدرس IP خصوصي سرور مجازي app در پورت 8080 ارسال مي كند ، كه توسط Node.js دريافت و به آن پاسخ داده ميشود.
براي دسترسي به ساير برنامه ها در همان سرور مجازي web ، مي توانيد بلوك هاي location بيشتري را به همان سرور مجازي اضافه كنيد. به عنوان مثال ، اگر برنامه node.js ديگري را در سرور مجازي app در پورت 8081 اجرا كرده ايد ، مي توانيد اين بلوك location را اضافه كنيد تا از طريق http: // your-domain / app2 به آن دسترسي داشته باشيد:
Nginx Configuration — Additional Locations
location /app2 {
غير مجاز مي باشد_pass http://APP_PRIVATE_IP_ADDRESS:8081;
غير مجاز مي باشد_http_version 1.1;
غير مجاز مي باشد_set_header Upgrade $http_upgrade;
غير مجاز مي باشد_set_header Connection ‘upgrade’;
غير مجاز مي باشد_set_header Host $host;
غير مجاز مي باشد_cache_bypass $http_upgrade;
}

پس از انجام ويرايش بلوك (هاي) مكان براي برنامه (هاي) خود ، آن را ذخيره كنيد با فشار دادن ESC از حالت –INSERT– ، خارج شويد ، به دنبال آن: wq را براي نوشتن و ترك كردن در يك فرمان واحد تايپ كنيد.
در سرور مجازي وب ، Nginx را مجدداً راه اندازي كنيد:
$ sudo systemctl start nginx

سپس مي خواهيم اطمينان حاصل كنيم كه Nginx هر زمان كه سرور مجازي ريستارت شود ، اجرا خواهد شد:
⦁ $ sudo systemctl enable nginx

دستور enable بايد خروجي زير را ارائه دهد
Output
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.

همچنين با درخواست وضعيت آن از systemctl مي توانيد تأييد كنيد كه Nginx در حال اجرا و فعال است.
⦁ $ sudo systemctl status nginx

دستور وضعيت اطلاعات پيكربندي را براي سرويس Nginx ارائه مي دهد
Output
● nginx.service – The nginx HTTP and reverse غير مجاز مي باشد server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2019-10-14 09:37:23 UTC; 3min 29s ago
Main PID: 12818 (nginx)
CGroup: /system.slice/nginx.service
├─12818 nginx: master process /usr/sbin/nginx
└─12819 nginx: worker process

Oct 14 09:37:23 centos-s-1vcpu-1gb-sgp1-01 systemd[1]: Starting The nginx HTTP and reverse غير مجاز مي باشد server…
Oct 14 09:37:23 centos-s-1vcpu-1gb-sgp1-01 nginx[12814]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
Oct 14 09:37:23 centos-s-1vcpu-1gb-sgp1-01 nginx[12814]: nginx: configuration file /etc/nginx/nginx.conf test is successful
Oct 14 09:37:23 centos-s-1vcpu-1gb-sgp1-01 systemd[1]: Failed to read PID from file /run/nginx.pid: Invalid argument
Oct 14 09:37:23 centos-s-1vcpu-1gb-sgp1-01 systemd[1]: Started The nginx HTTP and reverse غير مجاز مي باشد server.

سرانجام ، امكان انتقال مجدد ترافيك از طريق لينوكس با امنيت بالا (SELinux) را به Nginx ارائه ميدهد. SELinux يك لايه امنيتي را فراهم مي كند كه كنترل دسترسي اجباري (MAC) را در هسته لينوكس پياده سازي مي كند. هر شيء سيستم عامل (پردازش ، توصيف كننده فايل ، فايل و غيره) با يك مفهوم SELinux برچسب گذاري شده است كه مجوزها و عملكردهايي را كه شي مي تواند انجام دهد ، مشخص مي كند.
Nginx با متن httpd_t برچسب گذاري شده است و در نتيجه ، پيكربندي هايي دارد توسط SELinux مسدود شده است ، مگر اينكه صريحاً مجاز باشد. براي نشان دادن اين مسئله، دستور زير را اجرا كنيد تا تأييد كنيد كه سرويس Nginx داراي برچسب httpd_t است:
⦁ $ ps -eZ

اين دستور اطلاعات مربوط به وضعيت فرآيند را ارائه مي دهد ، اطلاعات مربوط به فرآيند خاص Nginx را براي ديدن برچسب جستجو ميكند. شما httpd_t را به روشي مشابه زير مشاهده خواهيد كرد:
Output

system_u:system_r:httpd_t:s0 10208 ? 00:00:00 nginx
system_u:system_r:httpd_t:s0 10209 ? 00:00:00 nginx

اكنون بياييد وضعيت بولي هاي پيش فرض (متغير دو بايتي) مربوط به برچسب httpd_t SELinux را بررسي كنيم. مي توانيم با اجراي دستور زير اين اطلاعات را نشان دهيم:
⦁ $ $ getsebool -a

براي اين آموزش فقط به بولي هاي مربوط به httpd علاقه مند هستيم:
Output

httpd_anon_write –> off
httpd_builtin_scripting –> on
httpd_can_check_spam –> off
httpd_can_connect_ftp –> off
httpd_can_connect_ldap –> off
httpd_can_connect_mythtv –> off
httpd_can_connect_zabbix –> off
httpd_can_network_connect –> off
httpd_can_network_connect_cobbler –> off
httpd_can_network_connect_db –> off
httpd_can_network_memcache –> off
httpd_can_network_relay –> off
httpd_can_sendmail –> off
httpd_dbus_avahi –> off
httpd_dbus_sssd –> off
httpd_dontaudit_search_dirs –> off
httpd_enable_cgi –> on
httpd_enable_ftp_server –> off
httpd_enable_homedirs –> off
httpd_execmem –> off
httpd_graceful_shutdown –> on
httpd_manage_ipa –> off
httpd_mod_auth_ntlm_winbind –> off
httpd_mod_auth_pam –> off
httpd_read_user_content –> off
httpd_run_ipa –> off
httpd_run_preupgrade –> off
httpd_run_stickshift –> off
httpd_serve_cobbler_files –> off
httpd_setrlimit –> off
httpd_ssi_exec –> off
httpd_sys_script_anon_write –> off
httpd_tmp_exec –> off
httpd_tty_comm –> off
httpd_unified –> off
httpd_use_cifs –> off
httpd_use_fusefs –> off
httpd_use_gpg –> off
httpd_use_nfs –> off
httpd_use_openstack –> off
httpd_use_sasl –> off
httpd_verify_dns –> off

اين دو بولي خاص ، httpd_can_network_connect و httpd_can_network_relay هستند. مستندات Redhat جزئيات مربوط به هر يك از بولي هاي httpd و عملكرد مرتبط با آنها را ارائه مي دهد (در صورتي كه تمايل به كسب اطلاعات بيشتر در مورد هر بولي داريد) ، اگرچه در زير توضيحات دو بولي كه مربوط به اين آموزش است آورده شده است:

httpd_can_network_connect: When disabled, this Boolean prevents HTTP scripts and modules from initiating a connection to a network or remote port. Enable this Boolean to allow this access.
httpd_can_network_relay: Enable this Boolean when httpd is being used as a forward or reverse غير مجاز مي باشد.

از آنجا كه پيكربندي ما فقط ترافيك را رله مي كند ، فقط بايد به SELinux بگوييم كه سرور مجازي httpd ، در مورد ما Nginx ، مي تواند از شبكه براي رله ترافيك در پيكربندي پروكسي معكوسي كه تنظيم كرده ايم استفاده كند. ما از پرچم -P استفاده خواهيم كرد ، تا اطمينان حاصل شود كه تغييرات دائمي هستند (حذف اين پرچم منجر به بازگشت httpd_can_network_relay به حالت پيش فرض آن ، يعني خاموش ، با راه اندازي مجدد سرور مجازي خواهد شد):
⦁ $ sudo setsebool -P httpd_can_network_relay on

با فرض اينكه برنامه Node.js شما در حال اجرا است ، و برنامه شما و تنظيمات Nginx صحيح هستند ، بايد بتوانيد از طريق پروكسي معكوس سرور مجازي web به برنامه خود دسترسي پيدا كنيد. با دسترسي به URL سرور مجازي web خود (آدرس IP عمومي يا نام دامنه) آن را امتحان كنيد.
توجه: اگر همچنين قصد داشتيد از سرور مجازي web خود براي ميزباني سايتهاي ديگر (به عنوان ميزبان مجازي معمولي) استفاده كنيد ، لازم است كه httpd_can_network_connect را روشن كنيد.

نتيجه
اكنون برنامه Node.js شما در پس يك پروكسي معكوس Nginx در حال اجرا است. اين تنظيم پروكسي معكوس به اندازه كافي انعطاف پذير است تا دسترسي كاربران شما به ديگر برنامه ها يا محتواي وب استاتيك را كه مي خواهيد به اشتراك بگذاريد ، فراهم نمايد.
همچنين اگر به دنبال انتقالات رمزگذاري شده بين سرور مجازي وب و كاربران خود هستيد ، در اينجا آموزشي مطرح شده است كه به شما كمك مي كند تا پشتيباني HTTPS (TLS / SSL) را تنظيم كنيد

 

 

 

برچسب‌ها:CurlFreeBSDIPlocalhostNginxOS X,

نصب وب سرور Apache در Debian 10

۷۰ بازديد

سرور مجازي Apache HTTP پركاربردترين وب سرور مجازي در جهان است. اين سرور مجازي بسياري از ويژگي هاي قدرتمند از جمله ماژول هاي قابل بارگيري پويا ، پشتيباني رسانه اي قوي و ادغام گسترده با ساير نرم افزارهاي محبوب را ارائه مي دهد.
در اين راهنما نحوه نصب يك وب سرور مجازي Apache را در سرور مجازي Debian 10 شما توضيح خواهيم داد.
پيش نيازها
قبل از شروع اين راهنما ، بايد يك كاربر معمولي و غير ريشه با امتيازات sudo در سرور مجازي خود داشته باشيد. علاوه بر اين ، بايد يك فايروال پايه را فعال كنيد تا پورت هاي غير ضروري را مسدود نماييد. با پيروي از راهنماي تنظيم اوليه سرور مجازي براي Debian 10 مي توانيد نحوه پيكربندي يك حساب كاربري معمولي و تنظيم فايروال را براي سرور مجازي خود بياموزيد.
هنگامي كه يك حساب كاربري در اختيار گرفتيد ، به عنوان كاربر غير ريشه خود وارد شويد.
مرحله 1 – نصب Apache
Apache در مخازن پيش فرض نرم افزار Debian موجود است و امكان نصب آن با استفاده از ابزارهاي مديريت بسته معمولي امكان پذير است.
بياييد با به روز كردن فهرست بسته محلي شروع كنيم تا آخرين تغييرات بالادست را منعكس كنيم:
⦁ $ sudo apt update

سپس بسته apache2 را نصب كنيد:
⦁ $ sudo apt install apache2

پس از تأييد نصب ، apt و تمام متعلقات مورد نياز را نصب مي كند.
مرحله 2 – تنظيم فايروال
قبل از آزمايش Apache ، لازم است تنظيمات فايروال را اصلاح كنيد تا دسترسي خارجي به پورت هاي پيش فرض وب را بدهيد. با فرض اينكه دستورالعمل هاي پيش نياز را رعايت كرده باشيد ، بايد فايروال UFW را تنظيم كرده تا دسترسي به سرور مجازي شما محدود شود.
در حين نصب ، Apache خود را با UFW ثبت مي كند تا چند پروفايل برنامه ارائه دهد كه مي تواند براي فعال يا غيرفعال كردن دسترسي به Apache از طريق فايروال استفاده شود.
پروفايل برنامه ufw را با تايپ كردن دستور زير ليست كنيد:
⦁ $ sudo ufw app list

ليستي از پروفايل هاي برنامه را مشاهده خواهيد كرد:
Output
Available applications:
AIM
Bonjour
CIFS
. . .
WWW
WWW Cache
WWW Full
WWW Secure
. . .

پروفايل هاي Apache با WWW آغاز مي شود:
WWW: اين نمايه فقط پورت 80 را باز مي كند (ترافيك وب عادي و بدون رمزگذاري)
WWW Cache: اين نمايه فقط پورت 8080 را باز مي كند (گاهي اوقات براي ذخيره سازي و پروكسي هاي وب استفاده مي شود)
WWW Full: اين نمايه هر دو پورت 80 (ترافيك وب عادي ، بدون رمزگذاري) و پورت 443 (ترافيك رمزگذاري شده TLS / SSL) را باز مي كند
WWW Secure: اين نمايه فقط پورت 443 را باز مي كند (ترافيك رمزگذاري شده TLS / SSL)
توصيه مي شود محدودترين نمايه اي را كه امكان ترافيك پيكربندي شده شما را فراهم مي كند ، فعال كنيد. از آنجا كه ما هنوز در اين راهنما SSL را براي سرور مجازي خود پيكربندي نكرده ايم ، فقط نياز به ترافيك در بندر 80 داريم:
⦁ $ sudo ufw allow ‘WWW’

مي توانيد تغيير را با تايپ دستور زير تأييد كنيد:
⦁ $ sudo ufw status

بايد ترافيك HTTP مجاز در خروجي نمايش داده شده را مشاهده كنيد:
Output
Status: active

To Action From
— —— —-
OpenSSH ALLOW Anywhere
WWW ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
WWW (v6) ALLOW Anywhere (v6)

همانطور كه مشاهده مي كنيد ، نمايه براي دسترسي به سرور مجازي وب فعال شده است.
مرحله 3 – بررسي سرور مجازي وب خود
در پايان مراحل نصب ، Debian 10 ، Apache را شروع مي كند. اكنون وب سرور مجازي بايد راه اندازي و در حال اجرا باشد.
با سيستم init systemed بررسي كنيد تا مطمئن شويد اين سرويس در حال اجراست ، دستور زير را تايپ كنيد:
⦁ $ sudo systemctl status apache2

Output
● apache2.service – The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2019-07-19 15:33:01 UTC; 4min 13s ago
Docs: https://httpd.apache.org/docs/2.4/

. . .

Jul 19 15:33:01 debssh systemd[1]: Starting The Apache HTTP Server…
Jul 19 15:33:01 debssh apachectl[2791]: AH00558: apache2: Could not reliably determine the server’s fully qualified domain name, using 127.0.1.1. Set the ‘ServerName’ directive global
Jul 19 15:33:01 debssh systemd[1]: Started The Apache HTTP Server.

همانطور كه از اين خروجي مي بينيد ، به نظر مي رسد اين سرويس با موفقيت شروع شده است. با اين حال ، بهترين راه براي آزمايش، درخواست يك صفحه از Apache است.
براي تأييد صحت اجراي نرم افزار از طريق آدرس IP خود ، مي توانيد به صفحه فرود پيش فرض Apache دسترسي پيدا كنيد. اگر آدرس IP سرور مجازي خود را نمي دانيد ، مي توانيد آن را به چند راه مختلف از خط فرمان دريافت كنيد.
سعي كنيد اين را در خط فرمان سرور مجازي خود تايپ كنيد:
⦁ $ hostname -I

چند آدرس كه با فاصله از هم جدا شده اند، دريافت مي كنيد. مي توانيد هركدام را در مرورگر وب خود امتحان كنيد تا ببينيد كه آيا كار مي كنند.
راه ديگر استفاده از ابزار curl است كه بايد آدرس IP عمومي خود را همانطور كه از مكان ديگري در اينترنت مشاهده مي شود به شما بدهد.
ابتدا ، curl را با استفاده از aptنصب كنيد:
⦁ $ sudo apt install curl

سپس از curl براي بازيابي icanhazip.com به كمك IPv4 استفاده نماييد.
⦁ $ curl -4 icanhazip.com

هنگامي كه آدرس IP سرور مجازي خود را داريد ، آن را در نوار آدرس مرورگر خود وارد كنيد:

http://your_server_ip

بايد صفحه وب پيش فرض Debian 10 Apache را ببينيد:

اين صفحه نشان مي دهد كه Apache درست كار مي كند. اين برنامه همچنين شامل برخي از اطلاعات اوليه در مورد فايل هاي مهم Apache و مكان هاي فهرست بندي است.
مرحله 4 – مديريت فرايند Apache
اكنون كه سرور مجازي وب خود را فعال و راه اندازي كرده ايد ، اجازه دهيد برخي از دستورات مديريت اصلي را مرور كنيم.
براي متوقف كردن سرور مجازي وب خود ، تايپ كنيد:
⦁ $ sudo systemctl stop apache2

براي شروع سرور مجازي وب وقتي متوقف شده است ، تايپ كنيد:
⦁ $ sudo systemctl start apache2

براي متوقف كردن و شروع مجدد سرويس ، تايپ كنيد:
⦁ $ sudo systemctl restart apache2

اگر به سادگي تغييرات پيكربندي را انجام مي دهيد ، Apache اغلب مي تواند بدون افت اتصالات مجدد لود شود. براي انجام اين كار ، از اين دستور استفاده كنيد:
⦁ $ sudo systemctl reload apache2

به طور پيش فرض ، Apache به گونه اي پيكربندي مي شود كه به طور خودكار با بوت شدن سرور مجازي شروع به كار كند. اگر اين چيزي نيست كه شما مي خواهيد ، با تايپ كردن اين دستور آن را غيرفعال كنيد:
⦁ $ sudo systemctl disable apache2

براي فعال كردن مجدد سرويس در هنگام بوت ، اين دستور را تايپ كنيد:
⦁ $ sudo systemctl enable apache2

با شروع مجدد بوت شدن سرويس دهنده ، اكنون Apache بايد به طور خودكار شروع كند.
مرحله 5 – تنظيم ميزبان هاي مجازي (توصيه مي شود(
هنگام استفاده از وب سرور مجازي Apache ، مي توانيد از هاست هاي مجازي (مشابه بلوك هاي سرور مجازي در Nginx ) براي محصور كردن جزئيات پيكربندي و ميزباني بيش از يك دامنه از يك سرور مجازي واحد استفاده كنيد. در دستورات زير ، your_domain را با نام دامنه خود جايگزين كنيد. براي كسب اطلاعات بيشتر در مورد تنظيم نام دامنه با vpsgol ، به مقدمه ما در vpsgol DNS مراجعه كنيد.
Apache در Debian 10 داراي يك بلوك سرور مجازي است كه به طور پيش فرض فعال شده است تا اسناد را از ديركتوري / var / www / html. ارائه دهد.اگرچه اين براي يك سايت واحد به خوبي كار مي كند ، اما اگر ميزبان چندين سايت باشيد ، مي تواند با مشكل روبه رو شود. به جاي اصلاح / var / www / html ، بياييد يك ساختار دايركتوري در / var / www براي سايت your_domain ايجاد كنيم ، در اين صورت / var / www / html را به عنوان دايركتوري پيش فرض قرار مي دهيم كه در صورتي كه درخواست كلاينت با هيچ سرويسي مطابقت نداشته باشد، ارائه شود.
با استفاده از پرچم -p ، براي ايجاد هر ديركتوري لازم ، ديركتوري را براي your_domain به صورت زير ايجاد كنيد:
sudo mkdir -p /var/www/your_domain
سپس ، مالكيت دايركتوري را با متغير محيطي $ USER اختصاص دهيد:
⦁ $ sudo chown -R $USER:$USER /var/www/your_domain

در صورتي كه مقدار unmask خود را تغيير نداده ايد ، مجوزهاي ريشه وب شما بايد صحيح باشد ، اما مي توانيد با تايپ دستور زير مطمئن شويد:
⦁ $ sudo chmod -R 755 /var/www/your_domain

سپس ، با استفاده از nano يا ويرايشگر مورد علاقه خود ، صفحه index.html نمونه را ايجاد كنيد:
⦁ $ nano /var/www/your_domain/index.html

در داخل ، HTML نمونه زير را اضافه كنيد:
/var/www/your_domain/index.html


Welcome to your_domain!


Success! The your_domain virtual host is working!



پس از اتمام فايل را ذخيره كنيد و ببنديد.
براي اينكه Apache بتواند اين محتوا را ارائه دهد ، بايد يك فايل ميزبان مجازي با بخشنامه هاي صحيح ايجاد كنيد. به جاي تغيير فايل پيكربندي پيش فرض واقع در /etc/apache2/sites-available/000-default.conf ، اجازه دهيد فايل جديدي را در /etc/apache2/sites-available/your_domain.conf ايجاد كنيم:
⦁ $ sudo nano /etc/apache2/sites-available/your_domain.conf

در بلوك پيكربندي زير كه مشابه پيش فرض است ، پيست كنيد اما براي ديركتوري جديد و نام دامنه آن را به روز كنيد:
/etc/apache2/sites-available/your_domain.conf

ServerAdmin admin@your_email_domain
ServerName your_domain
ServerAlias www.your_domain
DocumentRoot /var/www/your_domain
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

توجه كنيد كه ما DocumentRoot را در دايركتوري جديد خود و ServerAdmin را به ايميلي كه به مدير سايت your_domain دسترسي دارد ، به روز كرده ايم. همچنين دو دستورالعمل اضافه كرده ايم: ServerName ، كه دامنه پايه اي را كه بايد براي اين تعريف ميزبان مجازي مطابقت داشته باشد منتشر ميكند، و ServerAlias ​​، كه نامهاي ديگري را تعريف مي كند كه بايد مطابق با نام اصلي باشند.
پس از اتمام فايل را ذخيره كنيد و ببنديد.
بياييد فايل را با ابزار a2ensite فعال كنيم:
⦁ $ sudo a2ensite your_domain.conf

سايت پيش فرض تعريف شده در 000-default.conf را غيرفعال كنيد.
⦁ $ sudo a2dissite 000-default.conf

سپس ، خطاهاي پيكربندي را آزمايش كنيد:
⦁ $ sudo apache2ctl configtest

بايد خروجي زير را مشاهده كنيد:
Output
AH00558: apache2: Could not reliably determine the server’s fully qualified domain name, using 127.0.1.1. Set the ‘ServerName’ directive globally to suppress this message
Syntax OK

براي اجراي تغييرات مجدد Apache را راه اندازي كنيد.
⦁ $ sudo systemctl restart apache2

اكنون Apache بايد در خدمت نام دامنه شما باشد. مي توانيد با رفتن به http: // your_domain آن را تست كنيد، در آن جا بايد چيزي شبيه به اين را مشاهده كنيد :

مرحله ششم – آشنايي با فايل ها و ديركتوري هاي Apache
اكنون كه مي دانيد چگونه خود سرويس Apache را مديريت كنيد ، بايد چند دقيقه وقت بگذاريد تا با چند ديركتوري و فايل مهم آشنا شويد.
Content (محتوا)
/ var / www / html: محتواي وب واقعي ، كه به طور پيش فرض فقط شامل صفحه پيش فرض Apache است كه قبلاً ديديد ، از ديركتوري / var / www / html ارائه مي شود. با تغيير فايل هاي پيكربندي Apache مي توان اين مورد را تغيير داد.
Server Configuration )پيكربندي سرور مجازي (
/ etc / apache2: ديركتوري تنظيمات Apache است. همه فايل هاي پيكربندي Apache در اينجا قرار دارند.
/etc/apache2/apache2.conf: فايل اصلي پيكربندي Apache كه مي تواند براي ايجاد تغيير در پيكربندي جهاني Apache اصلاح شود. اين فايل وظيفه لود بسياري از فايل هاي ديگر را در ديركتوري تنظيمات دارد.
/etc/apache2/ports.conf: اين فايل پورت هايي را كه Apache در آن گوش خواهد داد را مشخص مي كند. به طور پيش فرض ، Apache درگاه 80 را گوش مي دهد و علاوه بر اين در هنگام فعال كردن ماژول قابليت هاي SSL ، درگاه 443 را نيز پيگيري ميكند.
/ etc / apache2 / sites-available /: دايركتوري كه ميزبان مجازي در هر سايت در آن قابل ذخيره است. Apache از فايل هاي پيكربندي موجود در اين ديركتوري استفاده نمي كند مگر اينكه به ديركتوري sites-enabled مرتبط باشند. به طور معمول ، تمام پيكربندي بلوك سرور مجازي در اين دايركتوري انجام مي شود ، و سپس با پيوند به ديركتوري ديگر با دستور a2ensite فعال مي شويد.
/ etc / apache2 / sites-enabled /: دايركتوري كه ميزبان مجازي فعال در هر سايت را ذخيره ميكند. به طور معمول ، با پيوند دادن به فايل هاي پيكربندي موجود در ديركتوري sites-available به a2ensite ايجاد مي شوند. Apache هنگام راه اندازي يا لود مجدد ، فايل هاي پيكربندي و پيوندهاي موجود در اين ديركتوري را مي خواند تا يك پيكربندي كامل را كامپايل كند.
/ etc / apache2 / conf-available /، / etc / apache2 / conf-enabled /: اين دايركتوري ها همانند دايركتوري هاي sites-available و sites-enabled ارتباط دارند ، اما براي ذخيره بخش هايي از پيكربندي كه به ميزبان مجازي تعلق ندارد ، استفاده مي شوند. فايل هاي موجود در ديركتوري conf-available با استفاده از دستور a2enconf مي توانند فعال شوند و با دستور a2disconf غيرفعال گردند.
/ etc / apache2 / mods-available /، / etc / apache2 / mods-enabled /: اين ديركتوري ها به ترتيب شامل ماژول هاي موجود و فعال هستند. فايل هايي كه به.load ختم ميشوند شامل بخش هايي براي بارگذاري ماژول هاي خاص هستند ، در حالي كه فايل هاي منتهي به .conf شامل پيكربندي براي اين ماژول ها هستند. ماژول ها را مي توان با استفاده از دستور a2enmod و a2dismod فعال و غيرفعال كرد.
Server Logs (ورود ها به سرور مجازي )
/var/log/apache2/access.log: به طور پيش فرض ، هر درخواستي به سرور مجازي وب شما در اين فايل log ثبت مي شود ، مگر اينكه Apache پيكربندي شده باشد كه كاري غير از اين را انجام دهد.
/var/log/apache2/error.log: به طور پيش فرض ، همه خطاها در اين فايل ثبت مي شوند. دستورالعمل LogLevel در پيكربندي Apache مشخص مي كند كه چه تعداد جزئيات ثبت خطا را شامل مي شود.
نتيجه
اكنون كه سرور مجازي وب خود را نصب كرده ايد ، گزينه هاي بسياري براي نوع محتوايي كه مي توانيد ارائه كنيد و فن آوري هايي كه مي توانيد از آنها استفاده كنيد داريد تا يك تجربه غني تر را ايجاد كنيد.
اگر مي خواهيد يك برنامه كاربردي كاملتر ايجاد كنيد ، مي توانيد به اين مقاله در مورد نحوه پيكربندي پشته LAMP در Debian 10 نگاهي بيندازيد.

 

برچسب‌ها:ApacheApache HTTP,

نصب Apache Tomcat 9 در Debian 10

۷۲ بازديد

Apache Tomcat يك سرور مجازي وب و كانتينر servlet است كه براي ارائه برنامه هاي جاوا استفاده مي شود. Tomcat يك اجراي منبع باز از فناوري هاي Java Servlet و JavaServer Pages است كه توسط بنياد نرم افزار Apache منتشر شده است. اين آموزش شامل نصب اوليه و برخي از تنظيمات آخرين نسخه Tomcat 9 در سرور مجازي Debian 10 ميباشد.
پيش نيازها
قبل از شروع اين راهنما ، بايد يك كاربر غير ريشه با امتيازات sudo در سرور مجازي خود داشته باشيد. مي توانيد با تكميل راهنماي تنظيم اوليه سرور مجازي Debian 10 ما اين كار را ياد بگيريد.
مرحله 1 – جاوا را نصب كنيد
Tomcat نياز دارد كه جاوا را روي سرور مجازي نصب باشد تا هر كد برنامه وب جاوا قابل اجرا باشد. ما مي توانيم با نصب OpenJDK با apt ، اين نياز را برآورده سازيم.
ابتدا ايندكس بسته apt خود را به روز كنيد:
⦁ $ sudo apt update

سپس بسته توسعه جاوا را با apt نصب كنيد:
⦁ $ sudo apt install default-jdk

اكنون كه جاوا نصب شده است ، مي توانيم يك كاربر tomcat ايجاد كنيم كه براي اجراي سرويس Tomcat استفاده خواهد شد.
مرحله 2 – ايجاد كاربر Tomcat
براي اهداف امنيتي ، Tomcat بايد به عنوان يك كاربر بدون امتيازات اجرا شود (يعني root نباشد). ما يك كاربر و گروه جديد ايجاد خواهيم كرد كه سرويس Tomcat را اجرا كند.
ابتدا ، يك گروه tomcat جديد ايجاد كنيد:
⦁ $ sudo groupadd tomcat

سپس ، يك كاربر جديد Tomcat ايجاد ميكنيم. اين كاربر را عضو گروه Tomcat ميكنيم با ديركتوري هوم / opt / tomcat (جايي كه Tomcat را نصب خواهيم كرد) و يك پوسته / bin / false (تا هيچ كس نتواند وارد حساب شود):
⦁ $ sudo useradd -s /bin/false -g tomcat -d /opt/tomcat tomcat

اكنون كه كاربر Tomcat ما تنظيم شده است ، اجازه دهيد Tomcat را دانلود و نصب كنيم.
مرحله 3 – Tomcat را نصب كنيد
بهترين راه براي نصب Tomcat 9 دانلود آخرين نسخه باينري و سپس پيكربندي دستي آن است.
آخرين نسخه Tomcat 9 را در صفحه دانلود Tomcat 9 پيدا كنيد. در زمان نوشتن اين مقاله، آخرين نسخه 9.0.27 است ، اما در صورت وجود بايد از نسخه پايدار بعدي استفاده كنيد. در زير بخش توزيع هاي باينري ، و سپس در زير ليست Core  ، لينك “tar.gz” را كپي كنيد.
در مرحله بعدي ، به بخش SSH خود بازگرديد و به ديركتوري / tmp در سرور مجازي خود برويد. اين يك ديركتوري خوب براي دانلود موارد زودگذر است ، مانند تاربال Tomcat ، كه ما پس از اكستركت مطالب Tomcat نيازي به آن نداريم:
⦁ $ cd /tmp

براي دانلود تاربال از ابزار خط فرمان curl استفاده خواهيم كرد. curl را نصب كنيد:
⦁ $ sudo apt install curl

اكنون ، براي دانلود پيوندي كه از وب سايت Tomcat كپي كرده ايد ، از curl استفاده كنيد:
⦁ $ curl -O http://www-eu.apache.org/dist/tomcat/tomcat-9/v9.0.11/bin/apache-tomcat-9.0.11.tar.gz

ما Tomcat را در ديركتوري / opt / tomcat نصب خواهيم كرد. اين دايركتوري را ايجاد كنيد ، سپس بايگاني را با اين دستورات در آن اكستركت كنيد:
⦁ $ sudo mkdir /opt/tomcat

⦁ $ sudo tar xzvf apache-tomcat-9*tar.gz -C /opt/tomcat –strip-components=1

در مرحله بعد ، مجوزهاي كاربري مناسب را براي نصب خود تنظيم خواهيم كرد.
مرحله 4 – به روز رساني مجوزها
كاربر Tomcat كه ايجاد كرديم نياز به دسترسي به نصب Tomcat دارد. اكنون آن را تنظيم خواهيم كرد.
به دايركتوري برويد كه در آن نصب Tomcat را باز نكرديم:
⦁ $ cd /opt/tomcat

مالكيت گروه tomcat را به كل ديركتوري نصب بدهيد:
⦁ $ sudo chgrp -R tomcat /opt/tomcat

در مرحله بعد ، به گروه tomcat دسترسي به ديركتوري conf و كليه محتويات آن بدهيد و دسترسي به ديركتوري خود را اجرا كنيد:
⦁ $ sudo chmod -R g+r conf

⦁ $ sudo chmod g+x conf

كاربر Tomcat را به مالك ديركتوري هاي webapps, work, temp, و  logs تبديل كنيد:
⦁ $ sudo chown -R tomcat webapps/ work/ temp/ logs/

اكنون كه مجوزهاي مناسب تنظيم شده است ، يك فايل سرويس systemd را براي مديريت فرايند Tomcat ايجاد خواهيم كرد.
مرحله 5 – يك فايل خدمات systemd ايجاد كنيد
ما مي خواهيم بتوانيم Tomcat را به عنوان يك سرويس اجرا كنيم ، بنابراين فايل سرويس systemd را تنظيم خواهيم كرد.
Tomcat بايد بداند جاوا در كجا نصب شده است. اين مسير معمولاً به JAVA_HOME اشاره مي كند. آسانترين راه براي جستجوي آن مكان با اجراي اين دستور است:
⦁ $ sudo update-java-alternatives -l

Output
java-1.11.0-openjdk-amd64 1111 /usr/lib/jvm/java-1.11.0-openjdk-amd64

JAVA_HOME شما خروجي آخرين ستون است (در بالا هايلايت شده است). با توجه به مثال بالا ، JAVA_HOME صحيح براي اين سرور مجازي به اين صورت خواهد بود:
AVA_HOME
/usr/lib/jvm/java-1.11.0-openjdk-amd64

JAVA_HOME شما ممكن است متفاوت باشد.
با اين اطلاعات مي توانيم فايل سرويس systemd را ايجاد كنيم. با تايپ دستور زير فايلي به نام tomcat.service در ديركتوري / etc / systemd / system باز كنيد:
⦁ $ sudo nano /etc/systemd/system/tomcat.service

محتواي زير را در فايل سرويس خود پيست كنيد. در صورت لزوم مقدار JAVA_HOME را اصلاح كنيد تا با مقدار يافت شده در سيستم شما مطابقت داشته باشد. همچنين بهتر است تنظيمات تخصيص حافظه را كه در CATALINA_OPTS مشخص شده است اصلاح كنيد:
/etc/systemd/system/tomcat.service
[Unit]
Description=Apache Tomcat Web Application Container
After=network.target

[Service]
Type=forking

Environment=JAVA_HOME=/usr/lib/jvm/java-1.11.0-openjdk-amd64
Environment=CATALINA_PID=/opt/tomcat/temp/tomcat.pid
Environment=CATALINA_HOME=/opt/tomcat
Environment=CATALINA_BASE=/opt/tomcat
Environment=’CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC’
Environment=’JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom’

ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh

User=tomcat
Group=tomcat
UMask=0007
RestartSec=10
Restart=always

[Install]
WantedBy=multi-user.target

پس از اتمام ، فايل را ذخيره كنيد و ببنديد.
سپس ، Daemon systemd را مجدد لود كنيد تا از تغييرات فايل سرويس ما مطلع شود:
⦁ $ sudo systemctl daemon-reload

سرويس Tomcat را با تايپ دستور زير شروع كنيد:
⦁ $ sudo systemctl start tomcat

با تايپ دستور زير مجدد بررسي كنيد كه بدون خطا شروع شده است:
⦁ $ sudo systemctl status tomcat

بايد خروجي مشابه زير را ببينيد:
Output
● tomcat.service – Apache Tomcat Web Application Container
Loaded: loaded (/etc/systemd/system/tomcat.service; disabled; vendor preset: enabled)
Active: active (running) since Thu 2019-10-24 17:18:11 UTC; 4s ago
Process: 5962 ExecStart=/opt/tomcat/bin/startup.sh (code=exited, status=0/SUCCESS)
Main PID: 5970 (java)
Tasks: 44 (limit: 2377)
Memory: 184.2M
CGroup: /system.slice/tomcat.service
└─5970 /usr/lib/jvm/java-1.11.0-openjdk-amd64/bin/java -Djava.util.logging.config.file=/opt/tomcat/conf/logging.properties -Djava.u

Oct 24 17:18:10 tomcat systemd[1]: Starting Apache Tomcat Web Application Container…
Oct 24 17:18:11 tomcat startup.sh[5962]: Tomcat started.
Oct 24 17:18:11 tomcat systemd[1]: Started Apache Tomcat Web Application Container.

اين خروجي تأييد مي كند كه Tomcat در سرور مجازي شما فعال و در حال اجرا است.
مرحله 6 – فايروال را تنظيم كرده و سرور مجازي Tomcat را تست كنيد
اكنون كه سرويس Tomcat آغاز شده است ، مي توانيم آزمايش كنيم تا مطمئن شويم كه صفحه پيش فرض در دسترس است.
قبل از انجام اين كار ، بايد فايروال را تنظيم كنيم تا درخواست هاي ما بتوانند به اين سرويس برسند. اگر پيش نيازها را رعايت كرده باشيد ، در حال حاضر يك فايروال ufw فعال شده داريد.
Tomcat از پورت 8080 براي پذيرش درخواستها استفاده مي كند. با تايپ كردن دستور زير اجازه دسترسي به آن پورت را بدهيد:
⦁ $ sudo ufw allow 8080

با اصلاح فايروال ، مي توانيد با رفتن به دامنه يا آدرس IP خود پس از 8080: در مرورگر وب، به صفحه splash پيش فرض دسترسي پيدا كنيد:
Open in web browser
http://server_domain_or_IP:8080

علاوه بر اطلاعات ديگر ، صفحه پيش فرض Tomcat splash را نيز خواهيد ديد. با اين حال ، اگر به عنوان مثال روي پيوندها براي برنامه Manager كليك كنيد ، از دسترسي محروم خواهيد شد. ما ميتوانيم اين دسترسي را در مرحله بعد پيكربندي كنيم.
اگر توانستيد با موفقيت به Tomcat دسترسي پيدا كنيد ، اكنون زمان مناسبي براي فعال كردن فايل خدمات است به گونه اي كه Tomcat به طور خودكار از بوت شروع شود:
⦁ $ sudo systemctl enable tomcat

مرحله 7 – رابط مديريت وب Tomcat را پيكربندي كنيد
براي استفاده از برنامه وب منيجر كه همراه Tomcat است ، بايد وارد سرور مجازي Tomcat خود شويم. اين كار را با ويرايش فايل tomcat-users.xml انجام خواهيم داد:
⦁ $ sudo nano /opt/tomcat/conf/tomcat-users.xml

بهتر است كاربري را اضافه كنيد كه بتواند به manager-gui و admin-gui دسترسي پيدا كند (برنامه هاي وب كه با Tomcat همراه هستند). شما مي توانيد اين كار را با تعريف يك كاربر ، مشابه مثال زير ، بين برچسب هاي tomcat-users انجام دهيد. حتماً نام كاربري و رمز عبور را به چيزي امن تغيير دهيد:
tomcat-users.xml

. . .

پس از اتمام فايل را ذخيره كنيد و ببنديد.
به طور پيش فرض ، نسخه هاي جديدتر Tomcat دسترسي به برنامه هاي Manager و Host Manager را به اتصالات سرور مجازي خود محدود مي كند. از آنجا كه ما روي يك دستگاه از راه دور آن را نصب مي كنيم ، احتمالاً مي خواهيد اين محدوديت را حذف كنيد يا تغيير دهيد. براي تغيير محدوديت هاي آدرس IP در اين مورد ، فايل هاي مناسب.xml را باز كنيد.
براي برنامه منيجر ، تايپ كنيد:
⦁ $ sudo nano /opt/tomcat/webapps/manager/META-INF/context.xml

براي برنامه هاست منيجر ، تايپ كنيد:
⦁ $ sudo nano /opt/tomcat/webapps/host-manager/META-INF/context.xml

در داخل ، محدوديت آدرس IP را باطل كنيد تا از هرجاي ديگر بتوانيد اتصالات برقرار كنيد. از طرف ديگر ، اگر مايل هستيد به اتصالات حاصل از آدرس IP شخصي خود دسترسي بدهيد، مي توانيد آدرس IP عمومي خود را به اين ليست اضافه كنيد:
context.xml files for Tomcat webapps

allow=”127.d+.d+.d+|::1|0:0:0:0:0:0:0:1″ />–>

پس از اتمام ، فايل ها را ذخيره كنيد و ببنديد.
براي اعمال تغييرات خود ، سرويس Tomcat را مجدداً راه اندازي كنيد:
⦁ $ sudo systemctl restart tomcat

مرحله 8 – دسترسي به رابط وب
اكنون كه يك كاربر ايجاد كرده ايم ، مي توانيم دوباره در يك مرورگر وب به رابط مديريت وب دسترسي پيدا كنيم. يك بار ديگر ، مي توانيد با وارد كردن نام دامنه سرور مجازي يا آدرس IP همراه با پورت 8080 در مرورگر خود ، به رابط صحيح برسيد:
Open in web browser
http://server_domain_or_IP:8080

صفحه اي كه مي بينيد بايد همان صفحه اي باشد كه هنگام آزمايش قبلي به شما نشان داده شده است:

بياييد نگاهي به برنامه منيجر بيندازيم كه از طريق لينك يا http: // server_domain_or_IP: 8080 / manager / html قابل دسترسي است. لازم است اعتبارات حساب كه به فايل tomcat-users.xml اضافه كرديد را وارد نماييد. پس از آن ، بايد صفحه اي را مشاهده كنيد كه به شكل زير است:

Web Application Manager براي مديريت برنامه هاي جاوا استفاده مي شود. مي توانيد در اينجا اقدام به شروع ، توقف ، بارگيري مجدد ، استقرار و عدم استقرار نماييد. همچنين مي توانيد برخي از تشخيص ها را در برنامه هاي خود اجرا كنيد (مثلا پيدا كردن نشت حافظه). در آخر ، اطلاعات مربوط به سرور مجازي شما در انتهاي همين صفحه موجود است.
حال اجازه دهيد، از طريق لينك يا http://server_domain_or_IP:8080/host-manager/html/ نگاهي به هاست منيجر بيندازيم.

از صفحه Virtual Host Manager ، مي توانيد ميزبان هاي مجازي را براي ارائه برنامه هاي خود اضافه كنيد.
نتيجه
نصب شما از Tomcat پايان يافته است! اكنون مي توانيد برنامه هاي وب جاوا خود را مستقر كنيد.
در حال حاضر ، نصب Tomcat شما كاربردي است ، اما كاملاً بدون رمزگذاري ميباشد. اين بدان معني است كه تمام داده ها ، از جمله موارد حساس مانند گذرواژه‌ها ، با متن ساده ارسال مي شوند كه توسط طرفين ديگر در اينترنت قابل رهگيري و خواندن هستند. براي جلوگيري از وقوع اين اتفاق ، اكيداً توصيه مي شود كه اتصالات خود را با SSL رمزگذاري كنيد. با پيروي از اين راهنما مي توانيد نحوه رمزگذاري اتصالات خود با Tomcat را ياد بگيريد (توجه داشته باشيد: اين راهنما رمزگذاري Tomcat 8 را در Ubuntu 16.04 پوشش مي دهد).

 

برچسب‌ها:Apache TomcatAPTOpenJDK

راه اندازي سرور اوليه با Debian 10

۶۷ بازديد

هنگامي كه شما براي اولين بار يك سرور مجازي Debian 10 جديد ايجاد مي كنيد ، چند مرحله پيكربندي وجود دارد كه بايد آنها را به عنوان بخشي از ستاپ اوليه انجام دهيد. اين كار باعث افزايش امنيت و قابليت استفاده سرور مجازي شما مي شود و پايه و اساس محكمي را براي اقدامات بعدي به شما مي دهد.
در اين آموزش ياد خواهيم گرفت كه چگونه به عنوان كاربر اصلي وارد سرور مجازي خود شويم ، كاربر جديدي با امتيازات ادمين ايجاد كنيم و يك فايروال پايه تنظيم كنيم.
مرحله 1 – ورود به عنوان Root
براي ورود به سرور مجازي خود ، بايد آدرس IP عمومي سرور مجازي خود را بدانيد. در صورت نصب كليد SSH براي تأييد اعتبار ، يعني كليد خصوصي براي حساب كاربر root، به گذرواژه نيز احتياج داريد. اگر قبلاً به سرور مجازي خود وارد نشده ايد ، ممكن است بخواهيد راهنماي ما در مورد نحوه اتصال به دراپلت خود را با SSH دنبال كنيد ، كه اين لينك روند را با جزئيات پوشش مي دهد.
اگر قبلاً به سرور مجازي خود وصل نشده ايد ، پيش برويد و با استفاده از دستور زير به عنوان كاربر اصلي وارد سيستم شويد (بخش هايلايت شده فرمان را با آدرس IP عمومي سرور مجازي خود جايگزين كنيد):
$ ssh root@your_server_ip

در صورت وجود هشدار درباره تاييد صحت ميزبان آن را بپذيريد. اگر از تأييد اعتبار گذرواژه استفاده مي كنيد ، رمز ورود ريشه خود را وارد كنيد. اگر از يك كليد SSH استفاده مي كنيد كه عبارت عبور آن محافظت شده است ، ممكن است اولين باري كه از هر كليد استفاده مي كنيد از شما خواسته شود كلمه عبور را وارد كنيد. اگر اولين بار است كه با گذرواژه وارد سرور مجازي مي شويد ، ممكن است از شما خواسته شود رمزعبور root را تغيير دهيد.
درباره ريشه
كاربر ريشه كاربر ادمين در محيط لينوكس است كه امتيازات بسيار گسترده اي دارد. به دليل امتيازات زياد حساب ريشه ، استفاده منظم از آن توصيه نميشود. اين امر به اين دليل است كه بخشي از قدرت ذاتي حساب ريشه ، توانايي ايجاد تغييرات بسيار مخرب ، حتي به طور تصادفي است.
قدم بعدي راه اندازي يك حساب كاربري جايگزين با حوزه تاثيرات كمتر براي كارهاي روزانه است. بعداً ، توضيح خواهيم داد كه چگونه مي توانيد در مواقعي كه به آنها احتياج داريد ، امتيازات بيشتري را دريافت كنيد.
مرحله 2 – ايجاد يك كاربر جديد
پس از ورود به عنوان root ، آماده هستيم تا حساب كاربري جديدي را اضافه كنيم كه از اين پس براي ورود به سيستم استفاده خواهيم كرد .
اين مثال يك كاربر جديد به نام sammy ايجاد مي كند ، اما شما بايد آن را با نام كاربري كه دوست داريد جايگزين كنيد:
# adduser sammy

با شروع رمز ورود به حساب ، چند سؤال از شما پرسيده خواهد شد.
يك رمز عبور قوي وارد كنيد و به صورت اختياري ، هر يك از اطلاعات اضافي را كه مي خواهيد پر كنيد. اين مورد نياز نيست و مي توانيد ENTER را در هر زمينه اي كه مايل به عبور هستيد ، بزنيد.
در مرحله بعدي ، اين كاربر جديد را با امتيازات ادمين تنظيم خواهيم كرد.
مرحله 3 – اعطاي امتيازات ادمين
اكنون ، ما يك حساب كاربري جديد با امتيازات معمول حساب ايجاد كرده ايم. با اين حال ، ممكن است گاهي اوقات نياز به انجام كارهاي اجرايي با آن داشته باشيم.
براي جلوگيري از خروج از حساب كاربري عادي و ورود به سيستم به عنوان حساب اصلي ، مي توانيم براي حساب عادي خود چيزي به اسم superuser ايجاد كنيم يا امتيازات اصلي را به آن بدهيم. اين كار به كاربر عادي ما امكان مي دهد با قرار دادن كلمه sudo قبل از دستور ، دستوراتي را با امتيازات ادمين اجرا كند.
براي افزودن اين امتيازات به كاربر جديد خود ، بايد كاربر جديد را به گروه sudo اضافه كنيم. به طور پيش فرض ، در Debian 10 ، كاربراني كه به گروه sudo تعلق دارند مجاز به استفاده از دستور sudo هستند.
به عنوان root ، اين دستور را اجرا كنيد تا كاربر جديد خود را به گروه sudo اضافه كنيد (كلمه هايلايت شده را با كاربر جديد خود جايگزين كنيد):
# usermod -aG sudo sammy

اكنون ، هنگامي كه به عنوان كاربر معمولي خود وارد سيستم شديد ، مي توانيد قبل از دستورات sudo را تايپ كنيد تا دستور را با امتيازات superuser اجرا كنيد.
مرحله 4 – تنظيم فايروال پايه
سرور مجازي هاي دبيان مي توانند از فايروال ها استفاده كنند تا اطمينان حاصل شود كه فقط اتصالات خاصي به سرويس هاي خاص مجاز هستند. در اين راهنما ، فايروال UFW را براي كمك به تنظيم رويكرد فايروال و مديريت استثناعات، نصب و استفاده خواهيم كرد.
مي توانيم از مدير بسته apt براي نصب UFW استفاده كنيم. فهرست محلي را به روز كنيد تا آخرين اطلاعات در مورد بسته هاي موجود را بازيابي كنيد و سپس با تايپ كردن دستور زير نرم افزار فايروال UFW را نصب كنيد:
# apt update

# apt install ufw

توجه: اگر سرور مجازي هاي شما روي vpsgol در حال اجرا هستند ، مي توانيد به طور اختياري به جاي فايروال UFW از فايروال هاي vpsgol Cloud استفاده كنيد. توصيه مي كنيم فقط از يك فايروال به طور هم زمان استفاده كنيد تا از قوانين متناقض براي اشكال زدايي جلوگيري شود.

پروفايل هاي فايروال به UFW اجازه مي دهد مجموعه اي از قوانين فايروال را براي برنامه هاي نصب شده مديريت كند. پروفايل برخي از نرم افزارهاي رايج بصورت پيش فرض با UFW همراه شده و بسته ها مي توانند پروفايل هاي اضافي را با UFW در طي مراحل نصب ثبت كنند. OpenSSH ، سرويسي كه به ما امكان اتصال كنوني به سرور مجازي خود را مي دهد ، داراي پروفايل فايروال است كه مي توانيم از آن استفاده كنيم.
با تايپ كردن دستور زير تمام پروفايل هاي موجود را ليست مي كنيد:
# ufw app list

Output
Available applications:
. . .
OpenSSH
. . .

بايد اطمينان حاصل كنيم كه فايروال امكان اتصالات SSH را مي دهد تا بتوانيم دفعه ديگر وارد سيستم شويم. مي توانيم با تايپ اين دستور اجازه اين اتصالات را فراهم كنيم:
# ufw allow OpenSSH

پس از آن ، مي توانيم با تايپ كردن دستور زير فايروال را فعال كنيم:
# ufw enable

y را تايپ كرده و ENTER را براي ادامه فشار دهيد. با تايپ كردن دستور زير مي توانيد ببينيد كه اتصالات SSH هنوز مجاز هستند:
# ufw status

Output
Status: active

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

از آنجا كه فايروال در حال حاضر همه اتصالات به جز SSH را مسدود مي كند ، در صورت نصب و پيكربندي سرويس هاي اضافي ، بايد تنظيمات فايروال را براي ايجاد ترافيك قابل قبول را تنظيم كنيد. شما مي توانيد برخي از عمليات معمول UFW را در راهنماي ضروريات UFW بياموزيد.
مرحله 5 – فعال كردن دسترسي خارجي براي كاربر معمولي شما
اكنون كه ما يك كاربر معمولي براي استفاده روزانه داريم ، بايد اطمينان حاصل كنيم كه مي توانيم مستقيماً SSH را وارد حساب كاربري خود كنيم.
توجه: تا زماني كه تأييد نكنيد كه مي توانيد با كاربر جديد خود وارد سيستم شويد و از sudo استفاده كنيد ، توصيه مي كنيم به عنوان root وارد شويد. به اين ترتيب ، اگر مشكل داريد مي توانيد به عنوان ريشه عيب يابي كرده و هرگونه تغيير لازم را انجام دهيد. اگر از Droplet vpsgol استفاده مي كنيد و در ارتباط با اتصال SSH ريشه خود مشكل داريد ، مي توانيد با استفاده از كنسول vpsgol وارد Droplet شويد.

روند پيكربندي دسترسي SSH براي كاربر جديد شما به اين بستگي دارد كه آيا حساب اصلي سرور مجازي شما از رمز عبور يا كليدهاي SSH براي تأييد اعتبار استفاده مي كند.
اگر حساب Root از احراز هويت رمز عبور استفاده مي كند
اگر با استفاده از گذرواژه وارد حساب اصلي خود شده ايد ، تأييد رمز عبور براي SSH فعال مي شود. با باز كردن بخش ترمينال جديد و استفاده از SSH با نام كاربري جديد خود مي توانيد به حساب كاربري جديد، SSH كنيد:
$ ssh sammy@your_server_ip

بعد از وارد كردن رمزعبور معمولي كاربر ، وارد سيستم مي شويد. به ياد داشته باشيد اگر نياز به اجراي يك فرمان با امتيازات اداري داريد ، قبل از اين كار sudo را تايپ كنيد:
$ sudo command_to_run

براي اولين بار در هر بخش (و به صورت دوره اي بعد از آن) رمزعبور كاربر معمولي از شما خواسته مي شود.
براي تقويت امنيت سرور مجازي خود ، به شدت توصيه مي كنيم به جاي استفاده از احراز هويت رمز عبور ، كليدهاي SSH را تنظيم كنيد. براي يادگيري نحوه پيكربندي احراز هويت مبتني بر كليد ، راهنماي ما در مورد تنظيم كليدهاي SSH در Debian 10 را دنبال كنيد.
اگر حساب Root از احراز هويت كليد SSH استفاده مي كند
اگر با استفاده از كليدهاي SSH به حساب اصلي خود وارد شده ايد ، تأييد رمز عبور براي SSH غيرفعال است. براي ورود موفقيت آميز به سيستم ، بايد يك نسخه از كليد عمومي محلي خود را در فايل ~/.ssh/authorized_keys كاربر جديد اضافه كنيد.
از آنجا كه كليد عمومي شما قبلاً در فايل ~/.ssh/authorized_keys حساب ريشه در سرور مجازي است ، مي توانيم در بخش موجود با دستور cp آن فايل و ساختار ديركتوري را در حساب كاربري جديد خود كپي كنيم. پس از آن ، مي توانيم مالكيت فايل ها را با استفاده از دستور chown تنظيم كنيم.
اطمينان حاصل كنيد كه قسمت هايلايت شده فرمان زير را تغيير دهيد تا با نام كاربر معمولي شما مطابقت داشته باشد:
# cp -r ~/.ssh /home/sammy

#
chown -R sammy:sammy /home/sammy/.ssh

دستور cp -r كل دايركتوري را در ديركتوري هوم كاربر جديد كپي مي كند ، و دستور chown -R صاحب آن ديركتوري (و هر چيزي را كه در داخل آن است) را به username:groupname مشخص شده تغيير مي دهد (دبيان به طور پيش فرض گروهي را با همين نام كاربري شما ايجاد مي كند).
اكنون ، يك بخش ترمينال جديد را باز كرده و از طريق SSH با نام كاربري جديد خود وارد شويد:
$ ssh sammy@your_server_ip

بدون استفاده از رمز ورود بايد به حساب كاربري جديد وارد شويد. به ياد داشته باشيد ، اگر نياز به اجراي يك فرمان با امتيازات ادمين داريد ، sudo را قبل از آن تايپ كنيد:
$ sudo command_to_run

براي اولين بار در هر بخش (و به صورت دوره اي بعد از آن) رمزعبور كاربر معمولي از شما خواسته مي شود.
از اينجا به كجا برويم؟
در اين مرحله ، شما يك پايه محكم براي سرور مجازي خود داريد. اكنون مي توانيد هركدام از نرم افزارهاي مورد نياز خود را بر روي سرور مجازي خود نصب كنيد.

 

برچسب‌ها:OpenSSH

چگونه با JSX عناصر واقعي ايجاد كنيم

۸۰ بازديد

در اين آموزش مي آموزيد كه چگونه عناصر را با JSX توصيف كنيد. JSX انتزاعي است كه به شما امكان مي دهد دستور مشابه HTML را در كد جاوا اسكريپت خود بنويسيد و شما را قادر ميسازد تا مولفه هاي React را كه شبيه علائم استاندارد HTML هستند ، بسازيد. JSX زبان تمپليت مولفه هاي React است و بنابراين پايه و اساس هر نشانه گذاري اي است كه React به برنامه شما ارائه مي دهد.
از آنجايي كه JSX شما را قادر مي سازد جاوا اسكريپت را نيز در نشانه گذاري خود بنويسيد ، مي توانيد از توابع و روش هاي JavaScript ، از جمله نگاشت آرايه و ارزيابي اتصال كوتاه براي شرطي ها استفاده كنيد.
به عنوان بخشي از آموزش ، رويدادهاي كليك را مستقيماً در نشانه گذاري روي دكمه ها ضبط مي كنيد و مواردي را مشاهده مي كنيد كه تركيب دقيقاً مطابق با HTML استاندارد نباشد ، مانند كلاس هاي CSS. در پايان اين آموزش ، يك برنامه كاري داريد كه از انواع مختلفي از ويژگيهاي JSX استفاده مي كند تا ليستي از مولفه هايي را كه داراي يك شنونده كليك داخلي هستند ، نمايش دهد. اين يك الگوي رايج در برنامه هاي React است كه شما اغلب در طول يادگيري چارچوب استفاده خواهيد كرد. همچنين مي توانيد عناصر استاندارد HTML را با جاوا اسكريپت مخلوط كنيد تا ببينيد چگونه React به شما امكان ايجاد كد هاي كوچك و قابل استفاده مجدد را مي دهد.
پيش نيازها
• به محيط توسعه در حال اجراي Node.js نياز داريد. اين آموزش بر روي Node.js نسخه 10.19.0 و npm نسخه 6.13.4 تست شده است. براي نصب اين برنامه در maغير مجاز مي باشد يا Ubuntu 18.04 ، مراحل نحوه نصب Node.js و ايجاد محيط توسعه محلي را در maغير مجاز مي باشد يا نصب با استفاده از بخش PPA در آموزش نحوه نصب Node.js در اوبونتو 18.04 را دنبال كنيد.
• بايد با  Create React App قادر به ايجاد برنامه باشيد. مي توانيد دستورالعمل نصب را در نحوه ايجاد يك پروژه React با  Create React App پيدا كنيد.
• همچنين به دانش پايه از JavaScript نياز خواهيد داشت كه مي توانيد در نحوه كدنويسي در JavaScript بياموزيد و به دانش پايه از HTML و CSS نيز احتياج داريد. يك منبع مناسب براي HTML و CSS ، شبكه توسعه دهنده Mozilla ميباشد.
مرحله 1 – اضافه كردن نشانه گذاري به يك مولفه React
همانطور كه قبلاً نيز اشاره شد ، React يك زبان نشانه گذاري خاص به نام JSX دارد. پ تركيبي از نحو HTML و JavaScript است كه چيزي شبيه به اين ميباشد:


{inventory.filter(item => item.available).map(item => (

{item.name}

{item.price}


))
}

برخي از قابليت هاي JavaScript مانند .filter و .map و همچنين برخي HTML هاي استاندارد مانند

را خواهيد شناخت. اما بخش هاي ديگري مانند و className نيز وجود دارند كه شبيهHTML و JavaScript به نظر مي رسد.
اين زبان JSX است ، يعني زبان نشانه گذاري ويژه اي كه به مولفه هاي React حس HTML را با قدرت JavaScript مي دهد.
در اين مرحله ، مي آموزيد كه تركيب HTML مانند پايه را به مولفه موجود React اضافه كنيد. براي شروع ، مولفه هاي HTML استاندارد را به يك تابع JavaScript اضافه خواهيد كرد ، سپس كد كامپايل شده را در يك مرورگر مشاهده مي كنيد. همچنين عناصر را گروه بندي مي كنيد تا React بتواند آنها را با حداقل نشانه گذاري كامپايل كند ، و HTML تميزي را ارائه كند.
براي شروع ، يك پروژه جديد درست كنيد. در خط فرمان خود ، اسكريپت زير را اجرا كنيد تا يك پروژه تازه با استفاده از create-react-app نصب كنيد:
⦁ $ npx create-react-app jsx-tutorial

پس از اتمام پروژه ، دايركتوري را تغيير دهيد:
⦁ $ cd jsx-tutorial

در يك ترمينال يا پنجره جديد ، پروژه را با استفاده از اسكريپت شروع Create React App شروع كنيد. مرورگر بعد از تغييرات مجدداً ريفرش ميشود ، بنابراين در تمام مدت كار شما اين اسكريپت را رها ميكند:
⦁ $ npm start

يك سرور مجازي محلي در حال اجرا دريافت خواهيد كرد. اگر پروژه در پنجره مرورگر باز نشد ، مي توانيد آن را در http: // localhost: 3000 / پيدا كنيد. اگر اين كار را از يك سرور مجازي از راه دور انجام مي دهيد ، آدرس http: // your_IP_address: 3000 خواهد بود.
مرورگر شما با يك برنامه React به عنوان بخشي از Create React App لود مي شود.

شما در حال ساخت مجموعه كاملاً جديدي از مولفه هاي سفارشي هستيد ، بنابراين بايد با پاك كردن برخي از كد هاي متن استاندارد شروع كنيد تا بتوانيد يك پروژه خالي داشته باشيد. براي شروع App.js ار در ويرايشگر متن باز كنيد. اين قسمت اصلي است كه به صفحه تزريق مي شود. همه مؤلفه ها از اينجا شروع مي شوند.
در يك ترمينال جديد ، وارد پوشه پروژه شويد و src / App.js را با دستور زير باز كنيد:
⦁ $ nano src/App.js

فايلي مانند اين را مشاهده خواهيد كرد:
jsx-tutorial/src/App.js
import React from ‘react’;
import logo from ‘./logo.svg’;
import ‘./App.css’;

function App() {
return (



”logo”


Edit src/App.js and save to reload.


className=”App-link”
href=”https://reactjs.org”
target=”_blank”
rel=”noopener noreferrer”
>
Learn React



);
}

export default App;

اكنون پس از عبارت بازگشت در تابع ، خط import logo from ‘./logo.svg و هر چيز ديگر را حذف كنيد. آن را به null تغيير دهيد. كد نهايي به شرح زير خواهد بود:
jsx-tutorial/src/App.js
import React from ‘react’;
import ‘./App.css’;

function App() {
return null;
}

export default App;

ويرايشگر متن را ذخيره كرده و از آن خارج شويد.
در آخر ، لوگو را حذف كنيد. در پنجره ترمينال دستور زير را تايپ كنيد:
⦁ $ rm src/logo.svg

شما در برنامه خود از اين فايل SVG استفاده نخواهيد كرد و بايد هنگام كار ، فايل هاي بلااستفاده را حذف كنيد. بهتر است در طولاني مدت كد خود را سازماندهي كنيد.
اكنون كه اين قسمت از پروژه شما حذف شده است ، مي توانيد به جستجو در جنبه هاي ديگر JSX بپردازيد. اين زبان نشانه گذاري توسط React كامپايل شده و در نهايت تبديل به HTML مي شود كه در يك صفحه وب مشاهده مي كنيد. بدون وارد شدن عميق داخلي React ، JSX را مي گيرد و الگويي از صفحه شما را ايجاد مي كند ، سپس عناصر لازم را ايجاد كرده و آنها را به صفحه اضافه مي كند.
اين بدان معني است كه مي توانيد چيزي را بنويسيد كه شبيه HTML است و انتظار داشته باشيد كه HTML ارائه شده مشابه باشد. با اين حال ، چند مرحله وجود دارد.
ابتدا ، اگر به سربرگ يا پنجره سرور مجازي خود نگاه كنيد ، اين را مشاهده خواهيد كرد
Output

./src/App.js
Line 1:8: ‘React’ is defined but never used no-unused-vars

اين linter به شما مي گويد كه از كد React وارد شده استفاده نمي كنيد. هنگامي كه خط import React from ‘react’ را به كد خود اضافه مي كنيد ، كد JavaScript را وارد مي كنيد كه JSX را به React code تبديل مي كند. اگر JSX وجود نداشته باشد ، ديگر نيازي به ورودي نيست.
بياييد با اضافه كردن مقدار كمي JSX اين مسئله را تغيير دهيم. با جايگزين كردن null با يك مثال hello, world شروع كنيد:
jsx-tutorial/src/App.js
import React from ‘react’;
import ‘./App.css’;

function App() {
return

Hello, World

;
}

export default App;

فايل را ذخيره كنيد. اگر به ترمينال با سرور مجازي در حال اجرا نگاه كنيد ، پيام اخطار از بين خواهد رفت. اگر از مرورگر خود بازديد كنيد ، پيام را به عنوان مولفه h1 مشاهده خواهيد كرد.

سپس ، در زير برچسب

، يك برچسب پاراگراف اضافه كنيد كه شامل رشته I am writing JSX است. كد به صورت زير خواهد بود:
jsx-tutorial/src/App.js
import React from ‘react’;
import ‘./App.css’;

function App() {
return(

Hello, World


I am writing JSX


)
}

export default App;

از آنجايي كه JSX چندين خط دارد ، نياز است عبارت در پرانتز قرار داده شود.
فايل را ذخيره كنيد. هنگامي كه اين كار را كرديد، خطايي در اجراي سرور مجازي خود در ترمينال مشاهده مي كنيد:
Output
./src/App.js
Line 7:5: Parsing error: Adjacent JSX elements must be wrapped in an enclosing tag. Did you want a JSX fragment <>…?

5 | return(
6 |

Hello, World


> 7 |

I am writing JSX


| ^
8 | )
9 | }
10 |

وقتي JSX را از يك تابع يا عبارت باز مي گردانيد ، بايد يك مولفه واحد را برگردانيد. اين مولفه ممكن است بخش هاي لانه گزيده باشد ، اما اگر يك مولفه سطح بالا باشد. در اين حالت ، دو مولفه را بر مي گردانيد.
fix يك تغيير كد جزيي است. با يك برچسب خالي كد را محصور كنيد. برچسب خالي يك مولفه HTML است كه هيچ كلمه اي ندارد. به اين شكل: <>
به./src/App.js در ويرايشگر خود برويد و برچسب خالي را اضافه كنيد:
jsx-tutorial/src/App.js
import React from ‘react’;
import ‘./App.css’;

function App() {
return(
<>

Hello, World


I am writing JSX



)
}

export default App;

برچسب خالي يك مولفه واحد ايجاد مي كند ، اما وقتي كد كامپايل شد ، به نشانه گذاري نهايي اضافه نمي شود. اين كار باعث مي شود كدهاي شما در عين حال كه يك مولفه واحد به React مي دهند ، صحيح باقي بمانند.
توجه: شما مي توانيد به جاي برچسب هاي خالي ، كد را با يك div محصور كنيد ، مادامي كه كد يك مولفه را برگرداند. در اين مثال ، يك برچسب خالي اين مزيت را دارد كه نشانه گذاري اضافي به خروجي تجزيه نشده اضافه نمي كند.

كد را ذخيره كرده و از فايل خارج شويد. مرورگر شما صفحه به روز شده را با مولفه پاراگراف نشان مي دهد. علاوه بر اين ، هنگام تبديل كد ، برچسب هاي خالي از بين مي روند:

اكنون JSX اساسي را به مؤلفه خود اضافه كرده ايد و ياد گرفته ايد كه چگونه بايد همه JSX در يك مؤلفه مستقر شود. در مرحله بعد ، يك ظاهر طراحي را به مؤلفه خود اضافه مي كنيد.
مرحله 2 – اضافه كردن طراحي به يك مولفه به همراه ويژگي ها
در اين مرحله ، به عناصر موجود در مؤلفه خود مي پردازيد تا ياد بگيريد كه چگونه ويژگي هاي HTML با JSX كار مي كنند. در React گزينه هاي بسياري براي طراحي وجود دارد. برخي از آنها شامل نوشتن CSS در جاوا اسكريپت است، بو رخي ديگر از پيش پردازنده استفاده مي كنند. در اين آموزش با كلاس هاي CSS و CSS وارد شده كار خواهيد كرد.
اكنون كه كد خود را داريد ، وقت آن است كه يك ظاهر طراحي شده اضافه كنيد. App.css را در ويرايشگر متن خود باز كنيد:
⦁ $ nano src/App.css

از آنجا كه شما با JSX جديد شروع مي كنيد ، CSS فعلي به عناصري اشاره مي كند كه ديگر وجود ندارند. از آنجا كه به CSS احتياج نداريد ، مي توانيد آن را حذف كنيد.
پس از حذف كد ، فايلي خالي خواهيد داشت.
در مرحله بعد ، مي توانيد طراحي به مركز متن اضافه كنيد. در src / App.css كد زير را اضافه كنيد:
jsx-tutorial/src/App.css
.container {
display: flex;
flex-direction: column;
align-items: center;
}

در اين بلوك كد ، شما  CSS class selector را با نام .container ايجاد كرده ايد و از آن براي در مركز قرار دادن محتوا با استفاده از display: flex استفاده كرده ايد.
فايل را ذخيره كرده و خارج شويد. مرورگر بروزرساني مي شود ، اما هيچ چيز تغيير نخواهد كرد. قبل از مشاهده تغيير ، بايد كلاس CSS را به مؤلفه React خود اضافه كنيد. كد JavaScript مولفه را انتخاب كنيد:
⦁ $ nano src/App.js

كد CSS قبلاً با خط import ‘./App.css’ وارد شده است. اين بدان معني است كه webpack براي ساختن يك صفحه طراحي نهايي، كد را وارد مي كنند ، اما براي اعمال CSS روي عناصر خود ، بايد كلاس ها را اضافه كنيد.
ابتدا ، در ويرايشگر متن ، برچسب هاي خالي ، <> را به

تغيير دهيد.
jsx-tutorial/src/App.js
import React from ‘react’;
import ‘./App.css’;

function App() {
return(


Hello, World


I am writing JSX



)
}

export default App;

در اين كد تگ هاي خالي – <> – را با برچسب هاي div جايگزين كرده ايد. تگ هاي خالي براي گروه بندي كد شما بدون اضافه كردن برچسب هاي اضافي مفيد هستند ، اما در اينجا شما بايد از div استفاده كنيد زيرا برچسب هاي خالي هيچ ويژگي HTML را نمي پذيرند.
در مرحله بعد بايد نام كلاس را اضافه كنيد. اينجاست كه JSX شروع به واگرايي از HTML مي كند. اگر مي خواهيد يك كلاس را به يك مولفه HTML معمولي اضافه كنيد ، اين كار را اينگونه انجام مي دهيد:


Copy

اما از آنجا كه JSX جاوا اسكريپت است ، محدوديت هايي دارد. يكي از محدوديت ها اين است كه جاوا اسكريپت كلمات كليدي خود را رزرو كرده است. اين بدان معناست كه شما نمي توانيد از كلمات خاصي در هر كد JavaScript استفاده كنيد. به عنوان مثال ، شما نمي توانيد يك متغير به نام null ايجاد كنيد زيرا اين كلمه در حال حاضر محفوظ است.
يكي از كلمات رزرو شده class است. React با كمي تغيير دادن اين كلمه كار خود را انجام ميدهد. به جاي اضافه كردن مشخصه class ، className را اضافه مي كنيد. به عنوان يك قاعده ، اگر يك مشخصه (attribute) همانطور كه انتظار مي رود كار نمي كند ، سعي كنيد نسخه camel case را اضافه كنيد. مشخصه ديگري كه كمي متفاوت است مشخصه for ميباشد كه براي برچسب ها استفاده ميكنيد. چند مورد ديگر نيز وجود دارد ، اما خوشبختانه اين ليست نسبتاً كوتاه است.
توجه: در React ، مشخصه ها اغلب prps خوانده مي شوند. Props داده هايي هستند كه مي توانيد به ساير مؤلفه هاي سفارشي منتقل كنيد. آنها مشابه مشخصه ها هستند به جز اينكه با هيچ يك از مشخصات HTML مطابقت ندارند. در اين آموزش ، آنها را مشخصه مي ناميم زيرا عمدتا مانند مشخصه هاي استاندارد HTML استفاده مي شوند. اين امر آنها را از propهايي كه مانند مشخصه هاي HTML رفتار نمي كنند ، متمايز مي كند ، كه بعداً در اين مجموعه پوشش داده مي شود.

اكنون كه مي دانيد چگونه از مشخصه calss در React استفاده مي شود ، مي توانيد كد خود را به روز كنيد تا طراحي ها را درج كنيد. در ويرايشگر متن خود ، className=”container” را به برچسب div اضافه كنيد
jsx-tutorial/src/App.js
import React from ‘react’;
import ‘./App.css’;

function App() {
return(


Hello, World


I am writing JSX



)
}

export default App;

فايل را ذخيره كنيد. با انجام اين كار ، صفحه مجدد لودد مي شود و محتوا در مركز قرار مي گيرد ..

ويژگي className در React بي نظير است. شما مي توانيد اكثر ويژگيهاي HTML را بدون هيچ تغييري به JSX اضافه كنيد. به عنوان نمونه ، به ويرايشگر متن خود برگرديد و شناسه greeting را به مولفه

خود اضافه كنيد. مانند HTML استاندارد به نظر مي رسد:
jsx-tutorial/src/App.js
import React from ‘react’;
import ‘./App.css’;

function App() {
return(


Hello, World


I am writing JSX



)
}

export default App;

صفحه را ذخيره كرده و مرورگر را مجدد لود كنيد. مشابه قبلي خواهد بود.
تاكنون ، JSX به عنوان نشانه گذاري استاندارد به نظر مي رسيد ، اما مزيت JSX اين است كه حتي اگر شبيهHTML به نظر مي رسد ، قدرت جاوا اسكريپت را دارد. اين بدان معناست كه مي توانيد متغيرها را اختصاص دهيد و آنها را در مشخصه هاي خود ارجاع دهيد. براي ارجاع به يك مشخصه ، آن را به جاي نقل قولها در پرانتزهاي به شكل {} قرار دهيد.
در ويرايشگر متن خود ، خطوط هايلايت شده زير را به عنوان يك مشخصه اضافه كنيد:
jsx-tutorial/src/App.js
import React from ‘react’;
import ‘./App.css’;

function App() {
const greeting = “greeting”;
return(


Hello, World


I am writing JSX



)
}

export default App;

در اين كد ، در بالاي عبارت return يك متغير به نام greeting با مقدار “greeting” ايجاد كرده ايد ، سپس متغير را در مشخصه id برچسب

خود ارجاع داده ايد.
فايل را ذخيره كنيد و از آن خارج شويد. صفحه همان خواهد بود، اما برچسب id خواهد داشت.

تاكنون با چند مولفه به تنهايي كار كرده ايد ، اما مي توانيد از JSX همچنين براي اضافه كردن بسياري از عناصر HTML استفاده كرده و آنها را براي ايجاد صفحات پيچيده مستقر نماييد.
براي نشان دادن اين موضوع ، مي توانيد با ليستي از ايموجي ها صفحه اي ايجاد كنيد. اين شكلك ها با يك مولفه









  • )
    }

    export default App;

    در اينجا شما براي نگه داشتن ليستي از ايموجي ها برچسب

      ايجاد كرده ايد. هر ايموجي در يك مولفه
    • جداگانه قرار دارد و با يك مولفه


    • onClick={event => alert(event.target.id)}
      >
      ????



    • onClick={event => alert(event.target.id)}
      >
      ????




    )
    }

    export default App;

    از آنجا كه اين JSX است ، onclick را به صورت camelCased درمي آوريد ، به اين معني كه آن را به صورت onClick اضافه كرده ايد. اين مشخصه onClick از يك تابع ناشناس براي بازيابي اطلاعات در مورد آيتمي كه كليك شده است استفاده مي كند.
    شما يك تابع فلش ناشناس اضافه كرديد كه اين رويداد را از روي دكمه كليك شده درياقن مي كند و رويداد داراي هدفي خواهد بود كه مولفه است. اطلاعات مورد نياز در مشخصه id است كه مي توانيد با event.target.id به آنها دسترسي پيدا كنيد. با تابع () alert مي توانيد هشدار را فعال كنيد.
    فايل را ذخيره كنيد. در مرورگر خود ، روي يكي از ايموجي ها كليك كرده و هشداري را به همراه نام دريافت خواهيد كرد.

    مي توانيد با يكبار اعلام تابع و انتقال آن به هر تابع onClick ، ​​ تكرار را كاهش دهيد. از آنجايي كه اين تابع به چيزي غير از ورودي و خروجي متكي نيست ، مي توانيد آن را خارج از تابع مؤلفه اصلي اعلام كنيد. به عبارت ديگر ، تابع نيازي به دسترسي به حوزه مولفه ندارد. مزيت جدا كردن آنها اين است كه تابع كامپوننت شما كمي كوتاه تر است و مي توانيد در صورت نياز بعدا تابع را به يك فايل جداگانه منتقل كنيد.
    در ويرايشگر متن خود ، تابعي به نام displayEmojiName ايجاد كنيد كه اين رويداد را بگيرد و تابع ()alert را با شناسه فراخواني كند. سپس تابع را به هر مشخصه onClick منتقل كنيد:
    jsx-tutorial/src/App.js
    import React from ‘react’;
    import ‘./App.css’;

    const displayEmojiName = event => alert(event.target.id);

    function App() {
    const greeting = “greeting”;
    return(


    Hello, World


    I am writing JSX




    • onClick={displayEmojiName}
      >
      ????



    • onClick={displayEmojiName}
      >
      ????



    • onClick={displayEmojiName}
      >
      ????




    )
    }

    export default App;

    فايل را ذخيره كنيد. در مرورگر خود ، روي emoji كليك كنيد و همان هشدار را مشاهده خواهيد كرد.
    در اين مرحله ، شما به هر مولفه رويدادهايي اضافه كرديد. همچنين ديديد كه چگونه JSX از اسامي كمي متفاوت براي رويدادهاي مولفه استفاده مي كند ، و با گرفتن تابع و استفاده مجدد از آن بر روي چندين مولفه ، شروع به نوشتن كد قابل استفاده مجدد كرديد. در مرحله بعد ، يك تابع قابل استفاده مجدد خواهيد نوشت كه به جاي نوشتن هر مولفه به صورت دستي، عناصر JSX را برمي گرداند. اين امر بيشتر باعث كاهش تكرار خواهد شد.
    مرحله 4 – نگاشت روي داده ها براي ايجاد عناصر
    در اين مرحله ، استفاده از JSX فراتر از نشانه گذاري ساده خواهد رفت. ياد مي گيريد كه آن را با جاوا اسكريپت تركيب كنيد تا نشانه گذاري پويا ايجاد كنيد كه كد را كوچك مي كند و خوانايي را بهبود مي بخشد. مي توانيد كد خود را در آرايه اي كه براي ايجاد عناصر HTML حلقه مي كنيد ، آناليز كنيد.
    JSX شما را به يك تركيب مشابه HTML محدود نمي كند. همچنين امكان استفاده مستقيم از JavaScript را در نشانه گذاري به شما مي دهد. اين كار را تا حدي با وارد كردن توابع به مشخصه ها امتحان كرده ايد. همچنين از متغيرها براي استفاده مجدد از داده ها استفاده كرده ايد. اكنون زمان آن رسيده كه JSX را مستقيماً از داده ها با استفاده از كد استاندارد JavaScript بسازيد.
    در ويرايشگر متن خود ، بايد آرايه اي از داده هاي ايموجي را در فايل src / App.js ايجاد كنيد. اگر بسته است ، فايل را مجدداً باز كنيد:
    ⦁ $ nano src/App.js

    آرايه اي را اضافه كنيد كه شامل آبجكت هاي داراي ايموجي و نام ايموجي باشد. توجه داشته باشيد كه ايموجي ها بايد با علامت نقل قول احاطه شوند. اين آرايه را فراتر از تابع app ايجاد كنيد:
    jsx-tutorial/src/App.js
    import React from ‘react’;
    import ‘./App.css’;

    const displayEmojiName = event => alert(event.target.id);
    const emojis = [
    {
    emoji: “????”,
    name: “grinning face”
    },
    {
    emoji: “????”,
    name: “party popper”
    },
    {
    emoji: “????”,
    name: “woman dancing”
    }
    ];

    function App() {

    }

    export default App;

    اكنون كه داده داريد مي توانيد از طريق آن حلقه بزنيد. براي استفاده از JavaScript در داخل JSX ، بايد آن را در پرانتز {} قرار دهيد. مشابه زماني است كه توابع را به مشخصه ها اضافه كرديد.
    براي ايجاد مؤلفه هاي React ، بايد داده ها را به عناصر JSX تبديل كنيد. براي انجام اين كار ، روي داده ها نگاشت مي كنيد و يك مولفه JSX را برمي گردانيد. چند نكته وجود دارد كه هنگام نوشتن كد بايد آنها را به خاطر بسپاريد.
    ابتدا ، يك گروه از آيتم ها بايد توسط يك كانتينر

    احاطه شوند. سپس ، هر آيتم به يك مشخصه خاص به نام key نياز دارد. Key نياز به يك سري داده منحصر به فرد دارد كه React مي تواند از آنها استفاده كند تا عناصر را رديابي كند و بداند چه موقع به روز رساني اين مؤلفه را انجام دهد. اين كليد از HTML كامپايل شده خارج مي شود ، زيرا فقط براي اهداف داخلي است. هر زمان كه با حلقه كار مي كنيد ، بايد يك رشته ساده را به عنوان كليد اضافه كنيد.
    در اينجا مثال ساده اي وجود دارد كه ليستي از نام ها را در يك
    نگاشت مي كند:

    const names = [
    “Atul Gawande”,
    “Stan Sakai”,
    “Barry Lopez”
    ];

    return(


    {names.map(name =>
    {name}
    )}

    )

    HTML حاصل از اين قرار است:


    Atul Gawande

    Stan Sakai

    Barry Lopez


    تبديل ليست ايموجي مشابه خواهد بود.

      كانتينر خواهد بود. روي داده ها نگاشت مي كنيد و
    • را با كليد نام كوتاه ايموجي برميگردانيد. شما داده هاي به سختي كد شده را در برچسب هاي

    • ))
      }


    )
    }
    export default App;
    Copy

    در اين كد ، شما بر روي آرايه emojis در برچسب

      نگاشت كرديد و
    • را برگردانديد. در هر
    • از نام ايموجي به عنوان مشخصه key استفاده كرده ايد. دكمه همان تابع عادي را خواهد داشت. در مولفه ، aria-label و id را با name جايگزين كنيد. محتواي برچسب بايد ايموجي باشد.
      فايل را ذخيره كنيد. پنجره شما ريفرش خواهد شد و داده ها را مشاهده خواهيد كرد. توجه كنيد كه كليد در HTML توليد شده وجود ندارد.

      تركيب JSX با استاندارد JavaScript ابزارهاي زيادي را در اختيار شما قرار مي دهد تا بصورت ديناميكي محتوا را ايجاد كنيد و مي توانيد از هر JavaScript استاندارد مورد نظر خود استفاده كنيد. در اين مرحله ، JSX سخت كد گذاري شده را با يك آرايه و يك حلقه جايگزين كرديد تا HTML به صورت پويا ايجاد شود. در مرحله بعد ، با استفاده از اتصال كوتاه ، اطلاعات را به صورت مشروط نشان مي دهيد.
      مرحله 5 – نمايش مشروط عناصر با اتصال كوتاه
      در اين مرحله ، از اتصال كوتاه براي نمايش مشروط عناصر HTML استفاده خواهيد كرد. اين كار به شما امكان مي دهد تا مؤلفه هايي ايجاد كنيد كه بتوانند HTML را بر اساس اطلاعات اضافي پنهان كند يا نشان دهد ، و به انعطاف پذيري مولفه هاي شما براي رسيدگي به موقعيت هاي مختلف مي پردازند.
      مواقعي وجود دارد كه شما براي نشان دادن اطلاعات در بعضي آيتم ها به مؤلفه نياز داريد و در آيتم هاي ديگر احتيج نيست. به عنوان مثال ، فقط در صورت صحت برخي موارد ممكن است بخواهيد براي كاربر پيام هشدار نشان دهيد ، يا ممكن است بخواهيد برخي از اطلاعات حساب را براي ادمين نمايش دهيد كه نمي خواهيد يك كاربر عادي آن را ببيند.
      براي اين كار از گردش كوتاه استفاده خواهيد كرد. اين بدان معناست كه شما از يك شرط استفاده خواهيد كرد و اگر قسمت اول صادق باشد ، اطلاعات را در قسمت دوم برمي گرداند.
      در اينجا يك مثال مطرح شده است. اگر مي خواهيد يك دكمه را فقط در صورت ورود كاربر به سيستم نشان دهيد ، اين مولفه را در پرانتز {} قرار دهيد و شرايط را قبل از آن اضافه مي كنيد.
      {isLoggedIn && }
      Copy

      در اين مثال ، شما در حال استفاده از عملگر && هستيد كه اگر همه چيز صادق باشد ، آخرين مقدار را به شما بازمي گرداند. در غير اين صورت ، false را برگردانده ، كه به React مي گويند هيچ نشانه گذاري اضافي را برنگرداند. اگر isLoggedIn صادق باشد ، React دكمه را نشان مي دهد. اگر isLoggedIn غلط باشد ، دكمه را نشان نمي دهد.
      براي امتحان كردن اين مسئله ، خطوط هايلايت شده زير را اضافه كنيد:
      jsx-tutorial/src/App.js
      import React from ‘react’;
      import ‘./App.css’;

      function App() {
      const greeting = “greeting”;
      const displayAction = false;
      return(


      Hello, World


      {displayAction &&

      I am writing JSX

      }




      )
      }

      export default App;

      در ويرايشگر متن خود متغيري به نام displayAction با مقدار false ايجاد كرده ايد. سپس برچسب

      را در {} قرار داديد. در شروع پرانتزها ، براي ايجاد شرط ، displayAction && را اضافه كرديد.
      فايل را ذخيره كنيد و خواهيد ديد كه مولفه در مرورگر شما ناپديد مي شود. مهم است بدانيد ، در HTML توليد شده نيز ظاهر نمي شود. اين مخفي كردن يك مولفه با CSS نيست. اصلاً در نشانه گذاري نهايي وجود نخواهد داشت.

      در حال حاضر مقدار displayAction سخت كدنويسي شده است ، اما مي توانيد آن مقدار را به عنوان حالت ذخيره كرده يا آن را به عنوان يك پايه در قسمت مولفه هاي بالاسري منتقل كنيد.
      در اين مرحله ياد گرفتيد كه چگونه عناصر را به صورت مشروط نشان دهيد. اين به شما امكان مي دهد تا مؤلفه هايي را تنظيم كنيد كه براساس اطلاعات ديگر قابل تنظيم هستند.
      نتيجه
      در اين آموزش ، يك برنامه سفارشي با JSX ايجاد كرديد. آموختيد كه چگونه عناصر HTML مانند، را به مولفه هاي خود اضافه كنيد ، يك ظاهر طراحي را به آن عناصر اضافه كنيد ، ويژگي هايي را براي ايجاد نشانه گذاري معنايي و در دسترس اضافه كنيد و رويدادها را به مؤلفه ها اضافه نماييد. سپس جاوا اسكريپت را با JSX خود تركيب كرديد تا كد تكراري را كاهش داده و عناصر را به طور مشروط نشان داده و مخفي كند.
      اين مبنايي است كه شما براي ساختن مولفه هاي آينده نياز داريد. با استفاده از تركيبي از JavaScript و HTML ، مي توانيد مولفه هاي پويا ايجاد كنيد كه قابل انعطاف باشند و به شما امكان مي دهد برنامه تان رشد و تغيير يابد.
      اگر مي خواهيد در مورد React اطلاعات بيشتري كسب كنيد ، از صفحه موضوع React ما ديدن كنيد.

       

    برچسب‌ها:Create React AppHTMLJavaScript,

    استفاده از سرور از راه دور Docker

    ۷۳ بازديد

    ساخت تصاوير و باينري هاي داراي CPU فشرده ، فرايندي بسيار كند و زمان بري است كه مي تواند در بعضي مواقع لپ تاپ شما را به بخاري تبديل كند. وارد كردن تصاوير Docker با اتصال آهسته ، مدت زمان زيادي طول مي كشد. خوشبختانه ، رفع اين مشكلات آسان است. Docker به شما امكان مي دهد تمام كارها را به يك سرور مجازي از راه دور بسپاريد تا دستگاه محلي شما مجبور به انجام آن كار سخت نباشد.
    اين ويژگي در Docker 18.09 معرفي شده است. اين نسخه پشتيباني اتصال به يك ميزبان Docker از راه دور از طريق SSH را به همراه دارد. به تنظيمات بسيار كمي در كلاينت احتياج دارد و فقط به يك سرور مجازي Docker معمولي و بدون هيچگونه تنظيم خاص در حال اجرا بر روي يك دستگاه از راه دور نياز خواهد داشت. قبل از Docker 18.09 ، بايد از دستگاه Docker براي ايجاد يك سرور مجازي Docker از راه دور استفاده كرده و سپس محيط محلي Docker را پيكربندي كنيد تا از آن استفاده كنيد. اين روش جديد آن پيچيدگي اضافي را از بين مي برد.
    در اين آموزش ، شما يك Droplet ايجاد مي كنيد تا ميزبان سرور مجازي Docker از راه دور باشيد و دستور docker را روي دستگاه محلي خود پيكربندي كنيد تا از آن استفاده نماييد.
    پيش نيازها
    براي دنبال كردن اين آموزش ، به موارد زير نياز داريد:
    يك حساب DigitalOcean. اگر قبلاً حساب كاربري نداريد مي توانيد يك حساب كاربري ايجاد كنيد.
    Docker كه روي دستگاه محلي يا سرور مجازي توسعه شما نصب شده باشد. اگر با Ubuntu 18.04 كار مي كنيد ، مراحل 1 و 2 نحوه نصب و استفاده از Docker را در اوبونتو 18.04 دنبال كنيد. در غير اين صورت ، براي كسب اطلاعات در مورد نصب در سيستم عامل هاي ديگر ، مطالب رسمي را دنبال كنيد. حتماً كاربر غير ريشه خود را به گروه docker اضافه كنيد ، همانطور كه در مرحله 2 از آموزش مربوطه توضيح داده شده است.
    مرحله 1 – ايجاد هاست Docker
    براي شروع كار ، Droplet را با مقدار مناسب قدرت پردازش راه اندازي كنيد. برنامه هاي بهينه سازي CPU براي اين منظور ايده آل هستند ، اما برنامه هاي استاندارد ديگر نيز به خوبي كار مي كنند. اگر برنامه هايي با منابع فشرده را كامپايل مي كنيد ، برنامه هاي بهينه سازي CPU هسته هاي CPU اختصاصي را ارائه مي دهند كه امكان ساخت سريع تر را فراهم مي كنند. در غير اين صورت ، برنامه هاي استاندارد نسبت CPU به RAM متعادل تري را ارائه مي دهند.
    Docker One-click image از همه تنظيمات مربوطه براي ما مراقبت مي كند. اين لينك را دنبال كنيد تا يك دراپلت بهينه سازي شده با CPU 16 GB / 8vCPU با Docker از كنترل پنل ايجاد كنيد.
    از طرف ديگر ، مي توانيد براي ايجاد Droplet از خط فرمان محلي خود ، از doctl استفاده كنيد. براي نصب آن ، دستورالعمل موجود در فايل README doctl را در GitHub دنبال كنيد.
    دستور زير يك دراپلت جديد بهينه شده با CPU 16GB/8vCPU در ناحيه FRA1 را بر اساس تصوير تك كليك Docker ايجاد مي كند:
    $ doctl compute droplet create docker-host

    $ –image docker-18-04

    $ –region fra1

    $ –size c-8

    $ –wait

    $ –ssh-keys $(doctl compute ssh-key list –format ID –no-header | sed ‘s/$/,/’ | tr -d ‘n’ | sed ‘s/,$//’)

    دستور doctl از مقدار ssh-keys استفاده مي كند تا مشخص كند كدام كليد SSH را بايد براي Droplet جديد خود اعمال كند. براي بازيابي كليدهاي SSH مرتبط با حساب DigitalOcean از يك زيرپوسته استفاده مي كنيم تا doctl compute ssh-key-list را فراخواني كنيم و سپس نتايج را با استفاده از دستور sed و tr تجزيه و تحليل مي كنيم تا داده ها را در قالب صحيح قالب بندي كنيم. اين دستور شامل كليه كليدهاي SSH حساب شما مي باشد ، اما مي توانيد دستور فرعي هايلايت شده را با اثرانگشت هر كليد موجود در حساب خود جايگزين كنيد.
    پس از ايجاد دراپلت ، آدرس IP آن را در بين ساير جزئيات مشاهده خواهيد كرد:
    Output
    ID Name Public IPv4 Private IPv4 Public IPv6 Memory VCPUs Disk Region Image Status Tags Features Volumes
    148681562 docker-host your_server_ip 16384 8 100 fra1 Ubuntu Docker 5:18.09.6~3 on 18.04 active

    مي توانيد اطلاعات بيشتري در مورد استفاده از دستور doctl در آموزش نحوه استفاده از doctl ، كلاينت خط فرمان رسمي DigitalOcean دريافت كنيد.
    وقتي دراپلت ايجاد شد ، آماده استفاده از سرور مجازي Docker خواهيد بود. براي اهداف امنيتي ، يك كاربر لينوكس ايجاد كنيد تا به جاي root استفاده شود.
    ابتدا با SSH به عنوان كاربر اصلي به دراپلت وصل شويد:
    $ ssh root@your_server_ip
    پس از اتصال ، يك كاربر جديد اضافه كنيد. اين دستور شخصي را به نام SAMMY اضافه مي كند:
    # adduser sammy

    سپس كاربر را به گروه docker اضافه كنيد تا به وي اجازه اجراي دستورات روي هاست Docker را بدهد.
    # sudo usermod -aG docker sammy

    در آخر با تايپ كردن exit از سرور مجازي راه دور خارج شويد.
    اكنون كه سرور مجازي آماده است ، اجازه دهيد دستور docker محلي را براي استفاده از آن پيكربندي كنيم.
    مرحله 2 – پيكربندي Docker براي استفاده از ميزبان از راه دور
    براي استفاده از ميزبان از راه دور به عنوان ميزبان Docker خود به جاي دستگاه محلي ، متغير محيط DOCKER_HOST را تنظيم كنيد تا به ميزبان از راه دور اشاره كند. اين متغير به كلاينت Docker CLI دستور مي دهد تا به سرور مجازي از راه دور متصل شود.
    $ export DOCKER_HOST=ssh://sammy@your_server_ip

    اكنون هر دستور Docker كه اجرا مي كنيد ، روي Droplet اجرا مي شود. به عنوان مثال ، اگر يك كانتينر وب سرور مجازي راه اندازي كنيد و يك پورت را در معرض ديد قرار دهيد ، روي Droplet اجرا خواهد شد و از طريق درگاهي كه در آدرس IP Droplet به نمايش گذاشته ايد ، قابل دسترسي خواهد بود.
    براي تأييد اينكه به Droplet به عنوان ميزبان Docker دسترسي داريد ، docker info را اجرا كنيد.
    $ docker info

    نام ميزبان Droplet خود را كه در قسمت Name ذكر شده است ، مشاهده خواهيد كرد:
    Output

    Name: docker-host

    نكته اي كه بايد در نظر داشته باشيد اينست كه وقتي دستور docker build را اجرا مي كنيد ، محتواي ساخت (كليه فايل ها و پوشه هاي قابل دسترسي از Dockerfile) به هاست ارسال مي شود و سپس مراحل ساخت اجرا مي شود. بسته به اندازه محتواي ساخت و ميزان فايل ها ، ممكن است در مقايسه با ساخت تصوير روي يك دستگاه محلي زمان بيشتري طول بكشد. يكي از راه حل ها اين است كه يك دايركتوري جديد اختصاص داده شده به تصوير Docker ايجاد كنيد و فقط فايل هايي را كه در تصوير استفاده خواهد شد كپي كنيد يا پيوند دهيد تا هيچ فايلغير ضروري به صورت سهوي آپلود نشود.
    هنگامي كه متغير DOCKER_HOST را با استفاده از export تنظيم كرديد ، مقدار آن براي مدت زمان بخش پوسته دوام خواهد داشت. در صورت نياز به استفاده مجدد از سرور مجازي محلي Docker ، مي توانيد متغير را با دستور زير پاك كنيد:
    unset DOCKER_HOST
    نتيجه
    شما يك ميزبان Docker از راه دور ايجاد كرده ايد و به صورت محلي به آن متصل هستيد. دفعه بعد كه باتري لپ تاپ شما رو به كاهش بود يا مجبور بوديد يك تصوير سنگين Docker بسازيد ، به جاي دستگاه محلي خود از سرور مجازي از راه دور Docker خود استفاده كنيد.
    همچنين ممكن است علاقه مند به يادگيري در مورد چگونگي بهينه سازي تصاوير Docker براي توليد يا چگونگي بهينه سازي آنها به طور خاص براي Kubernetesباشيد.

     

    برچسب‌ها:CPUDockerDocker CLIDroplet

    نحوه نصب Git در CentOS 8

    ۷۰ بازديد

    سيستم هاي كنترل نسخه بخشي ضروري از توسعه نرم افزاري مدرن هستند. نسخه سازي به شما امكان مي دهد تا نرم افزار خود را در سطح منبع نگه داريد. مي توانيد تغييرات را رديابي كنيد ، به مراحل قبلي برگرديد و شاخه بدهيد تا نسخه هاي متفاوتي از فايل ها و فهرست ها ايجاد كنيد.
    يكي از محبوب ترين سيستم هاي كنترل نسخه در حال حاضر موجود Git است. بسياري از فايل هاي پروژه ها در يك مخزن Git نگهداري مي شوند و سايت هايي مانند GitHub ، GitLab و Bitbucket به تسهيل اشتراك و همكاري پروژه توسعه نرم افزار كمك مي كنند.
    در اين راهنما نحوه نصب و پيكربندي Git روي سرور مجازي CentOS 8 را بررسي خواهيم كرد. نحوه نصب نرم افزار را به دو روش مختلف پوشش خواهيم داد: از طريق مدير بسته داخلي و از طريق منبع. هر يك از اين رويكردها بسته به نيازهاي خاص شما مزاياي خاص خود را دارد.
    پيش نيازها
    شما به يك سرور مجازي CentOS 8 با يك حساب كاربري فوق كاربري غير ريشه نياز خواهيد داشت.
    براي انجام اين كار، مي توانيد راهنماي تنظيم اوليه سرور مجازي براي CentOS 8 را دنبال كنيد.
    با راه اندازي سرور مجازي و كاربر ، آماده شروع كار هستيد.
    نصب Git با بسته هاي پيش فرض
    اولين گزينه ما براي نصب Git از طريق بسته هاي پيش فرض CentOS است.
    اين گزينه براي كساني كه مي خواهند به سرعت با Git پيش بروند، يا كساني كه نسخه پايدار و پر كاربرد را ترجيح مي دهند ، يا كساني كه به دنبال جديدترين گزينه هاي موجود نيستند، بهترين انتخاب است. اگر به دنبال جديدترين نسخه منتشر شده هستيد ، بايد به سراغ بخش نصب آن از منبع برويد.
    ما از ابزار مديريت منبع باز DNF استفاده مي كنيم ، كه مخفف Dandified YUM نسخه نسل بعدي Yellowdog Updater ، اصلاح شده است (يعني yum) . DNF مدير بسته اي است كه هم اكنون مدير بسته پيش فرض سيستم هاي لينوكس مبتني بر Red Hat مانند CentOS ميباشد. به شما امكان مي دهد بسته هاي نرم افزاري را بر روي سرور مجازي خود نصب ، به روز و حذف كنيد.
    ابتدا ، از ابزارهاي مديريت بسته مناسب براي به روزرساني فهرست بسته محلي خود استفاده كنيد.

    $ sudo dnf update -y

    پرچم -y براي هشدار به سيستم است مبني بر اينكه ما آگاهيم كه در حال ايجاد تغيير هستيم و از اعلان تأييد توسط ترمينال جلوگيري شود.
    با تكميل به روزرساني ، مي توانيد Git را نصب كنيد:
    $ sudo dnf install git -y

    با اجراي دستور زير مي توانيد تاييد كنيد كه Git را به درستي نصب كرده ايد:
    $ git –version

    Output
    git version 2.18.2

    با نصب موفقيت آميز Git ، اكنون مي توانيد براي تكميل تنظيم خود به بخش Setting Up Git برويد.
    نصب Git از Source
    يك روش انعطاف پذيرتر براي نصب Git ، كامپايل نرم افزار از منبع است. اين كار زمان بيشتري طول مي كشد و از طريق مدير بسته شما نگه داري نمي شود ، اما به شما امكان مي دهد آخرين نسخه را دانلود كنيد و در صورت تمايل به شخصي سازي ، كنترل برخي گزينه ها را در اختيار شما قرار مي دهد.
    قبل از شروع ، بايد نرم افزاري را نصب كنيد كه Git به آن بستگي دارد. اين همه ي چيزي است كه در مخازن پيش فرض موجود است ، بنابراين مي توانيم فهرست بسته محلي خود را بروزرساني كنيم و سپس بسته ها را نصب كنيم.
    $ sudo dnf update -y

    $ sudo dnf install gettext-devel openssl-devel perl-CPAN perl-devel zlib-devel gcc autoconf -y

    بعد از اينكه متعلقات لازم را نصب كرديد ، يك ديركتوري موقت ايجاد كنيد و به داخل آن برويد. اينجاست كه تاربال Git خود را دانلود خواهيم كرد.
    $ mkdir tmp

    $ cd /tmp

    از وب سايت پروژه Git ، مي توانيم به ليست تاربل توزيع Red Hat لينوكس موجود در https://mirrors.edge.kernel.org/pub/software/scm/git/ برويم و نسخه مورد نظر خود را دانلود كنيم. در زمان نوشتن اين مقاله ، جديدترين نسخه 2.26.0 است ، بنابراين ما آن را براي اهداف نمايشي دانلود خواهيم كرد. ما از curl استفاده مي كنيم و فايلي را كه دانلود مي كنيم به git.tar.gz. ميفرستيم:

    $ curl -o git.tar.gz https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.26.0.tar.gz

    فايل تاربال فشرده را باز كنيد:

    $ tar -zxf git.tar.gz
    سپس، وارد ديركتوري جديد Git شويد:

    $ cd git-*

    اكنون مي توانيد بسته را ايجاد كرده و با تايپ اين دو دستور آن را نصب كنيد:
    $ make prefix=/usr/local all

    $ sudo make prefix=/usr/local install

    پس از تكميل اين كار ، مي توانيد با بررسي نسخه مطمئن باشيد كه نصب شما موفقيت آميز بوده است.
    $ git –version

    Output
    git version 2.26.0
    با نصب موفقيت آميز Git ، اكنون مي توانيد ستاپ خود را تكميل كنيد.

    راه اندازي Git
    اكنون كه Git را نصب كرده ايد ، بايد آن را پيكربندي كنيد تا پيام هاي commit توليد شده حاوي اطلاعات صحيح شما باشند.
    اين كار را مي توان با استفاده از دستور git config انجام داد. به طور خاص ، بايد نام و آدرس ايميل خود را ارائه كنيم زيرا Git اين اطلاعات را در هر كاري كه انجام مي دهيم تعبيه مي كند. مي توانيم پيش برويم و با تايپ كردن اين دستور اين اطلاعات را اضافه كنيم:
    $ git config –global user.name “Your Name”

    $ git config –global user.email “youremail@domain.com”

    مي توانيم تمام موارد پيكربندي تنظيم شده را با تايپ دستور زير نمايش دهيم:
    $ git config –list

    Output
    user.name=Your Name
    user.email=youremail@domain.com

    اطلاعاتي كه وارد مي كنيد در فايل پيكربندي Git شما ذخيره مي شود ، كه مي توانيد به صورت اختياري و دستي با يك ويرايشگر متن مانند اين ويرايش كنيد:
    $ vi ~/.gitconfig

    ~/.gitconfig contents
    [user]
    name = Your Name
    email = youremail@domain.com

    سپس براي خروج از ويرايشگر متن ESC را فشار دهيد.
    گزينه هاي بسيار ديگري وجود دارد كه مي توانيد تنظيم كنيد ، اما اين دو مورد ضروري هستند. اگر اين مرحله را رد كنيد ، احتمالاً هنگام ورود به Git هشدارهايي مشاهده خواهيد كرد. اين باعث مي شود كار بيشتري براي شما ايجاد شود زيرا مجبور خواهيد بود كارهايي را كه انجام داده ايد با اطلاعات اصلاح شده عوض كنيد.
    نتيجه
    اكنون بايد Git را نصب كرده و آماده استفاده در سيستم خود باشيد.
    براي كسب اطلاعات بيشتر در مورد نحوه استفاده از Git ، اين مقاله ها و مجموعه ها را بررسي كنيد:
    • نحوه استفاده كارآمد از Git
    • نحوه استفاده از انشعابات Git
    • مقدمه اي بر منبع آزاد

     

    برچسب‌ها:BitBucketDandified YUM

    نصب و پيكربندي Zabbix براي رديابي ايمن سرورهاي

    ۷۳ بازديد

    يك نرم افزار مانيتورينگ منبع باز براي شبكه ها و برنامه ها است. اين برنامه نظارت بر هزاران معيار (metricها) جمع آوري شده از سرور مجازي ها ، ماشين هاي مجازي ، دستگاه هاي شبكه و برنامه هاي وب را در زمان واقعي ارائه مي دهد. اين معيارها به شما كمك مي كند تا سلامت فعلي زيرساخت IT خود را تعيين كنيد و قبل از شكايت مشتريان مشكلات سخت افزار يا اجزاي نرم افزاري را تشخيص دهيد. اطلاعات مفيد در يك پايگاه داده ذخيره مي شود ، بنابراين مي توانيد داده ها را با گذشت زمان تجزيه و تحليل كرده و كيفيت خدمات ارائه شده را بهبود بخشيد ، يا براي ارتقاء برنامه هاي خود تصميم گيري كنيد.
    Zabbix از گزينه هاي مختلفي براي جمع آوري معيارها استفاده مي كند ، از جمله آن مي توان به نظارت بدون عامل بر خدمات كاربر و معماري كلاينت-سرور مجازي اشاره كرد. براي جمع آوري متريك سرور مجازي ، از يك عامل كوچك در سرويس گيرنده تحت نظارت براي جمع آوري داده ها و ارسال آن به سرور مجازي Zabbix استفاده مي كند. Zabbix از ارتباط رمزگذاري شده بين سرور مجازي و كلاينت هاي متصل پشتيباني مي كند ، بنابراين هنگام گذر از شبكه هاي ناايمن ، از داده هاي شما محافظت مي شود.
    سرور مجازي Zabbix داده هاي خود را در يك پايگاه داده رابطه اي ايجاد مي كند كه توسط MySQL ، PostgreSQL يا Oracle تهيه مي شود. همچنين مي توانيد داده هاي تاريخي را در پايگاه هاي داده nosql مانند Elasticsearch و TimescaleDB ذخيره كنيد. Zabbix يك رابط وب فراهم مي كند تا بتوانيد داده ها را مشاهده كرده و تنظيمات سيستم را پيكربندي كنيد.
    در اين آموزش دو ماشين پيكربندي خواهيد كرد. يكي به عنوان سرور مجازي پيكربندي مي شود و ديگري به عنوان كلاينت كه بر آن نظارت مي كنيد. سرور مجازي از يك پايگاه داده MySQL براي ضبط داده هاي مانيتورينگ استفاده مي كند و از Apache براي سرويس رابط وب استفاده مي شود.
    پيش نيازها
    براي دنبال كردن اين آموزش ، به موارد زير نياز داريد:
    • دو سرور مجازي CentOS 7 كه با طبق مقاله نحوه راه اندازي سرور مجازي اوليه با CentOS تنظيم شده باشد ، و شامل يك كاربر غير ريشه با امتيازات sudo و فايروال باشد. روي يك سرور مجازي ، Zabbix را نصب مي كنيد. اين آموزش به اين سرور مجازي، سرور مجازي Zabbix خواهد گفت. در واقع سرور مجازي دوم شما را كنترل مي كند. به اين سرور مجازي دوم سرور مجازي دوم CentOS گفته مي شود.
    • سرور مجازي Zabbix به نصب Apache ، MySQL و PHP نياز دارد. نحوه نصب Linux ، Apache ، MySQL ، PHP (LAMP) را بر روي CentOS 7 دنبال كنيد تا اين موارد را روي سرور مجازي Zabbix پيكربندي كنيد.
    توجه: CentOS به جاي MySQL از MariaDB استفاده مي كند ، اما در دنبال كردن اين آموزش مشكلي ايجاد نمي كند.

    علاوه بر اين ، از آنجا كه شما از سرور مجازي Zabbix براي دسترسي به اطلاعات با ارزش در مورد زيرساخت هاي خود استفاده مي كنيد كه نمي خواهيد كاربران غيرمجاز به آنها دسترسي پيدا كنند ، مهم است كه با نصب گواهي TLS / SSL ، سرور مجازي خود را ايمن نگه داريد. اين كار اختياري است اما به شدت توصيه ميشود. براي به دست آوردن گواهينامه رايگان TLS / SSL مي توانيد راهنماي Let’s Encrypt on CentOS 7 را دنبال كنيد.
    مرحله 1 – نصب سرور مجازي Zabbix
    ابتدا بايد Zabbix را روي سرور مجازي ي كه MySQL ،Apache و PHP را نصب كرده ايد ، نصب كنيد. به عنوان كاربر غير ريشه خود به اين دستگاه وارد شويد:
    ⦁ $ ssh sammy@zabbix_server_ip_address

    Zabbix به طور پيش فرض در مدير بسته موجود نيست ، بنابراين بسته بندي پيكربندي مخزن را با استفاده از مخزن رسمي Zabbix براي CentOS نصب كنيد. در اين آموزش از نسخه 4.2 Zabbix استفاده مي شود:
    ⦁ $ sudo rpm -Uvh https://repo.zabbix.com/zabbix/4.2/rhel/7/x86_64/zabbix-release-4.2-1.el7.noarch.rpm

    خروجي زير را مشاهده خواهيد كرد:
    Output
    Retrieving https://repo.zabbix.com/zabbix/4.2/rhel/7/x86_64/zabbix-release-4.2-1.el7.noarch.rpm
    warning: /var/tmp/rpm-tmp.WXsYNB: Header V4 RSA/SHA512 Signature, key ID a14fe591: NOKEY
    Preparing… ################################# [100%]
    Updating / installing…
    1:zabbix-release-4.2-1.el7 ################################# [100%]

    فعلا همه ورودي هاي مخازن فعال را از حافظه نهان پاك كنيد:
    ⦁ $ sudo yum clean all

    سپس سرور مجازي Zabbix و Web Frontend را با پشتيباني پايگاه داده MySQL نصب كنيد:
    ⦁ $ sudo yum install zabbix-server-mysql zabbix-web-mysql

    در طي مراحل نصب از شما در مورد وارد كردن يك كليد GPG سؤال مي شود. اين كليد صحت بسته اي را كه نصب مي كنيد تأييد مي كند. براي پايان دادن به نصب ، كليد GPG را با تايپ y و فشار دادن ENTER هنگام درخواست، بپذيريد.

    همچنين ، عامل Zabbix را نصب كنيد ، كه به شما امكان مي دهد اطلاعات مربوط به وضعيت سرور مجازي Zabbix را جمع كنيد.
    ⦁ $ sudo yum install zabbix-agent

    قبل از استفاده از Zabbix ، شما بايد يك بانك اطلاعاتي را تنظيم كنيد تا داده هايي را كه سرور مجازي Zabbix از عاملين آن جمع آوري خواهد كرد ، نگه داريد. مي توانيد اين كار را در مرحله بعدي انجام دهيد.
    مرحله 2 – پيكربندي پايگاه داده MySQL براي Zabbix
    بايد يك پايگاه داده MySQL جديد ايجاد كرده و آن را با برخي از اطلاعات اصلي پر كنيد تا براي Zabbix مناسب باشد. همچنين يك كاربر خاص براي اين بانك اطلاعات ايجاد خواهيد كرد تا Zabbix با حساب ريشه وارد MySQL نشود.
    به عنوان كاربر ريشه با استفاده از رمز ريشه كه هنگام نصب سرور مجازي MySQL تنظيم كرده ايد به MySQL وارد شويد:
    ⦁ mariaDB [(none)]> mysql -uroot -p

    پايگاه داده Zabbix را با پشتيباني كاراكتر UTF-8 ايجاد كنيد:
    ⦁ mariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;

    سپس كاربري ايجاد كنيد كه سرور مجازي Zabbix از آن استفاده كند ، به آن دسترسي به پايگاه داده جديد را بدهيد و رمز عبور را براي كاربر تنظيم كنيد:
    ⦁ mariaDB [(none)]> grant all privileges on zabbix.* to zabbix@localhost identified by ‘your_zabbix_mysql_password’;

    سپس اين مجوزهاي جديد را اعمال كنيد:
    ⦁ mariaDB [(none)]> flush privileges;

    اين امر از كاربر و بانك اطلاعاتي مراقبت ميكند. از كنسول پايگاه داده خارج شويد:
    ⦁ mariaDB [(none)]> quit;

    در مرحله بعد ، طرح و داده هاي اوليه را وارد كنيد. نصب Zabbix فايلي را در اختيارتان قرار مي دهد.
    براي تنظيم شماتيك و وارد كردن داده ها به پايگاه داده zabbix ، دستور زير را اجرا كنيد. ازzcat  استفاده كنيد چرا كه اطلاعات موجود در فايل ، فشرده است.
    ⦁ $ zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix

    رمزعبور را براي كاربر zabbix MySQL كه هنگام درخواست از شما پيكربندي كرديد وارد نماييد.
    در صورت موفقيت، اين فرمان خطايي به همراه نخواهد داشت. اگر خطاي ERROR 1045 (28000): Access denied for user zabbix@’localhost’ (using password: YES) را مشاهده كرديد ، مطمئن شويد كه از رمز عبور براي كاربر zabbix استفاده كرده ايد و نه كاربر root.
    به منظور استفاده سرور مجازي Zabbix از اين پايگاه داده ، بايد گذرواژه پايگاه داده را در فايل پيكربندي سرور مجازي Zabbix تنظيم كنيد. فايل پيكربندي را در ويرايشگر متن مورد نظر خود باز كنيد. اين آموزش از vi استفاده مي كند:
    ⦁ $ sudo vi /etc/zabbix/zabbix_server.conf

    توجه: براي كسب اطلاعات بيشتر در مورد ويرايشگر متن vi و vim جانشين آن ، از نصب و استفاده از ويرايشگر متن Vim در آموزش Cloud Server استفاده كنيد.
    به دنبال قسمت زير در فايل باشيد:
    /etc/zabbix/zabbix_server.conf

    ### Option: DBPassword
    # Database password. Ignored for SQLite.
    # Comment this line if no password is used.
    #
    # Mandatory: no
    # Default:
    # DBPassword=

    اين نظرات در فايل نحوه اتصال به پايگاه داده را توضيح مي دهkد. شما بايد مقدار DBPassword را در فايل براي كاربر پايگاه داده خود تنظيم كنيد . با وارد كردن دكمه i حالت insert را وارد كرده ،DBPassword = را حذف كنيد و و رمز خود را براي پيكربندي بانك اطلاعات اضافه كنيد:
    /etc/zabbix/zabbix_server.conf

    # Mandatory: no
    # Default
    DBPassword=your_zabbix_mysql_password

    پس از اتمام ، ESC را فشار دهيد تا حالت درج باقي بماند ، سپس: wq و ENTER براي ذخيره و خروج از فايل تايپ كنيد.
    اين امر از پيكربندي سرور مجازي Zabbix محافظت ميكند. در مرحله بعد ، براي كاركرد صحيح رابط وب Zabbix اصلاحاتي را در تنظيمات PHP ايجاد خواهيد كرد.
    مرحله 3 – پيكربنديPHP براي Zabbix
    رابط وب Zabbix به زبان PHP نوشته شده است و به برخي تنظيمات ويژه سرور مجازي PHP احتياج دارد. مراحل نصب Zabbix يك فايل پيكربندي Apache ايجاد كرد كه شامل اين تنظيمات است. شما بايد تغيير كوچكي در اين فايل ايجاد كنيد ، بنابراين آن را با دستور زير باز كنيد:
    ⦁ $ sudo vi /etc/httpd/conf.d/zabbix.conf

    اين فايل شامل تنظيمات PHP است كه شرايط لازم براي رابط وب Zabbix را برآورده مي كند. با اين حال ، تنظيم منطقه زماني به طور پيش فرض حذف مي شود. براي اينكه مطمئن شويد Zabbix از زمان صحيح استفاده مي كند ، بايد منطقه زماني مناسب را تنظيم كنيد.
    /etc/httpd/conf.d/zabbix.conf


    php_value max_execution_time 300
    php_value memory_limit 128M
    php_value post_max_size 16M
    php_value upload_max_filesize 2M
    php_value max_input_time 300
    php_value max_input_vars 10000
    php_value always_populate_raw_post_data -1
    # php_value date.timezone Europe/Riga

    خط منطقه زماني كه در بلوك كد قبلي هايلايت شده است را باطل كنيد و آن را به منطقه زماني خود تغيير دهيد. مي توانيد از اين ليست از مناطق زماني پشتيباني شده استفاده كنيد تا يك ليست مناسب براي شما پيدا شود. سپس فايل را ذخيره كنيد و ببنديد.
    اكنون Apache را مجدداً راه اندازي كنيد تا اين تنظيمات جديد اعمال شود:
    ⦁ $ sudo systemctl restart httpd

    توجه: اگر SELinux در حالت اجباري در حال اجرا است ، بايد با استفاده از دستور sudo setenforce 0 آن را در حالت مجاز قرار دهيد تا به عامل Zabbix اجازه دهيد به طور آزادانه عمل كند. مي توانيد از اين آموزش براي اطلاعات بيشتر درباره مكانيسم كنترل امنيت Security Enhanced Linux استفاده كنيد.

    اكنون مي توانيد سرور مجازي و عامل Zabbix را راه اندازي كنيد:
    ⦁ $ sudo systemctl start zabbix-server

    ⦁ $ sudo systemctl start zabbix-agent
    سپس بررسي كنيد كه آيا سرور مجازي Zabbix به درستي كار مي كند:
    ⦁ $ sudo systemctl status zabbix-server

    وضعيت زير را مشاهده خواهيد كرد:
    Output
    ● zabbix-server.service – Zabbix Server
    Loaded: loaded (/usr/lib/systemd/system/zabbix-server.service; disabled; vendor preset: disabled)
    Active: active (running) since Fri 2019-05-03 05:57:29 UTC; 2s ago
    Process: 4461 ExecStart=/usr/sbin/zabbix_server -c $CONFFILE (code=exited, status=0/SUCCESS)

    در آخر ، سرور مجازي و نماينده را فعال كنيد تا در زمان بوت شروع شوند:
    ⦁ $ sudo systemctl enable zabbix-server

    ⦁ 4 sudo systemctl enable zabbix-agent

    اين سرور مجازي تنظيم شده و به بانك اطلاعاتي وصل ميباشد. سپس ، ظاهر وب را تنظيم كنيد.
    توجه: همانطور كه در بخش Preferences ذكر شد ، توصيه مي شود SSL / TLS را روي سرور مجازي خود فعال كنيد. براي بدست آوردن يك گواهينامه SSL رايگان براي Apache در CentOS 7مي توانيد اين آموزش را دنبال كنيد. پس از اخذ گواهينامه هاي SSL / TLS ، مي توانيد دوباره برگشته و اين آموزش را تكميل كنيد.

    مرحله 4 – پيكربندي تنظيمات رابط وب Zabbix
    رابط وب به شما امكان مي دهد گزارش ها را مشاهده كنيد و ميزبان هايي را كه مي خواهيد نظارت كنيد اضافه نماييد ، اما قبل از استفاده از آن نياز به تنظيمات اوليه دارد. مرورگر خود را راه اندازي كنيد و به آدرس http: // zabbix_server_name / zabbix / برويد. در صفحه اول يك پيام خوش آمديد مشاهده خواهيد كرد. براي ادامه بر روي next step كليك كنيد.
    در صفحه بعدي ، جدول را مشاهده خواهيد كرد كه ليست تمامي پيش نيازهاي اجراي Zabbix را نشان مي دهد.

    همه مقادير موجود در اين جدول بايد ok باشد ، بنابراين تأييد كنيد كه هستند. حتماً تا پايين صفحه رفته و همه پيش نيازها را نگاه كنيد. هنگامي كه تأييد كرديد كه همه چيز آماده است ، براي ادامه روي next step كليك كنيد.
    صفحه بعدي اطلاعات اتصال داده را مي پرسد.

    به سرور مجازي Zabbix در مورد بانك اطلاعاتي خود آگاهي داديد ، اما رابط وب Zabbix براي مديريت هاست و خواندن داده نيز به دسترسي به بانك اطلاعاتي احتياج دارد. بنابراين اعتبارات MySQL را كه در مرحله 2 پيكربندي كرده ايد وارد كنيد و براي ادامه بر روي next step كليك كنيد.
    در صفحه بعدي مي توانيد گزينه ها را در مقادير پيش فرض آنها قرار دهيد.

    name اختياري است. در صورت داشتن چندين سرور مجازي نظارت ، از آن در رابط وب استفاده مي شود. براي ادامه بر روي next step كليك كنيد.
    صفحه بعدي خلاصه پيش از نصب را نشان مي دهد تا بتوانيد تأييد كنيد كه همه چيز صحيح است.

    بر روي next step كليك كنيد تا به صفحه نهايي برويد.
    ستاپ رابط وب اكنون تكميل شده است. اين فرآيند فايل پيكربندي /etc/zabbix/web/zabbix.conf.php را ايجاد مي كند كه مي توانيد در آينده از آنها نسخه پشتيبان تهيه كنيد و استفاده كنيد. براي رفتن به صفحه ورود ، روي Finish كليك كنيد. كاربر پيش فرض Admin و پسورد zabbix است.
    قبل از ورود به سيستم ، عامل Zabbix را در دومين سرور مجازي CentOS خود تنظيم كنيد.
    مرحله 5 – نصب و پيكربندي عامل Zabbix
    حال بايد نرم افزار عامل را تنظيم كنيد كه داده هاي مانيتورينگ را به سرور مجازي Zabbix ارسال مي كند.
    وارد سرور مجازي CentOS دوم شويد:
    ⦁ $ ssh sammy@second_centos_server_ip_address

    سپس ، دقيقاً مانند سرور مجازي Zabbix ، دستور زير را براي نصب بسته تنظيمات مخزن اجرا كنيد:
    ⦁ $ sudo rpm -Uvh https://repo.zabbix.com/zabbix/4.2/rhel/7/x86_64/zabbix-release-4.2-1.el7.noarch.rpm

    بعد ، حافظه yum را پاك كنيد:
    ⦁ $ sudo yum clean all
    سپس عامل Zabbix را نصب كنيد:
    ⦁ $ sudo yum install zabbix-agent

    در طي مراحل نصب در مورد وارد كردن يك كليد GPG از شما سؤال مي شود. آن را تأييد كنيد تا نصب كامل شود.
    در حالي كه Zabbix از رمزگذاري مبتني بر گواهي پشتيباني مي كند ، تنظيم مجوز قانوني فراتر از محدوده اين آموزش است. در عوض ، در اين آموزش از كليدهاي از پيش اشتراكي (PSK) براي برقراري ارتباط بين سرور مجازي و عامل استفاده خواهيد كرد.
    ابتدا يك PSK ايجاد كنيد:
    ⦁ $ sudo sh -c “openssl rand -hex 32 > /etc/zabbix/zabbix_agentd.psk”

    كليد را نشان دهيد تا بتوانيد آن را در جايي كپي كنيد. براي پيكربندي هاست به آن احتياج خواهيد داشت.
    ⦁ $ cat /etc/zabbix/zabbix_agentd.psk

    كليد چيزي شبيه به اين خواهد بود:
    Output
    a4374c8c3b55de472225dbf96aa7cd3ce6a34abc95d0eb2a601d954ee0cd4410

    اكنون تنظيمات عامل Zabbix را ويرايش كنيد تا اتصال ايمن آن به سرور مجازي Zabbix تنظيم شود. فايل پيكربندي عامل را در ويرايشگر متن خود باز كنيد:
    ⦁ $ sudo vi /etc/zabbix/zabbix_agentd.conf

    هر تنظيماتي درون اين فايل از طريق كامنت هاي آگاهي دهنده در سراسر فايل مستند ميشود ، اما نياز به ويرايش برخي از آنها داريد.
    ابتدا بايد آدرس IP سرور مجازي Zabbix را ويرايش كنيد. بخش زير را پيدا كنيد:
    /etc/zabbix/zabbix_agentd.conf

    ### Option: Server
    # List of comma delimited IP addresses (or hostnames) of Zabbix servers.
    # Incoming connections will be accepted only from the hosts listed here.
    # If IPv6 support is enabled then ‘127.0.0.1’, ‘::127.0.0.1’, ‘::ffff:127.0.0.1’ are treated equally.
    #
    # Mandatory: no
    # Default:
    # Server=

    Server=127.0.0.1

    مقدار پيش فرض را به IP سرور مجازي Zabbix تغيير دهيد:
    /etc/zabbix/zabbix_agentd.conf

    # Mandatory: no
    # Default:
    # Server=

    Server=zabbix_server_ip_address

    در مرحله بعد ، بخشي را پيدا كنيد كه اتصال ايمن به سرور مجازي Zabbix را پيكربندي كرده و پشتيباني از كليد پيش اشتراك گذاري شده را فعال كنيد. بخش TLSConnect را پيدا كنيد ، كه اينگونه به نظر مي رسد:
    /etc/zabbix/zabbix_agentd.conf

    ### Option: TLSConnect
    # How the agent should connect to server or غير مجاز مي باشد. Used for active checks.
    # Only one value can be specified:
    # unencrypted – connect without encryption
    # psk – connect using TLS and a pre-shared key
    # cert – connect using TLS and a certificate
    #
    # Mandatory: yes, if TLS certificate or PSK parameters are defined (even for ‘unencrypted’ connection)
    # Default:
    # TLSConnect=unencrypted

    سپس TLSConnect = را باطل كنيد و unencrypted را با psk جايگزين كنيد تا پشتيباني از كليد پيش اشتراكي را پيكربندي كنيد:
    /etc/zabbix/zabbix_agentd.conf

    TLSConnect=psk

    سپس ، بخش TLSAccept را پيدا كنيد ، كه اينگونه به نظر مي رسد:
    /etc/zabbix/zabbix_agentd.conf

    ### Option: TLSAccept
    # What incoming connections to accept.
    # Multiple values can be specified, separated by comma:
    # unencrypted – accept connections without encryption
    # psk – accept connections secured with TLS and a pre-shared key
    # cert – accept connections secured with TLS and a certificate
    #
    # Mandatory: yes, if TLS certificate or PSK parameters are defined (even for ‘unencrypted’ connection)
    # Default:
    # TLSAccept=unencrypted

    پيوندهاي ورودي را براي پشتيباني از كليدهاي از پيش اشتراكي با استفاده از TLSAccept = و اضافه كردن psk پيكربندي كنيد:
    /etc/zabbix/zabbix_agentd.conf

    TLSAccept=psk

    سپس ، بخش TLSPSKIdentity را پيدا كنيد ، كه اينگونه به نظر مي رسد:
    /etc/zabbix/zabbix_agentd.conf

    ### Option: TLSPSKIdentity
    # Unique, case sensitive string used to identify the pre-shared key.
    #
    # Mandatory: no
    # Default:
    # TLSPSKIdentity=

    با باطل كردن TLSPSKIdentity = و اضافه كردن كد هايلايت شده ، يك نام منحصر به فرد براي شناسايي كليد از پيش اشتراك گذاري خود انتخاب كنيد:
    /etc/zabbix/zabbix_agentd.conf

    TLSPSKIdentity=PSK 001

    هنگامي كه ميزبان خود را از طريق رابط وب Zabbix اضافه مي كنيد ، از اين به عنوان شناسه PSK استفاده خواهيد كرد.
    سپس گزينه اي را انتخاب كنيد كه به كليد پيش اشتراك شده قبلي شما اشاره دارد. گزينه TLSPSKFile را بيابيد:
    /etc/zabbix/zabbix_agentd.conf

    ### Option: TLSPSKFile
    # Full pathname of a file containing the pre-shared key.
    #
    # Mandatory: no
    # Default:
    # TLSPSKFile=

    TLSPSKFile = را حذف كنيد و اين متن را اضافه كنيد تا عامل Zabbix را به فايل PSK كه ايجاد كرديد، معرفي كند:
    /etc/zabbix/zabbix_agentd.conf

    TLSPSKFile=/etc/zabbix/zabbix_agentd.psk

    فايل را ذخيره كنيد و ببنديد. اكنون مي توانيد عامل Zabbix را شروع كرده و آن را به گونه اي تنظيم كنيد كه در زمان بوت شروع شود:
    ⦁ $ sudo systemctl start zabbix-agent

    ⦁ $ sudo systemctl enable zabbix-agent

    براي محاسبات دقيق ، بررسي كنيد كه عامل Zabbix به درستي اجرا شده است:
    ⦁ $ sudo systemctl status zabbix-agent

    وضعيت زير را مشاهده خواهيد كرد ، نشان مي دهد عامل در حال اجرا است:
    Output
    ● zabbix-agent.service – Zabbix Agent
    Loaded: loaded (/usr/lib/systemd/system/zabbix-agent.service; enabled; vendor preset: disabled)
    Active: active (running) since Fri 2019-05-03 06:25:06 UTC; 28s ago

    عامل براي پيگيري اتصالات از سرور مجازي، پورت 10050 را شنود مي كند. به منظور پيكربندي دسترسي از آدرس هاي IP خاص يا زير شبكه ها ، از قابليت rich rule در firewalld استفاده كنيد:
    ⦁ $ sudo firewall-cmd –permanent –zone=public –add-rich-rule=’rule family=”ipv4″ source address=”zabbix_server_ip_address/32″ port protocol=”tcp” port=”10050″ accept’

    rich rule ها به شما امكان مي دهند قوانيني پيچيده تر و قابل تنظيم تر firewalld را ايجاد كنيد تا كنترل بيشتري بر فايروال خود داشته باشيد. در اين دستور ، شما يك قاعده اضافه مي كنيد كه ترافيك ipv4 را از مبدأ ، كه به عنوان آدرس IP سرور مجازي Zabbix تعيين كرده ايد ، تا پورت 10050 سرور مجازي CentOS دوم مي پذيرد.
    در مرحله بعدي ، Firewalld را دوباره لود كنيد تا قانون جديد را فعال كنيد:
    ⦁ $ sudo firewall-cmd –reload

    اكنون عامل شما آماده پذيرش اتصالات و ارسال داده به سرور مجازي Zabbix است. اما براي استفاده از آن ، بايد از طريق كنسول وب سرور مجازي به آن پيوند دهيد. در مرحله بعد ، پيكربندي را كامل مي كنيد.
    مرحله 6 – اضافه كردن هاست جديد به سرور مجازي Zabbix
    نصب يك عامل بر روي سرور مجازي ي كه مي خواهيد نظارت كنيد ، فقط نيمي از روند كار است. هر هاستي كه براي نظارت مي خواهيد نياز به ثبت در سرور مجازي Zabbix دارد، كه مي توانيد اين كار را از طريق رابط وب انجام دهيد.
    با رفتن به آدرس http: // zabbix_server_name / zabbix / وارد رابط وب سرور مجازي Zabbix شويد.

    هنگامي كه وارد سيستم شده ايد ، در نوار پيمايش بالا بر روي Configuration و سپس Hosts  كليك كنيد. سپس بر روي دكمه Create host در گوشه سمت راست بالاي صفحه كليك كنيد. با اين كار صفحه پيكربندي ميزبان باز مي شود.

    نام هاست و آدرس IP را تنظيم كنيد تا نام هاست و آدرس IP سرور مجازي دوم CentOS شما را منعكس نمايد ، سپس هاست را به يك گروه اضافه كنيد. مي توانيد يك گروه موجود ، به عنوان مثال سرور مجازي هاي لينوكس را انتخاب كنيد يا گروه خود را ايجاد كنيد. هاست مي تواند در چند گروه باشد. براي اين كار ، نام گروه موجود يا جديد را در قسمت Groups وارد كرده و از ليست پيشنهادي مقدار مورد نظر را انتخاب كنيد.
    پس از افزودن گروه ، بر روي تب Templates كليك كنيد.

    Template OS Linux را در قسمت جستجو تايپ كنيد و سپس بلافاصله در زير نوار جستجو روي add كليك كنيد تا اين الگو به هاست اضافه شود.
    در مرحله بعد ، به سربرگ Encryption  برويد. PSK  را هم براي اتصال به هاست و هم اتصالات حاصله از هاست انتخاب كنيد و براي اتصالات از سوي هاست، No encryption را uncheck كنيد. سپس PSK identity  را روي PSK 001 قرار دهيد ، كه مقدار تنظيم TLSPSKIdentity عامل Zabbix است كه قبلاً پيكربندي كرده ايد. سپس مقدار PSK را روي كليد توليد شده براي عامل Zabbix تنظيم كنيد. اين چيزي است كه در فايل /etc/zabbix/zabbix_agentd.psk در دستگاه عامل دخيره شده است.

    در آخر ، بر روي دكمه Add در پايين فرم كليك كنيد تا ميزبان ايجاد شود.
    ميزبان جديد خود را در اين ليست مشاهده خواهيد كرد. يك دقيقه صبر كنيد و صفحه را مجدد لود كنيد تا برچسب هاي سبز نشان دهند كه همه چيز خوب است و اتصال رمزگذاري شده است.

    در صورت داشتن سرور مجازيهاي اضافي كه بايد نظارت شوند ، به هر هاست وارد شويد ، عامل Zabbix را نصب كنيد ، يك PSK توليد كنيد ، عامل را پيكربندي كنيد و با دنبا كردن همان مراحل براي اضافه كردن اولين هاست ، هاست بعدي را به رابط وب اضافه كنيد.
    سرور مجازي Zabbix اكنون سرور مجازي دوم CentOS شما را تحت نظر دارد. اكنون ، اعلان هاي ايميل را تنظيم كنيد تا در مورد مشكلات به شما اطلاع داده شود.
    مرحله 7 – پيكربندي اعلان هاي ايميل
    Zabbix به طور خودكار انواع مختلفي از اعلان ها را پشتيباني مي كند: ايميل ، Jabber ، پيام كوتاه و غيره. همچنين مي توانيد از روش هاي اعلان جايگزين مانند Telegram يا Slack نيز استفاده كنيد. ليست كامل ادغام ها را مي توانيد در اينجا مشاهده كنيد.
    ساده ترين روش ارتباطي ايميل است و اين آموزش اعلان ها را براي اين نوع رسانه پيكربندي مي كند.
    در نوار پيمايش بالا بر روي Administration ، و سپس Media types كليك كنيد. ليست انواع رسانه ها را مشاهده خواهيد كرد. روي ايميل كليك كنيد.
    گزينه هاي SMTP را مطابق تنظيمات ارائه شده توسط سرويس ايميل خود تنظيم كنيد. اين آموزش از ويژگي هاي SMTP Gmail براي تنظيم اعلان هاي ايميل استفاده مي كند. اگر مي خواهيد اطلاعات بيشتري درباره اين تنظيمات داشته باشيد ، به نحوه استفاده از سرور مجازي SMTP Google مراجعه كنيد.
    توجه: اگر از تأييد صحت دو مرحله اي با Gmail استفاده مي كنيد ، بايد يك رمزعبور app براي Zabbix توليد كنيد. لازم نيست آن را به خاطر بسپاريد ، فقط بايد يك بار رمز عبور برنامه را هنگام تنظيم وارد كنيد. در مركز راهنمايي Google دستورالعملهايي درباره نحوه توليد اين رمز عبور پيدا خواهيد كرد.

    همچنين مي توانيد قالب پيام — html يا متن ساده را انتخاب كنيد. در آخر ، بر روي دكمه Update در پايين فرم كليك كنيد تا پارامترهاي ايميل به روز شود.

    اكنون يك كاربر جديد ايجاد كنيد. در نوار پيمايش بالا روي Administrator و سپس Users كليك كنيد. ليست كاربران را مشاهده خواهيد كرد. سپس بر روي دكمه Create user در گوشه سمت راست بالاي صفحه كليك كنيد. با اين كار صفحه پيكربندي كاربر باز مي شود.

    نام كاربري جديد را در قسمت Alias ​​وارد كرده و رمزعبور جديدي تنظيم كنيد. در مرحله بعد كاربر را به گروه administrator اضافه كنيد. Zabbix administrators را در قسمت Groups تايپ كرده و آن را از ليست پيشنهادي انتخاب كنيد.
    پس از افزودن گروه ، بر روي تب Media كليك كرده و روي لينك Add كه زير آن خط كشيده شده كليك كنيد. يك پنجره pop-up مشاهده خواهيد كرد.

    آدرس ايميل خود را در قسمت Send to وارد كنيد. مي توانيد بقيه گزينه ها را روي مقادير پيش فرض بگذاريد. براي ارسال ، روي دكمه add در پايين كليك كنيد.
    اكنون به سربرگ Permissions  برويد.Zabbix Super Admin را از منوي كشويي نوع كاربر انتخاب كنيد.
    در آخر ، بر روي دكمه Add در پايين فرم كليك كنيد تا كاربر ايجاد شود.
    اكنون بايد اعلان ها را فعال كنيد. بر روي تب Configuration  و سپس Actions  در نوار پيمايش بالا كليك كنيد. عملكردي از پيش تنظيم شده را مشاهده خواهيد كرد ، كه وظيفه ارسال اعلان ها به همه ادمين هاي Zabbix را بر عهده دارد. مي توانيد تنظيمات را با كليك روي نام آن بررسي و تغيير دهيد. براي اهداف اين آموزش از پارامترهاي پيش فرض استفاده كنيد. براي فعال كردن اين عمل ، بر روي لينك قرمز Disabled در ستون Status كليك كنيد.
    اكنون آماده دريافت هشدار هستيد. در مرحله بعدي ، يك مورد را آزمايش مي كنيد تا تنظيم اعلان خود بررسي نماييد.
    مرحله 8 – ايجاد هشدار آزمايشي
    در اين مرحله ، براي اطمينان از اتصال همه موارد ، يك هشدار تست توليد مي كنيد. به طور پيش فرض ، Zabbix مقدار فضاي ديسك خالي روي سرور مجازي شما را پيگيري مي كند. به طور خودكار تمام ديسك هاي قرار داده شده را شناسايي ميكند و بررسي هاي مربوطه را اضافه مي كند. اين شناسايي هر ساعت اجرا مي شود ، بنابراين بايد مدت زماني صبر كنيد تا اعلان شروع شود.
    يك فايل موقت ايجاد كنيد كه به اندازه كافي بزرگ باشد تا هشدار استفاده از سيستم فايل Zabbix را فعال كند. براي اين كار ، اگر هنوز به سيستم متصل نشده ايد ، به سرور مجازي CentOS دوم خود وارد شويد.
    ⦁ $ ssh sammy@second_centos_server_ip_address

    در مرحله بعد مشخص كنيد كه چه مقدار فضاي خالي روي سرور مجازي داريد. براي فهميدن مي توانيد از دستور df استفاده كنيد:
    ⦁ $ df -h

    دستور df ميزان استفاده از فضاي ديسك سيستم فايل شما را گزارش مي كند ، و -h باعث مي شود كه خروجي قابل خواندن باشد. خروجي مانند زير را مشاهده خواهيد كرد:
    Output
    Filesystem Size Used Avail Use% Mounted on
    /dev/vda1 25G 958M 25G 4% /
    در اين حالت فضاي آزاد 25 گيگابايت است. فضاي آزاد شما ممكن است متفاوت باشد.
    از دستور fallocate استفاده كنيد ، كه به شما امكان مي دهد فضاي اختصاصي را به يك فايل اختصاص بدهيد يا ندهيد، تا فايلي ايجاد كنيد كه بيش از 80٪ فضاي موجود ديسك را داشته باشد. اين كار براي ايجاد هشدار كافي خواهد بود:
    ⦁ $ fallocate -l 20G /tmp/temp.img

    Zabbix پس از گذشت حدود يك ساعت ، هشداري در مورد ميزان فضاي خالي ديسك ارائه مي كند و عملي را كه پيكربندي كرده ايد ، اجرا مي كند كه پيامي را ارسال خواهد كرد. مي توانيد صندوق ورودي خود را براي دريافت پيام از سرور مجازي Zabbix بررسي كنيد. پيامي مانند خواهيد ديد:
    Problem started at 10:49:25 on 2019.05.03
    Problem name: Free disk space is less than 20% on volume /
    Host: Second Centos Server
    Severity: Warning

    Original problem ID: 34

    همچنين مي توانيد براي مشاهده اطلاعيه و جزئيات آن به سربرگ Monitoring و سپس Dashboard حركت كنيد.

    اكنون كه مي دانيد هشدارها كار مي كنند ، فايل موقت ايجاد شده را حذف كنيد تا بتوانيد فضاي ديسك خود را دوباره پس بگيريد:
    ⦁ $ rm -f /tmp/temp.img

    پس از يك دقيقه Zabbix پيام بازيابي را ارسال مي كند و هشدار از داشبورد اصلي ناپديد مي شود.
    نتيجه
    در اين آموزش يك راه حل ساده و ايمن براي نظارت تنظيم كرده ايد كه به شما در نظارت بر وضعيت سرور مجازي هاي خود كمك مي كند. اكنون مي تواند مشكلات را به شما هشدار دهد ، و شما اين فرصت را داريد كه فرآيندهاي رخ داده در زيرساخت IT خود را تجزيه و تحليل كنيد.
    براي كسب اطلاعات بيشتر درباره راه اندازي زيرساخت هاي نظارت ، نحوه نصب Elasticsearch ، Logstash و Kibana (Elastic Stack) را در CentOS 7 و نحوه جمع آوري معيارهاي زيرساخت با Metricbeat در CentOS 7 را بررسي كنيد.

     

    برچسب‌ها:ElasticsearchOracleTimescaleDB