خانه » Apache، MySQL، PHP (LAMP Stack) را در Ubuntu ۲۰.۰۴ LTS نصب کنید
آموزش لینوکس

Apache، MySQL، PHP (LAMP Stack) را در Ubuntu ۲۰.۰۴ LTS نصب کنید

LAMP stack یک پلت فرم توسعه وب منبع باز و محبوب است که می تواند برای اجرا و استقرار وب سایت های پویا و برنامه های مبتنی بر وب استفاده شود. به طور معمول، یک پشته LAMP از وب سرور آپاچی، پایگاه داده MariaDB/MySQL، زبان های برنامه نویسی PHP/Python/Perl تشکیل شده است. LAMP مخفف Linux، Apache، MariaDB/MYSQL، PHP/Python/Perl است. این آموزش گام به گام نحوه نصب Apache، MySQL، PHP (LAMP stack) را در نسخه سرور Ubuntu 20.04 LTS توضیح می دهد.

برای هدف این آموزش، از سیستم اوبونتو زیر استفاده خواهیم کرد.

  • سیستم عامل : Ubuntu 20.04 LTS Server Edition
  • آدرس IP : 192.168.225.52/24

ابتدا اجازه دهید سرور آپاچی را نصب کنیم.

۱. وب سرور آپاچی را در اوبونتو نصب کنید

اول از همه، سرور اوبونتو را با استفاده از دستورات به روز کنید:

$ sudo apt update
$ sudo apt upgrade

سپس وب سرور آپاچی را نصب کنید:

$ sudo apt install apache2

با دستور بررسی کنید که آیا وب سرور آپاچی در حال اجرا است یا خیر:

$ sudo systemctl status apache2

خروجی خواهد بود:

● apache2.service - The Apache HTTP Server
     Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabl>
     Active: active (running) since Fri 2020-05-29 07:02:26 UTC; 25s ago
       Docs: https://httpd.apache.org/docs/2.4/
   Main PID: 23996 (apache2)
      Tasks: 55 (limit: 2283)
     Memory: 5.1M
     CGroup: /system.slice/apache2.service
             ├─23996 /usr/sbin/apache2 -k start
             ├─23998 /usr/sbin/apache2 -k start
             └─23999 /usr/sbin/apache2 -k start

May 29 07:02:26 ubuntuserver systemd[1]: Starting The Apache HTTP Server...
May 29 07:02:26 ubuntuserver apachectl[23981]: AH00558: apache2: Could not reliably det>
May 29 07:02:26 ubuntuserver systemd[1]: Started The Apache HTTP Server.

تبریک می گویم! سرویس آپاچی راه اندازی شده است!!

۱.۱. اجازه دادن به وب سرور آپاچی در فایروال UFW

UFW مخفف Uncomplicated Fire wall، برنامه ای برای مدیریت فایروال شبکه است که برای استفاده آسان طراحی شده است. UFW به طور پیش فرض در تمام نسخه های اوبونتو موجود است.

اگر فایروال UFW را در اوبونتو 20.04 LTS فعال کرده باشید، به طور پیش‌فرض، مرورگر وب Apache از سیستم‌های راه دور قابل دسترسی نیست. شما باید با دنبال کردن مراحل زیر، پورت http و https را مجاز کنید.

ابتدا پروفایل های برنامه موجود در سیستم اوبونتو را با استفاده از دستور فهرست کنید:

$ sudo ufw app list

خروجی نمونه:

Available applications:
  Apache
  Apache Full
  Apache Secure
  OpenSSH

همانطور که می بینید، پروفایل برنامه های Apache و OpenSSH در UFW نصب شده اند. با استفاده از دستور ufw app info "Profile Name" می توانید اطلاعات مربوط به هر پروفایل و قوانین موجود در آن را مشاهده کنید .

اجازه دهید با استفاده از دستور زیر به پروفایل نگاه کنیم “Apache Full”:

$ sudo 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

همانطور که می بینید، پروفایل "Apache Full" قوانینی را برای فعال کردن ترافیک به پورت ها 80و 443 دارد

اکنون دستور زیر را اجرا کنید تا ترافیک ورودی HTTP و HTTPS این پروفایل مجاز باشد:

$ sudo ufw allow in "Apache Full"

خروجی مانند زیر را خواهید دید:

