تعداد توسعهدهندگانی که لینوکس را به عنوان زیرساخت اصلی خود انتخاب میکنند و برای انجام فعالیتهایی نظیر برنامهنویسی یا ساخت برنامههای کاربردی وبمحور از سیستمعامل لینوکس استفاده میکنند کم نیستند. توسعهدهندگانی که عاشق نرمافزارها و سیستمعاملهای متنباز هستند. این گروه از توسعهدهندگان برای انجام فعالیتهای حرفهای خود به مجموعهای از ابزارهای کاربردی نیاز دارند که بهنام LEMP شناخته میشود.
پیشنیازها
قبل از آنکه بحث را آغاز کنیم، به این نکته دقت کنید که ابتدا باید سیستمعامل لینوکس اوبونتو را نصب کرده باشید تا بتوانید مولفههای مذکور را نصب کنید. علاوه بر این، اطمینان حاصل کنید یک حساب معمولی غیر روت روی سرور با دسترسی sudo دارید. زمانیکه حساب کاربری موردنظر را ایجاد کردید در ادامه مراحل زیر را دنبال کنید.
گام اول: نصب وبسرور Nginx
برای نمایش صفحات وب به بازدیدکنندگان وبسایت باید از Nginx که یک وبسرور مدرن و کارآمد است استفاده میکنیم. با توجه به اینکه تمامی نرمافزارهایی که قصد استفاده از آنها را داریم از مخازن بسته پیشفرض اوبونتو دریافت میشوند، بنابراین باید از سیستم مدیریت بسته apt برای نصب مولفههای ضروری استفاده کنیم. با توجه به اینکه اولین باری است که از apt استفاده میکنیم، ابتدا باید شاخص بسته سرور را بهروزرسانی کنیم و در ادامه وبسرور را نصب کنیم. برای بهروزرسانی و نصب سرور از دستورات زیر استفاده میکنیم:
sudo apt update
sudo apt install nginx
زمانیکه فرآیند نصب Nginx روی اوبونتو کامل شود، به سرعت اجرا شده و قابل استفاده است. اگر دیوارآتش ufw در وضعیت فعال قرار دارد، باید امکان اتصال به Nginx را فراهم کنید.
خوشبختانه Nginx روی دیوارآتش ufw ثبت میشود، بنابراین کار چندان سختی نداریم. بهطور معمول، پیشنهاد میشود محدودترین پروفایل فعال شود، زیرا در حالت کمینه نیز ترافیک توسط دیوارآتش ارزیابی میشود. با توجه به اینکه هنوز SSL را روی وبسرور پیکربندی نکردهایم، تنها به عبور ترافیک روی پورت 80 نیاز داریم.
وضعیت فوق با دستور زیر فعال میشود:
sudo ufw allow ‘Nginx HTTP’
برای آنکه تغییر فوق تایید شود از دستور زیر استفاده میکنیم:
sudo ufw status
خروجی فرمان فوق نشان میدهد که ترافیک HTTP مجاز شده و اجازه برقراری ارتباط روی پروتکل فوق فراهم است.
Output
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)
زمانی که قاعده جدید به دیوارآتش اضافه شد، برای آنکه اطمینان حاصل کنید که وبسرور کار میکند یا خیر کافی است، نام دامنه یا آدرس آیپی عمومی سرور را در مروگر وب وارد کنید. اگر نام دامنهای دارید که به سرور اشاره میکند، کافی است دستوز زیر را اجرا کنید تا از این موضوع اطلاع حاصل کنید:
ip addr show eth0 | grep inet | awk ‘{ print $2; }’ | sed ‘s/\/.*$//’
خروجی دستور فوق چند آدرس آیپی را نشان میدهد که میتوانید آنها را تکبهتک روی مرورگر وب بررسی کنید. به عنوان یک روش جایگزین میتوانید بررسی کنید کدام آدرس آیپی در دسترس قرار دارد و از مکانهای مختلف روی اینترنت قابل مشاهده است. برای این منظور از دستور زیر استفاده کنید:
curl -4 icanhazip.com
آدرسی که در نظر دارید در مرورگر وب داشته باشید را وارد کنید تا به صفحه فورد پیشفرض Nginx هدایت شوید.
http://server_domain_or_IP
اگر وبسرور به درستی نصب شده و اجرا شده باشد، با وارد کردن آدرس موردنظر خروجی همانند شکل 1 را مشاهده میکنید. خروجی فوق نشان میدهد که Nginx با موفقیت نصب شده است.
شکل 1
گام دوم: نصب MySQL با هدف مدیریت دادههای سایت
اکنون که با موفقیت وبسرور را راهاندازی کردیم، در مرحله بعد باید MySQL را به عنوان سامانه مدیریت بانکاطلاعاتی نصب کنیم تا بتوانیم دادههای سایت را ذخیره و مدیریت کنیم. برای نصب MySQL از دستور زیر استفاده میکنیم:
sudo apt install mysql-server
با اجرای فرمان فوق نرمافزار بانکاطلاعاتی MySQL نصب میشود، اما پیکربندی آن هنوز کامل نیست. برای ایمن کردن نصب، اسکریپتی همراه با MySql ارائه میشود که از شما سوال میکند در نظر دارید برخی مقادیر پیشفرض غیر ایمن را ویرایش کنید یا خیر. اسکریپت مذکور با دستور زیر فعال کنید:
sudo mysql_secure_installation
اسکریپت فوق از شما درخواست میکند گذرواژهای برای استفاده از سامانه MySQL وارد کنید و در ادامه سوال میکند آیا در نظیر دارید VALIDATE PASSWORD PLUGIN را پیکربندی کنید یا خیر.
لازم به توضیح است که فعالسازی ویژگی مذکور گاهی اوقات مشکلاتی را به همراه میآورد، زیرا پس از فعالسازی ویژگی فوق، گذرواژههایی که مطابق با معیارهای خاصی نباشند از سوی MySQL رد میشوند. در نتیجه اگر از گذرواژههای ضعیف همراه با نرمافزاری استفاده کنید که بهطور خودکار اطلاعات احراز هویت کاربر MySQL را مدیریت میکند، نظیر بستههای اوبونتو برای phpMyAdmin با مشکلاتی روبرو میشوید. عدم فعالسازی افزونه فوق مخاطرات امنیتی چندانی به وجود نمیآورد، به شرطی که از گذرواژههای قدرتمند و منحصر به فردی برای احراز هویت بانکهای اطلاعاتی استفاده کنید. با فشار کلید Y افزونه فوق فعال میشود، با فشار هر کلید دیگری افزونه فوق فعال نخواهد شد. اگر تایید اعتبار را فعال کنید، اسکریپت از شما درخواست میکند که سطحی از تایید اعتبار گذرواژه را انتخاب کنید. به یا داشته باشید که مقدار 2 به معنای قویترین سطح است، در این حالت، هرگونه رمزی که فاقد مقادیر عددی، حروف بزرگ و کوچک باشد، از کاراکترهای خاص در آن استفاده نشده باشد یا کلمات ساده لغتنامهای در آن استفاده شده باشد، پیغام خطایی را مشاهده میکنید. شکل 2
شکل 2
گزینههای قابل انتخاب را نشان میدهد:
اگر تایید اعتبار گذرواژه را فعال کنید، میزان قدرت گذرواژه کاربر روت نشان داده میشود و از شما سوال میشود آیا در نظر دارید این گذرواژه را تغییر دهید یا خیر؟ اگر از گذرواژه خود راضی هستید با فشار کلید N در اعلان فرمان از این مرحله عبور کنید. در ارتباط با سایر سوالها کلید Y را فشار داده و اینتر را در هر اعلان فشار دهید. در این حالت کاربران ناشناس (میهمان) از بانکاطلاعاتی تست حذف میشوند و ورودیهای root راه دور غیرفعال میشوند و قواعد جدیدی که مشخص شدهاند به سرعت بارگذاری میشوند تا تمامی تغییراتی که ایجاد کردیم فعال شوند. دقت کنید روی سیستمعاملهای اوبونتو که از نگارش 5.7 و بالاتر MySQL استفاده میکنند، کاربر روت MySQL به گونهای تنظیم شده که به شکل پیشفرض به جای گذرواژه به وسیله افزونه auth_socket احراز هویت میشود.
به این صورت، امنیت مستحکمتر و یکپارچهای ایجاد میشود و کاربردپذیری در حالتهای مختلف افزایش پیدا میکند. اگر تمایل دارید هنگام اتصال به MySQL به عنوان root از گذرواژه استفاده کنید، باید روش احراز هویت را از auth_socket به mysql_native_password تغییر دهید. برای انجام اینکار اعلان MySQL در پنجره ترمینال را باز کنید:
sudo mysql
در ادامه روش احراز هویت هر یک از حسابهای کاربری MySQL را با استفاده از اعلان زیر بررسی کنید:
SELECT user,authentication_string,plugin,host FROM mysql.user;
خروجی اجرای فرمان فوق در شکل 3 نشان داده شده است. در این مثال، مشاهده میکنیم کاربر root با استفاده از افزونه auth_socket احراز هویت میشود. برای پیکربندی حساب کاربری root با هدف احراز هویت با یک گذرواژه باید از دستور ALTER USER استفاده کنیم. در دستور زیر اطمینان حاصل کنید که واژه password را با یک گذرواژه قدرتمند تغییر دادهاید:
ALTER USER ‘root’@’localhost’ IDENTIFIED WITH mysql_native_password BY ‘password’;
شکل 3
در ادامه دستور FLUSH PRIVILEGES را اجرا کنید تا سرورها دومرتبه جدولهای grant را بارگذاری کنند و تغییرات جدید اعمال شود.
FLUSH PRIVILEGES;
روشهای احراز هویتی که هر یک از کاربران استفاده میکنند را بررسی کنید تا مطمئن شوید کاربر root دیگری با استفاده از افزونه auth_socket احراز هویت نشود.
SELECT user,authentication_string,plugin,host FROM mysql.user;
خروجی فرمان فوق در شکل 4 نشان داده شده است. در شکل 4 مشاهده میکنید کاربر root بانکاطلاعاتی MySQL با استفاده از گذرواژه احراز هویت میشود. زمانیکه این وضعیت را روی سرور تایید کنید، میتوانید از محیط MySQL با اجرای دستور exit خارج شوید. اکنون سامانه بانکاطلاعاتی MySQL راهاندازی شده و قابل استفاده است و باید به سراغ نصب PHP برویم.
شکل 4
گام سوم: نصب PHP و پیکربندی Nginx برای استفاده از پردازنده PHP
اکنون که Nginx را برای ارائه صفحههای وب و MySQL را برای ذخیرهسازی و مدیریت دادهها روی سرور نصب کردیم، در مرحله بعد باید محتوای پویا تولید کنیم. این همان مکانی است که به یک ابزار برنامهنویسی قدرتمند که اجازه میدهد صفحات وب پویایی را ایجاد کنیم نیاز داریم. بهترین گزینه در این زمینه PHP است. با توجه به اینکه Nginx همانند دیگر وبسرورها مجهز به پردازنده بومی PHP نیست، ابتدا باید پردازنده php-fpm سرنام fastCGI process manager را نصب کنیم. بنابراین از Nginx برای ارسال درخواستهای php به این نرمافزار برای پردازش استفاده میکنیم. ماژول فوق را همراه با بسته کمکی اضافی که به PHP امکان برقراری ارتباط با بانکاطلاعاتی را میدهد نصب میکنیم. در این فرآیند فایلهای ضروری PHP نیز دانلود میشوند. اینکار از طریق اجرای فرمان زیر انجام میشود:
sudo add-apt-repository universe
اکنون آماده هستید تمامی مولفههای مجموعه LEMP را نصب کنید، اما بازهم نیاز دارید برخی تنظیمات را پیکربندی کنید تا به Nginx بگویید از پردازنده PHP برای محتوای پویا استفاده کند. اینکار روی سطح بلوک سرور انجام میشود. بلوکهای سرور در Nginx مثل میزبانهای مجازی در وبسرور آپاچی هستند. بنابراین باید یک فایل پیکربندی بلوک سرور جدید درون دایرکتوری /etc/nginx/sites-available ایجاد میکنیم. در مثال فوق، فایل پیکربندی بلوک سرور جدید example.com نام دارد، بهتر است نامی که دوست دارید را انتخاب کنید.
sudo nano /etc/nginx/sites-available/example.com
با ویرایش فایل پیکربندی بلوک سرور به جای ویرایش فایل پیشفرض میتوان پیکربندی پیشفرض را در مواقع نیاز به راحتی بازیابی کرد.
شکل 5 محتوای فایل پیکربندی بلوک پیشفرض که ویرایش شده و اکنون باید در فایل پیکربندی بلوک سرور جدید اضافه شود را نشان میدهد. هر یک از بلوکها و بخشهای نشان داده شده در شکل 5 وظیفه رسیدگی به کار مشخصی را دارند. توضیح هر یک از این بخشها و بلوکها به شرح زیر است:
شکل 5
Listen: مشخص میکند که Nginx باید به چه پورتی گوش کند. در مثال فوق، به پورت 80 گوش میکند که پورت پیشفرض برای ترافیک HTTP است.
Root: ریشه سند که فایلهای وبسایت برای ارائه در آن مکان ذخیرهسازی میشود را مشخص میکند.
Index: مشخص میکند که Nginx در صورت تقاضا برای فایل index.pgp و وجود چنین فایلی، نمایش آنرا در اولویت قرار دهد.
Server_Name: مشخص میکند کدام بلوک سرور باید برای هر درخواست احتمالی ارسال به سرور استفاده شود. این دستور باید به نام دامنه سرور یا آدرس آیپی عمومی اشاره کند.
/Location: اولین بلوک مکان است که شامل دستور try_files است. دستور فوق برای ارزیابی الگوی فایلهایی که مطابق با الگوی URI هستند استفاده میشود. اگر Nginx موفق نشود فایل مناسبی را پیدا کند پیغام خطای 404 را بر میگرداند.
$Location ~\.php: این بلوک مکان، پردازش عملی PHP را با ارجاع Nginx به فایل پیکربندی fastcgi-php.conf و فایل php 7.2-fpm.sock که سوکت مرتبط با php-fpm را اعلان میکند مدیریت میکند.
Location ~/\.ht-: آخرین بلوک مکان که با فایل .htaccess در ارتباط است، اما توسط Nginx پردازش نمیشود را مشخص میکند. با اضافه کردن دستور deny all (رد همه) اگر هر فایل .htaccess در مسیر درخواست کاربر به ریشه سند پیدا شود به بازدیدکنندگان سایت نشان داده نمیشود.
پس از اضافه کردن محتوای فوق، فایل را ذخیره کرده و از آن خارج شوید. در ادامه بلوک سرور جدید را با ساخت یک لینک نمادین (symbolic link) از فایل پیکربندی بلوک سرور جدید در پوشه /etc/nginx/sites-available/ به پوشه /etc/nginx/sites-enabled/ فعال کنید. برای انجام اینکار دستور زیر را اجرا کنید:
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
در این مرحله ممکن است خطاهای ساختاری فایل پیکربندی جدید را مشاهده کنید. برای بررسی این موضوع دستور زیر را اجرا کنید:
sudo nginx -t
اگر خطای دیگری گزارش شد، باید به عقب بازگردید و ابتدا فایلی که ایجاد کردهاید را بررسی کنید. زمانیکه آماده بودید، nginx را دومرتبه بارگذاری کنید تا تغییرات ضروری اعمال شوند. برای اینکار دستور زیر را اجرا کنید:
sudo systemctl reload nginx
اکنون مراحل نصب و پیکربندی مجموعه LEMP تمام شده است. با اینحال بهتر است، امکان برقراری ارتباط میان تمامی مولفههایی که نصب کردهایم را بررسی کنیم.
گام چهارم: ساخت یک فایل PHP با هدف آزمایش پیکربندی
اکنون مجموعه LEMP بهطور کامل راهاندازی شده، اما بهتر است آزمایشی انجام دهید تا مطمئن شوید Nginx به درستی فایلهای .php را به پردازنده php ارسال میکند. برای انجام اینکار از ویرایشگر متنی که برای ساخت فایل آزمایش PHP بهنام info.php در ریشه سند وجود دارد استفاده میکنیم:
sudo nano /var/www/html/info.php
دستورات زیر را درون این فایل جدید وارد کنید. دستوارت زیر کدهای PHP معتبری هستند که اطلاعاتی در ارتباط با سرور بر میگردانند:
<?php
phpinfo();
در انتها فایل را ذخیره کنید و خارج شوید.
اکنون میتوانید این صفحه را روی مرورگر وب با مراجعه به نام دامنه سرور یا آدرس عمومی آن به همراه آدرس صفحه info.php مشاهده کنید. برای این منظور دستور زیر را اجرا کنید:
http://your_server_domain_or_IP/info.php
اکنون باید صفحه وبی را مشاهده کنید که توسط PHP برای ارائه اطلاعاتی در مورد سرور ساخته شده است (شکل 6). اگر صفحه فوق را مشاهده میکنید به معنای آن است که PHP روی Nginx بدون مشکل نصب شده است. پس از تایید این موضوع که Nginx صفحهها را به شکل درستی پردازش میکند، بهتر است فایلی که ایجاد کردید را حذف کنید، زیرا ممکن است افراد غیرمجاز اطلاعاتی در مورد پیکربندی سرور به دست آورند و شاید برای نفوذ به سرور از آن استفاده کنند. دقت کنید هر زمان که نیاز داشتید امکان ساخت دوباره این فایل وجود دارد. برای حذف فایل فوق از دستور زیر استفاده کنید.
sudo rm /var/www/html/info.php
شکل 6
ماهنامه شبکه را از کجا تهیه کنیم؟
ماهنامه شبکه را میتوانید از کتابخانههای عمومی سراسر کشور و نیز از دکههای روزنامهفروشی تهیه نمائید.
ثبت اشتراک نسخه کاغذی ماهنامه شبکه
ثبت اشتراک نسخه آنلاین
کتاب الکترونیک +Network راهنمای شبکهها
- برای دانلود تنها کتاب کامل ترجمه فارسی +Network اینجا کلیک کنید.
کتاب الکترونیک دوره مقدماتی آموزش پایتون
- اگر قصد یادگیری برنامهنویسی را دارید ولی هیچ پیشزمینهای ندارید اینجا کلیک کنید.
نظر شما چیست؟