ติดตั้ง Apache และ PHP (LAMP) บน Ubuntu
LAMP คือชุดซอฟต์แวร์สำหรับรันเว็บไซต์ที่ประกอบด้วย Linux, Apache, MySQL หรือ MariaDB และ PHP เป็นชุดที่เว็บ PHP ส่วนใหญ่ เช่น WordPress, Joomla หรือระบบที่เขียนด้วย Laravel รองรับโดยตรง ข้อดีของ Apache คือรองรับไฟล์ .htaccess ทำให้ปลั๊กอินและระบบสำเร็จรูปจำนวนมากทำงานได้ทันทีโดยไม่ต้องแปลงกฎ Rewrite
บทความนี้ติดตั้ง LAMP บน Ubuntu 22.04 หรือ 24.04 จากแพ็กเกจมาตรฐานของ Ubuntu สร้าง VirtualHost สำหรับโดเมนของคุณ และทดสอบว่า PHP เชื่อมต่อฐานข้อมูลได้ หากคุณต้องการใช้ Nginx แทน Apache ให้ดู ติดตั้ง Nginx, PHP-FPM และ MariaDB (LEMP) บน Ubuntu
สิ่งที่ต้องเตรียม
- เซิร์ฟเวอร์ Ubuntu 22.04 หรือ 24.04 ที่ติดตั้งใหม่ และผู้ใช้ที่มีสิทธิ์
sudo - โดเมนที่ชี้ A Record มายัง IP ของเซิร์ฟเวอร์แล้ว (ดู ชี้โดเมนไปยังเซิร์ฟเวอร์ด้วย A Record หรือเปลี่ยน Name Server) ในบทความนี้ใช้
example.comและ IP203.0.113.10เป็นตัวอย่าง - ยังไม่มี Nginx หรือเว็บเซิร์ฟเวอร์อื่นใช้พอร์ต 80 และ 443 อยู่
เวอร์ชันที่จะได้จากแพ็กเกจมาตรฐาน:
| ซอฟต์แวร์ | Ubuntu 22.04 | Ubuntu 24.04 |
|---|---|---|
| Apache | 2.4.52 | 2.4.58 |
| PHP | 8.1 | 8.3 |
| MariaDB | 10.6 | 10.11 |
เลขรุ่นย่อยจะขยับขึ้นตามการอัปเดตความปลอดภัย หากแอปของคุณต้องการ PHP รุ่นอื่น ดู ติดตั้ง PHP หลายเวอร์ชันบน Ubuntu
ขั้นตอนที่ 1: อัปเดตระบบและติดตั้ง Apache
sudo apt update
sudo apt upgrade -y
sudo apt install -y apache2
Apache จะเริ่มทำงานและตั้งให้เริ่มอัตโนมัติเมื่อบูตทันที ตรวจสถานะด้วย:
systemctl status apache2 --no-pager
ควรเห็น Active: active (running)
ขั้นตอนที่ 2: เปิด Firewall
ถ้าใช้ UFW แพ็กเกจ Apache จะเพิ่ม Application Profile ให้สามแบบ คือ Apache (พอร์ต 80), Apache Secure (443) และ Apache Full (80 และ 443) ให้เปิดแบบ Full:
sudo ufw allow OpenSSH
sudo ufw allow 'Apache Full'
sudo ufw status
ต้องแน่ใจว่าอนุญาต SSH แล้วก่อนเปิดใช้ UFW ครั้งแรก ไม่เช่นนั้นจะถูกตัดออกจากเซิร์ฟเวอร์ หากยังไม่เคยเปิดใช้ UFW ให้อ่าน ตั้งค่า Firewall ด้วย UFW บน Ubuntu ก่อน และหากเซิร์ฟเวอร์มี Security Group หรือ Firewall ภายนอกจากฝั่งผู้ให้บริการ ให้เปิดพอร์ต 80 และ 443 เพิ่มด้วย
ทดสอบโดยเปิด http://203.0.113.10 ในเบราว์เซอร์ ควรเห็นหน้า "Apache2 Default Page"
ขั้นตอนที่ 3: ติดตั้ง MariaDB
sudo apt install -y mariadb-server
sudo mariadb-secure-installation
คำถามใน mariadb-secure-installation ที่แนะนำ:
- Enter current password for root: กด Enter (ยังไม่มีรหัสผ่าน)
- Switch to unix_socket authentication: ตอบ
nได้ เพราะบน Ubuntu root ของ MariaDB ใช้ unix_socket อยู่แล้ว หมายถึงเข้าได้ด้วยsudo mariadbโดยไม่ต้องใช้รหัสผ่าน - Change the root password: ตอบ
nหากต้องการคงการเข้าผ่านsudoอย่างเดียว - Remove anonymous users, Disallow root login remotely, Remove test database, Reload privilege tables: ตอบ
Yทั้งหมด
จากนั้นสร้างฐานข้อมูลและผู้ใช้สำหรับเว็บไซต์ โดยห้ามให้เว็บใช้ผู้ใช้ root ของฐานข้อมูล วิธีสร้างและกำหนดสิทธิ์อธิบายไว้ใน สร้างฐานข้อมูลและผู้ใช้ MySQL/MariaDB พร้อมกำหนดสิทธิ์ ตัวอย่างสั้น ๆ:
sudo mariadb -e "CREATE DATABASE exampledb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'exampleuser'@'localhost' IDENTIFIED BY 'ตั้งรหัสผ่านที่แข็งแรง';
GRANT ALL PRIVILEGES ON exampledb.* TO 'exampleuser'@'localhost';"
ขั้นตอนที่ 4: ติดตั้ง PHP และส่วนขยายที่ใช้บ่อย
sudo apt install -y php libapache2-mod-php php-mysql php-cli php-curl \
php-gd php-mbstring php-xml php-zip php-intl php-bcmath
แพ็กเกจ libapache2-mod-php ทำให้ Apache รัน PHP ภายในตัวเอง (mod_php) ซึ่งตั้งค่าง่ายที่สุดสำหรับเว็บเดียว ตรวจเวอร์ชันด้วย:
php -v
ผลลัพธ์บน Ubuntu 24.04 จะขึ้นต้นด้วย PHP 8.3.x (cli) ส่วน 22.04 จะเป็น PHP 8.1.x
หมายเหตุ: mod_php ต้องใช้ Apache MPM แบบ prefork ซึ่งแพ็กเกจจะสลับให้อัตโนมัติ หากเซิร์ฟเวอร์ต้องรองรับผู้ใช้พร้อมกันจำนวนมาก หรือต้องการรัน PHP หลายเวอร์ชัน แนะนำให้ใช้ PHP-FPM ร่วมกับ MPM event แทน ซึ่งอธิบายไว้ในบทความ PHP หลายเวอร์ชันที่ลิงก์ไว้ข้างต้น
ขั้นตอนที่ 5: สร้าง VirtualHost สำหรับโดเมน
สร้างโฟลเดอร์เว็บและกำหนดเจ้าของ ในตัวอย่างนี้ให้ผู้ใช้ที่คุณล็อกอินอยู่เป็นเจ้าของไฟล์ และให้กลุ่ม www-data ของ Apache อ่านได้:
sudo mkdir -p /var/www/example.com/public_html
sudo chown -R $USER:www-data /var/www/example.com
sudo chmod 750 /var/www/example.com /var/www/example.com/public_html
เรื่องสิทธิ์ไฟล์อย่างละเอียดดูได้ที่ ทำความเข้าใจสิทธิ์ไฟล์บน Linux ด้วย chmod และ chown
สร้างไฟล์ VirtualHost:
sudo nano /etc/apache2/sites-available/example.com.conf
ใส่เนื้อหา:
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com/public_html
<Directory /var/www/example.com/public_html>
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/example.com-error.log
CustomLog ${APACHE_LOG_DIR}/example.com-access.log combined
</VirtualHost>
AllowOverride All ทำให้ไฟล์ .htaccess ทำงาน ซึ่ง WordPress และระบบอื่นต้องใช้สำหรับ Permalink ส่วน -Indexes ปิดการแสดงรายชื่อไฟล์เมื่อโฟลเดอร์ไม่มีไฟล์ index
เปิดใช้ไซต์ใหม่ เปิดโมดูล Rewrite ปิดไซต์ตัวอย่าง แล้วตรวจไวยากรณ์ก่อนโหลดค่าใหม่:
sudo a2ensite example.com.conf
sudo a2enmod rewrite
sudo a2dissite 000-default.conf
sudo apache2ctl configtest
sudo systemctl restart apache2
apache2ctl configtest ต้องตอบ Syntax OK ก่อน reload เสมอ ถ้าไฟล์มีข้อผิดพลาด การ reload จะล้มเหลวและเว็บทุกเว็บในเครื่องอาจหยุดทำงาน ครั้งนี้ใช้ restart เพราะเพิ่งเปิดโมดูลใหม่ ส่วนการแก้ไข VirtualHost ครั้งต่อไปใช้ sudo systemctl reload apache2 ก็เพียงพอ
ขั้นตอนที่ 6: ทดสอบ PHP และการเชื่อมต่อฐานข้อมูล
สร้างไฟล์ทดสอบชั่วคราว:
cat > /var/www/example.com/public_html/dbtest.php <<'EOF'
<?php
mysqli_report(MYSQLI_REPORT_OFF);
echo 'PHP ' . PHP_VERSION . "<br>";
$db = new mysqli('localhost', 'exampleuser', 'รหัสผ่านที่ตั้งไว้', 'exampledb');
echo $db->connect_errno ? 'DB error: ' . $db->connect_error : 'DB connected';
EOF
เปิด http://example.com/dbtest.php ควรเห็นเวอร์ชัน PHP และข้อความ DB connected เมื่อทดสอบเสร็จ ให้ลบไฟล์นี้ทันที เพราะมีรหัสผ่านฐานข้อมูลอยู่:
rm /var/www/example.com/public_html/dbtest.php
ขั้นตอนที่ 7: ติดตั้ง SSL
เมื่อโดเมนชี้มาที่เซิร์ฟเวอร์แล้ว ติดตั้ง SSL ฟรีจาก Let's Encrypt ด้วย Certbot ปลั๊กอินสำหรับ Apache:
sudo apt install -y certbot python3-certbot-apache
sudo certbot --apache -d example.com -d www.example.com
Certbot จะสร้างไฟล์ example.com-le-ssl.conf สำหรับพอร์ต 443 และเพิ่มการ Redirect จาก HTTP ไป HTTPS ให้ การต่ออายุทำงานอัตโนมัติผ่าน systemd timer ทดสอบได้ด้วย sudo certbot renew --dry-run หลักการเดียวกับบทความ ติดตั้ง SSL ฟรีจาก Let's Encrypt ด้วย Certbot บน Nginx ต่างกันเพียงปลั๊กอินที่ใช้
ตรวจสอบผลลัพธ์
sudo apache2ctl -Sแสดงรายการ VirtualHost และควรเห็นexample.comทั้งพอร์ต 80 และ 443curl -I https://example.comควรได้HTTP/1.1 200 OKหรือ403ถ้าโฟลเดอร์ยังว่างsudo ss -tlnpควรเห็น apache2 ที่พอร์ต 80 และ 443 และ mariadbd ที่127.0.0.1:3306เท่านั้น
ปัญหาที่พบบ่อย
เปิดเว็บแล้วเห็นโค้ด PHP หรือเบราว์เซอร์ดาวน์โหลดไฟล์ .php
แปลว่า Apache ไม่ได้ส่งไฟล์ให้ PHP ประมวลผล ตรวจว่าติดตั้ง libapache2-mod-php แล้ว และโมดูลเปิดอยู่ด้วย apache2ctl -M | grep php ถ้าไม่เห็น ให้รัน sudo a2enmod php8.3 (เปลี่ยนเลขตามเวอร์ชันของคุณ) แล้ว restart Apache
Apache เริ่มไม่ได้ แจ้ง Address already in use
มีโปรแกรมอื่น มักเป็น Nginx ใช้พอร์ต 80 อยู่ ตรวจด้วย sudo ss -ltnp 'sport = :80' ดูวิธีเพิ่มเติมที่ ตรวจสอบพอร์ตที่เปิดอยู่บน Linux ด้วย ss และ lsof
Permalink ของ WordPress เปิดแล้วได้ 404
มักเกิดจากไม่ได้ตั้ง AllowOverride All หรือยังไม่ได้เปิด a2enmod rewrite ดูรายละเอียดที่ แก้ปัญหาหน้าเว็บ 404 หลังตั้ง Permalink ใน WordPress
ได้ 403 Forbidden
Apache อ่านโฟลเดอร์ไม่ได้ ตรวจว่าทุกโฟลเดอร์ในเส้นทางมีสิทธิ์ให้ www-data เข้าถึง (อย่างน้อย x สำหรับกลุ่มหรือผู้อื่น) ด้วย namei -l /var/www/example.com/public_html และดูสาเหตุจริงใน /var/log/apache2/example.com-error.log
หากติดตั้งแล้วเว็บยังไม่ทำงานตามที่ควร ติดต่อทีมซัพพอร์ต THAI DATA CLOUD ได้ที่ https://thaidata.cloud/contact/
- Categories:
- Cloud
- Tags:
- Cloud
- Cloud Server
Related Posts
หมวดหมู่ที่น่าสนใจ
- Account Settings
- AD Server
- AI
- Alibaba Cloud
- Anti-Spam Gateway
- AWS Amazon Web Services
- Campaign
- CentOS/AlmaLinux
- Cloud
- Cloud Backup
- Cloud Communication
- Cloud Migration
- Cloud Security
- Cloud Server Management
- Cloud Solution
- Cloud Solution for Government
- Cloud Solutions by Industry
- Cloud Storage
- Cloud VPS App Plus +
- Cloud VPS DirectAdmin
- Cloud VPS Plesk
- CSR
- Cyber Security
- Cybersecurity
- Data Sovereignty
- Database Server
- DDoS
- Digital Tranformation
- Digital Transformation
- Direct Mail
- Directadmin
- Domainname
- Ecommerce
- ERP
- Generative AI
- Getting Started
- Google Cloud
- Google G Suite
- Huawei Cloud
- IT News
- Linux Server
- Managed Cloud Services
- Managed Service Provider
- Manual
- Microsoft
- Microsoft 365
- Microsoft Azure
- News
- On-premise
- Private Mail Server
- Promotion
- Recommend Solution (Enterprise)
- Server
- Sovereign Cloud
- THAI DATA CLOUD Platform
- Ubuntu
- Ubuntu
- Uncategorized
- VMware
- VPS Server
- Web Design
- Web Hosting
- Web Hosting (DirectAdmin)
- Web Hosting (Plesk)
- Web Technologies
- Windows Server
- Wordpress
- Zimbra
- เรื่องราวความประทับใจ
- โซลูชันสำหรับธุรกิจการผลิตและยานยนต์
- โซลูชันสำหรับธุรกิจการศึกษา
- โซลูชันสำหรับธุรกิจการเงิน
- โซลูชันสำหรับธุรกิจขนส่งและกระจายสินค้า
- โซลูชันสำหรับธุรกิจค้าปลีก
- โซลูชันสำหรับธุรกิจท่องเที่ยว
- โซลูชันสำหรับธุรกิจบริการสุขภาพและโรงพยาบาล
- โซลูชันสำหรับธุรกิจประกันภัย
- โซลูชันสำหรับธุรกิจพลังงานและสาธารณูปโภค
- โซลูชันสำหรับธุรกิจสื่อสารมวลชนและเอ็นเตอร์เทนเมนท์
- โซลูชันสำหรับธุรกิจอสังหาริมทรัพย์
- โซลูชันสำหรับธุรกิจเทคโนโลยี


