ساخت سرور مجازی



ماژول 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

در داخل آن فایل ، بلوک <VirtualHost *: 80> را که از خط اول شروع می شود ، پیدا خواهید کرد. در داخل آن بلوک ، بلوک جدید زیر را اضافه کنید تا فایل پیکربندی شما مانند زیر شود. مطمئن شوید که همه بلوک ها به درستی قرار گرفته اند:
/etc/apache2/sites-available/000-default.conf
<VirtualHost *:80>
<Directory /var/www/html>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>

. . .
</VirtualHost>

فایل را ذخیره کنید و ببندید. اگر از 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
<html>
<head>
<title>About Us</title>
</head>
<body>
<h1>About Us</h1>
</body>
</html>

شما می توانید به این صفحه به آدرس 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 نگاهی بیندازید.

برچسب‌ها:


سرور مجازی 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
<html>
<head>
<title>Welcome to your_domain!</title>
</head>
<body>
<h1>Success! The your_domain virtual host is working!</h1>
</body>
</html>

پس از اتمام فایل را ذخیره کنید و ببندید.
برای اینکه 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
<VirtualHost *:80>
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
</VirtualHost>

توجه کنید که ما 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 نگاهی بیندازید.

 

برچسب‌ها:


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::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: 4.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::10 tomcat systemd[1]: Starting Apache Tomcat Web Application Container…
Oct 24 17::11 tomcat startup.sh[5962]: Tomcat started.
Oct 24 17::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-users>
. . .
<user username=”admin” password=”password” roles=”manager-gui,admin-gui”/>
</tomcat-users>

پس از اتمام فایل را ذخیره کنید و ببندید.
به طور پیش فرض ، نسخه های جدیدتر 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
<Context antiResourceLocking=”false” privileged=”true” >
<!–<Valve className=”org.apache.catalina.valves.RemoteAddrValve”
allow=”127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1″ />–>
</Context>

پس از اتمام ، فایل ها را ذخیره کنید و ببندید.
برای اعمال تغییرات خود ، سرویس 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 پوشش می دهد).

 

برچسب‌ها:


هنگامی که شما برای اولین بار یک سرور مجازی 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

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

برچسب‌ها:


در این آموزش می آموزید که چگونه عناصر را با 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 تست شده است. برای نصب این برنامه در macOS یا Ubuntu .04 ، مراحل نحوه نصب Node.js و ایجاد محیط توسعه محلی را در macOS یا نصب با استفاده از بخش PPA در آموزش نحوه نصب Node.js در اوبونتو .04 را دنبال کنید.
• باید با  Create React App قادر به ایجاد برنامه باشید. می توانید دستورالعمل نصب را در نحوه ایجاد یک پروژه React با  Create React App پیدا کنید.
• همچنین به دانش پایه از JavaScript نیاز خواهید داشت که می توانید در نحوه کدنویسی در JavaScript بیاموزید و به دانش پایه از HTML و CSS نیز احتیاج دارید. یک منبع مناسب برای HTML و CSS ، شبکه توسعه دهنده Mozilla میباشد.
مرحله 1 – اضافه کردن نشانه گذاری به یک مولفه React
همانطور که قبلاً نیز اشاره شد ، React یک زبان نشانه گذاری خاص به نام JSX دارد. پ ترکیبی از نحو HTML و JavaScript است که چیزی شبیه به این میباشد:
<div>
{inventory.filter(item => item.available).map(item => (
<Card>
<div className=”title”}>{item.name}</div>
<div className=”price”>{item.price}</div>
</Card>
))
}
</div>

برخی از قابلیت های JavaScript مانند .filter و .map و همچنین برخی HTML های استاندارد مانند <div> را خواهید شناخت. اما بخش های دیگری مانند <card> و 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 (
<div className=”App”>
<header className=”App-header”>
<img src={logo} className=”App-logo” alt=”logo” />
<p>
Edit <code>src/App.js</code> and save to reload.
</p>
<a
className=”App-link”
href=”https://reactjs.org”
target=”_blank”
rel=”noopener noreferrer”
>
Learn React
</a>
</header>
</div>
);
}

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 <h1>Hello, World</h1>;
}

export default App;

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

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

function App() {
return(
<h1>Hello, World</h1>
<p>I am writing JSX</p>
)
}

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 | <h1>Hello, World</h1>
> 7 | <p>I am writing JSX</p>
| ^
8 | )
9 | }
10 |

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

