ใช้ Git Version Control ใน cPanel Deploy เว็บอัตโนมัติ

Push Code จาก Local ขึ้น Hosting โดยตรงผ่าน Git ไม่ต้องใช้ FTP อีกต่อไป และตั้ง Auto Deploy ได้เลย

Git Version Control ใน cPanel cPanel

Git Version Control ใน cPanel คืออะไร

Git Version Control เป็นฟีเจอร์ในหน้า cPanel ที่ช่วยให้คุณสามารถสร้าง Bare Repository บน Shared Hosting ได้โดยตรง ทำให้คุณ Push Code จากเครื่อง Local ขึ้น Server ได้เหมือนกับ Push ขึ้น GitHub ทั่วไป ข้อดีคือไม่ต้องเปิด FTP Client, ไม่ต้องลากวางไฟล์ทีละไฟล์ และยังสามารถตั้งค่า Auto Deploy ได้ด้วย

โดยปกติ Shared Hosting ไม่ได้ให้สิทธิ์ Root หรือ SSH แบบเต็มรูปแบบ แต่ cPanel ได้ฝัง Git ไว้ในระบบพร้อมหน้าจัดการ UI ที่เข้าใจง่าย ทำให้ Developer ที่เคยใช้งาน Git อยู่แล้วสามารถ Integrate Workflow ได้ทันที โดยไม่ต้องเรียนรู้คำสั่ง Linux เพิ่มเติมมากนัก

ฟีเจอร์นี้มีประโยชน์อย่างมากสำหรับนักพัฒนาเว็บที่ทำงานเป็นทีม เพราะทุกการเปลี่ยนแปลง Code จะถูกบันทึกเป็น Commit ที่มี History ย้อนหลังได้ ต่างจาก FTP ที่ไม่มี Version Tracking ใดๆ เลย หากพลาดอัพโหลดไฟล์ผิด ก็ไม่รู้จะ Restore กลับมาอย่างไร

สร้าง Repository ใหม่ใน cPanel

ก่อนจะ Push Code ได้ คุณต้องสร้าง Bare Repository บน Server ก่อน ให้เข้าไปที่หน้า cPanel ของ Hosting แล้วค้นหา Git Version Control ในช่อง Search หรือหาในหมวด Files จากนั้นคลิกเข้าไปในหน้านั้น

คลิกปุ่ม Create เพื่อสร้าง Repository ใหม่ คุณจะเห็นหน้าฟอร์มให้กรอกข้อมูล ตรงจุดนี้สำคัญมาก ให้ระวังการตั้งค่า Path ให้ถูกต้อง เพราะจะส่งผลต่อตำแหน่งที่ cPanel จะ Clone ไฟล์มาเก็บไว้

  1. ติ๊ก Clone a Repository ให้เป็น Off (ไม่ต้อง Clone จาก GitHub) เราจะสร้าง Bare Repo เปล่าๆ
  2. กรอก Repository Path เช่น /home/username/repos/mysite.git — นี่คือที่เก็บ Bare Repo ไม่ใช่ public_html
  3. กรอก Repository Name ชื่อที่คุณต้องการ เช่น mysite
  4. คลิก Create เพื่อสร้าง Repository

หลังจากสร้างเสร็จ cPanel จะแสดง Clone URL ในรูปแบบ SSH เช่น ssh://[email protected]/home/username/repos/mysite.git ให้คัดลอก URL นี้เก็บไว้ เพราะจะต้องใช้ตอนตั้งค่า Remote บนเครื่อง Local

นอกจากนี้ ยังต้องแน่ใจว่าได้ Add SSH Public Key ไว้ใน cPanel ด้วย โดยไปที่ cPanel → Security → SSH Access → Manage SSH Keys → Import Key แล้ว Paste Public Key ของเครื่องคุณเข้าไป (มักอยู่ที่ไฟล์ ~/.ssh/id_rsa.pub บนเครื่อง Local)

ตั้งค่า Remote บน Local Machine

เมื่อมี Repository บน cPanel แล้ว ขั้นตอนต่อไปคือบอกให้ Git บนเครื่อง Local ของคุณรู้ว่าจะ Push ไปที่ไหน สมมติว่าคุณมีโปรเจกต์ที่ทำงานอยู่แล้วในโฟลเดอร์ mysite/ บนเครื่องคุณ

ถ้าโปรเจกต์ยังไม่ได้ Init Git ให้รันคำสั่ง git init ก่อน จากนั้นเพิ่ม Remote ที่ชี้ไปยัง Repository บน cPanel โดยใช้คำสั่งดังนี้

