آموزش سرور

نصب LAMP (Apache، MySQL، PHP) روی اوبونتو ۲۴.۰۴

تهیه: کلودیفای (نگارش با کمک هوش مصنوعی) · انتشار: · زمان مطالعه: ۷ دقیقه

root@server: ~$ sudo a2ensite example.com$ sudo a2enmod rewrite$ sudo apache2ctl configtestSyntax OK$ sudo systemctl reload apache2LAMPApacheMySQLآموزش سرورنصب LAMP (Apache،MySQL، PHP) رویاوبونتو ۲۴.۰۴مجلهٔ کلودیفایclodify.net/blog
پاسخ کوتاه

برای راه‌اندازی LAMP روی اوبونتو ۲۴.۰۴، ابتدا سیستم را به‌روز کنید، Apache را نصب و پورت‌های ۸۰ و ۴۴۳ را در فایروال باز کنید، سپس MySQL یا MariaDB را نصب و با mysql_secure_installation ایمن کنید و در نهایت PHP همراه ماژول‌های رایج را نصب کنید. برای هر سایت یک Virtual Host جداگانه بسازید، با یک فایل info.php موقت درستی اجرای PHP را تست و بلافاصله حذفش کنید و با Certbot گواهی SSL رایگان بگیرید.

LAMP چیست و چه زمانی انتخاب مناسبی است؟

LAMP مخفف چهار جزء است: Linux به‌عنوان سیستم‌عامل، Apache به‌عنوان وب‌سرور، MySQL (یا جایگزین سازگارش MariaDB) به‌عنوان دیتابیس و PHP به‌عنوان زبان سمت سرور. این ترکیب سال‌هاست ستون اصلی میلیون‌ها سایت است و بسیاری از نرم‌افزارهای محبوب مثل وردپرس، جوملا، مودل و بسیاری از اسکریپت‌های فروشگاهی برای آن طراحی شده‌اند.

رقیب اصلی LAMP، ترکیب LEMP است که در آن Nginx جای Apache را می‌گیرد. Nginx در سرو فایل‌های ایستا و مدیریت اتصال‌های هم‌زمان زیاد معمولاً بهینه‌تر است، اما Apache یک مزیت مهم دارد: پشتیبانی از فایل‌های htaccess. بسیاری از اسکریپت‌های PHP قواعد بازنویسی آدرس و تنظیمات امنیتی خود را در این فایل‌ها می‌نویسند و روی Apache بدون تغییر کار می‌کنند. اگر نرم‌افزار شما به htaccess وابسته است یا از هاست اشتراکی cPanel مهاجرت می‌کنید، LAMP انتخاب کم‌دردسرتری است. برای نصب LEMP، مقالهٔ نصب وردپرس روی LEMP را ببینید.

لایه‌های پشتهٔ LAMP
PHPاجرای کد سایت و ارتباط با دیتابیس
MySQL یا MariaDBذخیرهٔ داده‌ها
Apacheدریافت درخواست HTTP و پاسخ به مرورگر
Linux (Ubuntu 24.04)سیستم‌عامل و مدیریت منابع
شکل ۱ هر لایه روی لایهٔ زیرین تکیه دارد.

گام اول: آماده‌سازی سرور

پیش از نصب، مطمئن شوید با یک کاربر sudo وارد سرور شده‌اید و سرور اصول اولیهٔ امنیت را دارد. اگر سرور تازه است، چک‌لیست امنیت سرور جدید را مرور کنید. سپس فهرست بسته‌ها را به‌روز کنید:

sudo apt update && sudo apt upgrade -y

اگر سرور در ایران است و دریافت بسته‌ها کند یا ناموفق است، استفاده از آینهٔ داخلی مخازن اوبونتو مشکل را حل می‌کند. نکات مربوط به آینه‌ها در مقالهٔ آینهٔ npm و pip برای سرور ایران آمده است.

گام دوم: نصب Apache و باز کردن فایروال

Apache را با یک دستور نصب کنید و مطمئن شوید سرویس فعال است:

sudo apt install -y apache2
sudo systemctl enable --now apache2
sudo ufw allow "Apache Full"

پروفایل Apache Full هر دو پورت ۸۰ و ۴۴۳ را باز می‌کند. اگر UFW روی سرور فعال نیست، پیش از فعال کردن آن حتماً پورت SSH را مجاز کنید تا دسترسی خودتان قطع نشود؛ جزئیات در آموزش فایروال UFW آمده است. حالا IP سرور را در مرورگر باز کنید. اگر صفحهٔ پیش‌فرض اوبونتو برای Apache را دیدید، وب‌سرور آماده است.

گام سوم: نصب و ایمن‌سازی دیتابیس

می‌توانید MySQL یا MariaDB را نصب کنید. هر دو برای اغلب نرم‌افزارهای PHP سازگارند. در این آموزش MySQL را نصب می‌کنیم:

