Deploy เว็บไซต์จาก Git Repository บน Plesk
แทนที่จะอัปโหลดไฟล์ผ่าน FTP ทุกครั้งที่แก้โค้ด คุณสามารถเก็บโค้ดเว็บไว้ใน Git Repository เช่น GitHub, GitLab หรือ Bitbucket แล้วให้ Plesk ดึงโค้ดล่าสุดไปวางในโฟลเดอร์เว็บให้อัตโนมัติ ได้ประวัติการแก้ไขครบ ย้อนกลับได้ง่าย และทีมหลายคนทำงานร่วมกันได้โดยไม่เขียนทับไฟล์กัน
ฟีเจอร์นี้มาจาก Extension ชื่อ Git ของ Plesk ใช้ได้ทั้งแบบ Remote repository (ดึงจาก GitHub/GitLab) และ Local repository (Push จากเครื่องคุณมาที่ Plesk โดยตรง) บทความนี้เน้นแบบ Remote ซึ่งใช้บ่อยที่สุด ถ้าคุณดูแลเซิร์ฟเวอร์ Linux เองโดยไม่มี Plesk ดู Deploy เว็บไซต์ด้วย Git บน Linux Server
สิ่งที่ต้องเตรียม
- Plesk Obsidian ที่ติดตั้ง Extension Git แล้ว (ถ้าไม่เห็นปุ่ม Git ในหน้าโดเมน ให้สอบถามผู้ให้บริการ)
- Repository ที่มีโค้ดเว็บ และสิทธิ์ผู้ดูแล Repository สำหรับเพิ่ม Deploy Key และ Webhook
- โครงสร้างโค้ดที่รู้ชัดว่าไฟล์ใดคือ Document Root เช่น เว็บ PHP ธรรมดาอยู่ที่รากของ Repository ส่วน Laravel ใช้โฟลเดอร์
public
หมายเหตุ: ถ้าโฟลเดอร์เว็บปัจจุบันมีไฟล์อยู่แล้ว การ Deploy จะเขียนทับไฟล์ที่ชื่อตรงกับใน Repository ให้สำรองเว็บก่อนตาม สำรองและกู้คืนเว็บไซต์ด้วย Backup Manager บน Plesk หรือทดลองกับ Subdomain ก่อนใช้กับเว็บจริง
ขั้นตอนที่ 1: เพิ่ม Repository ใน Plesk
- ไปที่ Websites & Domains เลือกโดเมน แล้วกด Git
- เลือก Remote Git hosting (เช่น GitHub หรือ GitLab)
- ช่อง Repository URL ใส่ URL แบบ SSH เช่น
[email protected]:yourname/example-site.gitสำหรับ Repository แบบ Public ใช้ URL แบบ HTTPS ได้ - เมื่อใส่ URL แบบ SSH แล้ว Plesk จะแสดง SSH public key ให้คัดลอก เก็บไว้ใช้ในขั้นตอนที่ 2
- ช่อง Repository name ตั้งชื่อที่ใช้ภายใน Plesk
- ส่วน Deployment mode เลือก Automatic (Deploy ทุกครั้งที่ดึงโค้ดใหม่), Manual (Deploy เมื่อกดปุ่มเอง) หรือ No deployment (เก็บ Repository ไว้อย่างเดียว) ครั้งแรกแนะนำ Manual
- ช่อง Server path เลือกโฟลเดอร์ปลายทาง ปกติคือ
/httpdocs
ยังไม่ต้องกด OK จนกว่าจะเพิ่ม Deploy Key ในขั้นตอนถัดไป ถ้ากดก่อน Plesk จะดึงโค้ดไม่สำเร็จเพราะยังไม่มีสิทธิ์
ขั้นตอนที่ 2: เพิ่ม Deploy Key ใน GitHub หรือ GitLab
GitHub: เปิด Repository > Settings > Deploy keys > Add deploy key ตั้งชื่อ เช่น Plesk example.com วาง SSH public key ที่คัดลอกมา ไม่ต้องติ๊ก Allow write access แล้วกด Add key
GitLab: เปิด Project > Settings > Repository > Deploy keys วาง Key ตั้งชื่อ แล้วบันทึก ไม่ต้องให้สิทธิ์ Write
Deploy Key แบบอ่านอย่างเดียวจำกัดความเสียหาย ถ้าเซิร์ฟเวอร์ถูกเจาะ ผู้โจมตีจะแก้โค้ดใน Repository ไม่ได้ จากนั้นกลับไปที่ Plesk แล้วกด OK Plesk จะ Clone Repository ถ้าสำเร็จจะเห็นชื่อ Repository, Branch และ Commit ล่าสุด
ขั้นตอนที่ 3: เลือก Branch และ Deploy ครั้งแรก
- ในหน้า Git ของโดเมน กด Repository settings (ไอคอนรูปเฟือง)
- เลือก Branch ที่จะใช้กับเว็บจริง เช่น
mainหรือproduction - กด Deploy หรือ Pull updates แล้ว Deploy ตามปุ่มที่แสดง
เมื่อเสร็จ ให้เปิดเว็บเพื่อตรวจว่าแสดงโค้ดล่าสุด และเปิด File Manager ดูว่าไฟล์อยู่ใน httpdocs ตามโครงสร้างที่คาดไว้ ตัว Repository (โฟลเดอร์ .git) เก็บแยกไว้นอกโฟลเดอร์เว็บ ผู้เข้าชมจึงดาวน์โหลดประวัติ Git ไม่ได้
ขั้นตอนที่ 4: ตั้ง Deploy อัตโนมัติด้วย Webhook
- ใน Repository settings ของ Plesk เปลี่ยน Deployment mode เป็น Automatic
- คัดลอก Webhook URL ที่ Plesk แสดง
- GitHub: Repository > Settings > Webhooks > Add webhook วาง URL ในช่อง Payload URL เลือก Just the push event แล้วกด Add webhook ส่วน GitLab: Settings > Webhooks วาง URL แล้วติ๊ก Push events
ทดสอบด้วยการแก้ไฟล์เล็กๆ แล้ว Push ขึ้น Branch ที่ตั้งไว้ ภายในไม่กี่วินาทีหน้า Git ใน Plesk ต้องแสดง Commit ใหม่ ในหน้า Webhooks ของ GitHub ส่วน Recent Deliveries ต้องเป็นเครื่องหมายถูกพร้อม Response 200
ขั้นตอนที่ 5: คำสั่งหลัง Deploy
โปรเจกต์ที่ต้องติดตั้ง Dependency หรือ Build ก่อนใช้ ให้ใส่คำสั่งใน Enable additional deployment actions ของ Repository settings คำสั่งจะรันในโฟลเดอร์ปลายทางหลัง Deploy ทุกครั้ง ตัวอย่างสำหรับ Laravel
/opt/plesk/php/8.3/bin/php /usr/lib/plesk-9.0/composer.phar install --no-dev --optimize-autoloader
/opt/plesk/php/8.3/bin/php artisan migrate --force
/opt/plesk/php/8.3/bin/php artisan config:cache
ใช้ Path เต็มของ PHP ให้ตรงกับเวอร์ชันที่เว็บใช้ และตรวจตำแหน่ง Composer บนเซิร์ฟเวอร์ของคุณก่อน (ถ้าติดตั้ง Extension PHP Composer ไว้ จะสั่งผ่านหน้า Composer ของ Plesk ได้เช่นกัน) ฟีเจอร์นี้ต้องได้รับสิทธิ์ SSH หรือสิทธิ์ Additional deployment actions จากผู้ให้บริการ
หมายเหตุ: ห้าม Commit ไฟล์ที่มีรหัสผ่าน เช่น
.envหรือwp-config.phpเข้า Repository ให้ใส่ไว้ใน.gitignoreแล้วสร้างไฟล์นั้นบนเซิร์ฟเวอร์ด้วย File Manager ครั้งเดียว ไฟล์ที่ไม่อยู่ใน Repository จะไม่ถูก Deploy ทับ
ตรวจสอบผลลัพธ์
- หน้า Git ของโดเมนแสดง Commit hash และข้อความล่าสุดตรงกับที่เห็นใน GitHub/GitLab
- เปิดเว็บแล้วเห็นการเปลี่ยนแปลงล่าสุด (ถ้าไม่เห็น ล้าง Cache ของเบราว์เซอร์และปลั๊กอิน Cache ก่อน)
- ถ้าใช้ Additional deployment actions ให้ดูผลการรันคำสั่งในหน้า Git หรือใน Log ของ Plesk ว่าไม่มี Error
ปัญหาที่พบบ่อย
Permission denied (publickey) ตอนเพิ่ม Repository
ยังไม่ได้เพิ่ม Deploy Key หรือวางผิด Repository ตรวจว่าวาง Key ใน Repository เดียวกับ URL และคัดลอกครบทั้งบรรทัด GitHub ไม่ยอมให้ใช้ Deploy Key เดียวกันซ้ำกับหลาย Repository ถ้าต้องใช้หลาย Repository ให้ Plesk สร้าง Key แยกของแต่ละตัว
Push แล้วเว็บไม่อัปเดตอัตโนมัติ
ดู Recent Deliveries ของ Webhook ใน GitHub ถ้าเป็น Timeout หรือ Connection error แปลว่า GitHub ส่งมาไม่ถึง Plesk ตรวจว่า Webhook URL ถูกต้อง และถ้า URL ใช้ HTTPS ที่ Certificate ไม่ถูกต้อง ให้แก้ Certificate ของเซิร์ฟเวอร์ ถ้า Response เป็น 200 แต่ไม่ Deploy ให้ตรวจว่า Push ขึ้น Branch เดียวกับที่ตั้งใน Plesk และ Deployment mode เป็น Automatic
Additional deployment actions ล้มเหลวด้วย command not found
สภาพแวดล้อมของคำสั่งไม่มี Path แบบ Shell ปกติ ให้ใช้ Path เต็มของโปรแกรมทุกตัว เช่น /opt/plesk/php/8.3/bin/php และตรวจสิทธิ์ของผู้ใช้ระบบของโดเมน
ไฟล์ที่ลบใน Repository ยังค้างอยู่บนเว็บ
การ Deploy จะเขียนไฟล์ตามที่อยู่ใน Repository แต่ไฟล์ที่เคยวางไว้ก่อน หรือไฟล์ที่ไม่ได้อยู่ใน Git อาจยังคงอยู่ในโฟลเดอร์เว็บ ตรวจและลบไฟล์เก่าที่ไม่ใช้แล้วด้วย File Manager อย่างระมัดระวัง โดยเฉพาะไฟล์สคริปต์เก่าที่อาจมีช่องโหว่
หากทำตามขั้นตอนแล้วยังติดปัญหา สามารถติดต่อทีมงาน THAI DATA CLOUD ได้ที่ https://thaidata.cloud/contact/ โดยแจ้งชื่อโดเมน ขั้นตอนที่ทำไปแล้ว และข้อความ Error ที่พบ เพื่อให้ทีมงานตรวจสอบได้เร็วขึ้น
- 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
- เรื่องราวความประทับใจ
- โซลูชันสำหรับธุรกิจการผลิตและยานยนต์
- โซลูชันสำหรับธุรกิจการศึกษา
- โซลูชันสำหรับธุรกิจการเงิน
- โซลูชันสำหรับธุรกิจขนส่งและกระจายสินค้า
- โซลูชันสำหรับธุรกิจค้าปลีก
- โซลูชันสำหรับธุรกิจท่องเที่ยว
- โซลูชันสำหรับธุรกิจบริการสุขภาพและโรงพยาบาล
- โซลูชันสำหรับธุรกิจประกันภัย
- โซลูชันสำหรับธุรกิจพลังงานและสาธารณูปโภค
- โซลูชันสำหรับธุรกิจสื่อสารมวลชนและเอ็นเตอร์เทนเมนท์
- โซลูชันสำหรับธุรกิจอสังหาริมทรัพย์
- โซลูชันสำหรับธุรกิจเทคโนโลยี


