ทุกวันนี้การเขียนโปรแกรมและการพัฒนาซอฟต์แวร์กำลังเติบโตอย่างรวดเร็ว ความต้องการใช้งานเครื่องมือในสายนี้จึงพุ่งสูงตามไปด้วย ส่งผลให้เกิดการแข่งขันที่ดุเดือดในโลกออนไลน์ ซึ่งโปรแกรมด้าน coding และ DevOps ต่างชิงความเป็นเครื่องมือยอดนิยมในแต่ละด้าน Git เป็นหนึ่งในโปรแกรมเหล่านั้น ประกอบกับที่การทำงานระยะไกลกลายเป็นเรื่องปกติสำหรับงานที่ทำหน้าจอคอมพิวเตอร์ ทำให้ผู้คนจำนวนมากหันมาโฮสต์โปรแกรมของตนบนเซิร์ฟเวอร์ระยะไกล รวมถึง Git ด้วย ถ้าคุณก็อยู่ในกลุ่มนี้และต้องการติดตั้ง Git server เป็นของตัวเอง คุณมาถูกที่แล้ว
ในบทความนี้ ผมจะอธิบายว่า Git คืออะไร พร้อมพูดถึงข้อดีและข้อเสีย ก่อนจะพาไปดูว่าต้องเตรียมอะไรบ้างสำหรับการโฮสต์ Git server ของคุณเอง ไปเริ่มกันเลย
Git คืออะไร?
Git คือโปรแกรม DevOps ที่ช่วยให้นักพัฒนาและโปรแกรมเมอร์จัดการโปรเจกต์ได้อย่างมีประสิทธิภาพ ฟีเจอร์หลักของ Git คือการติดตามการเปลี่ยนแปลงใน source code ตลอดเวลา Git เป็น ซอฟต์แวร์ฟรีและ open-source และได้รับการอัปเดตอย่างสม่ำเสมอ ทำให้ Git เป็นหนึ่งในโปรแกรม DevOps สำหรับงาน coding ที่เข้าถึงได้ง่ายและเชื่อถือได้มากที่สุด ทุกเครื่องที่ติดตั้ง Git ไว้จะทำหน้าที่เป็น repository แบบสมบูรณ์ พร้อมประวัติการเปลี่ยนแปลงไฟล์ทั้งหมดของตัวเอง หลังจากพัฒนาอย่างต่อเนื่องเกือบ 20 ปี และออกอัปเดตมากกว่า 30 ครั้ง ปัจจุบัน Git รันอยู่บนเวอร์ชัน 2.40.0 และยังมีอัปเดตใหม่รออยู่อีก มาดู use case ของ Git กันก่อน เพื่อให้เข้าใจว่าทำไมเราถึงอยากติดตั้ง Git server ตั้งแต่แรก
Git ใช้งานอะไร
ก่อนจะรีบข้ามไปโฮสต์ Git local server ของตัวเอง ขอให้เราทำความคุ้นเคยกับ use case หลักของ Git สักเล็กน้อย เพื่อให้เข้าใจว่าทำไมเราถึงต้องรัน Git server ตั้งแต่แรก
กำลังโคลนเก็บข้อมูล
นักพัฒนาและโปรแกรมเมอร์หลายคนเลือกสร้าง Git repository บน server เพื่อติดตามโปรแกรมและไฟล์ที่ต้องการ Git ช่วยให้คุณ clone Linux kernel repository ปัจจุบันได้ง่ายๆ ด้วยคำสั่งไม่กี่บรรทัด แล้วใช้มันเพื่อเก็บ change log ที่เป็นระเบียบเฉพาะไฟล์ที่สนใจ กระบวนการนี้ทำได้ไม่ยาก และรองรับทั้งโปรเจกต์เล็กและโปรเจกต์ใหญ่ วิธีนี้เป็นที่รู้จักกันในชื่อ "การแตกแขนง" เพราะในทางปฏิบัติ คุณกำลังสร้าง branch ใหม่จาก repository ที่มีอยู่แล้ว
Git Workflow
Git Workflow เป็นอีก use case สำคัญที่คุณจะใช้เมื่อตั้งค่า Git server เป็นของตัวเอง คุณสามารถใช้ Git local server สร้าง branch สองชุดผ่านกระบวนการ cloning โดยให้ชุดหนึ่งแทนโปรเจกต์จริง เช่น เว็บไซต์ แล้วสร้าง production branch แยกต่างหากบน Git server เพื่อบันทึกทุกการเปลี่ยนแปลงจากนักพัฒนาทุกคน และยังสามารถทดสอบก่อน deploy ได้ด้วย แนวทางแบบหลายชั้นนี้ไม่เพียงเพิ่มประสิทธิภาพในการพัฒนาและทดสอบ แต่ยังทำให้การย้อนตรวจกระบวนการพัฒนาและการเปลี่ยนแปลงต่างๆ ทำได้ง่ายมาก
การรวม
จำ branching และ change log ได้ไหม? ตามชื่อบ่งบอก Merging คือการดำเนินการที่ตรงข้ามกันทุกประการ ใน merging ซึ่งถือกันโดยทั่วไปว่าเป็นส่วนที่ท้าทายที่สุดของ Git เราจะนำข้อมูลจาก branch node หนึ่งใน repository กลับเข้ามารวมกับ master repository ที่แยกออกไปตั้งแต่แรก โดยทั่วไปทำเพื่อสร้าง Git server ที่มีรายงานโปรเจกต์และประวัติการเปลี่ยนแปลงครบถ้วน รวมการเปลี่ยนแปลงจากทุกส่วนไว้ใน repository เดียวที่กระชับและอ่านเข้าใจได้ง่าย ระหว่างโปรเจกต์คุณต้องใช้ branching เพื่อป้องกันความสับสน ส่วน merging ก็ทำหน้าที่ตรงข้ามคือรวมทุกอย่างกลับเข้าด้วยกัน เพื่อให้เห็นภาพรวมที่ชัดเจนตอนสิ้นสุดโปรเจกต์และตอน troubleshoot
การโฮสต์ Git server เอง: ข้อดีและข้อเสีย
ทุกโปรแกรมมีข้อดีและข้อเสียที่ผู้ใช้ควรรู้ก่อนตัดสินใจใช้งาน ในส่วนนี้ผมจะพูดถึงข้อดีและข้อเสียของ Git โดยเฉพาะ อย่างไรก็ตาม ข้อดีและข้อเสียเหล่านี้จะเป็นจริงก็ต่อเมื่อคุณ self-host Git เท่านั้น ซึ่งเป็นหัวใจหลักของคู่มือนี้ ไปเริ่มกันได้เลย
Self-hosted Git: ข้อดี
ไม่มีบุคคลที่สามเข้ามาเกี่ยวข้อง
เมื่อใช้ Git แบบ self-hosted คุณและคนที่คุณอนุญาตเท่านั้นที่จะเข้าถึงไฟล์ได้ ซึ่งตัดปัญหาบุคคลที่สามที่ไม่พึงประสงค์ออกไปได้อย่างสิ้นเชิง ทำให้คุณทำงานกับโปรเจกต์ได้อย่างสบายใจ ข้อมูลของคุณยังปลอดภัยกว่าเดิม และทรัพยากรที่เคยจัดสรรไว้สำหรับด้านความปลอดภัยก็นำไปใช้ประโยชน์อื่นได้
ความปลอดภัย
พูดถึงด้านความปลอดภัย Git มีความปลอดภัยสูงตามแนวทางปฏิบัติที่ดีและการใช้เครื่องมือเสริมจากภายนอก แม้ระดับความปลอดภัยจะลดลงเมื่อคุณ self-host แทนที่จะใช้บริการสำเร็จรูป แต่คุณก็มีอิสระแทบไม่จำกัดในการกำหนดความปลอดภัยตามที่ต้องการ
ที่เก็บข้อมูลไม่จำกัด
จำ cloning และ branching ได้ไหม? ไม่มีการจำกัดจำนวน repository ที่คุณสร้างได้ด้วย Git ทำให้เหมาะมากสำหรับโปรเจกต์ขนาดใหญ่ที่แต่ละ branch ของการพัฒนาต้องการ repository แยกของตัวเอง และยังดีมากสำหรับโปรเจกต์ที่มีไฟล์ขนาดใหญ่ เช่น 3D assets หรืองานที่ใช้ Unity
Self-hosted Git: Self-hosted Git ของคุณเอง ข้อเสีย
ภาระการจัดการสูง
Git repository อาจควบคุมได้ยากอย่างรวดเร็ว หากคุณตั้งใจจะ configure Git server บนแพลตฟอร์ม self-hosted ของตัวเอง การจัดการ branch และ metadata ทั้งหมดอาจกลายเป็นเรื่องปวดหัวได้ไม่นาน คุณจึงต้องทำงานด้วยความละเอียดรอบคอบสูง หรือหาผู้เชี่ยวชาญมาช่วยดูแล
Learning Curve สูง
การโฮสต์ Git กับการเชี่ยวชาญและรัน Git local server ได้จริงนั้นต่างกันมาก Git มี skill ceiling สูงที่สุดในบรรดาโปรแกรม DevOps ที่ใช้ repository ต้องใช้เวลาศึกษาอย่างจริงจัง หรือไม่ก็ต้องจ้างผู้เชี่ยวชาญมาทำแทน
ไม่รองรับ GUI และ Windows
อยากตั้งค่า Git server บน Windows หรืออยาก configure Git server ให้ใช้งานกับ GUI? โชคไม่ดีนัก คุณถูกจำกัดให้ใช้ได้เฉพาะระบบปฏิบัติการที่มี Linux kernel เป็นฐาน และไม่มี GUI มาช่วยให้สิ่งต่างๆ ง่ายขึ้น ถ้าจะติดตั้ง Git server และ self-host ควรเริ่มเรียนพื้นฐาน coding ไว้ก่อน
วิธีการเก่าแก่
เมื่อพิจารณาทุกด้านแล้ว การรัน Git บน self-hosted server ดูเหมือนจะล้าสมัยและถูกแทนที่ด้วยวิธีที่มีประสิทธิภาพกว่าแล้ว ตัวอย่างที่ดีที่สุดของการรัน Git แบบมีประสิทธิภาพคือการใช้ GitLab ดังนั้นก่อนตัดสินใจรัน Git server ของตัวเอง ลองดูที่ GitLab เช่นกัน!
ข้อกำหนดในการติดตั้ง Git Server
มาดูข้อกำหนดที่จำเป็นสำหรับการตั้งค่า Git server และการโฮสต์ Git server ของคุณเองกันอย่างรวดเร็ว สิ่งที่คุณต้องการมีเพียงสองอย่างคือ เซิร์ฟเวอร์และ Git พร้อมความรู้การเขียนโค้ดเบื้องต้นสำหรับการกำหนดค่า Git server
เซิร์ฟเวอร์ Git
สำหรับเซิร์ฟเวอร์ คุณสามารถใช้คอมพิวเตอร์ส่วนตัวเครื่องอื่น ใช้ dedicated server จากผู้ให้บริการทั่วไป หรือหากต้องการควบคุมได้เต็มที่ ก็เลือกใช้ VPS บนคลาउด์ (virtual private server) การมี VPS ช่วยให้คุณจัดการเซิร์ฟเวอร์และรัน Git instance ได้โดยตรงในเวลาเดียวกัน ทั้งนี้ เซิร์ฟเวอร์ของคุณจำเป็นต้องติดตั้ง distro Linux เพื่อตั้งค่า Git server Cloudzy มี Linux VPS บริการที่รองรับ distro Linux ชั้นนำมากกว่า 10 รายการ เช่น Ubuntu, Debian, CentOS, Kali และ OpenSUSE เริ่มต้นเพียง $4.95 ต่อเดือน คุณได้รับ Linux server ที่น่าเชื่อถือใกล้กับที่ตั้งของคุณ เพื่อคุณภาพการเชื่อมต่อที่ดี พร้อมใช้งานสำหรับการโฮสต์และรัน Git server ของคุณเอง
เลือกแพ็กเกจ Linux VPS แบบประหยัดหรือพรีเมียมสำหรับโฮสต์เว็บไซต์หรือรีโมทเดสก์ท็อป ในราคาที่คุ้มค่าที่สุด VPS ทำงานบน Linux KVM เพื่อประสิทธิภาพที่สูงขึ้น และติดตั้งบนฮาร์ดแวร์ที่ทรงพลังพร้อมพื้นที่จัดเก็บ NVMe SSD เพื่อความเร็วสูงสุด
อ่านเพิ่มเติมGit อินสแตนซ์
กระบวนการตั้งค่า Git server นั้นไม่ซับซ้อน และจะดำเนินการโดยอัตโนมัติในขั้นตอนการติดตั้ง Git เป็นซอฟต์แวร์โอเพ่นซอร์สที่ใช้งานได้ฟรี ซึ่งเป็นข้อได้เปรียบหลักเมื่อเทียบกับโปรแกรม repository อื่น ๆ ที่เน้นการเขียนโค้ดและพัฒนาซอฟต์แวร์ เมื่อเตรียมข้อกำหนดทุกอย่างพร้อมแล้ว มาเริ่มคู่มือติดตั้ง Git server บน Linux server ของคุณทีละขั้นตอนได้เลย
วิธีติดตั้ง Git Server บน Linux (คู่มือทีละขั้นตอน)
ขั้นตอนที่ 1: ดาวน์โหลดและติดตั้ง Git
นี่คือขั้นตอนแรกในการติดตั้ง Git server ใน terminal ของ Linux distro ที่คุณเลือก ให้ป้อนคำสั่งต่อไปนี้เพื่อเริ่มดาวน์โหลด Git:
Distros ที่ใช้ฐาน Ubuntu/Debian:
sudo apt install git
Distros ที่ใช้ฐาน Arch:
sudo pacman -S git
Distros ที่ใช้ฐาน RHEL:
sudo dnf install git
คำสั่งนี้จะดาวน์โหลดและติดตั้ง Git บน Linux server ของคุณ รอจนกว่ากระบวนการจะเสร็จสมบูรณ์
ขั้นตอนที่ 2: ลงทะเบียนและกำหนดค่า Git Server
หากคุณมีเซิร์ฟเวอร์ในเครื่อง ให้บูตเครื่องนั้นขึ้นมา หรือหากคุณมี VPS ให้ใช้ SSH หรือ RDP เพื่อเชื่อมต่อกับ Linux server ของคุณจากระยะไกล ต่อไปเราจะกำหนดค่า Git server ให้รันแบบ remote โดยสร้างบัญชี Git ด้วยคำสั่งต่อไปนี้:
ssh username@address
sudo useradd git
จากนั้นป้อนคำสั่งนี้เพื่อสลับไปยังบัญชีที่สร้างขึ้นใหม่:
su git
ขั้นตอนนี้มีจุดประสงค์หลักเพื่อความปลอดภัยของ Git local server คุณจะทำหน้าที่เป็น admin ของเซิร์ฟเวอร์ผ่านบัญชีนี้ และสามารถจัดการผู้ใช้งานในอนาคตเป็นกลุ่มได้อย่างเป็นระเบียบ พร้อมกำหนดสิทธิ์และระดับการเข้าถึงที่เหมาะสม
ขั้นตอนที่ 3: สร้างไดเรกทอรี SSH และ สร้าง Git Repository บนเซิร์ฟเวอร์
ขั้นตอนถัดไปในการติดตั้ง Git server คือการสร้างไดเรกทอรี SSH แยกเฉพาะสำหรับจัดเก็บ คีย์สาธารณะ และสร้าง Git repository บนเซิร์ฟเวอร์พร้อมระบบรักษาความปลอดภัยหลายชั้นและการกำหนดสิทธิ์การเข้าถึงสำหรับคุณ เริ่มต้นด้วยการป้อนคำสั่งต่อไปนี้:
ssh git@address
mkdir .ssh
chmod 700 .ssh/
touch .ssh/authorized_keys
เมื่อจำกัดการเข้าถึงของผู้อื่นด้วยคำสั่งนี้แล้ว ให้ป้อนคำสั่งถัดไปเพื่อให้แน่ใจว่า SSH keys ของคุณถูกจัดเก็บอย่างปลอดภัยในโฟลเดอร์ authorized_keys ที่มีเพียงคุณเท่านั้นที่เข้าถึงได้ (รันคำสั่งนี้เฉพาะเมื่อคุณยังไม่มีโฟลเดอร์ id_rsa.pub ไฟล์):
cd .ssh
ssh-keygen -t rsa
cat id_rsa.pub
สุดท้าย คัดลอก SSH public key ที่คุณสร้างไว้เพื่อตั้งค่าการเชื่อมต่อ SSH ใหม่พร้อมความปลอดภัยที่เพิ่มขึ้นไปยัง Git local server ของคุณ:
cd .ssh
vi authorized_keys
ขั้นตอนที่ 4: สร้างไดเรกทอรีหลัก
ในเซิร์ฟเวอร์ Linux ของคุณ ให้สร้างไดเรกทอรีใหม่สำหรับเก็บ repository ทั้งหมดที่ Git จะใช้ในโปรเจกต์ต่อไป คุณสามารถศึกษาการจัดการ Git repository ได้อย่างละเอียด จากนั้นรันคำสั่งนี้:
mkdir directory_name
ขั้นตอนที่ 5: เพิ่มโปรเจกต์ของคุณ!
คุณสร้าง Git server สำเร็จแล้ว! ขั้นตอนการติดตั้งและตั้งค่า Git server เสร็จสมบูรณ์ ขั้นตอนต่อไปคือเพิ่มโปรเจกต์ด้วยคำสั่งต่อไปนี้:
cd parent_directory
mkdir new_project.git
จากนั้นพิมพ์คำสั่งนี้เพื่อเพิ่ม remote origin ในเครื่องของคุณ:
git init --bare
git remote add origin name git@address:new_project.git
สุดท้าย ทดสอบว่าทุกอย่างทำงานถูกต้องด้วยการ push ขึ้น Git:
touch testfile
git add testfile
git commit -m "test file"
git push name master
git clone git@address:new_project.git
ยินดีด้วย คุณติดตั้ง Git และสร้าง Git repository บนเซิร์ฟเวอร์สำเร็จแล้ว
คำถามที่พบบ่อย
สามารถโฮสต์ Git ได้โดยไม่ต้องมีเซิร์ฟเวอร์ไหม?
ไม่ ไม่ว่าเซิร์ฟเวอร์ของคุณจะมีลักษณะอย่างไร คุณก็ยังต้องการฮาร์ดแวร์สำหรับรันเซิร์ฟเวอร์นั้น คุณสามารถใช้ GitHub เป็น cloud server สำหรับ repository ของคุณ หรือเลือกใช้ VPS หรือใช้บริการโฮสติ้งของผู้ให้บริการรายอื่นเป็นเซิร์ฟเวอร์
มีวิธีติดตั้ง Git Server แบบที่มี GUI ไหม?
ใช่ แม้ว่า Git เองไม่สนับสนุน GUI แต่มีเวอร์ชันแบบสแตนด์อโลนพร้อม GUI ที่เรียกว่า Git GUI สำหรับผู้ที่ไม่สามารถใช้งานได้โดยไม่มี GUI
Git มีแผนแบบเสียเงินไหม?
ไม่มีค่าใช้จ่าย Git เป็นและจะยังคงเป็นโปรแกรมฟรีแบบโอเพนซอร์สตามเจตนารมณ์ของผู้พัฒนาและผู้เผยแพร่ดั้งเดิม คุณสามารถนำไปใช้ต่อยอดในโปรเจกต์ของตัวเองได้อย่างอิสระ
ทำไมต้องโฮสต์ Git Server ของตัวเอง?
สมมติว่าคุณกำลังทำโปรเจกต์เล็ก ๆ ที่มีไม่กี่ repository การ self-host นั้นให้ความเป็นส่วนตัวและความปลอดภัยมากกว่าอย่างชัดเจน นั่นคือข้อดีหลัก แต่เมื่อโปรเจกต์ขยายใหญ่ขึ้นและจำนวน repository เพิ่มมากขึ้น การ self-host ก็เริ่มตามไม่ทัน