Docker Gitlab

Docker Gitlab

目標

 用 docker 裝起一個 gitlab 的服務

安裝 Docker

1. Host OS : CentOS 7

2. install Docker

yum install -y docker

Gitlab

以下是官方的連結

 https://docs.gitlab.com/omnibus/docker/

Gitlab CE(不用錢) 和 EE(要錢)

1. image

gitlab/gitlab-ce:rc (release candidate) 

gitlab/gitlab-ce:latest (最新版)

如果要EE就把 -ce 改成 -ee

2. run

sudo docker run --detach --hostname gitlab.example.com --publish 443:443 --publish 80:80 --publish 22:22 --name gitlab --restart always --volume /srv/gitlab/config:/etc/gitlab --volume /srv/gitlab/logs:/var/log/gitlab --volume /srv/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce:latest

--name   Assign a name to the container

container 的名字 

--publish , -p   Publish a container’s port(s) to the host

描述 conatiner 和主機對應的 port ,--publish 本機:Container

--publish 443:443

--publish 80:80

--publish 22:22

gitlab 給出了三個 port 要對應的

http = 80

https = 443

ssh = 22

--volume , -v   Bind mount a volume

描述本機的資料存放位置對應 Container 的存放位置

裝完之後你看本機的 /srv/gitlab ,就會看到 data, config, logs 很清楚

這三個 --volume 可以不都打,預設就是裝在 /srv/container name

--restart no Restart policy to apply when a container exits

如果 container 已經存在了,預設是不重啟,我們是設定每次都重啟

--detach , -d   Run container in background and print container ID

跑在背景最後會 show 出一個 ID

--hostname , -h   Container host name

在 run 的最後在打上要使用 image 如果沒有會自動去下載

使用 service

docker ps

你可以看到狀態應該是要 healthy 才對,starting 太久請打開 log 看一下怎麼一回事,正常是1-3分鐘

port 的對應也列得很清楚,所以現在你可以在主機上打 localhost:6080 就會看到這個畫面,恭喜你成功!

gitlab 一進來就要求你改密碼,root / 新密碼

如果你發現 localhost 開的起來,但是給上 ip 就開不起來,那你就要聯絡IT嚕,我的情況是 port 6080 被鎖

Config

請到 /srv/gitlab(container name)/config

打開這個 gitlab.rb 就是設定檔,裡面應該都是註解(#)掉的設定

如果是在 docker run --env GITLAB_OMNIBUS_CONFIG="external_url 'http://my.domain.com/'; gitlab_rails['lfs_enabled'] = true;"

這種稱作 Pre-configure ,但這些設定是不會寫回 gitlab.rb ,你只有在 run 的時候知道你設了什麼

LDAP

https://docs.gitlab.com/ee/administration/auth/how_to_configure_ldap_gitlab_ce/

https://docs.gitlab.com/ee/administration/auth/ldap.html

Gitlab 你可以直接申請帳號(Container),也支援LDAP,我們現在就是想直接用AD上的帳號就可以登入了

1. Active Directory (AD)

2. 設定好 AD 的資訊

打開gitlab.rb
設定好下面這些資訊

3. 打開 gitlb 登入頁就會多一個 AD 的 Tab 了

上面都是給"溫拿"或"天公仔子"看得,如果連不上 AD 或 帳密 登不進去都屬於正常人(魯蛇)的範疇,

1. 確定AD有沒有連到

需要使用到 ldapsearch ,下面是安裝指令

https://www.agix.com.au/ldapsearch-active-directory/

測試抓取AD的資訊

ldapsearch -D "CN=Joseph Lu,OU=Web Solution Team,OU=HQ TW Office,DC=gsit,DC=com,DC=tw" -w 不告訴你 -p 389 -h ad.gsit.com.tw -b "DC=gsit,DC=com,DC=tw" -Z -s sub "CN=Joseph Lu"

當你成功連上後會看到

-D 帳號,第二個紅框

-w 密碼

-h AD server

-p port 

plain = 389

tls = start_tls = 389

ssl = simple_tls = 636

-Z Start TLS request 

-b basedn,第一個紅框

你可以直接去找IT看這些資訊,這指令只是簡單的測試你可以連上AD而已

2. 設定 gitlab config


gitlab_rails['ldap_enabled'] = true
gitlab_rails['ldap_servers'] = {
'main' => {
  'label' => 'Gsit AD',
  'host' =>  'ad.gsit.com.tw',
  'port' => 389,
  'uid' => 'sAMAccountName',
  'encryption' => 'plain',
  'verify_certificates' => true,
  'bind_dn' => 'CN=Joseph Lu,OU=Web Solution Team,OU=HQ TW Office,DC=gsit,DC=com,DC=tw',
  'password' => '不告訴你勒',
  'active_directory' => true,
  'allow_username_or_email_login' => false,
  'base' => 'OU=Web Solution Team,OU=HQ TW Office,DC=gsit,DC=com,DC=tw'
  }
}

 

這是指帳號要用的欄位,不是指裡面的值,所以我指定比對的欄位是 'sAMAccountName' 我登入的時候就只用打 joseph.lu 

 

跟上面一樣 389 由 start_tls 和 plain 共用,636 是 simple_tls

 

這是我的 userPrincipalName 和 sAMAccountName

uid 是 sAMAccountName ,在 login 的時候含 email 或只有名字,若有開這個設定只會送@之前的字過去給 AD server 也就是 joseph.lu,所以比對會成功

但是 uid 設定成 userPrincipalName 則會失敗,因為缺少@後面

 

當 config 都設定好了後,你可以直接 docker restart 不過會很久或是用 gitlab-ctl reconfigure

不過你需要先進入 gitlab 的命令模式 sudo docker exec -it gitlab /bin/bash,再下 gitlab-ctl reconfigure

config 生效!

 

檢查 gitlab LDAP 設定你可以下 gitlab-rake gitlab:check (檢查全部) 或 gitlab-rake gitlab:ldap:check (只檢查ldap)

只有上面列的人才有辦法用 AD 登入喔!