Rules updated
Rules updated (v6)

اگر نمی‌خواهید ترافیک https مجاز باشد و فقط ترافیک http(80) مجاز باشد، اجرا کنید:

$ sudo ufw app info "Apache"

۱.۲. وب سرور آپاچی را تست کنید

اکنون، مرورگر وب خود را باز کنید و با آدرس http://localhost/ یا http://IP-Address/ به صفحه آزمایشی آپاچی دسترسی پیدا کنید.

اگر «Apache 2 Ubuntu default page» را همانطور که در زیر نشان داده شده است می‌بینید، سرور آپاچی کار می کند!

وب سرور آپاچی را تست کنید

۲. MySQL را در اوبونتو نصب کنید

برای نصب MySQL در اوبونتو، اجرا کنید:

$ sudo apt install mysql-server

بررسی کنید که آیا سرویس MySQL در حال اجرا است یا از دستور استفاده نمی کند:

$ sudo systemctl status mysql

خروجی نمونه:

● mysql.service - MySQL Community Server
     Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2020-05-29 07:15:22 UTC; 2min 8s ago
   Main PID: 25242 (mysqld)
     Status: "Server is operational"
      Tasks: 38 (limit: 2283)
     Memory: 323.7M
     CGroup: /system.slice/mysql.service
             └─25242 /usr/sbin/mysqld

May 29 07:15:16 ubuntuserver systemd[1]: Starting MySQL Community Server...
May 29 07:15:22 ubuntuserver systemd[1]: Started MySQL Community Server.

همانطور که در خروجی بالا مشاهده می کنید، MySQL در حال اجرا است!

۲.۱. راه اندازی پسورد کاربری مدیریت پایگاه داده (روت) برای Mysql

به طور پیش فرض، رمز عبور کاربر root در MySQL خالی است. استفاده از رمز عبور خالی برای حساب مدیریت پایگاه داده توصیه نمی شود. شما باید سرور MySQL خود را با اجرای اسکریپت زیر ایمن کنید:

$ sudo mysql_secure_installation

از شما پرسیده می شود که آیا می خواهید "VALIDATE PASSWORD" کامپوننت را تنظیم کنید یا خیر. این مؤلفه به کاربران اجازه می دهد تا رمز عبور قوی را برای اعتبار پایگاه داده پیکربندی کنند. اگر فعال باشد، به طور خودکار قدرت رمز عبور را بررسی می‌کند و کاربران را مجبور می‌کند تا تنها پسوردهایی را تنظیم کنند که به اندازه کافی ایمن هستند. غیرفعال کردن آن بی خطر است . با این حال، شما باید از یک رمز عبور قوی و منحصر به فرد برای اعتبار پایگاه داده استفاده کنید. اگر نمی‌خواهید این مؤلفه را فعال کنید، کافی است هر کلیدی را فشار دهید تا از قسمت تأیید رمز عبور عبور کنید و بقیه مراحل را ادامه دهید.

اگر می‌خواهید VALIDATE PASSWORD کامپوننت را تنظیم کنید، y وارد کنید:

Securing the MySQL server deployment.

Connecting to MySQL using a blank password.

VALIDATE PASSWORD COMPONENT 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 component?

Press y|Y for Yes, any other key for No: y

اگر پاسخ شما بله است ، از شما خواسته می شود تا سطح اعتبارسنجی رمز عبور را انتخاب کنید. اعتبارسنجی رمز عبور موجود کم , متوسط ​​و قوی است . فقط عدد مناسب (۰ برای کم، ۱ برای متوسط ​​و ۲ برای رمز عبور قوی) را وارد کنید و کلید ENTER را بزنید.

There are three levels of password validation policy:

LOW Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 0

اکنون رمز عبور کاربر root در MySQL را وارد کنید. لطفاً توجه داشته باشید که بسته به خط مشی رمز عبوری که در مرحله قبل انتخاب کرده اید، باید از رمز عبور برای کاربر root استفاده کنید . اگر افزونه را فعال نکرده اید، از هر رمز عبور قوی و منحصر به فردی که انتخاب می کنید استفاده کنید.

Please set the password for root here.

New password:

Re-enter new password:

Estimated strength of the password: 100 
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y

