Coding Gun

การติดตั้ง gitlab บน docker

วิธีการ run gitlab บน container นั้นมีอยู่ 2 วิธีคือ run ด้วย docker และ kubernetes เราจึงสรุปวิธีการติดตั้ง แบ่งออกเป็น 3 หัวข้อดังนี้

ขั้นตอนการติดตั้ง gitlab ด้วย docker

  1. run gitlab container
  2. login เข้า gitlab ด้วย initial root account
  3. ตั้ง root password ใหม่
  4. สร้าง admin user สำหรับเข้าใช้งานในครั้งต่อไป

เราจะไม่ใช้ root account ในการทำงานในแต่ละวันเพราะมีความเสี่ยง เราจะใช้ root account ในกรณีฉุกเฉินเท่านั้น

1. Run gitlab container

run คำสั่ง docker run ตาม script ด้านล่างนี้ เพื่อเริ่มต้นใช้งาน gitlab

docker run --detach \
  --hostname gitlab.example.com \
  --publish 443:443 --publish 80:80 --publish 22:22 \
  --name gitlab \
  --restart always \
  --volume config:/etc/gitlab:Z \
  --volume logs:/var/log/gitlab:Z \
  --volume data:/var/opt/gitlab:Z \
  --shm-size 256m \
  gitlab/gitlab-ce:latest

โดย parameters ต่างๆที่เรากำหนดไว้มีความหมาย ดังนี้

community edition: gitlab-ce สำหรับ free version ถ้าต้องการใช้ free trial ต้องใช้ enterprise edition: gitlab-ee แทน

volume ทุกตัวจะลงท้ายด้วย :Z หมายถึง การบอกให้ volume นี้เป็น private volume ไม่สามารถ share กับ container อื่นได้ ซึ่งถ้าต้องการให้ volume นี้สามารถ share กับ container อื่นได้ให้ใช้ :z แทน

จัดการกับ volume

ในกรณีนี้เราจะใช้ docker volume ที่อยู่ภายใน default folder ของ docker ถ้าต้องการกำหนด mount volume ออกมาใน path ของเราเอง เราจะใช้การกำหนด environment variables ด้วยคำสั่งนี้

บน linux หรือ macos เราจะใช้คำสัง export ในการกำหนด gitlab home

export GITLAB_HOME=/path/to/gitlab-home

บน windows กำหนด path ที่ต้องการ mount config, logs และ data ออกมา โดยถ้าเป็น WSL2 เราจะใช้รูปแบบนี้ /c/gitlab ซึ่งก็จะเท่ากับ c:\gitlab

$env:GITLAB_HOME="/path/to/gitlab-home" 

เปลี่ยนคำสั่ง docker run ในบรรทัดที่ 6-8 ในส่วนของ volume

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
docker run --detach \
  --hostname gitlab.example.com \
  --publish 443:443 --publish 80:80 --publish 22:22 \
  --name gitlab \
  --restart always \
  --volume $GITLAB_HOME/config:/etc/gitlab:Z \
  --volume $GITLAB_HOME/logs:/var/log/gitlab:Z \
  --volume $GITLAB_HOME/data:/var/opt/gitlab:Z \
  --shm-size 256m \
  gitlab/gitlab-ce:latest

หรือถ้าจะกำหนด volume ให้ mount เป็น directory ปัจจุบันให้ใช้คำสั่งนี้

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
docker run --detach \
  --hostname gitlab.example.com \
  --publish 443:443 --publish 80:80 --publish 22:22 \
  --name gitlab \
  --restart always \
  --volume $pwd/config:/etc/gitlab:Z \
  --volume $pwd/logs:/var/log/gitlab:Z \
  --volume $pwd/data:/var/opt/gitlab:Z \
  --shm-size 256m \
  gitlab/gitlab-ce:latest

บน macos ให้ใช้คำสั่งนี้ เปลี่ยนจาก $pwd เป็น $(pwd)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
docker run --detach \
  --hostname gitlab.example.com \
  --publish 443:443 --publish 80:80 --publish 22:22 \
  --name gitlab \
  --restart always \
  --volume $(pwd)/config:/etc/gitlab:Z \
  --volume $(pwd)/logs:/var/log/gitlab:Z \
  --volume $(pwd)/data:/var/opt/gitlab:Z \
  --shm-size 256m \
  gitlab/gitlab-ce:latest

การกำหนด config ให้กับ gitlab

ถ้าอยากจะปรับ configuration ของ gitlab เราสามารถปรับได้ด้วยวิธีต่างๆ ดังนี้

  1. เข้าไปแก้ coinfig ใน container โดยตรง
docker exec -it gitlab /bin/bash
external_url "https://gitlab.example.com
sudo gitlab-ctl reconfigure

หรือจะทำการ restart docker ก็ได้่

