gitlab 11.1
內置了CI/CD
,這個特性從gitlab 8+
就開始有了,不過配置比較瑣碎html
通過幾個大版本的迭代,如今已經簡化了使用方式,也修復了一些坑,這個特性大大吸引了我;node
gitlab
擁有的特性很齊全,包括了第三方登陸,二步驗證,SSH
,GPG
簽名等等nginx
因此對於好東西不拿來用太對不起本身,因而開始了漫漫的爬坑之路;git
因爲東西是部署在公司內的,因此就不開放訪問了,可是能夠參考下個人大致配置;web
至於爲何採用docker
來部署,好遷移,升級也方便(由於數據和配置文件是獨立的)sql
Debian Linux 9
Docker 18.06
, gitlab
鏡像用的gitlab
官方提供的gitlab-ce,好處以下
postgresql
,ruby
,nginx
)這類的基礎的環境都包括進去了假若想至於從0到1的構建(這種能夠更細緻針對業務進行配置),但要考慮的東西比較多;docker
有專業的運維和公司不缺錢的大佬能夠折騰shell
Linux
/Docker && Docker Compose
/ Nginx
數據庫
這塊的知識並非gitlab
,仍是docker
的api
detack
: 容器在後臺運行並輸出容器IDpublish
: 就是暴露端口,簡寫-p
name
: 容器名restart
: 什麼時機會觸發容器重啓,全部狀況volume
: 映射卷的,基本用來持久化數據的# 官方基本姿式,docker直接啓動
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
複製代碼
三個volume
就是暴露的位置
本地位置 | 容器位置 | 做用 |
---|---|---|
/srv/gitlab/data | /var/opt/gitlab | gitlab的數據存放,包括nginx ,postgresql 這些 |
/srv/gitlab/logs | /var/log/gitlab | 日誌存放 |
/srv/gitlab/config | /etc/gitlab | gitlab的主配置文件 |
hostname
:訪問的域名env
: 這裏面就是臨時提權生效的
gitlab
傳入部分參數,讓其構建過程讀取你設置的值(gitlab.rb
)而且生效gitlab.rb
(就是gitlab
的配置文件),只是臨時生效(容器生存期間)sudo docker run --detach \
--hostname gitlab.example.com \
--env GITLAB_OMNIBUS_CONFIG="external_url 'http://my.domain.com/'; gitlab_rails['lfs_enabled'] = true;" \
--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
複製代碼
docker-compose
啓動我偏向於這種,因此寫個構建規則,以下
version: '3.6'
services:
gitlab:
container_name: gitlab
image: gitlab/gitlab-ce:latest
restart: always
environment:
GITLAB_OMNIBUS_CONFIG: | external_url 'https://域名' ports:
- "80:80"
- "443:443"
- "2224:22"
volumes:
- "/srv/gitlab/config:/etc/gitlab"
- "/srv/gitlab/logs:/var/log/gitlab"
- "/srv/gitlab/data:/var/opt/gitlab"
複製代碼
整個初始化的過程,我這邊等了兩分鐘左右,由於服務器配置不是很高~~~~
對於Gitlab
配置,你能夠配置容器內的,也能夠配置映射的區域
前者能夠用gitlab-ctl reconfigure
從新生效,後者須要重啓容器
/etc/gitlab
/srv/gitlab/config
郵箱推送算是一個最基礎的功能的,好比註冊什麼基本通常都會用到
這裏用的是阿里雲的郵箱了,固然是我的郵箱..夠用就好
# https://mailhelp.aliyun.com/freemail/detail.vm?knoId=5869705
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtpdm.aliyun.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "crperx@aliyun.com"
gitlab_rails['smtp_password'] = "xxxxxxxx"
gitlab_rails['smtp_domain'] = "smtp.aliyun.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = 'crperx@aliyun.com'
gitlab_rails['gitlab_email_display_name'] = 'noreply@aliyun.com'
# 其餘郵箱大同小異(QQ,163這些),只要支持smtp協議的皆可,端口這些不用說了
# gitlab_rails['smtp_address'] = "smtp.aliyun.com" : 郵箱交互服務器
# gitlab_rails['smtp_user_name'] = "crperx@aliyun.com" : 郵箱登陸帳號
# gitlab_rails['smtp_password'] = "xxxxxxxx" : 郵箱登陸密碼
#gitlab_rails['gitlab_email_enabled'] = true : 啓動郵箱推送功能
# gitlab_rails['gitlab_email_from'] = 'crperx@aliyun.com': 誰來充當發郵件的
# gitlab_rails['gitlab_email_display_name'] = 'noreply@aliyun.com' : 別人看到的發件人名字
複製代碼
至於測試郵箱有兩種姿式,一種是gitlab
控制檯,一種就是打開網站去註冊了,前者以下,後者不用說
Gitlab
容器gitlab-rails console
進入到gitlab
控制檯效果
經常使用的郵箱基本均可以收到....
我這臺渣渣服務器目前帶不了太多服務,因此就不考慮nginx
獨立作反射了(gitlab
支持反射代理)
用的gitlab
內置的nginx
,直接用默認端口
申請過程挺簡單的,只要你有備案好的域名,基本均可以批下來,這過程就不用說了
待批下來以後,便可下載證書(簽名和私鑰)
下載下來解壓後是有兩個文件,
1533582000680.key
: 證書私鑰!!!!證書私鑰!!!!證書私鑰!!!!1533582000680.pem
: 公鑰,阿里雲提供的是pem格式我去看了下gitlab.rb
(gitlab
的主配置文件)是須要crt
格式的,
###############################################################################
## GitLab NGINX
##! Docs: https://docs.gitlab.com/omnibus/settings/nginx.html
################################################################################
# nginx['enable'] = true
# nginx['client_max_body_size'] = '250m'
# nginx['redirect_http_to_https'] = false
# nginx['redirect_http_to_https_port'] = 80
##! Most root CA's are included by default 默認的根證書
# nginx['ssl_client_certificate'] = "/etc/gitlab/ssl/ca.crt"
##! enable/disable 2-way SSL client authentication 二步驗證是否校驗證書,看需求開
# nginx['ssl_verify_client'] = "off"
##! if ssl_verify_client on, verification depth in the client certificates chain 校驗的深度
# nginx['ssl_verify_depth'] = "1"
# nginx['ssl_certificate'] = "/etc/gitlab/ssl/#{node['fqdn']}.crt" 證書的位置
# nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/#{node['fqdn']}.key"
# nginx['ssl_ciphers'] = "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256"
# nginx['ssl_prefer_server_ciphers'] = "on"
##! **Recommended by: https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html
##! https://cipherli.st/**
# nginx['ssl_protocols'] = "TLSv1.1 TLSv1.2"
複製代碼
這時候咱們就須要轉換一下了,打開終端,
# 我把數字重命名爲gitlab了
# 這條命令的意思就是
# 生成x509規格的證書,輸出位可讀文本格式,
# -in 是標準輸入就是接受哪一個
# -out 標準輸出,輸出文件爲何格式
openssl x509 -outform PEM -in gitlab.pem -out gitlab.crt
# 如果轉出格式用的二進制流(DER),會輸出這個問題
# SSL: error:0906D06C:PEM routines:PEM_read_bio:no start line:Expect
複製代碼
接下來就用scp
把對應的證書傳到服務器上,修改下配置文件
# -r 遞歸傳送,由於傳送的是整個目錄
# 傳到的是容器映射的目錄,這樣重啓下容器就能生效了
scp -r ./ssl root@xxxxx:/srv/gitlab/config
複製代碼
由於服務器不給力.因此默認的不夠用...
# 這個是針對請求鉤子的,還有針對Git的這些
gitlab_rails['webhook_timeout'] = 60 #默認是10s
# 如果大致都須要求延長的,能夠配置全局,後者是進程數
unicorn['worker_timeout'] = 60
unicorn['worker_processes'] = 2
複製代碼
gitlab
配置的修改有兩種,一種是啓動容器的時候傳參,參考上面;
一種直接改映射的配置文件; 至於如何生效,有兩種方式;
其一:gitlab-ctl
=> gitlab-ctl reconfigure
重載配置文件生效
對於其一,咱們確定是要進入容器才能操做的;
docker ps -a
: 找到gitlab
容器的實例,docker-compose ps
和docker ps
大同小異docker exec -it gitlab bash
: 進入容器,並使用bash shell
應該說docker-compose
的命令行基本是針對docker
的封裝的,
只是操做的是由compse
生成的實例,docker
也能干涉也不奇怪
gitlab-ctl還有一些其餘的命令,好比暫停,中止gitlab
,輸出配置文件等等
其二:重啓容器!
gitlab.rb
的配置實在是多,整個配置文件目前接近1800行;
裏面涵蓋了日誌
,安全
,nginx
,數據庫等等的全部配置
大多數配置都有默認值,因此不少東西看你的須要來開啓,
咱們這裏不須要開啓太多東西,郵箱
和https
,超時
的配置,其餘都默認(好比日誌這些,數據庫初始化這些)
證書必須提早複製過去!!!!,木有目錄就新建
# 就是把配置文件寫在容器構建裏面,容器啓動的時候直接生效,免去不少重啓或者命令行這類的操做
# 注意替換中文區域的內容
version: '3.6'
services:
gitlab:
container_name: gitlab
image: gitlab/gitlab-ce:latest
restart: always
environment:
GITLAB_OMNIBUS_CONFIG: | external_url 'https://code.crper.com' unicorn['worker_timeout'] = 60 unicorn['worker_processes'] = 2 gitlab_rails['smtp_enable'] = true gitlab_rails['smtp_address'] = "smtpdm.aliyun.com" gitlab_rails['smtp_port'] = 465 gitlab_rails['smtp_user_name'] = "crperx@aliyun.com" gitlab_rails['smtp_password'] = "Qwe456jkl?Asd789iop?" gitlab_rails['smtp_domain'] = "smtpdm.aliyun.com" gitlab_rails['smtp_authentication'] = "login" gitlab_rails['smtp_enable_starttls_auto'] = true gitlab_rails['smtp_tls'] = true gitlab_rails['gitlab_email_enabled'] = true gitlab_rails['gitlab_email_from'] = 'crperx@aliyun.com' gitlab_rails['gitlab_email_display_name'] = 'noreply@aliyun.com' gitlab_rails['gitlab_shell_ssh_port'] = 22 user['git_user_email'] = "crperx@aliyun.com" nginx['enable'] = true nginx['client_max_body_size'] = '250m' nginx['redirect_http_to_https'] = true nginx['ssl_certificate'] = "/etc/gitlab/ssl/gitlab.crt" nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/gitlab.key" nginx['ssl_ciphers'] = "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256" nginx['ssl_prefer_server_ciphers'] = "on" nginx['ssl_protocols'] = "TLSv1.1 TLSv1.2" nginx['ssl_session_cache'] = "builtin:1000 shared:SSL:10m" nginx['listen_addresses'] = ["0.0.0.0"] nginx['http2_enabled'] = true ports:
- "80:80"
- "443:443"
- "22:22"
volumes:
- "/srv/gitlab/config:/etc/gitlab"
- "/srv/gitlab/logs:/var/log/gitlab"
- "/srv/gitlab/data:/var/opt/gitlab"
gitlab-runner:
image: gitlab/gitlab-runner:alpine
複製代碼
官方資源:
這個是你映射的路徑或者文件名字沒匹配(讀取文件)報錯
官方的寫法
# gitlab官方教材
nginx['listen_addresses'] = ["0.0.0.0", "[::]"] # listen on all IPv4 and IPv6 addresses
# 手動改成
nginx['listen_addresses'] = ["0.0.0.0"]
# [::] 表明IPV6 , 我用的是阿里雲服務器,估計是個人安全策略沒開放,可是沒用到,直接刪了也沒所謂了
# 阿里雲的安全策略有最高級的優先權,好比入站出站的端口開放,不開是無法訪問的
複製代碼
Gitlab
目前最新版(11)集成了部分中文(在用戶中心更改下語言爲簡體中文便可)Gitlab
對資源的要求不低.我單核|2G運存|1M帶寬
時不時的無響應...官推最低配置雙核|4G運存
極度扎心,因此對於CI/CD
(持續化集成)只能等有閒錢升級服務器再考慮了....
由於最初的考慮是,把一些經常使用的服務都容器化,統一用nginx
代理服務
用Docker Compose
編排好比yapi
,gitlab
,測試網站這些.....
對於有不對之處盡請留言,會及時修正,謝謝閱讀