Docker Gitlab
用 docker 裝起一個 gitlab 的服務
1. Host OS : CentOS 7
2. install Docker
yum install -y docker
以下是官方的連結
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 如果沒有會自動去下載
docker ps
你可以看到狀態應該是要 healthy 才對,starting 太久請打開 log 看一下怎麼一回事,正常是1-3分鐘
port 的對應也列得很清楚,所以現在你可以在主機上打 localhost:6080 就會看到這個畫面,恭喜你成功!
gitlab 一進來就要求你改密碼,root / 新密碼
如果你發現 localhost 開的起來,但是給上 ip 就開不起來,那你就要聯絡IT嚕,我的情況是 port 6080 被鎖
請到 /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 的時候知道你設了什麼
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 登入喔!