پشته LAMP (شامل Linux، Apache، MariaDB و PHP) پایه کلاسیک وردپرس، لاراول و بیشتر برنامههای PHP است. در این راهنما آن را گامبهگام روی یک VPS Linux Infrawire تازه با Ubuntu 24.04 راهاندازی میکنید، همراه با یک ویرچوال هاست جداگانه و فایروالی که فقط پورتهای لازم را باز میگذارد.
📋 پیشنیازها
- یک VPS از نوع KVM با Ubuntu 24.04 (آیپی و رمز عبور root در بخش کاربری شما موجود است)
- دسترسی SSH با root یا کاربری که دسترسی
sudoدارد - دامنه
example.comکه رکوردهای A (و AAAA) آن بهVPS_IPاشاره میکنند
دستورهای زیر فرض میکنند که root هستید. در غیر این صورت sudo را در ابتدای آنها بگذارید.
1. بهروزرسانی سیستم
Bashapt update && apt upgrade -y
2. نصب Apache
Bashapt install -y apache2 systemctl enable --now apache2 apache2 -v
سرویس بلافاصله اجرا میشود و با هر بار بوت خودکار شروع به کار میکند.
3. نصب MariaDB
MariaDB در مخازن اوبونتو موجود است و بدون تغییر جایگزین MySQL میشود. اگر MySQL اوراکل را ترجیح میدهید، بهجای آن mysql-server را نصب کنید، اما هرگز هر دو را روی یک ماشین نصب نکنید.
Bashapt install -y mariadb-server systemctl enable --now mariadb mysql_secure_installation
در ویزارد، احراز هویت unix_socket برای root را نگه دارید، در صورت پرسش رمز قوی تعیین کنید، کاربران ناشناس را حذف کنید، ورود از راه دور root را ممنوع کنید و پایگاهداده آزمایشی را پاک کنید. سپس یک پایگاهداده و یک کاربر اختصاصی برای برنامهتان بسازید:
Bashmariadb
SQL1CREATE DATABASE appdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; 2CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'STRONG_PASSWORD'; 3GRANT ALL PRIVILEGES ON appdb.* TO 'appuser'@'localhost'; 4FLUSH PRIVILEGES; 5EXIT;
4. نصب PHP 8.3
Ubuntu 24.04 نسخه PHP 8.3 را در مخازن پیشفرض خود دارد، بنابراین به PPA اضافی نیازی نیست.
Bashapt install -y php libapache2-mod-php php-mysql php-cli php-curl php-gd php-mbstring php-xml php-zip php-intl php -v
بسته libapache2-mod-php بهطور خودکار Apache را روی MPM از نوع prefork میبرد و ماژول PHP را بارگذاری میکند.
5. ساخت ویرچوال هاست و فعالسازی mod_rewrite
Bashmkdir -p /var/www/example.com/public_html chown -R www-data:www-data /var/www/example.com nano /etc/apache2/sites-available/example.com.conf
Apache1<VirtualHost *:80> 2 ServerName example.com 3 ServerAlias www.example.com 4 DocumentRoot /var/www/example.com/public_html 5 6 <Directory /var/www/example.com/public_html> 7 AllowOverride All 8 Require all granted 9 </Directory> 10 11 ErrorLog ${APACHE_LOG_DIR}/example.com-error.log 12 CustomLog ${APACHE_LOG_DIR}/example.com-access.log combined 13</VirtualHost>
گزینه AllowOverride All فایلهای .htaccess را فعال میکند؛ نشانیهای تمیز در وردپرس یا لاراول به آنها وابستهاند. اکنون ماژول و سایت را فعال و صفحه پیشفرض را غیرفعال کنید:
Basha2enmod rewrite a2ensite example.com.conf a2dissite 000-default.conf apache2ctl configtest systemctl reload apache2
پیش از بارگذاری مجدد، خروجی configtest باید Syntax OK باشد.
6. تنظیم فایروال
ابتدا SSH را مجاز کنید؛ وگرنه با فعال شدن فایروال از سرور بیرون میمانید.
Bashufw allow OpenSSH ufw allow 'Apache Full' ufw enable ufw status
پروفایل Apache Full پورتهای 80 و 443 را باز میکند. پورت 3306 را باز نکنید: MariaDB فقط باید بهصورت محلی گوش دهد.
7. تست PHP و حذف فایل آزمایشی
Bashecho '<?php phpinfo();' > /var/www/example.com/public_html/info.php curl -sI http://example.com/info.php | head -n 1
باید HTTP/1.1 200 OK دریافت کنید. برای دیدن صفحه تنظیمات PHP، آدرس http://example.com/info.php را در مرورگر باز کنید. صفحه phpinfo() نسخهها، مسیرها و ماژولها را فاش میکند، پس بلافاصله پاکش کنید:
Bashrm /var/www/example.com/public_html/info.php
سایر اجزا را هم بررسی کنید:
Bashapache2ctl -M | grep -E 'rewrite|php' php -m | grep -E 'mysqli|pdo_mysql' systemctl is-active apache2 mariadb
🛠️ عیبیابی
هنوز صفحه پیشفرض Apache نمایش داده میشود. سایت پیشفرض هنوز فعال است یا DNS هنوز منتشر نشده است. دستور a2dissite 000-default.conf را اجرا کنید، Apache را دوباره بارگذاری کنید و با curl -I -H 'Host: example.com' http://VPS_IP/ آزمایش کنید.
خطای 403 Forbidden. بررسی کنید که دایرکتوری Require all granted دارد، کاربر www-data میتواند فایلها را بخواند (ls -ld /var/www/example.com/public_html) و لاگ /var/log/apache2/example.com-error.log را ببینید.
مرورگر فایل PHP را بهجای اجرا دانلود میکند. ماژول PHP بارگذاری نشده است. دستور apache2ctl -M | grep php و سپس systemctl restart apache2 را اجرا کنید. اگر خروجی نبود، libapache2-mod-php را دوباره نصب کنید.
قوانین بازنویسی نادیده گرفته میشوند (خطای 404 در نشانیهای تمیز). مطمئن شوید a2enmod rewrite اجرا شده و بلوک <Directory> شما شامل AllowOverride All است.
🎉 پشته LAMP شما آماده است: Apache، MariaDB و PHP 8.3 برای میزبانی اولین سایت شما مهیا هستند.