มาลองติดตั้ง GitLab Server ไว้ใช้เองด้วย GitLab Self-Managed กันเถอะ

Saharat Sattee
SCB TechX
Published in
3 min readNov 30, 2021

บทความนี้ผมจะมาสาธิตการติดตั้ง GitLab Self-Managed บน AWS เบื้องต้นโดยใช้ AMI จาก Marketplace เหมาะสำหรับเพื่อนๆที่ต้องการศึกษาและลองเล่น Gitlab Self-Managed เบื้องต้น ซึ่งต้องบอกเลยว่าการติดตั้งด้วยวิธีดังกล่าวเป็นวิธีที่ไม่ยากและผมเชื่อว่าง่ายกว่าที่เพื่อน ๆ คาดคิดเอาไว้อย่างแน่นอน ใครที่เป็นมือใหม่ AWS ก็สามารถทำตามได้เช่นกัน

ทำความเข้าใจกันก่อน

GitLab คืออะไร

GitLab คือ Software ที่ช่วยจัดการ Git Repository หรือการจัดเก็บ Source Code ของเรา และช่วยจัดการ CI/CD (Continuous Integration and Continuous Delivery)

GitLab Self-Managed เหมาะกับใคร

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

  • นำไปใช้งานในระดับองค์กร หรือ ทีมพัฒนาของตัวเองที่ต้องการเก็บ Source Code ไว้ที่ Host ตัวเอง
  • ต้องการคุณสมบัติเพิ่มเติมเกี่ยวกับการพัฒนา เช่น Analytics DevOps Report, Usage Trends และ Monitoring ภาพรวมการใช้งานที่เกิดขึ้นของระบบ
  • ต้องการความยืดหยุ่นในการปรับแต่งและใช้งานให้เหมาะสมกับโครงสร้างพื้นฐานองค์กรหรือทีมพัฒนาของตัวเอง เช่น เปลี่ยนรูปแบบการ login ด้วยการ SSO (Single Sign-On) ผ่านเว็บไซด์ขององค์กร, จำกัดการใช้งานของคนในระบบว่าใครสามารถทำอะไรได้บ้างและมีสิทธิ์เข้าถึงโปรเจกต์ใดได้บ้าง เพื่อความง่ายต่อการควบคุมผู้ใช้งานในระบบ

ซึ่งนี้ก็เป็นเหตุผลเพียงเล็กน้อยของผมที่ได้เลือกใช้งาน GitLab Self-Managed ซึ่งแต่ละคนก็จะมีเหตุผลในการใช้งานที่แตกต่างกันออกไป และยังมีอีกหลายๆปัจจัยให้พิจารณาตามความต้องการของผู้ใช้

GitLab Self-Managed มี 2 Model

  • GitLab CE (Community Edition) ซึ่งเป็น Open-source สามารถใช้งานได้ฟรี
  • GitLab EE (Enterprise Edition) จะมี Feature และคุณสมบัติเพิ่มเติมจาก GitLab CE ซึ่งก็มีค่าใช้จ่ายเพิ่มเติม

โดยในบทความนี้ผมจะสาธิตการติดตั้ง Modle Gitlab CE ทั้งนี้เพื่อน ๆ สามารถเข้าไปดูเปรียบเทียบคุณสมบัติต่างๆได้ที่ ลิงค์นี้

ความต้องการของระบบ

ผมจะอ้างอิงจาก Requirement ขึ้นต่ำที่ GitLab ต้องการ ซึ่งสามารถรองรับผู้ใช้งานได้โดยประมาณ 500 คน

Ubuntu Server

  • Version 16.04/18.04/20.04 (สามารถใช้ OS อื่นได้)
  • Ram 4 GB
  • CPU 4 Cores (เทียบเท่า EC2 instance model c5.xlarge)

Storage 5–10 GB โดยประมาณ

Domain name ที่ชี้ไปที่ Public IP เครื่อง Server ของเรา

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

เริ่มสร้าง GitLab Server บน AWS กันเล้ยยย

ก่อนอื่นผมต้องบอกเพื่อน ๆ ก่อนว่าในการสาธิตครั้งนี้ผมจะสร้างโดยเลือกใช้ AMI จาก AWS Marketplace ที่ได้กล่าวไปเบื้องต้นและในส่วนของการตั้งค่า Instance นั้นผมจะใช้ Default ค่าเริ่มต้น ของ AWS เป็นส่วนใหญ่ เพื่อความง่ายต่อความเข้าใจและทำตาม ซึ่งหากเพื่อน ๆ คนใดที่ต้องการนำไปใช้งานจริงผมขอแนะนำว่าให้ศึกษาและตั้งค่าความปลอดภัยพื้นฐานด้วยนะครับ

ปล.หากเพื่อนๆต้องการแยก Component ส่วนการทำงานเช่น ต้องการใช้งานร่วมกับ RDS หรือ S3 ก็สามารถดูการตั้งค่าเพิ่มเติมได้ที่ ลิงค์นี้

Step 1 : Choose an Amazon Machine Image (AMI)

