Skip to Content

รีวิวการ host gitlab server ด้วย cloudflare tunnel + docker

October 6, 2026 by
รีวิวการ host gitlab server ด้วย cloudflare tunnel + docker
Thanawat Talabtong

สวัสดีครับ ผมชื่อต้นก้า เป็น backend developer เรียนจบจากคณะวิศวกรรมศาสตร์ สาขาวิศวกรรมสารสนเทศ มหาวิทยาลัยพระจอมเกล้าลาดกระบังครับ

ในวันนี้ผมจะมาแชร์วิธีการ host gitlab server ของตัวเอง ผ่าน docker บนเครื่องของผมและใช้ Cloudflare Tunnel สำหรับ Public ตัว gitlab website ไปยัง subdomain ของผมเอง gitlab.tongla.dev ครับ แต่ก่อนจะมาอธิบายวิธีการ ผมขอเล่าถึงแรงบันดาลใจที่ทำให้ผมอยาก host ตัว gitlab server ของตัวเองก่อนแล้วกันครับ

background 🔥

มีอยู่วันหนึ่งผมกำลังนั่งเขียนตัว github action ใน project เล็ก ๆ ของตัวเองอยู่ ซึ่งตอนนั้นผมพยายามจะเขียนให้ pipeline ของผมสามารถ run ได้ โดยการ manual trigger pipeline เอง หลังจาก merge pull request เข้า branch main อารมณ์เหมือนของ gitlab CI/CD pipelines (pipeline ทางขวาสุด) ซึ่งในตอนนั้นผมพยายามมาประมาณ 3-4 ชั่วโมงก็ยังไม่สำเร็จ (ผมพยายามแล้ว TT) ซึ่งจนถึงตอนนี้ผมก็ยังไม่แน่ใจว่า github มี feature แบบนั้นหรือเปล่า 😭 (หากใครอ่าน blog นี้อยู่แล้วมีวิธีสามารถ DM มาหาผมได้เลยนะครับ 555)

จนกระทั่งเวลาล่วงเลยผ่านไป หัวผมเริ่มอุ่น ๆ จนผมคิดถอดใจและอยากไปใช้ตัว gitlab แทน แต่ ๆๆ ผมก็คิดขึ้นมาได้ว่าเจ้าตัว gitlab เนี่ย มันเป็น open source หมายความว่าเราสามารถ host มันขึ้นมาเองได้ ซึ่งด้วยความที่ผมเป็น dev ที่เท่พอสมควร ผมเลยมีความคิดว่า อยากจะ host gitlab server ของตัวเองขึ้น ทำให้เกิด blog นี้ขึ้นมานั้นเองครับ 555

ซึ่งหลังจากที่เรามีแรงจูงใจแล้ว ต่อไปเราก็จะมา list limitation ต่าง ๆ ของเรากันดีกว่าครับ

  • Where is my server สิ่งแรกที่ผุดขึ้นมาในหัวผมเนี่ย ไม่ใช่เราจะ implement มันยังไง แต่คือเราจะเอา server ที่ไหนมา host มัน (ผมไม่มีตัง 555) ซึ่งถ้าให้ผมคิดเล่น ๆ ในหัว การจะ host เจ้า version control นี่ขึ้นมาได้เนี่ย อาจจะต้องใช้ resource จำนวนมหาศาล ซึ่งถ้าผมจะต้องเสียเงินเผื่อ host เจ้าสิ่งนี้ขึ้นมาเนี่ย ผมยอมไปใช้ github แบบเดิมดีกว่าครับ 5555 😂
  • Where is my storage จากข้อแรกที่เราจะต้องหา server เพื่อมา run เจ้าสิ่งนี้แล้วเนี่ย ต่อไปที่ผมคิดขึ้นมาได้ก็คือ เนี่องจากเจ้าสิ่งนี้ จะต้องเก็บไฟล์ได้หลาย ๆ repository หมายความว่าตัวมันเองก็จะต้องใช้จำนวน disk ที่มหาศาลด้วยเช่นกัน เอาละเลิกทำละ (ล้อเล่นนะคับ 555)

ซึ่งจาก limitation ทั้ง 2 ข้อ ผมจะต้องหา solution แบบเท่ ๆ และใช้เงินน้อย ๆ ออกมาให้ได้ เอาละจะเป็นยังไงมาดูกันต่อเลยคับบ

set up gitlab server 🚀