# เพิ่ม Remote ชื่อ "cpanel" ชี้ไปยัง Repo บน Server
git remote add cpanel ssh://[email protected]/home/username/repos/mysite.git

# ตรวจสอบว่า Remote ถูกตั้งค่าถูกต้อง
git remote -v

# ผลลัพธ์ที่ควรได้
# cpanel  ssh://[email protected]/home/username/repos/mysite.git (fetch)
# cpanel  ssh://[email protected]/home/username/repos/mysite.git (push)

ถ้ามี GitHub หรือ GitLab อยู่แล้ว คุณสามารถมี Remote หลายอันได้พร้อมกัน เช่น origin ชี้ไป GitHub และ cpanel ชี้ไป Hosting โดยทั้งสองไม่กระทบกัน ทำให้ Workflow ยืดหยุ่นมาก

Push Code ครั้งแรกขึ้น cPanel

ก่อน Push ครั้งแรก ต้องแน่ใจว่าโปรเจกต์มีอย่างน้อย 1 Commit แล้ว ถ้ายังไม่มี ให้ทำตามขั้นตอนนี้บนเครื่อง Local ของคุณผ่าน Terminal หรือ Command Prompt

  1. เข้าไปในโฟลเดอร์โปรเจกต์: cd mysite
  2. ถ้ายังไม่ Init: git init
  3. Add ไฟล์ทั้งหมด: git add .
  4. สร้าง Commit แรก: git commit -m "Initial commit"
  5. Push ขึ้น cPanel: git push cpanel main

ระหว่าง Push ครั้งแรก Terminal จะถามว่า "Are you sure you want to continue connecting?" ให้พิมพ์ yes แล้วกด Enter เพื่อ Accept SSH Fingerprint ของ Server ครั้งต่อไปจะไม่ถามอีก ถ้าตั้ง SSH Key ถูกต้องจะไม่ขอ Password ด้วย

หากการ Push สำเร็จ คุณจะเห็น Output บอกว่า Branch ถูก Update แล้ว ณ จุดนี้ Code ของคุณได้ถูกส่งไปยัง Bare Repository บน cPanel เรียบร้อย แต่ยังไม่ได้ Deploy ไปยัง public_html จนกว่าจะตั้งค่า Auto Deploy ในขั้นตอนถัดไป

หมายเหตุ: Bare Repository และ public_html เป็นคนละที่กัน Bare Repo คือที่เก็บ Git Objects เท่านั้น ส่วนการคัดลอกไฟล์ไปยัง public_html ต้องตั้งค่า .cpanel.yml เพิ่มเติม

ตั้งค่า Auto Deploy ด้วย .cpanel.yml

ไฟล์ .cpanel.yml คือหัวใจของ Auto Deploy ใน cPanel Git Version Control ไฟล์นี้จะบอก cPanel ว่าหลังจากรับ Push แล้วให้ทำอะไรต่อ เช่น คัดลอกไฟล์ไปยัง public_html หรือรัน Script เพิ่มเติม

สร้างไฟล์ชื่อ .cpanel.yml ใน Root ของโปรเจกต์ (ระดับเดียวกับ index.html หรือ index.php) โดยมีเนื้อหาพื้นฐานดังนี้

---
deployment:
  tasks:
    - export DEPLOYPATH=/home/username/public_html/
    - /bin/cp -r . $DEPLOYPATH

โครงสร้างไฟล์นี้ใช้ YAML Format ต้องระวังเรื่อง Indentation (เว้นวรรค 2 หรือ 4 ช่องให้สม่ำเสมอ ห้ามใช้ Tab) และต้องเริ่มด้วย --- เสมอ ส่วน username ให้เปลี่ยนเป็น cPanel Username จริงของคุณ

สำหรับโปรเจกต์ที่ซับซ้อนขึ้น เช่น Deploy ไปยัง Subdirectory หรือต้องการรัน Script เพิ่ม สามารถปรับ Tasks ได้ดังนี้

---
deployment:
  tasks:
    - export DEPLOYPATH=/home/username/public_html/myapp/
    - /bin/mkdir -p $DEPLOYPATH
    - /bin/cp -r . $DEPLOYPATH
    - /bin/rm -rf $DEPLOYPATH/.git

