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

اگر از شما رمز عبور درخواست شد رمزعبوری که هنگام نصب وارد کردید را وارد کنید اما اگر رمز عبور را تنظیم نکرده اید از 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 من نسخه 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 را کجا بدست بیاورم؟

با دستور زیر 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,HTTPS)
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 به شما خواهم گفت.

دیدگاهتان را بنویسید