Install Gitlab Community Edition 14.3.0-ce.0 on Docker
Tags: gitlab, docker, git
Published: 2021-09-25 11:37:52

"ติดตั้ง Gitlab ใช้เองในบ้าน" เป้าหมายสำหรับเสาร์อาทิตย์สัปดาห์นี้ ... ยอมรับเลยว่าความรู้เรื่อง git ผมน้อยมาก เรียกได้ว่า งู ๆ ปลา ๆ เลยก็ได้ จะใช้ก็อะไร ก็ google เอา แล้วก็ใช้เท่าที่ตัวเองรู้ ... ก็รู้อยู่แหละว่า git ทำอะไรได้หลากหลายมาก เกินกว่าความรู้ที่เรามีอยู่ ก็เลยอยากเพิ่มเติมความรู้เรื่องนี้ซะหน่อย ... gitlab นี่แหละแนวเรา มี Community Edition ให้เลือกใช้ได้ และถ้าถูกใจก็ไปต่อกับ Enterprise Edition

อ้อ ... ถ้าแวะเวียนผ่านมาอ่าน แล้วอยากแบ่งปันความรู้เรื่อง git ให้ผม ขอสมัครเรียนด้วยนะครับ อยากรู้มากกกกก

0.ขั้นตอนการเตรียมความพร้อมก่อนการติดตั้ง โดยรวม ๆ ก็เริ่มจากมี VM ผมเลือกใช้ Ubuntu 20.04.3 LTS ขนาด 4 vCPU 8 GB RAM พร้อมติดตั้ง docker และ docker-compose ไว้เรียบร้อยแล้ว และ domain ที่ใช้ในการทดสอบคือ git.d8k.lo
```shell
drs@git:~$ uname -a
Linux git 5.4.0-84-generic #94-Ubuntu SMP Thu Aug 26 20:27:37 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
drs@git:~$ docker version
Client:
 Version:           20.10.7
 API version:       1.41
 Go version:        go1.13.8
 Git commit:        20.10.7-0ubuntu1~20.04.1
 Built:             Wed Aug  4 22:52:25 2021
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server:
 Engine:
  Version:          20.10.7
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.13.8
  Git commit:       20.10.7-0ubuntu1~20.04.1
  Built:            Wed Aug  4 19:07:47 2021
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.5.2-0ubuntu1~20.04.2
  GitCommit:
 runc:
  Version:          1.0.0~rc95-0ubuntu1~20.04.2
  GitCommit:
 docker-init:
  Version:          0.19.0
  GitCommit:
drs@git:~$ docker-compose version
docker-compose version 1.25.0, build unknown
docker-py version: 4.1.0
CPython version: 3.8.10
OpenSSL version: OpenSSL 1.1.1f  31 Mar 2020
``` 


1.สร้าง directory เพื่อเป็นที่เก็บ configuration และ persistent data  รวมถึง key pair สำหรับ TLS ด้วย
```shell
drs@git:~$ WORKING_DIR=$HOME
drs@git:~$ mkdir -p ${WORKING_DIR}/gitlab-data/config/ssl
drs@git:~$ mkdir -p ${WORKING_DIR}/gitlab-data/logs
drs@git:~$ mkdir -p ${WORKING_DIR}/gitlab-data/data
drs@git:~$ cat > ${WORKING_DIR}/gitlab-data/config/ssl/gen-tls <<EOF
#!/bin/bash

rm -f *.key *.crt *.csr


openssl ecparam -out ca.key -name prime256v1 -genkey
openssl req -new -x509  -key ca.key -out ca.crt  -subj "/CN=My CA EC"
rm -f server*

openssl ecparam -out server1.key -name prime256v1 -genkey
openssl req -new -key server1.key -out server1.csr -sha256 -subj "/CN=$(hostname)"
echo subjectAltName = DNS:$(hostname),IP:$(ip a show dev enp1s0 |grep "inet "|awk '{print $2}'|cut -d "/" -f 1),IP:127.0.0.1 >> server1.cnf
echo extendedKeyUsage = serverAuth >> server1.cnf
openssl x509 -req -in server1.csr -CAkey ca.key -CA ca.crt -out server1.crt -CAcreateserial -extfile server1.cnf

openssl dhparam -out dhparam 2048
EOF
drs@git:~$ chmod 755 ${WORKING_DIR}/gitlab-data/config/ssl/gen-tls
drs@git:~$ cd ${WORKING_DIR}/gitlab-data/config/ssl
drs@git:~$ ${WORKING_DIR}/gitlab-data/config/ssl/gen-tls
drs@git:~$ cd
```



2.สร้าง docker-compose.yml และ เรียก dock-compose up -d
```shell
drs@git:~$ cat > ${WORKING_DIR}/docker-compose.yml <<EOF
web:
  image: 'gitlab/gitlab-ce:latest'
  restart: always
  hostname: 'git.d8k.lo'
  environment:
    GITLAB_OMNIBUS_CONFIG: |
      external_url 'https://git.d8k.lo'
      gitlab_rails['gitlab_shell_ssh_port'] = 2224
      nginx['redirect_http_to_https'] = true
      nginx['ssl_certificate'] = "/etc/gitlab/ssl/server1.crt"
      nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/server1.key"
      nginx['ssl_dhparam'] = "/etc/gitlab/ssl/dhparam"

  ports:
    - '80:80'
    - '443:443'
    - '2224:22'

  volumes:
    - '${WORKING_DIR}/gitlab-data/config:/etc/gitlab'
    - '${WORKING_DIR}/gitlab-data/logs:/var/log/gitlab'
    - '${WORKING_DIR}/gitlab-data/data:/var/opt/gitlab'
    - '${WORKING_DIR}/gitlab-data/config/ssl:/etc/gitlab/ssl'
EOF
drs@git:~$ docker-compose up -d
```


3.ตรวจสอบความคีบหน้าของการทำงานของ gitlab-ce ซึ่งใช้เวลาประมาณ 5 นาที ถึงจะพร้อมให้บริการ
```shell
ตรวจสอบชื่อ container จากคำสั่ง docker container ls ในกรณีของผมจะชื่อว่า drs_web_1
drs@git:~$ docker logs -f drs_web_1
```

4.ตรวจสอบรหัสผ่านสำหรับ root เพื่อใช้ในการ login ได้จาก
```shell
drs@git:~$ sudo cat ~/gitlab-data/config/initial_root_password
# WARNING: This value is valid only in the following conditions
#          1. If provided manually (either via `GITLAB_ROOT_PASSWORD` environment variable or via `gitlab_rails['initial_root_password']` setting in `gitlab.rb`, it was provided before database was seeded for the first time (usually, the first reconfigure run).
#          2. Password hasn't been changed manually, either via UI or via command line.
#
#          If the password shown here doesn't work, you must reset the admin password following https://docs.gitlab.com/ee/security/reset_user_password.html#reset-your-root-password.

Password: ueK3olh3hY0yA2nHU2OXSBU+Wvh2F620rOaxVrr1Ldc=

# NOTE: This file will be automatically deleted in the first reconfigure run after 24 hours.
```

5. ทดสอบการใช้งานได้ที่ https://git.d8k.lo
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rucofulqx835m5cgcdej.png)
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/u8ekkgpc0tj87pqprgkj.png)

#มูลค่าความสุข