function App() {
return(
<>
<h1>Hello, World</h1>
<p>I am writing JSX</p>
</>
)
}

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 روی عناصر خود ، باید کلاس ها را اضافه کنید.
ابتدا ، در ویرایشگر متن ، برچسب های خالی ، <> را به <div> تغییر دهید.
jsx-tutorial/src/App.js
import React from ‘react’;
import ‘./App.css’;

function App() {
return(
<div>
<h1>Hello, World</h1>
<p>I am writing JSX</p>
</div>
)
}

export default App;

در این کد تگ های خالی – <> – را با برچسب های div جایگزین کرده اید. تگ های خالی برای گروه بندی کد شما بدون اضافه کردن برچسب های اضافی مفید هستند ، اما در اینجا شما باید از div استفاده کنید زیرا برچسب های خالی هیچ ویژگی HTML را نمی پذیرند.
در مرحله بعد باید نام کلاس را اضافه کنید. اینجاست که JSX شروع به واگرایی از HTML می کند. اگر می خواهید یک کلاس را به یک مولفه HTML معمولی اضافه کنید ، این کار را اینگونه انجام می دهید:
<div class=”container”>
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(
<div className=”container”>
<h1>Hello, World</h1>
<p>I am writing JSX</p>
</div>
)
}

export default App;

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

ویژگی className در React بی نظیر است. شما می توانید اکثر ویژگیهای HTML را بدون هیچ تغییری به JSX اضافه کنید. به عنوان نمونه ، به ویرایشگر متن خود برگردید و شناسه greeting را به مولفه <h1> خود اضافه کنید. مانند HTML استاندارد به نظر می رسد:
jsx-tutorial/src/App.js
import React from ‘react’;
import ‘./App.css’;

function App() {
return(
<div className=”container”>
<h1 id=”greeting”>Hello, World</h1>
<p>I am writing JSX</p>
</div>
)
}

export default App;

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

function App() {
const greeting = greeting”;
return(
<div className=”container”>
<h1 id={greeting}>Hello, World</h1>
<p>I am writing JSX</p>
</div>
)
}

export default App;

در این کد ، در بالای عبارت return یک متغیر به نام greeting با مقدار greeting” ایجاد کرده اید ، سپس متغیر را در مشخصه id برچسب <h1> خود ارجاع داده اید.
فایل را ذخیره کنید و از آن خارج شوید. صفحه همان خواهد بود، اما برچسب id خواهد داشت.

تاکنون با چند مولفه به تنهایی کار کرده اید ، اما می توانید از JSX همچنین برای اضافه کردن بسیاری از عناصر HTML استفاده کرده و آنها را برای ایجاد صفحات پیچیده مستقر نمایید.
برای نشان دادن این موضوع ، می توانید با لیستی از ایموجی ها صفحه ای ایجاد کنید. این شکلک ها با یک مولفه <button> محصور می شوند. هنگامی که روی ایموجی ها کلیک می کنید ، نام کوتاه CLDR آنها را دریافت خواهید کرد.
برای شروع ، باید چند مولفه دیگر به صفحه اضافه کنید. . src / App.js را در ویرایشگر متن خود باز کنید. در طول این مرحله آن را باز نگه دارید.
⦁ $ nano src/App.js

ابتدا با افزودن خطوط هایلایت شده زیر لیستی از ایموجی ها را اضافه کنید:
jsx-tutorial/src/App.js
import React from ‘react’;
import ‘./App.css’;

function App() {
const greeting = greeting”;
return(
<div className=”container”>
<h1 id={greeting}>Hello, World</h1>
<p>I am writing JSX</p>
<ul>
<li>
<button>
<span role=”img” aria-label=”grinning face” id=”grinning face”></span>
</button>
</li>
<li>
<button>
<span role=”img” aria-label=”party popper” id=”party popper”></span>
</button>
</li>
<li>
<button>
<span role=”img” aria-label=”woman dancing” id=”woman dancing”></span>
</button>
</li>
</ul>
</div>
)
}

export default App;

