본문으로 건너뛰기

เนื้อหาภาษาไทย / 태국어 콘텐츠

시스템 가이드 검수 완료된 콘텐츠

การ Deploy PHP Application

บทความนี้กล่าวถึงขั้นตอนการ Deploy PHP application ขึ้น Production Server ซึ่งครอบคลุมตั้งแต่การตั้งค่า Web Server, PHP Interpreter, และ Database Server ไปจนถึง...

การ Deploy PHP Application

ยินดีด้วย! คุณได้เรียนรู้พื้นฐานการพัฒนา PHP มาพอสมควรแล้ว ในบทความนี้ เราจะมาพูดถึงขั้นตอนสำคัญสุดท้ายก่อนที่ Application ของคุณจะพร้อมใช้งานจริง นั่นคือ การ Deploy หรือการนำ Application ของคุณขึ้นไปทำงานบน Production Server

การ Deploy อาจดูเหมือนเป็นเรื่องยาก แต่ด้วยเครื่องมือและแนวทางปฏิบัติที่ดี เราสามารถทำให้กระบวนการนี้ง่ายและปลอดภัยได้ บทความนี้จะครอบคลุมเรื่อง Server Configuration, Deployment Strategies และ Continuous Integration เพื่อให้คุณมีความเข้าใจพื้นฐานในการ Deploy PHP Application อย่างมีประสิทธิภาพ

Server Configuration

ก่อนที่เราจะเริ่ม Deploy Application ของเรา เราต้องเตรียม Server ให้พร้อมเสียก่อน ซึ่งหมายถึงการติดตั้งและตั้งค่า Software ที่จำเป็นต่อการรัน PHP Application ของเรา

Web Server

Web Server คือหัวใจสำคัญที่ทำให้ Application ของเราสามารถเข้าถึงได้จากภายนอก Web Server ที่นิยมใช้กับ PHP ได้แก่:

  • Apache: เป็น Web Server ที่ได้รับความนิยมมาอย่างยาวนาน มี Module ให้ใช้งานมากมาย และมีความยืดหยุ่นสูง
  • Nginx: เป็น Web Server ที่มีประสิทธิภาพสูง เหมาะสำหรับ Application ที่ต้องการ Scalability และ Performance ที่ดี

การเลือก Web Server ขึ้นอยู่กับความต้องการและทรัพยากรที่มี หากคุณไม่แน่ใจ Apache เป็นตัวเลือกที่ดีในการเริ่มต้น เนื่องจากมี Community ที่ใหญ่และ Documentation ที่ครอบคลุม

Trade-off: Apache ใช้งาน Resource มากกว่า Nginx แต่ตั้งค่าได้ง่ายกว่า Nginx ต้องการความเข้าใจใน Configuration ที่มากกว่า แต่ให้ Performance ที่ดีกว่าใน Load สูง

PHP Interpreter

PHP Interpreter คือ Software ที่ใช้ในการรัน PHP Code ของเรา การติดตั้ง PHP Interpreter นั้นง่ายมาก โดยเฉพาะอย่างยิ่งหากคุณใช้ Package Manager ของระบบปฏิบัติการของคุณ

สำหรับ Ubuntu/Debian:

sudo apt update
sudo apt install php php-cli php-fpm php-mysql php-mbstring php-xml

สำหรับ CentOS/RHEL:

sudo yum update
sudo yum install php php-cli php-fpm php-mysqlnd php-mbstring php-xml

คำอธิบาย:

  • php: Core PHP package
  • php-cli: PHP Command Line Interface สำหรับรัน PHP Scripts จาก Terminal
  • php-fpm: PHP FastCGI Process Manager สำหรับรัน PHP Application ร่วมกับ Web Server
  • php-mysql (หรือ php-mysqlnd): PHP Extension สำหรับเชื่อมต่อกับ MySQL Database
  • php-mbstring: PHP Extension สำหรับจัดการ String ที่มี Character Encoding ที่หลากหลาย
  • php-xml: PHP Extension สำหรับจัดการ XML Data