เริ่มจากการสร้าง EC2 instance เลือก AMI จาก AWS Marketplace โดยการค้นหาคำว่า “GitLab Community Edition” และกดเลือก

รูปที่ 1 ค้นหา GitLab Community Edition AMI บน AWS

Step 2: Choose an Instance Type

ผมเลือกใช้ Instance Type t2.medium เพราะอย่างที่กล่าวไปข้างต้นว่าถ้าผู้ใช้งานในระบบของเรามีไม่มาก เราสามารถลด Resource ของระบบลงได้ ซึ่งอย่างกรณีของผมผู้ใช้งานก็คือเพื่อนร่วมทีมซึ่งมีไม่มากและที่สำคัญประหยัดงบตัวเองฮ่าๆ

Step 3: Configure Instance Details

สำหรับในส่วนนี้ผมก็ไม่ได้ทำการเปลี่ยนแปลงอะไรมากนักจะมีเปลี่ยนแปลงหลักๆก็ 2 ส่วนเท่านั้นคือ

  • Network ผมเลือกเป็น VPC Network ของตัวเอง
  • Subnet ผมเลือกใช้เป็น Subnet ที่เป็น Public subnet ของตัวเอง

Step 4: Add Storage

เลือกใช้ขนาดมาตรฐานที่ 8 GiB (เทียบเท่า 8.58 GB)

Step 5: Add Tags

ใน Step นี้สำหรับใช้ตั้งชื่อ Instance ของเรา

Step 6: Configure Security Group

ผมจะขอใช้ตามที่ AWS Default ค่ามาให้ ซึ่งเราก็สามารถเปลี่ยนการตั้งค่าเป็นที่ตัวเองต้องการได้

รูปที่ 2 แสดงการตั้งค่าของ Security Group

Step 7: Review Instance Launch

ใน Step สุดท้ายนี้สำหรับ Review ว่า Instance ของเรามีภาพรวมอย่างไร ถ้าไม่มีอะไรผิดพลาดก็กดยืนยันแล้วเลือก Key pair สำหรับไว้ใช้อ้างสิทธิ์ในการเชื่อมต่อ Instance ของเพื่อนๆผ่าน Command line ซึ่งเมื่อเสร็จแล้วเราก็จะพบกัน Instance ที่เราพึ่งสร้างไป

รูปที่ 3 แสดงรายละเอียดของ Instance

Create Public IP address

หลักจากเราสร้าง Instance แล้วเราจะมาสร้าง Public IP address กันต่อเพื่อให้เราสามารถเชื่อมต่อกับ Instance ของเราได้ โดยจากทางซ้ายมือของหน้าจอเพื่อน ๆ จากนั้นให้ไปที่ Network & Security => Elastic IP และทำการสร้างใหม่ขึ้น หลังจากสร้างเสร็จเรียบร้อยก็ให้ตั้งค่า IP address โดยเลือกให้ชี้มาที่ Instance ที่เราได้สร้างไว้ก่อนหน้านี้ เพียงเท่านี้ก็เป็นอันเสร็จสิ้น

รูปที่ 4 การตั้งค่า Elastic IP ให้ชี้มาที่ Instance ที่เราสร้าง

ซึ่งเมื่อเรากลับมาดูที่ Instance ของเราก็จะพบว่าในส่วน Public IPv4 address นั้นมีเลข IP address ปรากฎขึ้นมาแล้ว ต่อไปเราจะมา Update GitLab Configuration File เพื่อแก้ให้ external_url ชี้มาที่ Domain ของเรากัน

Set GitLab config

ให้เพื่อนๆเชื่อมต่อ Instance ที่ติดตั้ง Gitlab ผ่าน SSH หล้งจากนั้นให้เพื่อนๆเปิดไฟล์ /etc/gitlab/gitlab.rb และมองหา external_url เพื่อเปลี่ยนให้ GitLab ชึ้มาที่ Domain ของเรา ซึ่งจากตัวอย่างผมจะขอใช้ Public DNS (ดูได้จาก Elastic IP addresses ที่เราสร้าง)

รูปที่ 5 การ Set external_url ที่ GitLab Config

หลักจากแก้ไขเรียบร้อยแล้วให้ทำการ Reconfig 1 ครั้ง (ทำทุกครั้งที่มีการแก้ไข) โดยใช้คำสั่ง

$  sudo gitlab-ctl reconfigure

ซึ่งเมื่อเสร็จแล้วเราจะพบว่าที่ /etc/gitlab นั้นมีไฟล์ที่ชื่อว่า initial_root_password ซึ่งในไฟล์จะมี password สำหรับ admin หลังจากนั้นให้เราเปิด Public IPv4 address ผ่าน browser เราก็จะพบกับหน้าเว็บ GitLab ของเรานั้นเอง สำหรับการ Login ด้วย admin นั้นเราจะใช้

username : root และ password : อยู่ในไฟล์ File initial_root_password

รูปที่ 6 แสดงถึงหน้าจอ Login GitLab Self-Managed

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

--

--