docker restart gitlab # gitlab เป็นชื่อ container ที่เราตั้งด้วย --name
  1. แบบที่ 2 คือการกำหนด configuration ไว้ล่วงหน้าก่อนที่ gitlab จะ start ขึ้นมาทำงาน
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
docker run --detach \
  --hostname gitlab.example.com \
  --env GITLAB_OMNIBUS_CONFIG="external_url 'http://api.example.com/'; gitlab_rails['lfs_enabled'] = true;" \
  --publish 443:443 --publish 80:80 --publish 22:22 \
  --name gitlab \
  --restart always \
  --volume $GITLAB_HOME/config:/etc/gitlab \
  --volume $GITLAB_HOME/logs:/var/log/gitlab \
  --volume $GITLAB_HOME/data:/var/opt/gitlab \
  --shm-size 256m \
  gitlab/gitlab-ee:latest

แต่ถ้ามี config ที่ต้องกำหนดหลายตัวเราจะใช้การสร้าง file gitlab.rb ที่มี config ที่เราต้องการ แล้ววางไว้ใน folder $GITLAB_HOME/config ก็ได้

2. login เข้า gitlab ด้วย root account

การ login เข้า gitlab ตรั้งแรกเราจะต้องดึงเอา initial root password ที่ gitlab generate ไว้ให้ออกมาซึ่งมี 2 วิธีให้เลือกดังนี้

เมื่อได้ initial root password เราก็สามารถ login เข้า gitlab server ด้วย user root และ password ที่ได้มานี้ได้เลย

3. ตั้ง root password ใหม่

หลังจาก login เข้ามาแล้วเราควรเปลี่ยน password นี้เป็น password อื่นถึงแม้คุณจะใช้ password manager ในการจัดเก็บ password ก็ตาม ยังไงก็ไม่ควรใช้ password ที่ generate ออกมาในครั้งแรก

4. สร้าง admin user

ขั้นตอนสุดท้ายคือการสร้าง admin user เพื่อให้ admin ใช้งานแทน root account ซึ่งถือเป็น top secret ของเรา ซึ่งถ้าเราสามารถแยก admin ออกมามากกว่า 1 role ได้ก็จะยิ่งดีมาก

ขั้นตอนการติดตั้ง gitlab ด้วย docker compose

เราสามารถติดตั้ง gitlab ด้วย docker compose แทน docker ก็ได้ ข้แดีของการใช้ docker compose คือ

ขั้นตอนในการ run gitlab ด้วย docker compose มีดังนี้

  1. สร้าง file docker-compose.yml ตามตัวอย่างด้านล่าง
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
version: '3.6'
services:
  web:
    image: 'gitlab/gitlab-ce:latest'
    restart: always
    hostname: 'gitlab.example.com'
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'https://gitlab.example.com'
        # ใส่ gitlab configuration ที่ต้องการไว้ตรงนี้ ขึ้นบรรทัดใหม่ได้ แต่ย่อหน้าต้องตรงกัน        
    ports:
      - '80:80'
      - '443:443'
      - '22:22'
    volumes:
      - 'config:/etc/gitlab'
      - 'logs:/var/log/gitlab'
      - 'data:/var/opt/gitlab'
    shm_size: '256m'
  1. run docker compose ด้วยคำสั่ง up (ต้อง run ใน folder ที่มี docker-compose.yml เท่านั้น)
docker-compose up -d
  1. สำหรับเครื่องที่ run docker compose บน production สิ่งที่ต้องทำเพิ่มเติมคือ ตั้งค่า network ที่ใช้เป็น bridge
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
version: '3.6'
services:
  web:
    image: 'gitlab/gitlab-ce:latest'
    restart: always
    hostname: 'gitlab.example.com'
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'https://gitlab.example.com'
        # ใส่ gitlab configuration ที่ต้องการไว้ตรงนี้ ขึ้นบรรทัดใหม่ได้ แต่ย่อหน้าต้องตรงกัน        
    ports:
      - '80:80'
      - '443:443'
      - '22:22'
    volumes:
      - 'config:/etc/gitlab'
      - 'logs:/var/log/gitlab'
      - 'data:/var/opt/gitlab'
    shm_size: '256m'
    networks: 
      - publicnet

networks:
  publicnet:
    driver: bridge

หลังจากนั้นให้ทำการ forward port ออกไปสู่ public network ด้วยคำสั่ง

sudo iptables -I DOCKER-USER -i src_if -o dst_if -j ACCEPT

การติดตั้ง gitlab บน kubernetes

ในการติดตั้ง kubernetes จะมีวิธีการที่ค่อนข้างสลับซับซ้อนเราจึงแยกออกไปอีกบทความซึ่งจะเน้นเรื่องของ การติดตั้่ง gitlab บน kubernetes โดยเฉพาะและยังแยกวิธีการติดตั้งออกเป็น 2 วิธีคือ

อ่านต่อเพิ่มเติมได้ที่

Phanupong Permpimol
Follow me