Self-Hosting Source Control อย่างง่าย ๆ

ผมเคยพูดถึงเรื่อง Revision Control ไปหลายรอบแล้วเหมือนกัน ครั้งนี้ผมอยากจะแนะนำวิธีที่ผมใช้กับตัวเองอยู่ในปัจจุบัน ก็คือ host file เองใน server ของตัวเองครับ

ก่อนอื่นอย่าเพิ่งตกใจว่า แค่ใช้คนเดียว ผมถึงขั้นซื้อ Server ของตัวเอง ติดตั้งระบบ วางเครื่อง และเช่า domain เองเลยอย่างนั้นหรือ เปล่าครับ นั่นมันแพงเกิน ถ้ามีกิจการขนาดใหญ่มันก็เป็นเรื่องจำเป็นอยู่เหมือนกัน แต่สำหรับงานเล็ก ๆ ที่ทำเกือบจะเป็นงานอดิเรกแล้วผมใช้อะไรที่ง่ายกว่านั้นครับ

ก่อนอื่นต้องบอกก่อนเลยว่า วิธีที่ง่ายและถูกที่สุดในการสร้าง repository ที่เข้าถึงได้จากทุกที่บนอินเตอร์เนท คือใช้บริการของ BitBucket ครับ ใช้งานได้ 5 คน โค๊ดไม่ต้อง open source ก็ได้ คนอื่นเข้าถึงโค๊ดเราไม่ได้ เรียกได้ว่าสะดวกมาก ๆ

แต่ผมเลือกที่จะ host เองเพราะว่า … ผมมี server ของตัวเองอยู่แล้ว และก็แชร์ไฟล์ผ่านทาง SSH อยู่แล้ว ดังนั้นสิ่งที่ผมทำมีอยู่แค่…ติดตั้ง Git ครับ … เท่านี้ผมก็สามารถเข้าถึง repository ของผมบนอุปกรณ์ของผมเองจากที่ไหนก็ได้ มีผู้ใช้กี่คนก็ได้ และมีขนาดได้สูงสุด 3TB (ตาม HDD ที่ผมใช้ 555) ซึ่งยืดหยุ่นกว่าใช้บริการภายนอกมากทีเดียว

ข้อเสียเองก็มีเหมือนกัน โดยหลัก ๆ แล้วคือ การ commit code ขึ้นไปนั้นจะใช้เวลาค่อนข้างมากถ้าทำจากนอกเนทเวิร์คที่บ้าน เพราะว่า internet ที่ผมใช้มี uplink แค่ 512Kbps แล้วก็จะมีเรื่องของค่าไฟเพิ่มเข้ามา (ผมใช้แชร์ไฟล์อยู่แล้วดังนั้นก็ต้องเสียค่าไฟอยู่แล้ว)

ข้างล่างนี้คือรายละเอียดทั้งหมดที่ผมทำครับ

  1. สร้าง file server ขึ้นมาสักตัว ผมใช้ Raspberry Pi กับ Ext. HDD ของ Seagate (3.5″) ขนาด 1TB เพื่อการนี้ครับ
  2. ติดตั้ง SSH server เพื่อที่จะเข้าถึง repository ได้จากภายนอกเครื่องครับ (ถ้าไม่มีจะสามารถเข้าถึงได้จากตัว server เท่านั้น) เซ็ต user ให้เสามารถเข้าถึง server ผ่าน ssh นี้ด้วยนะครับ
  3. ติดตั้ง git เพื่อเอาไว้สร้าง repository ครับ
  4. สร้าง git repository ในตัวเครื่องด้วยคำสั่ง git init --bare <path-to-repository> ครับ ตัวพารามิเตอร์ --bare นั้นเป็นการระบุว่าให้สร้าง repository โดยไม่ต้องสร้าง working copy ขึ้นมา เพราะเราจะไม่แก้ไฟล์จากในตัว server เลยครับ
  5. สำหรับการเข้าถึงจากเครือข่ายที่อยู่ข้างนอก เราต้องทำการฟอร์เวิร์ดพอร์ทหนึ่งจากตัว router ไปยังพอร์ท 22 ของ server ผมเลือกพอร์ท 2222 เพราะว่าพอร์ท 22 ผมใช้แอคเซสเข้าตัว router ไปแล้วครับ แต่จะใช้พอร์ท 22 ก็ได้ครับ ไม่ผิดแต่อย่างใด
  6. สุดท้ายคือไปสมัครบริการ dynamic dns มาสักตัว ผมใช้บริการของ duckdns.org ครับ ที่ใช้ ddns ช่วยก็เพราะว่าเลขไอพีของเนทเวิร์คเราจะเปลี่ยนไปเรื่อย ๆ ครับ ดังนั้นถ้าให้เราไปจด domain ด้วยวิธีปรกติเนี่ยคงจะไม่ได้ (การเปลี่ยน ip ของตัว static dns ใช้เวลาเป็นวัน ๆ) ส่วนจะให้จำเลขไอพีก็คงไม่เวิร์ค ดังนั้นเราใช้ ddns ช่วยจะง่ายที่สุด เพราะว่าสามารถเปลี่ยนเลขไอพีของ domain name ที่เราใช้อยู่ได้ตลอดเวลา

ทั้งนี้เราจำเป็นต้องมี service หนึ่งตัวที่คอยแจ้งเปลี่ยน IP ให้กับตัว DDNS ทุกครั้งที่เลขไอพีของเนทเวิร์คเราเปลี่ยน ไม่เช่นนั้น domain name ของเราก็คงไร้ประโยชน์ เจ้า service นี้อาจจะรันทืี่ตัว router หรือที่ตัว server ก็ได้ครับ (ผมเลือกที่จะตั้งไว้ที่ router แต่กำลังจะเปลี่ยน 555)

ทีนี้เราก็ได้ repository ที่รันในบ้านเราเอง และเข้าจากที่ไหนก็ได้ผ่านอินเตอร์เนทแล้ว ง่ายไหมครับ 555 ที่จริงบล็อกนี้ไม่มีอะไรเลยนะ

อ้อ ทีนี้แล้วจะใช้ยังไง … เราก็ clone ลงไปที่เครื่องที่ใช้ตามปรกติ หรือจะ push ขึ้นไป หรืออะไรก็แล้วแต่ แต่ที่สำคัญคือ url ที่ใช้นั้นจะเป็น ssh://<username>@<domainname>:port/:<path-to-repository> ครับ อย่างอันที่ผมใช้ก็จะเป็น … เอ๊ะ เดี๋ยว ผมบอกไม่ได้อ่ะครับ 555 ตัวอย่างก็จะเป็นแบบนี้ ssh://noom@example.host.doesnot.exists.com:2222/:home/wutipong/repository/myproj.git ครับ (username นั้นจะไม่ใส่ก็ได้ เดี๋ยวระบบก็จะขึ้นให้ใส่ user กับ password เอง)

หวังว่าจะไม่ยากเกินไปนะครับ

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *

This site uses Akismet to reduce spam. Learn how your comment data is processed.