LAMP چیست؟
در ابتدا لازم است با LAMP آشنا شویم، LAMP یک استک (Stack) رایج شامل لینوکس، آپاچی، MySQL (یا MariaDB) و PHP است جالب است بدانید تمام این فناوری ها رایگان، آزاد و منبع باز هستند. کاربرد LAMP برای میزبانی نرم افزار های وب می باشد و در واقع به کمک آن می توانید یک اپلیکشن وب یا وبسایت را میزبانی کنید. استک های زیادی وجود دارند که از جمله آنها می توان به MEAN و Ruby on Rails اشاره کرد توجه داشت باشید اینکه از کدام استک استفاده کنید کاملا به سلیقه شما در انتخاب زبان های برنامه نویسی بستگی دارد مثلا از آنجایی که من PHP ، MySQL و Ruby و… را بخوبی می شناسم پس انتخاب های مناسب برای من LAMP ، LEMP و Ruby on Rails خواهند بود.
قدم های اولیه برای راه اندازی سرور Ubuntu
توجه داشته باشید در این مقاله من از Ubuntu 18.04 استفاده کردم!
خوب ابتدا Ubuntu رو نصب کنید (نسخه Server پیشنهاد میشه) فعلا فرض می کنم پیکربندی ها فایروال و SSH و… را انجام دادید چرا که حوصله این مقاله خارج هستش … بنابرین در مقالات جداگانه این موارد رو توضیح خواهم داد. حالا به کمک دستور tasksel در ترمینال استک LAMP در یک حرکت سریع نصب می کنم 🙂 پس ابتدا tasksel را نصب کنید
sudo apt install tasksel
حالا LAMP رو به کمک Tasksel نصب کنید:
sudo tasksel install lamp-server
نکته باید برای استفاده از فرمان Sudo دسترسی کاربر Root یا همان مدیرکل را در اوبونتو داشته باشید.
علاوه بر استفاده از tasksel می تونید هر کدام بسته های LAMP رو جداگانه نصب کنید البته این روش بهتر هم هستش! مراحل زیر رو برای نصب جداگانه طی می کنیم:
نصب MySQL
ابتدا دستور زیر رو در ترمینال اجرا کنید تا نیاز نباشه هر بار دستور sudo رو ابتدای فرامین وارد کنید:
sudo -s
حالا با اجرای دستور زیر در ترمینال آخرین نسخه MySQL رو نصب می کنیم که نسخه 5.7 هم هستش:
apt-get -y install mysql-server mysql-client
حالا برای افزایش امنیت کاربر اننونیموس و دیتابیس آزمایشی رو حذف می کنیم برای این دستور زیر رو اجرا کنید:
mysql_secure_installation
احتمالا با خطای زیر روبرو شوید:
… Failed! Error: SET PASSWORD has no significance for user ‘root’@’localhost’ as the authentication method used doesn’t store authentication data in the MySQL server. Please consider using ALTER USER instead if you want to change authentication parameters.
راه حل در انجمن توضیح داده شد:
اگر از شما رمز عبور درخواست شد رمزعبوری که هنگام نصب وارد کردید را وارد کنید اما اگر رمز عبور را تنظیم نکرده اید از sudo استفاده کنید تا رمزعبور از شما پرسیده نشود…
Securing the MySQL server deployment. Enter password for user root: <-- Enter the MySQL root password
در بخش بعد درصورت نیاز افزونه تایید رمز عبور را با زدن کلید y نصب کنید که شخصا نیازی به نصب این افزونه ندیدم و با زدن کلید n آن را نصب نکردم
VALIDATE PASSWORD PLUGIN can be used to test passwords and improve security. It checks the strength of password and allows the users to set only those passwords which are secure enough. Would you like to setup VALIDATE PASSWORD plugin? Press y|Y for Yes, any other key for No: Using existing password for root. Change the password for root ? ((Press y|Y for Yes, any other key for No) : <-- Choose 'y' here if you like to enable the password validation, I don't need that function, so I choose 'n' here.
از این مرحله به بعد همه سوالات را y بزنید تا در اولین سوال کاربر انونیموس حذف و بعد لغو دسترسی از راه دور و سپس حذف دیتابس آزمایشی و در انتها بارگذاری مجدد جداول انجام شوند.
خوب حالا یک تست از عملکرد MySQL داشته باشیم فرمان زیر را اجرا کنید:
mysql -u root -p
از شما رمزعبور کاربر روت پرسیده می شود و اگر مشکلی وجود نداشته باشد با پیام خوش آمد به بخش مانیتورینگ MySQL رو برو می شوید برای خروج از این بخش عبارت quit را وارد کنید
نصب Apache
اکنون با اجرا دستور زیر در ترمینال آپاچی را نصب می کنیم:
apt-get -y install apache2
در این مرحله پس از نصب آپاچی می توانید با وارد کردن عبارت localhost یا http://127.0.0.1 در مرورگر صفحه پیش فرض آپاچی را رویت کنید. بعداً در قسمت پیکربندی آپاچی به شما خواهم گفت چطور دسترسی جهانی به سرور خود بدهید تا سرور شما با آدرس IP عمومی یا دامنه سرور شما دردسترس باشد.
در حال حاضر می توانید فایل های وبسایت خود را در آدرس /var/www/html فایل سیستم اوبونتو ذخیره کنید اینجا همان جاییست که در هاستینگ های معمولی فایل های خود را در آن ذخیره می کردید تا از طریق مرورگر دردسترس باشند به آن شاخه روت هاست هم می گویند…
برای پیکربندی آپاچی هم باید فایل /etc/apache2/apache2.conf را بطور کلی ویرایش کنید برای اینکار می توانید از دستور زیر استفاده کنید:
sudo nano /etc/apache2/apache2.conf
نصب PHP 7.2
توجه داشته باشید حتما نسخه ای از PHP را نصب کنید که desperate نباشد! و دستور های زیر متناسب با نسخه مورد نظر باید تغییر کنند.
برای نصب PHP من نسخه 7.2 را انتخاب کردم اما می توانید نسخه جدیدتر مثل 7.3 را نیز نصب کنید… دستور زیر را اجرا کنید:
apt-get -y install php7.2 libapache2-mod-php7.2
پس از هر بار تغییر در تنظیمات سرور باید سرور را ریست کنید مثلا اکنون پس از نصب PHP یا پس از ویرایش فایل پیکربندی و… دستور زیر را برای ریست اجرا کنید:
systemctl restart apache2
خوب اکنون برای تست PHP در شاخه روت وبسایت که قبلا هم مکان آن را ذکر کردم یک فایل PHP با اسم info می سازیم:
nano /var/www/html/info.php
کد PHP زیرا در آن جایگذاری می کنیم:
<?php phpinfo();
حال با کلید ترکیبی ctrl + o و سپس ctrl + x فایل را ذخیره و بعد خارج می شویم. حال مالک فایلی که ساختیم را تغییر می دهیم:
chown www-data:www-data /var/www/html/info.php
در مقالات بعدی کاملا دستور های chmod و chown را توضیح می دهم نگران نباشید 🙂
اکنون آدرس زیرا را در مرورگر وارد کنید تا فایلی که ساختیم اجرا شود و از عملکرد PHP مطمئن شویم:
http://localhost/info.php
افزودن پشتیبانی از MySQL در PHP
برای این کار کافیست بسته php7.2-mysql را نصب کنیم اما اکثرا به برخی ماژول های دیگر PHP برای اجرا اپلیکیشن ها نیاز داریم دستور های زیر را اجرا کنید:
apt-cache search php7.2
و دستور زیر:
apt-cache search php-
چراکه در اسم تمام بسته های PHP نسخه 7.2 قید نشده از دستور دوم استفاده کردم تا آنها نیز لیست شوند. بسته های دلخواهتان را انتخاب کنید و نصب کنید من لیست زیر را انتخاب کردم:
apt-get -y install php7.2-mysql php7.2-curl php7.2-gd php7.2-intl php-pear php-imagick php7.2-imap php-memcache php7.2-pspell php7.2-recode php7.2-sqlite3 php7.2-tidy php7.2-xmlrpc php7.2-xsl php7.2-mbstring php-gettext
مجدد آپاچی را ریست کنید:
systemctl restart apache2
نصب Opcache و APCu PHP برای افزایش سرعت PHP، دستور زیر را اجرا کنید:
apt-get -y install php7.2-opcache php-apcu
و مجدد آپاچی را ریست کنید 🙂
systemctl restart apache2
حال آدرس http://localhost /info.php باز کنید تا آخرین وضعیت PHP را مشاهد کنید سپس به دلایل امنیتی فایل info.php را از شاخه روت وبسایت پاک کنید.
rm -f /var/www/html/info.php
نصب phpMyAdmin
دستور زیر را اجرا کنید:
apt-get -y install phpmyadmin
توجه کنید: در هنگام نصب از شما نوع سرور وب پرسیده می شود دقت کنید قرار گرفتن معکب قرمز روی نوع سرور (آپاچی حتما انتخاب شود) کافی نیست و باید با زدن کلید Space یک یک روی چک باکس نمایان شود و سپس ok را بزنید.
در سوال بعدی که پرسیده می شود Configure database for phpmyadmin with dbconfig-common? گزینه بله را بزنید و در سوال بعدی MySQL application password for phpmyadmin: که رمزعبور باید انتخاب کنید آن را خالی بگذارید و فقط کلید اینتر را بزنید تا یک رمز رندوم ایجاد شود.
حال وارد Shell نزم افزار MySQL شوید (بعنوان مدیر کل یا همان Root)
mysql -u root
اما اول بگم اینجا چی کار داریم: در MySQL یا MariaDB یه افزونه ای برای کاربر root فعال هستش بنام unix_socket ، وظیفه این افزونه جلوگیری از ورود کاربر روت به phpMyadmin و اتصالات TCP به MySQL برای این کاربر هستش که البته دلیل امنیتی هم داره حالا ما یه کاربر جدید باید ایجاد کنیم که بتونه کاربرای جدید دیگه و دیتابیس جدید بسازد برای این کار یه کاربر با توانایی های root می سازیم و اسمش رو هم مثلا admin قرار میدیم. خوب دستور بالا رو بزنید و وارد Shell بشید و کوئری زیرا اجرا کنید:
CREATE USER 'admin'@'localhost' IDENTIFIED BY 'yourpassword'; GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION; FLUSH PRIVILEGES; exit
عبارت yourpassword را با یک رمزعبور قوی جایگزین کنید. برای دسترسی به پنل phpMyadmin آدرس http://localhost/phpmyadmin را باز کنید
پیکربندی Apache و فایروال
اکنون قبل از هر چیز چک می کنیم تا مشکلات پیکربندی Apache را بدانیم دستور زیر را اجرا کنید
sudo apache2ctl configtest
خروجی آن احتمالا چنین چیزیست:
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
همان طور که مشخص است گرچه خطایی در نوشتار کد های پیکربندی وجود ندارد اما ما هنوز serverName را تعیین نکرده ایم. پس فایل پیکربندی را ویرایش کنیم:
sudo nano /etc/apache2/apache2.conf
فایل توسط نرم افزار ویرایشگر متنی نانو باز می شود و می توانید آن را ویرایش کنیم در انتهای این فایل ServeName را تعیین کنید با وارد کردن کد زیر به آن:
ServerName server_domain_or_IP
اگر برای سرور خود دامنه دارید آن را وارد کنید که در این صورت باید دامنه خود را نیز تنظیم کنید که این تنظیم از هدف مقاله خارج است و در مقالات بعدی به آن رسیدگی می کنم. و اگر دامنه ندارید می توایند IP عمومی سرورتان را وارد کنید اما این IP را کجا بدست بیاورم؟
لازم است روتر شما برای انتقال پورت (عموماً 80 و 443) برای IP داخلی شبکه شما (LAN IP) تنظیم شود. در این مقاله در این توضیح داده بودم: چگونه از WAMP بعنوان یک سرور اینترنتی استفاده کنیم؟
و البته باید به این موضوع توجه کنید که شبکه رایانه شما طوری تنظیم شود LAN IP خودکار تخصیص داده نشود و همواره یک IP ثابت باشد.
با دستور زیر curl را نصب می کنیم و به کمک آن از یک سرور IP سرورمان را می پرسیم:
apt-get install curl curl http://icanhazip.com
یا بکمک دستور زیر:
ip addr show | grep inet | awk '{ print $2; }' | sed 's//.*$//'
از روش های بالا چندین IP بدست می آورید ممکن است همه آنها توسط وب قابل دسترسی نباشند پس یکی یکی آنها را امتحان کنید و هر بار آپاچی رت ریست کنید. اما یادتان باشد قبل از شروع به آزمایش این IP ها فایروال را تنظیم کنیم. اما فعلا یک بار دیگر پیکربندی را تست کنیم:
apache2ctl configtest
نتیجه:
Syntax OK
پس مشکلی نداریم و حالا فایروال را تنظیم می کنیم اما اول چک کنیم ببنیم فایروال اوبونتو یا همان UFW پروفایل برای چه نرم افزار هایی دارد:
ufw app list
نتیجه احتمالا بصورت زیر است:
Available applications: Apache Apache Full Apache Secure
اگر اطلاعات پروفایل Apache Full
را چک کنید ملاحضه خواهید کرد که فایروال ترافیک را برای پورت های 80 و 443 مجاز خواهد کرد:
ufw app info "Apache Full"
نتیجه و نمایش اطلاعات پروفایل:
Profile: Apache Full Title: Web Server (HTTP,http) Description: Apache v2 is the next generation of the omnipresent Apache web server. Ports: 80,443/tcp
ترافیک را برای پروفایل مذکور مجاز می کنیم:
ufw allow in "Apache Full"
حال فایروال را نیز فعال کنید:
ufw enable
و برای مشاهده وضعیت فایروال دستور زیر را وارد کنید:
ufw status
حال اگر IP ای که در پیکربندی آپاچی وارد کرده باشید صحیح باشد با وارد کردن آن در مرورگر صفحه پیشفرض آپاچی در مرورگر نمایش داده میشود: http://your_server_IP_address
خوب برای اینکه وبسایتمون سریع تر اجرا بشه می تونیم KeepAlive
رو فعال کنیم (چطور سریع تر؟ با فعال شدن این گزینه آپاچی بجای ایجاد یک کانکشن جدید برای هر درخواست (Request) از کانکشن ها موجود استفاده می کند که باعث کاهش تعلل ها و استفاده بهتر از حافظه سرور خواهد شد) برای اینکار باید فایل apache2.conf
در مسیر /etc/apache2/apache2.conf را که همان فایل پیکربندی آپاچی می باشد را ویرایش کنید و تنظیمات زیر را ثبت کنید
KeepAlive On MaxKeepAliveRequests 50 KeepAliveTimeout 5
تبریک می گم شما یک سرور آنلاین دارید 🙂 البته هنوز ابتدای راه هستید پس مسیر رو ادامه بدید تا بزودی یه متخصص باشید. یادتون باشه اگر افرادی که از شما برای ساختن وبسایت هزینه دریافت می کنند حتی قادر به نصب آپاچی نیستند و فقط اسکریپت های موجود را روی هاستینگ های آماده نصب می کنند! شما راه صحیح رو انتخاب کردید توسعه وب یا هر اپلیکشن دیگه کار بزرگی نیست و همه می تونن انجامش بدن فقط پشت کار لازم دارید.
در مقالات آینده از virtual host ها و پیکربندی و فعال سازی SSL و استفاده از Let’s encrypt به شما خواهم گفت.
بدون دیدگاه