sudo apt install -y mysql-server
sudo mysql_secure_installation

اسکریپت ایمن‌سازی چند سؤال می‌پرسد. توصیه‌ها: سیاست رمز قوی را فعال کنید، کاربران ناشناس را حذف کنید، ورود root از راه دور را غیرفعال کنید و دیتابیس آزمایشی را پاک کنید. سپس برای هر سایت یک دیتابیس و کاربر جداگانه بسازید و هرگز برنامه را با کاربر root به دیتابیس وصل نکنید:

sudo mysql -e "CREATE DATABASE site1 CHARACTER SET utf8mb4;"
sudo mysql -e "CREATE USER 'site1'@'localhost' IDENTIFIED BY 'StrongPass!';"
sudo mysql -e "GRANT ALL ON site1.* TO 'site1'@'localhost';"

برای بکاپ‌گیری خودکار از دیتابیس، مقالهٔ نصب و بکاپ دیتابیس روش کامل را توضیح می‌دهد.

مراحل نصب LAMP
  1. به‌روزرسانی سیستم

    apt update و upgrade

  2. نصب Apache

    و باز کردن پورت‌های ۸۰ و ۴۴۳

  3. نصب و ایمن‌سازی MySQL

    mysql_secure_installation و کاربر جداگانه

  4. نصب PHP

    همراه mbstring، gd، xml و intl

  5. Virtual Host و SSL

    پیکربندی دامنه و Certbot

شکل ۲ ترتیب نصب مهم است؛ PHP آخر نصب می‌شود تا با Apache یکپارچه شود.

گام چهارم: نصب PHP و ماژول‌های رایج

اوبونتو ۲۴.۰۴ به‌طور پیش‌فرض PHP 8.3 را ارائه می‌کند. PHP را همراه ماژول اتصال به Apache و افزونه‌های پرکاربرد نصب کنید:

sudo apt install -y php libapache2-mod-php php-mysql php-curl php-gd \
  php-mbstring php-xml php-zip php-intl
php -v

افزونهٔ mbstring برای پشتیبانی درست از متن فارسی و یونیکد ضروری است. افزونه‌های gd و intl هم برای پردازش تصویر و قالب‌بندی بین‌المللی در بسیاری از نرم‌افزارها لازم‌اند. پس از نصب، Apache را ری‌استارت کنید.

گام پنجم: ساخت Virtual Host برای دامنه

به‌جای قرار دادن فایل‌ها در مسیر پیش‌فرض، برای هر سایت یک پوشه و یک Virtual Host جداگانه بسازید. فرض کنید دامنهٔ شما example.com است:

sudo mkdir -p /var/www/example.com
sudo chown -R $USER:www-data /var/www/example.com
sudo nano /etc/apache2/sites-available/example.com.conf

محتوای فایل پیکربندی:

<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example.com
    <Directory /var/www/example.com>
        AllowOverride All
    </Directory>
</VirtualHost>

گزینهٔ AllowOverride All اجازه می‌دهد فایل‌های htaccess کار کنند. سپس سایت را فعال کنید، ماژول rewrite را روشن کنید و پیکربندی را تست کنید:

sudo a2ensite example.com && sudo a2enmod rewrite
sudo apache2ctl configtest && sudo systemctl reload apache2

فراموش نکنید که رکورد A دامنه باید به IP سرور اشاره کند. اگر با رکوردهای DNS آشنا نیستید، راهنمای رکوردهای DNS را ببینید.

گام ششم: تست PHP و فعال‌سازی SSL

یک فایل موقت بسازید تا مطمئن شوید PHP از طریق Apache اجرا می‌شود:

echo "<?php phpinfo();" > /var/www/example.com/info.php

نشانی example.com/info.php را باز کنید. اگر صفحهٔ اطلاعات PHP نمایش داده شد، همه‌چیز درست است. این فایل اطلاعات حساسی از سرور را نشان می‌دهد؛ بلافاصله بعد از تست آن را پاک کنید.

برای HTTPS، Certbot را با افزونهٔ Apache نصب و اجرا کنید:

sudo apt install -y certbot python3-certbot-apache
sudo certbot --apache -d example.com -d www.example.com

Certbot گواهی را می‌گیرد، Virtual Host مربوط به پورت ۴۴۳ را می‌سازد و تمدید خودکار را تنظیم می‌کند. منطق کار مشابه نسخهٔ Nginx است که در آموزش SSL رایگان با Let's Encrypt توضیح داده شده است. اگر تمدید با مشکل مواجه شد، رفع خطای تمدید Let's Encrypt را ببینید.

تست پیکربندی Apache
root@server: ~
$ sudo a2ensite example.com$ sudo a2enmod rewrite$ sudo apache2ctl configtestSyntax OK$ sudo systemctl reload apache2$ 
شکل ۳ پیش از هر reload، configtest خطاهای پیکربندی را نشان می‌دهد.