هنگامی که رمز عبور را دو بار وارد کردید، قدرت رمز عبور را خواهید دید (در مورد ما ۱۰۰ است ). اگر از نظر شما خوب است، Y را فشار دهید تا با رمز عبور داده شده ادامه دهید. اگر از طول رمز عبور راضی نیستید، هر کلید دیگری را فشار دهید و یک رمز عبور قوی تنظیم کنید. من با رمز عبور فعلی خود مشکلی ندارم، بنابراین من y را انتخاب کردم.

برای بقیه سوالات فقط تایپ کنید y و ENTER بزنید. با این کار کاربر ناشناس حذف می شود، ورود کاربر root از راه دور مجاز نیست و پایگاه داده آزمایشی حذف می شود.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Success.

Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Success.

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.

Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
- Dropping test database...
Success.

- Removing privileges on test database...
Success.

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.

All done!

انجام شده! ما رمز عبور کاربر root در MySQL تنظیم کرده ایم.

۲.۲. تغییر روش احراز هویت برای کاربر root در MySQL

به طور پیش‌فرض، از MySQL 5.7 و نسخه‌های جدیدتر در اوبونتو کاربر ریشه MySQL به گونه ای تنظیم شده است تا با استفاده از افزونه auth_socket احراز هویت کند. اینکار هنگامی که با استفاده از هر برنامه خارجی، به عنوان مثال phpMyAdmin، به سرور پایگاه داده خود دسترسی پیدا می کنید، همه چیز را پیچیده می کند. برای رفع این مشکل، باید روش احراز هویت را از auth_socket به caching_sha2_passwordیا mysql_native_password تغییر دهید.

از نسخه MySQL 8.0، افزونه احراز هویت ترجیحی و پیش‌فرض  caching_sha2_password است. افزونه احراز هویت caching_sha2_password، رمزگذاری رمز عبور امن تری را نسبت به افزونه mysql_native_password ارائه می دهد.

برای تغییر پلاگین احراز هویت، با استفاده از دستور زیر به اعلان MySQL خود وارد شوید:

$ sudo mysql

یا

$ mysql -u root -p

رمز عبور MySQL rootرا که در مرحله قبل تنظیم کردیم را وارد کنید.

دستور زیر را در اعلان mysql اجرا کنید تا روش احراز هویت فعلی را برای تمام حساب های کاربری MySQL پیدا کنید:

mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;

برای تغییر افزونه auth_socket به caching_sha2_password دستور زیر را در اعلان MySQL اجرا کنید. اگر افزونه VALIDATE PASSWORD را فعال کرده اید ، مطمئن شوید که از یک رمز عبور قوی بر اساس الزامات خط مشی فعلی استفاده کرده اید. یک رمز عبور قوی حداقل از 8 کاراکتر شامل یک حرف بزرگ، یک حرف کوچک، یک عدد و یک کاراکتر خاص تشکیل شده است.

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'Password123#@!';

در دستور بالا یک رمز عبور قوی و منحصربفرد به انتخاب خود جایگزین Password123#@! کنید .

تغییرات را با استفاده از دستور به روز کنید:

mysql> FLUSH PRIVILEGES;

اکنون بررسی کنید که آیا افزونه احراز هویت فعلی تغییر کرده است؟

mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;
افزونه احراز هویت فعلی را در mysql بررسی کنید

خوب! اکنون کاربر root در MySQL می تواند با استفاده از رمز عبور برای دسترسی به شل MySQL احراز هویت کند.

خروج از شل MySQL:

mysql> exit

توجه داشته باشید:

حتی اگر افزونه caching_sha2_password رمزگذاری ایمن پیشرفته‌تری را ارائه می‌کند، برخی مشکلات سازگاری با نصب‌های موجود MySQL دارد. اگر با مشکلات سازگاری مواجه شدید، باید افزونه mysql_native_password را به عنوان افزونه احراز هویت پیش فرض تنظیم کنید.

برای تغییر به افزونه mysql_native_password، دستور زیر را در اعلان MySQL اجرا کنید.

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

تغییرات را با استفاده از دستور به روز کنید:

mysql> FLUSH PRIVILEGES;

۳. PHP را در اوبونتو نصب کنید

برای نصب PHP اجرا کنید:

$ sudo apt install php libapache2-mod-php php-mysql