در اینجا شما برای نگه داشتن لیستی از ایموجی ها برچسب <ul> ایجاد کرده اید. هر ایموجی در یک مولفه <li> جداگانه قرار دارد و با یک مولفه <button> احاطه شده است. در مرحله بعد رویدادی را به این دکمه اضافه خواهید کرد.
همچنین ایموجی ها را با یک برچسب <span> محاصره کرده اید که دارای چند ویژگی دیگر است. هر span دارای مشخصه role میباشد که روی img تنظیم شده است. این به نرم افزار در دسترس سیگنال میفرستد که این عنصر به شکل تصویر عمل میکند. علاوه بر این ، هر <span> همچنین دارای یک aria-label و یک ویژگی id با نام ایموجی است. aria-label آنچه نمایش داده می شود را به بازدید کنندگان می گوید. در مرحله بعدی از id در حین نوشتن رویداد استفاده خواهید کرد.
وقتی کد را به این روش می نویسید ، از عناصر معنایی استفاده می کنید ، که به شما کمک می کند صفحه را در دسترس قرار دهید و دنبال کردن آن برای صفحه خوان (screen readers) راحت باشد.
فایل را ذخیره کنید و از آن خارج شوید. مرورگر شما ریفرش می شود و این تصویر را مشاهده خواهید کرد:

اکنون کمی طراحی اضافه کنید. کد CSS را در ویرایشگر متن خود باز کنید:
⦁ $ nano src/App.css

کد هایلایت شده زیر را اضافه کنید تا ضمن افزایش اندازه فونت ، پیش زمینه و حاشیه پیش فرض دکمه ها را حذف کنید:
jsx-tutorial/src/App.css
.container {
display: flex;
flex-direction: column;
align-items: center;
}

button {
font-size: 2em;
border: 0;
padding: 0;
background: none;
cursor: pointer;
}

ul {
display: flex;
padding: 0;
}

li {
margin: 0 20px;
list-style: none;
padding: 0;
}

در این کد از تنظیمات اندازه قلم ، حاشیه و پارامترهای دیگر برای تنظیم ظاهر دکمه های خود و تغییر فونت استفاده کرده اید. همچنین سبک های لیست را حذف کرده و display: flex را به مولفه <ul>اضافه می کنید تا افقی شود.
فایل CSS را ذخیره کنید و ببندید. مرورگر شما ریفرش می شود و شما این را مشاهده خواهید کرد:

اکنون با چندین مولفه JSX کار کرده اید که مانند HTML معمولی به نظر می رسند. شما کلاس ها ، شناسه ها و برچسب های Aria را اضافه کرده اید و با داده ها به عنوان رشته ها و متغیرها کار کرده اید. اما React همچنین از ویژگیهایی برای تعریف نحوه پاسخگویی عناصر شما به رویدادهای کاربر استفاده می کند. در مرحله بعدی ، با افزودن رویدادها به دکمه ، صفحه را به صورت تعاملی خواهید ساخت.
مرحله 3 – افزودن رویدادها به عناصر
در این مرحله ، با استفاده از ویژگی های خاص ، رویدادها را به عناصر اضافه می کنید و یک رویداد کلیک را روی یک مولفه دکمه دریافت می کنید. یاد می گیرید که چگونه اطلاعات را از این رویداد دریافت کنید تا عملی دیگر ارسال شود یا از سایر اطلاعات در دامنه فایل استفاده کند.
اکنون که یک صفحه اصلی با اطلاعات دارید ، زمان آن رسیده که چند رویداد را به آن اضافه کنید. event handler بسیاری وجود دارند که می توانید به عناصر HTML اضافه کنید. React به شما امکان دسترسی به همه اینها را می دهد. از آنجا که کد جاوا اسکریپت همراه با نشانه گذاری شما است ، می توانید ضمن نگه داشتن نظم کد خود ، به سرعت رویدادها را اضافه کنید.
برای شروع ، کنترل کننده رویداد onclick را اضافه کنید. به شما امکان می دهد به جای ضمیمه کردن شنونده رویداد (event listener) ، تعدادی کد جاوا اسکریپت را مستقیماً به مولفه خود اضافه کنید:
jsx-tutorial/src/App.js
import React from ‘react’;
import ‘./App.css’;

function App() {
const greeting = greeting”;
return(
<div className=”container”>
<h1 id={greeting}>Hello, World</h1>
<p>I am writing JSX</p>
<ul>
<li>
<button
onClick={event => alert(event.target.id)}
>
<span role=”img” aria-label=”grinning face” id=”grinning face”></span>
</button>
</li>
<li>
<button
onClick={event => alert(event.target.id)}
>
<span role=”img” aria-label=”party popper” id=”party popper”></span>
</button>
</li>
<li>
<button
onClick={event => alert(event.target.id)}
>
<span role=”img” aria-label=”woman dancing” id=”woman dancing”></span>
</button>
</li>
</ul>
</div>
)
}

export default App;

