TOP

How To Set Up Deployment with Git

เวลาปรับปรุง code แล้วนำไฟล์ขึ้น server ก็คงใช้ upload ปกติทั่วไป อันนี้มาลองดูวิธีที่หล่อขึ้นมาอีกนิด คือใช้ git ทำ deployment เลย ซึ่งยังไม่เป็น Continuous Integration (CI) และ Continuous Deployment (CD) เพราะยังไม่ใช่ Automatic Deployment แต่แค่อำนวยความสะดวกในการทำงานร่วมกับทีม สะดวกในการ merge file, มี subversion และไม่ต้องหาไฟล์ที่แก้ไขเพื่ออัพโหลด

บทความนี้อ้างอิงวิธีการจาก Digitalocean Tutorials : How To Set Up Automatic Deployment with Git with a VPS

คำเตือน: อย่างที่บอก มันแค่อำนวยความสะดวกด้วย Git ดังนั้นก่อนจะ Deploy ขึ้น Production Server ควรผ่านการ Test ให้เสร็จเสียก่อน

(รูปตัวอย่างของ Git Deployment ของ จาก flyingcorkmedia.com)

เตรียมของ

บน Production Server:

  • Directory ที่เราใช้ Live เว็บไซต์ เช่น /var/www/domain.com
  • Directory ที่เราใช้เก็บ Git Repo เช่น /var/repo/site.git

บน Localhost:

  • ติดตั้ง Git
  • ทำการผูก SSH Key ระหว่างเครื่องเรา (Localhost) กับ Production Server (ถ้าไม่ผูกก็ได้ แต่จะต้องมาพิมพ์รหัสตลอดทุกครั้งที่ Commit นะ, ตัดสินใจดูเอาเอง)

เริ่มต้นทำ Git Repo บน Production Server

ถ้ายังไม่ได้สร้าง /var/repo/site.git ให้ใช้คำสั่ง

mkdir /var/repo/site.git

จากนั้น เข้าไป git init ให้มันด้วยคำสั่ง git init –bare

cd /var/repo/site.git
git init --bare

อธิบาย: git init –bare จะสร้างและเก็บค่าคอนฟิกของ Version Control เฉยๆ จะไม่มีการเก็บ Source Code

ทำการ Git Hook

ให้เข้าไปที่ไดเร็กทอรี่ repo ที่ได้สร้างไว้เมื่อสักครู่ จากนั้น ปรับ permission ไฟล์ hooks/post-receive เพื่ออนุญาตให้ execute file ได้ และเข้าไปแก้ไขข้อมูลในไฟล์นั้น

cd /var/repo/site.git
chmod +x hooks/post-receive
vi hooks/post-receive

ในไฟล์นั้นจะไม่มีข้อมูลใดๆ จากนั้นให้เราใส่คำสั่งดังนี้

#!/bin/sh
git --work-tree=/var/www/domain.com --git-dir=/var/repo/site.git checkout -f

เป็นการบอกว่า เมื่อมีการ git push เข้ามา ให้ส่ง source code ไปยัง /var/www/domain.com

จากนั้นให้เราบันทึกและออกมาจากหน้า editor
เป็นอันเสร็จขั้นตอนที่ต้องทำบน Production Server

ทำ Git Repo บน Localhost

คราวนี้เรามาจัดการบนเครื่อง Localhost เราต่อ โดยให้เราเข้าไปที่ไดเร็กทอรี่ที่เก็บ Source Code ของเรา จากนั้นเข้า Git Bash และทำการพิมพ์ git init

git init

และพิมพ์คำสั่งทำการสร้าง remote ขึ้นมาชื่อ live

git remote add live ssh://[email protected]/var/repo/site.git

เป็นอันเสร็จขั้นตอนของ Localhost ครับ

ทดลองใช้งาน

ให้ลองสร้างไฟล์ขึ้นมาสักไฟล์หนึ่ง จากนั้น ทำการ commit git ตามปกติ แต่ ขั้นตอน push ให้ส่งไปที่ remote live แทน เช่น

git add .
git commit -m "Test push file to production server"
git push live master

ข้อมูลบนเว็บไซต์ของเราบน Production Server จะมีการเปลี่ยนแปลงไปตามที่เราได้แก้ไขไป

เพิ่มขั้นตอนทำเป็น Development Environment ก่อนก็ได้นะ

การเอาขึ้น Production ด้วยคำสั่งเดียวมันดูอันตรายไปหน่อย อาจทำขั้นตอนเดียวกันนี้แต่เป็น Development Environment ก่อนก็ได้ โดยทำเหมือนเดิมทุกอย่างเลยครับ

โดยสมมติว่า

  • Directory ที่เราใช้ Live Beta เว็บไซต์ เช่น /var/www/beta
  • Directory ที่เราใช้เก็บ Git Repo Beta เช่น /var/repo/beta.git

ให้สร้าง Config Version Control

cd /var/repo/beta.git
git init --bare
chmod +x hooks/post-receive
vi hooks/post-receive

ใส่ข้อมูลในไฟล์ hooks/post-receive ว่า

#!/bin/sh
git --work-tree=/var/www/beta --git-dir=/var/repo/beta.git checkout -f

จากนั้นมา add remote beta ใน repo localhost เราไปที่ไดเร็ดทอรี่ beta.git

git remote add beta ssh://[email protected]/var/repo/beta.git

คราวนี้ เวลาพัฒนาหรือแก้ไขปรับหรุง Source Code เสร็จ ก็ทำการนำเข้า Dvelopment Environment เพื่อทดสอบก่อน

git add .
git commit -m "New version"
git push beta master

เมื่อทดสอบระบบทั้งหมดใน Development Environment  เสร็จ ก็ทำการนำเข้า Production อีกครั้ง

git push live master

เป็นอันจบขั้นตอนทั้งหมด

ไว้คราวหน้าลอง CI/CD แล้วจะมาเขียนเหลาไหฟังอีกครั้ง

Featured Image from  flyingcorkmedia.com

ผู้ชายธรรมดาคนหนึ่ง ชื่นชอบหลายเรื่องที่ไม่น่าจะไปกันได้ ทำงานไอที แต่ชอบท่องโลกกว้าง รักประวัติศาสตร์ แต่ก็สนใจเทคโนโลยี ชอบสร้างแรงบันดาลใจให้ตัวเอง และไปป้ายยาคนอื่นต่อ