پس از نصبPHP، فایل info.php را در دایرکتوری ریشه آپاچی ایجاد کنید. معمولاً پوشه ریشه آپاچی  در اکثر توزیع‌های لینوکس مبتنی بر دبیان خواهد /var/www/html/ یا /var/www/ است. در اوبونتو 20.04 LTS، این دایرکتوری /var/www/html/ است.

اجازه دهید فایل info.php را در دایرکتوری ریشه apache ایجاد کنیم:

$ sudo vi /var/www/html/info.php

خطوط زیر را اضافه کنید:

<?php 
phpinfo(); 
?>

برای ذخیره و خروج از فایل ، کلید ESC را فشار دهید و :wq تایپ کنید . برای اعمال تغییرات، سرویس apache را مجددا راه اندازی کنید.

$ sudo systemctl restart apache2

۳.۱. PHP را تست کنید

مرورگر وب خود را باز کنید و به آدرس http://IP-address/info.php بروید.

اطلاعات php مانند نسخه، API سرور و جزئیات تمام پلاگین های فعال شده php را مشاهده خواهید کرد.

PHP test page

معمولاً وقتی کاربر از وب سرور درخواست دایرکتوری می کند، آپاچی ابتدا به دنبال فایلی با نام index.html می گردد. اگر می‌خواهید آپاچی را تغییر دهید تا فایل‌ index.php را به اولویت بالاتری بررسی کند. مطابق شکل زیر به موقعیت اول فایل dir.conf بروید.

$ sudo vi /etc/apache2/mods-enabled/dir.conf

در اینجا محتویات فایل فوق آمده است.

<IfModule mod_dir.c>
DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm
</IfModule>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

index.php را در فایل به قسمت اول منتقل کنید . پس از ایجاد تغییرات، فایل dir.conf شما مانند زیر خواهد بود.

<IfModule mod_dir.c>
DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm
</IfModule>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

کلید ESC را فشار دهید و تایپ کنید :wqتا فایل ذخیره و بسته شود. برای اعمال تغییرات، سرویس Apache را مجددا راه اندازی کنید.

$ sudo systemctl restart apache2

۳.۲. ماژول های PHP را نصب کنید

برای بهبود عملکرد PHP، می توانید ماژول های اضافی PHP را نصب کنید.

برای فهرست کردن ماژول‌های PHP موجود، اجرا کنید:

$ sudo apt-cache search php- | less

خروجی نمونه:

ماژول های PHP موجود در اوبونتو را فهرست کنید

از کلیدهای جهت نما برای بررسی نتیجه استفاده کنید. برای خروج، q تایپ کنید.

برای یافتن جزئیات هر ماژول php خاص، به عنوان مثال php-gd ، اجرا کنید:

$ sudo apt-cache show php-gd

برای نصب یک ماژول php اجرا کنید:

$ sudo apt install php-gd

فراموش نکنید که پس از نصب یک ماژول php، سرویس Apache را مجددا راه اندازی کنید. برای بررسی اینکه آیا ماژول بارگذاری شده است یا نه، فایل info.php را در مرورگر خود باز کنید و بررسی کنید که آیا وجود دارد یا خیر.

تبریک می گویم! همانطور که می بینید، نصب apache، mysql، php (پشته LAMP) در اوبونتو 20.04 LTS بسیار آسان است. اکنون می توانید میزبانی وب سایت های خود را با استفاده از پشته LAMP شروع کنید.

مهدی منصوری

من مهدی منصوری و کارشناس حوزه نرم افزار و امنیت اطلاعات هستم. کارشناسی ارشد خودم را در رشته امنیت اطلاعات از دانشگاه مالک اشتر تهران گرفتم. هم اکنون در زمینه DevOPS مشغول هستم. و در زمان های ممکن در این سایت و چند سایت دیگه مطلب می گذارم

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

مهدی منصوری

من مهدی منصوری و کارشناس حوزه نرم افزار و امنیت اطلاعات هستم. کارشناسی ارشد خودم را در رشته امنیت اطلاعات از دانشگاه مالک اشتر تهران گرفتم.
هم اکنون در زمینه DevOPS مشغول هستم. و در زمان های ممکن در این سایت و چند سایت دیگه مطلب می گذارم

افزودن نظر

برای ارسال نظرات خود اینجا را کلیک کنید