เหตุผล: การติดตั้ง Extension ที่จำเป็นจะช่วยให้ Application ของคุณทำงานได้อย่างถูกต้องและมีประสิทธิภาพ เช่น การขาด php-mysql จะทำให้ Application ไม่สามารถเชื่อมต่อกับ Database ได้

Database Server

หาก Application ของคุณใช้ Database คุณจะต้องติดตั้งและตั้งค่า Database Server ด้วย Database Server ที่นิยมใช้กับ PHP ได้แก่:

  • MySQL/MariaDB: เป็น Relational Database ที่ได้รับความนิยม
  • PostgreSQL: เป็น Relational Database ที่มี Feature ครบครันและมี Performance ที่ดี

การติดตั้ง Database Server นั้นแตกต่างกันไปตามระบบปฏิบัติการและ Database Server ที่คุณเลือก โปรดอ้างอิง Documentation ของ Database Server ที่คุณเลือกเพื่อดูรายละเอียดเพิ่มเติม

Deployment Strategies

เมื่อ Server ของเราพร้อมแล้ว เรามาดู Deployment Strategies ต่างๆ ที่เราสามารถใช้เพื่อนำ Application ของเราขึ้นไปทำงานบน Server

Manual Deployment

Manual Deployment คือการ Copy ไฟล์ Application ของเราไปยัง Server ด้วยตนเอง วิธีนี้ง่ายและรวดเร็วสำหรับการ Deploy ครั้งแรก หรือสำหรับการ Deploy ในสภาพแวดล้อมที่ไม่ซับซ้อน

ข้อดี:

  • ง่ายและรวดเร็ว
  • ไม่ต้องใช้เครื่องมือเพิ่มเติม

ข้อเสีย:

  • เสี่ยงต่อการเกิด Error เนื่องจากต้องทำด้วยตนเอง
  • ไม่เหมาะสำหรับการ Deploy ที่มีความถี่สูง
  • ยากต่อการ Rollback หากเกิดปัญหา

แนวทางปฏิบัติที่ดี:

  • ใช้ Version Control (Git) เพื่อให้แน่ใจว่าคุณ Deploy Version ที่ถูกต้อง
  • Backup Database ก่อนทำการ Deploy
  • ทดสอบ Application หลังจาก Deploy เสร็จสิ้น

Automated Deployment

Automated Deployment คือการใช้เครื่องมือและ Scripts เพื่อทำให้กระบวนการ Deploy เป็นอัตโนมัติ วิธีนี้ช่วยลดความเสี่ยงในการเกิด Error และทำให้การ Deploy รวดเร็วและมีประสิทธิภาพมากขึ้น

เครื่องมือที่นิยมใช้:

  • Capistrano: เป็น Deployment Tool ที่ได้รับความนิยมใน Ruby Community แต่ก็สามารถใช้กับ PHP ได้เช่นกัน
  • Deployer: เป็น Deployment Tool ที่ออกแบบมาสำหรับ PHP โดยเฉพาะ

หลักการทำงาน: เครื่องมือเหล่านี้จะทำการ Clone Repository ของคุณจาก Git, ติดตั้ง Dependencies (เช่น Composer Packages), รัน Database Migrations และ Copy ไฟล์ไปยัง Web Server

ตัวอย่าง Deployer Script:

// deploy.php
namespace Deployer;

require 'recipe/common.php';

// Project name
set('application', 'my_app');

// Project repository
set('repository', 'git@github.com:your-username/your-repo.git');

// Shared files/dirs between deploys
set('shared_files', ['.env']);
set('shared_dirs', ['storage']);

// Writable dirs by web server
set('writable_dirs', ['storage']);

// Hosts
host('your-server.com')
    ->set('deploy_path', '/var/www/my_app');

