ลดความยุ่งยากในการใช้คลาวด์ พูดคุยกับเจ้าหน้าที่

Home Deploy เว็บไซต์จาก Git Repository บน Plesk

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

  1. ไปที่ Websites & Domains เลือกโดเมน แล้วกด Git
  2. เลือก Remote Git hosting (เช่น GitHub หรือ GitLab)
  3. ช่อง Repository URL ใส่ URL แบบ SSH เช่น [email protected]:yourname/example-site.git สำหรับ Repository แบบ Public ใช้ URL แบบ HTTPS ได้
  4. เมื่อใส่ URL แบบ SSH แล้ว Plesk จะแสดง SSH public key ให้คัดลอก เก็บไว้ใช้ในขั้นตอนที่ 2
  5. ช่อง Repository name ตั้งชื่อที่ใช้ภายใน Plesk
  6. ส่วน Deployment mode เลือก Automatic (Deploy ทุกครั้งที่ดึงโค้ดใหม่), Manual (Deploy เมื่อกดปุ่มเอง) หรือ No deployment (เก็บ Repository ไว้อย่างเดียว) ครั้งแรกแนะนำ Manual
  7. ช่อง 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 ครั้งแรก

  1. ในหน้า Git ของโดเมน กด Repository settings (ไอคอนรูปเฟือง)
  2. เลือก Branch ที่จะใช้กับเว็บจริง เช่น main หรือ production
  3. กด Deploy หรือ Pull updates แล้ว Deploy ตามปุ่มที่แสดง

เมื่อเสร็จ ให้เปิดเว็บเพื่อตรวจว่าแสดงโค้ดล่าสุด และเปิด File Manager ดูว่าไฟล์อยู่ใน httpdocs ตามโครงสร้างที่คาดไว้ ตัว Repository (โฟลเดอร์ .git) เก็บแยกไว้นอกโฟลเดอร์เว็บ ผู้เข้าชมจึงดาวน์โหลดประวัติ Git ไม่ได้

ขั้นตอนที่ 4: ตั้ง Deploy อัตโนมัติด้วย Webhook

  1. ใน Repository settings ของ Plesk เปลี่ยน Deployment mode เป็น Automatic
  2. คัดลอก Webhook URL ที่ Plesk แสดง
  3. 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 ที่พบ เพื่อให้ทีมงานตรวจสอบได้เร็วขึ้น

ผู้ให้บริการคลาวด์ไทย
เพื่อธุรกิจของคนไทย

"มุ่งมั่น" และ "มั่นคง"
พร้อมรับมือทุกการเติบโต
Trust Cloud
คลาว์ที่ปลอดภัย
คือรากฐานที่มั่นคง
cloud security