از آنجا که این JSX است ، onclick را به صورت camelCased درمی آورید ، به این معنی که آن را به صورت onClick اضافه کرده اید. این مشخصه onClick از یک تابع ناشناس برای بازیابی اطلاعات در مورد آیتمی که کلیک شده است استفاده می کند.
شما یک تابع فلش ناشناس اضافه کردید که این رویداد را از روی دکمه کلیک شده دریاقن می کند و رویداد دارای هدفی خواهد بود که مولفه <span> است. اطلاعات مورد نیاز در مشخصه 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(
<div className=”container”>
<h1 id={greeting}>Hello, World</h1>
<p>I am writing JSX</p>
<ul>
<li>
<button
onClick={displayEmojiName}
>
<span role=”img” aria-label=”grinning face” id=”grinning face”></span>
</button>
</li>
<li>
<button
onClick={displayEmojiName}
>
<span role=”img” aria-label=”party popper” id=”party popper”></span>
</button>
</li>
<li>
<button
onClick={displayEmojiName}
>
<span role=”img” aria-label=”woman dancing” id=”woman dancing”></span>
</button>
</li>
</ul>
</div>
)
}

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 را برمی گردانید. چند نکته وجود دارد که هنگام نوشتن کد باید آنها را به خاطر بسپارید.
ابتدا ، یک گروه از آیتم ها باید توسط یک کانتینر <div> احاطه شوند. سپس ، هر آیتم به یک مشخصه خاص به نام key نیاز دارد. Key نیاز به یک سری داده منحصر به فرد دارد که React می تواند از آنها استفاده کند تا عناصر را ردیابی کند و بداند چه موقع به روز رسانی این مؤلفه را انجام دهد. این کلید از HTML کامپایل شده خارج می شود ، زیرا فقط برای اهداف داخلی است. هر زمان که با حلقه کار می کنید ، باید یک رشته ساده را به عنوان کلید اضافه کنید.
در اینجا مثال ساده ای وجود دارد که لیستی از نام ها را در یک <div> نگاشت می کند:

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

return(
<div>
{names.map(name => <div key={name}>{name}</div>)}
</div>
)

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

<div>
<div>Atul Gawande</div>
<div>Stan Sakai</div>
<div>Barry Lopez</div>
</div>

تبدیل لیست ایموجی مشابه خواهد بود. <ul> کانتینر خواهد بود. روی داده ها نگاشت می کنید و <li> را با کلید نام کوتاه ایموجی برمیگردانید. شما داده های به سختی کد شده را در برچسب های <button> و <span> با اطلاعات حلقه جایگزین می کنید.
در ویرایشگر متن خود موارد زیر را اضافه کنید:
jsx-tutorial/src/App.js
import React from ‘react’;
import ‘./App.css’;

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

function App() {
const greeting = greeting”;
return(
<div className=”container”>
<h1 id={greeting}>Hello, World</h1>
<p>I am writing JSX</p>
<ul>
{
emojis.map(emoji => (
<li key={emoji.name}>
<button
onClick={displayEmojiName}
>
<span role=”img” aria-label={emoji.name} id={emoji.name}>{emoji.emoji}</span>
</button>
</li>
))
}
</ul>
</div>
)
}
export default App;
Copy

در این کد ، شما بر روی آرایه emojis در برچسب <ul> نگاشت کردید و <li> را برگرداندید. در هر <li> از نام ایموجی به عنوان مشخصه key استفاده کرده اید. دکمه همان تابع عادی را خواهد داشت. در مولفه <span> ، aria-label و id را با name جایگزین کنید. محتوای برچسب <span> باید ایموجی باشد.
فایل را ذخیره کنید. پنجره شما ریفرش خواهد شد و داده ها را مشاهده خواهید کرد. توجه کنید که کلید در HTML تولید شده وجود ندارد.