// Tasks
task('deploy', [
    'deploy:info',
    'deploy:prepare',
    'deploy:lock',
    'deploy:release',
    'deploy:update_code',
    'deploy:shared',
    'deploy:vendors',
    'deploy:writable',
    'deploy:clear_paths',
    'deploy:symlink',
    'deploy:unlock',
    'cleanup',
    'success'
]);

// [Optional] if deploy fails automatically unlock.
after('deploy:failed', 'deploy:unlock');

เหตุผล: การใช้ Automated Deployment ช่วยลด Human Error และทำให้การ Deploy เป็นไปอย่างสม่ำเสมอ (Consistent)

Continuous Integration (CI)

Continuous Integration คือแนวทางปฏิบัติที่เน้นการ Integrate Code Changes จากนักพัฒนาหลายคนเข้าด้วยกันอย่างสม่ำเสมอ โดยมีการ Run Automated Tests เพื่อให้แน่ใจว่า Code ที่ถูก Integrate เข้าไปนั้นไม่ทำให้ Application เสียหาย

เครื่องมือที่นิยมใช้:

  • Jenkins: เป็น Open-Source Automation Server ที่ได้รับความนิยม
  • Travis CI: เป็น Continuous Integration Service ที่ใช้งานง่ายและฟรีสำหรับ Open-Source Projects
  • GitHub Actions: เป็น CI/CD Service ที่ Integrate เข้ากับ GitHub ได้อย่างสมบูรณ์

หลักการทำงาน: เมื่อมีการ Push Code ขึ้นไปยัง Repository CI Server จะทำการ Run Tests และ Build Application หาก Tests ผ่าน CI Server จะทำการ Deploy Application ไปยัง Staging หรือ Production Server โดยอัตโนมัติ

ตัวอย่าง GitHub Actions Workflow:

# .github/workflows/deploy.yml
name: Deploy to Production

on:
  push:
    branches:
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Setup PHP
        uses: shivammathur/setup-php@v2
        with:
          php-version: '8.1'
      - name: Install Dependencies
        run: composer install --no-interaction --prefer-dist --optimize-autoloader
      - name: Run Tests
        run: php artisan test
      - name: Deploy to Server
        uses: appleboy/ssh-action@v0.1.10
        with:
          host: ${{ secrets.SSH_HOST }}
          username: ${{ secrets.SSH_USERNAME }}
          key: ${{ secrets.SSH_PRIVATE_KEY }}
          script: |
            cd /var/www/my_app
            git pull origin main
            composer install --no-interaction --prefer-dist --optimize-autoloader
            php artisan migrate --force
            php artisan cache:clear
            php artisan config:cache
            php artisan route:cache

เหตุผล: การใช้ CI ช่วยให้เราสามารถ Detect Bugs ได้ตั้งแต่เนิ่นๆ และทำให้กระบวนการ Deploy เป็นไปอย่างราบรื่น

Trade-off: การตั้งค่า CI/CD Pipeline อาจต้องใช้เวลาและความพยายาม แต่ผลตอบแทนที่ได้คือ Application ที่มีคุณภาพสูงและกระบวนการ Deploy ที่มีประสิทธิภาพ

สรุป

การ Deploy PHP Application เป็นขั้นตอนที่สำคัญในการนำ Application ของคุณขึ้นไปใช้งานจริง การเลือก Deployment Strategy ที่เหมาะสมและการใช้ Continuous Integration จะช่วยให้คุณสามารถ Deploy Application ได้อย่างรวดเร็ว ปลอดภัย และมีประสิทธิภาพ

ในบทความถัดไป เราจะมาเรียนรู้เกี่ยวกับการเขียน Unit Tests ด้วย PHPUnit เพื่อให้มั่นใจว่า Code ของเราทำงานได้อย่างถูกต้อง

Office.in.th Custom Service

이 구조를 바탕으로 시스템을 개발하거나 맞춤 변경하고 싶으신가요?

Office.in.th는 엔터프라이즈 웹 애플리케이션, API 연동, 공공/민간 업무 관리 시스템을 설계·개발하며 장기 지원을 제공합니다.

소프트웨어 개발 서비스 보기