ส่วนตัวผมใช้ Mac mini M2 ขนาด ram 16GB สำหรับ coding ซึ่งส่วนตัวผมเองไม่ได้ใช้ resource เครื่องของผมมากมายขนาดนั้น มีดูหนัง ฟังเพลง เขียน code ทำให้ผมมีความคิดว่าผมอยากจะใช้เครื่องของผมเอง host เจ้าตัว gitlab server นี้ขึ้นมาเอง โดยปกติผมเปิดเจ้าตัว Mac mini ของผมนี้ 24 ชม เหมือน 7-11 อยู่แล้ว ซึ่งการที่ผมใช้เครื่องของผม host เจ้าตัว gitlab server ขึ้นมาเองจะทำให้ผม solve เจ้าตัว Where is my server ของผมได้ อีกทั้งยังไม่ต้องหาเช่า VM ราคาแพง ๆ เอาเงินไปเติมเกมดีเอ้ย กินข้าวดีกว่าคับ 555

แต่ ๆๆๆ ถ้าผมใช้เครื่องของผมเป็น server หมายความว่า storage ที่ใช้เก็บข้อมูลก็จะต้องเป็นในเครื่องผมอย่างงั้นหรอ ไหนจะต้องเก็บ code ที่ clone มาแล้วยังจะต้องเก็บ repo ไว้ในเครื่องอีกมันดูซ้ำซ้อนจัง 555 ซึ่งจาก concern Where is my storage ทำให้ผมกดเข้าไปดู free disk ในเครื่องของผม แล้วก็ฉุกคิดได้ว่า ไม่น่ารอด 555 จนกระทั่งผมเหลือบไปเห็น hhd รูปสไปร์เดอร์แมนขนาด 2TB ที่ผมซื้อมาไว้ตอนเรียนมหาลัย วางอยู่บนโต๊ะผม ซึ่งเพื่อน ๆ น่าจะเดาได้หลังจากนั้นนะครับว่าผมคิดอะไรอยู่ ถึงมันจะช้ากว่าใช้ disk จากเครื่องผมแต่ก็ไม่มีทางเลือกแล้วหล่ะ 5555

ซึ่งหลังจากที่เราได้ตัว server กับ storage ของเราแล้ว ต่อไปเราก็จะมา implement เจ้าตัว gitlab server ของเราบน local กันก่อนครับ (เอาจริง ๆ ก็คือในตอนนั้นผมคิดแค่ว่าถ้าทำให้ run server ใน local ได้ที่เหลือก็ไม่น่ายากเท่าไหร่) ซึ่งผมก็ได้เข้าไปอ่าน docker hub ของ gitlab-ce มาและได้สรุปวิธีการคร่าว ๆ ไว้ดังนี้ครับ

สร้าง folder gitlab สำหรับ mount data ไว้ใน HHD

ในขั้นตอนแรกผมก็ได้สร้าง folder gitlab ซึ่งประกอบด้วย folder config, logs, และ data ไว้ที่ HHD ของผมสำหรับเอาไว้เก็บข้อมูล gitlab และ Volume เก็บไว้ในกรณีที่ผมทำการ restart เจ้าตัว gitlab server ข้อมูลจะได้ไม่สูญหายไป (ถ้าหายไปผมคงเศร้ามาก ๆ ;-;)

Run Image ของ GitLab CE

หลังจากนั้นผมก็ลองรัน command สำหรับ start เจ้าตัว gitlab ขึ้นมา หลังจากรัน command ไปแล้ว เจ้า docker จะทำการ pull image มาแล้วก็ run ให้เลยแบบ easy ตรงนี้จะรอประมาณ 5-10 นาทีกว่าจะเข้าใช้งานผ่าน localhost ได้ครับ

docker run --detach \
  --hostname gitlab.tongla.com \
  --publish 443:443 --publish 80:80 --publish 22:22 \
  --name gitlab \
  --restart always \
  --platform linux/amd64 \
  --volume /Volumes/tk/gitlab/config:/etc/gitlab \
  --volume /Volumes/tk/gitlab/logs:/var/log/gitlab \
  --volume /Volumes/tk/gitlab/data:/var/opt/gitlab \
  gitlab/gitlab-ce:latest