ترکیب JSX با استاندارد JavaScript ابزارهای زیادی را در اختیار شما قرار می دهد تا بصورت دینامیکی محتوا را ایجاد کنید و می توانید از هر JavaScript استاندارد مورد نظر خود استفاده کنید. در این مرحله ، JSX سخت کد گذاری شده را با یک آرایه و یک حلقه جایگزین کردید تا HTML به صورت پویا ایجاد شود. در مرحله بعد ، با استفاده از اتصال کوتاه ، اطلاعات را به صورت مشروط نشان می دهید.
مرحله 5 – نمایش مشروط عناصر با اتصال کوتاه
در این مرحله ، از اتصال کوتاه برای نمایش مشروط عناصر HTML استفاده خواهید کرد. این کار به شما امکان می دهد تا مؤلفه هایی ایجاد کنید که بتوانند HTML را بر اساس اطلاعات اضافی پنهان کند یا نشان دهد ، و به انعطاف پذیری مولفه های شما برای رسیدگی به موقعیت های مختلف می پردازند.
مواقعی وجود دارد که شما برای نشان دادن اطلاعات در بعضی آیتم ها به مؤلفه نیاز دارید و در آیتم های دیگر احتیج نیست. به عنوان مثال ، فقط در صورت صحت برخی موارد ممکن است بخواهید برای کاربر پیام هشدار نشان دهید ، یا ممکن است بخواهید برخی از اطلاعات حساب را برای ادمین نمایش دهید که نمی خواهید یک کاربر عادی آن را ببیند.
برای این کار از گردش کوتاه استفاده خواهید کرد. این بدان معناست که شما از یک شرط استفاده خواهید کرد و اگر قسمت اول صادق باشد ، اطلاعات را در قسمت دوم برمی گرداند.
در اینجا یک مثال مطرح شده است. اگر می خواهید یک دکمه را فقط در صورت ورود کاربر به سیستم نشان دهید ، این مولفه را در پرانتز {} قرار دهید و شرایط را قبل از آن اضافه می کنید.
{isLoggedIn && <button>Log Out</button>}
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(
<div className=”container”>
<h1 id={greeting}>Hello, World</h1>
{displayAction && <p>I am writing JSX</p>}
<ul>

</ul>
</div>
)
}

export default App;

در ویرایشگر متن خود متغیری به نام displayAction با مقدار false ایجاد کرده اید. سپس برچسب <p> را در {} قرار دادید. در شروع پرانتزها ، برای ایجاد شرط ، displayAction && را اضافه کردید.
فایل را ذخیره کنید و خواهید دید که مولفه در مرورگر شما ناپدید می شود. مهم است بدانید ، در HTML تولید شده نیز ظاهر نمی شود. این مخفی کردن یک مولفه با CSS نیست. اصلاً در نشانه گذاری نهایی وجود نخواهد داشت.

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

 

برچسب‌ها:

ادامه مطلب

ساخت تصاویر و باینری های دارای CPU فشرده ، فرایندی بسیار کند و زمان بری است که می تواند در بعضی مواقع لپ تاپ شما را به بخاری تبدیل کند. وارد کردن تصاویر Docker با اتصال آهسته ، مدت زمان زیادی طول می کشد. خوشبختانه ، رفع این مشکلات آسان است. Docker به شما امکان می دهد تمام کارها را به یک سرور مجازی از راه دور بسپارید تا دستگاه محلی شما مجبور به انجام آن کار سخت نباشد.
این ویژگی در Docker .09 معرفی شده است. این نسخه پشتیبانی اتصال به یک میزبان Docker از راه دور از طریق SSH را به همراه دارد. به تنظیمات بسیار کمی در کلاینت احتیاج دارد و فقط به یک سرور مجازی Docker معمولی و بدون هیچگونه تنظیم خاص در حال اجرا بر روی یک دستگاه از راه دور نیاز خواهد داشت. قبل از Docker .09 ، باید از دستگاه Docker برای ایجاد یک سرور مجازی Docker از راه دور استفاده کرده و سپس محیط محلی Docker را پیکربندی کنید تا از آن استفاده کنید. این روش جدید آن پیچیدگی اضافی را از بین می برد.
در این آموزش ، شما یک Droplet ایجاد می کنید تا میزبان سرور مجازی Docker از راه دور باشید و دستور docker را روی دستگاه محلی خود پیکربندی کنید تا از آن استفاده نمایید.
پیش نیازها
برای دنبال کردن این آموزش ، به موارد زیر نیاز دارید:
یک حساب DigitalOcean. اگر قبلاً حساب کاربری ندارید می توانید یک حساب کاربری ایجاد کنید.
Docker که روی دستگاه محلی یا سرور مجازی توسعه شما نصب شده باشد. اگر با Ubuntu .04 کار می کنید ، مراحل 1 و 2 نحوه نصب و استفاده از Docker را در اوبونتو .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--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:.09.6~3 on .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باشید.

 

برچسب‌ها:


تبلیغات

آخرین ارسال ها

آخرین جستجو ها

حفاظ دماوند کانون فرهنگی و هنری شهدای هوتک جستجوی فایل های درسی و دانشجویی مشکلات و خطاهای برنامه نویسی کلیک ۹۸ کرم ضد لک و روشن کننده بسیار قوی گیاهی دانستنی های فرش ماشینی داستان نویسی خلاق فارسی A.T.I عمل بینی گوشتی