หลังจากเพิ่มไฟล์ .cpanel.yml แล้ว ต้อง Commit และ Push อีกครั้งเพื่อให้ cPanel ประมวลผล Deploy script ใหม่ ตั้งแต่นั้นเป็นต้นไป ทุกครั้งที่คุณ git push cpanel main cPanel จะ Run Task ตามที่ตั้งไว้โดยอัตโนมัติ

ตรวจสอบว่า Git Deploy ทำงานถูกต้อง

หลังจาก Push Code ขึ้นไปแล้ว ควรตรวจสอบให้แน่ใจว่า Deployment ทำงานสำเร็จและไฟล์ถูก Copy ไปยัง public_html จริง สามารถทำได้หลายวิธีทั้งผ่าน cPanel UI และ SSH Terminal

วิธีที่เร็วที่สุดคือเปิดเว็บไซต์ในเบราว์เซอร์เพื่อดูว่า Content อัพเดทแล้วหรือยัง แต่ถ้าต้องการตรวจสอบแบบ Developer ให้ดู Deployment Log ใน cPanel หรือเปรียบเทียบไฟล์ผ่าน SSH

# 1. ดู Git Log ของ Repo บน Server (ผ่าน SSH)
cd ~/repos/mysite.git
git log --oneline -5

# 2. ตรวจสอบว่าไฟล์ถูก Deploy ไปยัง public_html แล้ว
ls -la ~/public_html/

# 3. เปรียบเทียบ Commit Hash ล่าสุดกับสิ่งที่ Deploy ไป
git rev-parse HEAD

# 4. ดู Deployment Log ผ่าน Command (ถ้า cPanel เปิด SSH)
cat ~/repos/mysite.git/cpanel_git_deploy.log

นอกจากนี้ คุณยังสามารถดู Deployment Log ได้ใน cPanel UI โดยไปที่ Git Version Control → คลิกที่ชื่อ Repo → คลิก Manage → ดูที่ส่วน Last Deployment Information ซึ่งจะแสดงสถานะและ Timestamp ของการ Deploy ล่าสุด

Tip: หลัง git push แล้วให้ดู Deployment Log ใน cPanel → Git Version Control → Manage → Last Deployment Info ควรแสดง Success และเวลาล่าสุด ถ้าไม่มี หรือแสดง Error ให้ตรวจสอบ Syntax ของ .cpanel.yml ก่อนเป็นลำดับแรก

แก้ปัญหาที่พบบ่อย

การตั้งค่า Git Version Control บน cPanel มีจุดที่อาจติดขัดได้หลายจุด โดยเฉพาะสำหรับมือใหม่ที่ยังไม่คุ้นเคยกับ SSH และ YAML นี่คือปัญหาที่พบบ่อยที่สุดพร้อมวิธีแก้ไข

git push ไม่ได้ — SSH Key ยังไม่ได้ Add ใน cPanel

อาการคือพิมพ์ git push cpanel main แล้วได้ Error ว่า Permission denied (publickey) หรือขอ Password แต่ใส่แล้วไม่ได้ สาเหตุหลักคือ SSH Public Key บนเครื่อง Local ยังไม่ถูก Add เข้าสู่ cPanel

วิธีแก้: ไปที่ cPanel → Security → SSH Access → Manage SSH Keys → Import Key แล้ว Paste เนื้อหาของไฟล์ ~/.ssh/id_rsa.pub (หรือ ~/.ssh/id_ed25519.pub) เข้าไป จากนั้น Authorize Key นั้น ถ้ายังไม่มี SSH Key ให้รัน ssh-keygen -t ed25519 บนเครื่อง Local ก่อน

Auto Deploy ไม่ทำงาน — .cpanel.yml ไม่ถูก Syntax หรือ Path ผิด

หาก Push แล้วไฟล์ไม่ถูก Copy ไปยัง public_html แสดงว่า cPanel ไม่ได้รัน Deploy Task ให้ตรวจสอบไฟล์ .cpanel.yml ก่อนเป็นอันดับแรก โดย Error ที่พบบ่อยคือใช้ Tab แทน Space, ไม่มี --- บรรทัดแรก หรือ Indentation ไม่สม่ำเสมอ

ลองใช้ YAML Validator Online (เช่น yamlint.com) ตรวจสอบก่อน Push นอกจากนี้ให้แน่ใจว่าไฟล์ .cpanel.yml อยู่ที่ Root ของ Repository ไม่ใช่ใน Subdirectory

ไฟล์ไม่ Deploy ไปยัง public_html — destination ใน yml ผิด