نکات امنیتی و کارایی پس از نصب

چند تنظیم ساده امنیت و کارایی LAMP را به‌طور محسوس بهتر می‌کند. نمایش نسخهٔ Apache را در هدرها غیرفعال کنید؛ در فایل security.conf مقدار ServerTokens را Prod و ServerSignature را Off بگذارید. فهرست شدن محتوای پوشه‌ها را با حذف گزینهٔ Indexes غیرفعال کنید. در php.ini مقدار display_errors را روی سرور عملیاتی خاموش نگه دارید تا خطاها مسیرهای داخلی را به بازدیدکننده نشان ندهند.

برای کارایی، OPcache را که به‌طور پیش‌فرض با PHP نصب می‌شود فعال نگه دارید و اگر ترافیک بالایی دارید، به‌جای mod_php از PHP-FPM همراه با MPM event استفاده کنید. این ترکیب مصرف رم را در بار بالا کمتر می‌کند. همچنین مصرف منابع سرور را زیر نظر داشته باشید؛ اگر Apache رم زیادی مصرف کرد، رفع مشکل کمبود حافظهٔ سرور را بخوانید. برای انتخاب پلن مناسب این پشته هم سرور مجازی ایران و سرورهای خارج کلودیفای گزینه‌های متنوعی دارند.

رفع خطاهای رایج پس از نصب

اگر پس از راه‌اندازی، مرورگر خطای Forbidden نشان داد، معمولاً مشکل از مالکیت یا سطح دسترسی پوشهٔ سایت است. Apache با کاربر www-data اجرا می‌شود و باید بتواند فایل‌ها را بخواند. پوشه‌ها را با سطح دسترسی ۷۵۵ و فایل‌ها را با ۶۴۴ تنظیم کنید و فقط پوشه‌هایی را که برنامه باید در آن‌ها بنویسد، مثل پوشهٔ آپلود، به مالکیت www-data بدهید. دادن دسترسی ۷۷۷ به کل سایت راه‌حل نیست و سرور را در برابر نفوذ آسیب‌پذیر می‌کند.

اگر صفحهٔ سفید یا خطای 500 دیدید، اولین جایی که باید نگاه کنید لاگ خطای Apache در مسیر var/log/apache2/error.log است. این فایل معمولاً دقیقاً می‌گوید کدام فایل PHP و کدام خط مشکل دارد. خطاهای رایج شامل نبود یک افزونهٔ PHP، اشتباه در اطلاعات اتصال به دیتابیس یا قاعدهٔ نادرست در فایل htaccess است. اگر برنامه نمی‌تواند به دیتابیس وصل شود، با دستور mysql و همان نام کاربری و رمز، اتصال را دستی امتحان کنید تا بفهمید مشکل از دیتابیس است یا از تنظیمات برنامه.

اگر Apache پس از تغییر پیکربندی بالا نیامد، دستور systemctl status apache2 و سپس journalctl برای همین سرویس، علت دقیق را نشان می‌دهد. یکی از دلایل رایج، اشغال بودن پورت ۸۰ توسط سرویس دیگری مثل Nginx است؛ دو وب‌سرور نمی‌توانند هم‌زمان روی یک پورت گوش دهند. با دستور ss و گزینه‌های tlnp می‌توانید ببینید کدام برنامه پورت را گرفته است.

برای انتخاب پلن مناسب سایت و برآورد هزینهٔ ماهانه پیش از نصب LAMP، صفحهٔ میزبانی سایت روی سرور مجازی را ببینید.

سؤالات متداول

MySQL بهتر است یا MariaDB؟

برای اغلب سایت‌های PHP تفاوت محسوسی ندارند و هر دو سازگارند. MariaDB در مخازن دبیان و اوبونتو جاافتاده است و MySQL برای برخی نرم‌افزارهای جدیدتر سازگاری کامل‌تری دارد.

آیا می‌توانم چند سایت را روی یک LAMP اجرا کنم؟

بله. برای هر سایت یک پوشه، یک Virtual Host و یک دیتابیس و کاربر جداگانه بسازید تا سایت‌ها از هم مستقل بمانند.

چرا صفحهٔ PHP به‌جای اجرا دانلود می‌شود؟

معمولاً ماژول PHP برای Apache نصب یا فعال نیست. بستهٔ libapache2-mod-php را نصب و Apache را ری‌استارت کنید.

LAMP یا LEMP برای وردپرس؟

هر دو به‌خوبی کار می‌کنند. LAMP با htaccess سازگاری ساده‌تری دارد و LEMP در ترافیک بالا معمولاً منابع کمتری مصرف می‌کند.

آماده‌اید؟ سرورتان را بسازید.

از ۱٬۲۰۰ تومان در ساعت · پرداخت ریالی

سرورتان را همین حالا بسازید.

ساعتی بپردازید. هر وقت خواستید حذف کنید.