จาก command ด้านล่าง เห็น arg ที่เป็น --volume ไหมครับตรงนั้นก็คือ path ของ HHD ของผมที่เจ้าตัว gitlab จะเก็บ data จำนวนมหาศาลไว้นั้นเอง ซึ่งหลังจากที่รอมาสักพัง เอ้ยย สักพัก เราจะสามารถเข้าตัว gitlab ของเราผ่าน http://localhost ได้เลยครับ (note ไว้ก่อนครับว่าผมเปลี่ยนวิธีการ login ของผมให้เป็น google ไว้แล้ว สามารถอ่านจาก doc ที่นี่ เลยครับ) ซึ่งเราสามารถแก้ config ของเจ้าตัว gitlab ได้ผ่านไฟล์ gitlab/config/gitlab.rb ที่มันจะสร้างไว้ให้ใน HHD ของเรา อ่านเพิ่มเติมได้ที่ doc นี้เลย แต่หากเราไม่ได้ config อะไรมันเพิ่ม เราสามารถใช้ username เป็น root และ password จาก command sudo docker exec -it gitlab grep 'Password:' ได้เลย อ่านเพิ่มเติม ที่นี่

Cloudflare Tunnel คืออะไร? 🚀

Cloudflare Tunnel เป็นบริการที่ช่วยให้เราสามารถเปิดให้เข้าถึงเซิร์ฟเวอร์ที่อยู่ภายในเครือข่ายส่วนตัวของเราได้โดยไม่ต้องเปิดพอร์ตบนเราเตอร์หรือใช้ Static IP สิ่งนี้เหมาะมากสำหรับการ Host GitLab Server บนเครื่อง Mac Mini ของผม เพราะผมไม่ต้องเสียเวลาตั้งค่า Port Forwarding หรือกังวลเรื่อง IP Address ที่อาจเปลี่ยนแปลง

Cloudflare Tunnel ทำงานโดยการสร้างการเชื่อมต่อแบบ Encrypted ระหว่างเซิร์ฟเวอร์ของเราและ Cloudflare จากนั้นเราสามารถใช้ Subdomain ของเรา เช่น gitlab.tongla.dev เพื่อเข้าถึง GitLab ได้จากอินเทอร์เน็ตอย่างปลอดภัย

ตั้งค่า Cloudflare Tunnel สำหรับ GitLab 🚀

1. ติดตั้ง Cloudflare Tunnel CLI (cloudflared)

เราจำเป็นต้องติดตั้งเครื่องมือ cloudflared เพื่อสร้างและจัดการ Tunnel โดยสามารถติดตั้งผ่าน Homebrew บน macOS ได้ง่าย ๆ ด้วยคำสั่ง:

brew install cloudflare/cloudflare/cloudflared

เมื่อติดตั้งเสร็จแล้ว สามารถตรวจสอบเวอร์ชันได้โดยใช้:

cloudflared --version

2. ล็อกอินและสร้าง Tunnel

ต่อไป เราจะทำการล็อกอินเข้ากับบัญชี Cloudflare และสร้าง Tunnel ใหม่

cloudflared tunnel login

คำสั่งนี้จะเปิดเว็บเบราว์เซอร์ให้เราทำการยืนยันการเข้าถึงบัญชี Cloudflare ของเรา หลังจากนั้น เราจะสร้าง Tunnel ใหม่โดยใช้คำสั่ง:

cloudflared tunnel create gitlab-tunnel

คำสั่งนี้จะสร้าง Tunnel ใหม่ชื่อ gitlab-tunnel และบันทึก Credential ลงในเครื่องของเรา


3. กำหนดค่า Tunnel ให้ชี้ไปที่ GitLab

หลังจากสร้าง Tunnel แล้ว เราจะต้องกำหนดให้มันเชื่อมต่อไปยัง GitLab Server ที่เรารันอยู่บนเครื่อง Mac Mini ของเรา โดยสร้างไฟล์ config.yml ที่โฟลเดอร์ .cloudflared:

tunnel: gitlab-tunnel
credentials-file: /Users/username/.cloudflared/gitlab-tunnel.json

ingress:
  - hostname: gitlab.tongla.dev
    service: http://localhost
  - service: http_status:404

ไฟล์นี้บอกให้ Cloudflare Tunnel ส่งทราฟฟิกจาก gitlab.tongla.dev ไปยัง http://localhost ซึ่งเป็น GitLab Server ที่เรารันอยู่

4. รัน Tunnel

ตอนนี้เราสามารถเริ่มต้น Cloudflare Tunnel ได้โดยใช้คำสั่ง:

cloudflared tunnel run gitlab-tunnel

หลังจากรันคำสั่งนี้ GitLab ของเราก็จะสามารถเข้าถึงได้จาก https://gitlab.tongla.dev แล้วคับ <3