ปัญหานี้เกิดจาก Path ใน DEPLOYPATH ผิด ให้ตรวจสอบ cPanel Username ที่ถูกต้อง (ดูได้จากมุมบนขวาของหน้า cPanel) และแน่ใจว่า Path /home/username/public_html/ มีอยู่จริง

ถ้า Deploy ไปยัง Subdomain หรือ Addon Domain ให้เปลี่ยน Path ตามโฟลเดอร์จริง เช่น /home/username/public_html/blog/ สำหรับ blog.yourdomain.com ที่ชี้ไปยังโฟลเดอร์ blog

Permission Denied ตอน Deploy — Script ไม่มีสิทธิ์ Execute ไฟล์

ถ้า Deployment Log แสดง Error ว่า Permission denied ระหว่างรัน cp หรือ mkdir ให้ตรวจสอบว่าโฟลเดอร์ปลายทางมี Permission ที่ถูกต้อง โดยทั่วไปโฟลเดอร์ควรเป็น 755 และไฟล์เป็น 644

สามารถเพิ่ม Task ใน .cpanel.yml เพื่อแก้ Permission ได้โดยตรง เช่น /bin/chmod -R 755 $DEPLOYPATH หรือถ้า Script ที่ต้องการ Execute ไม่ได้สิทธิ์ ให้เพิ่ม /bin/chmod +x $DEPLOYPATH/script.sh

คำถามที่พบบ่อย

ใช้ GitHub/GitLab เชื่อมกับ cPanel Git Version Control ได้ไหม?

ได้ แต่การทำงานจะต่างออกไปเล็กน้อย cPanel Git Version Control สามารถ Clone Repository จาก GitHub หรือ GitLab ได้โดยตรง ให้ติ๊ก "Clone a Repository" ตอนสร้าง Repo ใหม่ และใส่ HTTPS URL ของ GitHub/GitLab เข้าไป

อย่างไรก็ตาม สำหรับ Auto Deploy แบบอัตโนมัติทุกครั้งที่ Push ขึ้น GitHub แนะนำให้ใช้ GitHub Actions หรือ Webhook แทน เพราะ cPanel Pull จาก GitHub ต้องกดปุ่ม Deploy ด้วยมือในหน้า UI ไม่ได้ Trigger อัตโนมัติจาก GitHub Push

Git Deploy ต่างจาก FTP Upload ตรงไหน ควรใช้อะไร?

Git Deploy และ FTP Upload ต่างกันหลายด้าน Git มี Version History ทำให้รู้ว่าใครแก้ไขอะไร เมื่อไหร่ และสามารถ Rollback ได้ ส่วน FTP ไม่มี Tracking ใดๆ เลย หากอัพโหลดผิดพลาดหรือไฟล์หายก็ไม่มีทางกู้คืน

แนะนำให้ใช้ Git Deploy ถ้าคุณพัฒนาเว็บเป็นจริงเป็นจัง โดยเฉพาะเมื่อทำงานเป็นทีม แต่ถ้าเพิ่งเริ่มต้นหรืออัพเดทไฟล์น้อยชิ้น FTP ก็ยังสะดวกกว่าเพราะไม่ต้องตั้งค่าอะไรมาก

ด้านGit DeployFTP Upload
Version Historyมี Commit Logไม่มี
Rollbackทำได้ง่ายทำได้ยาก
Auto Deployตั้งค่าได้ไม่รองรับ
ความซับซ้อนปานกลางต่ำ
เหมาะกับDeveloper / ทีมมือใหม่ / แก้ไขนานๆ
ถ้า Push Code ผิดพลาดสามารถ Rollback ได้ไหม?

ได้ นี่คือหนึ่งในข้อดีที่ใหญ่ที่สุดของ Git ถ้า Push Code ที่มีปัญหาขึ้นไป คุณสามารถ Revert กลับไป Commit ก่อนหน้าได้ โดยรันคำสั่ง git revert HEAD บนเครื่อง Local เพื่อสร้าง Commit ใหม่ที่ Undo การเปลี่ยนแปลง แล้ว Push ขึ้นไปใหม่อีกครั้ง

ถ้าต้องการ Reset กลับไปยัง Commit ที่ระบุ สามารถรัน git reset --hard [commit-hash] แล้ว Push ด้วย git push cpanel main --force แต่ควรระวัง Force Push ในทีมเพราะจะลบ History ของคนอื่นด้วย ควรใช้เฉพาะเมื่อจำเป็นจริงๆ