使用官方提供的 Docker 鏡像部署 GitLab 非常方便,相關(guān)的安裝配置文檔也非常詳細。本文主要是對一次成功的部署流程進行記錄,方便下次快捷部署。
拉取官方鏡像
官方提供了「社區(qū)版」和「企業(yè)版」兩種鏡像,這里采用「社區(qū)版」進行部署,執(zhí)行以下命令拉取最新的 Docker 鏡像。如果需要其他的鏡像標(biāo)簽,請查閱官方鏡像倉庫。
docker pull gitlab/gitlab-ce:latest
創(chuàng)建掛載目錄
在宿主機創(chuàng)建以下目錄,這些目錄將在啟動 Docker 容器時進行掛載:
mkdir -p /data/gitlab/config
mkdir -p /data/gitlab/certs
mkdir -p /data/gitlab/logs
mkdir -p /data/gitlab/data
啟動容器
docker run -d --name gitlab --hostname gitlab.your_domain.com -p 443:443 -p 80:80 --restart always -v /data/gitlab/certs:/etc/gitlab/ssl -v /data/gitlab/config:/etc/gitlab -v /data/gitlab/logs:/var/log/gitlab -v /data/gitlab/data:/var/opt/gitlab --privileged=true gitlab/gitlab-ce:latest
hostname
和配置文件中的external_url
對應(yīng),去掉協(xié)議名稱。
由于我們使用 HTTPS 進行訪問,所以這里將 443 端口映射出來即可,不必映射 80 端口。同樣,ssh 的端口也要映射出來(如果不使用 SSH 協(xié)議進行代碼的 pull 和 push,這里就不需要映射 SSH 端口),宿主機選擇的 ssh 端口要和配置文件中gitlab_shell_ssh_port
配置的端口一致。
GitLab 容器啟動可能需要幾分鐘,執(zhí)行docker logs -f 容器ID
可以觀察啟動日志。
如果容器啟動失敗:提示Permission denied 。這時由于掛載的本地目錄在容器中沒有執(zhí)行權(quán)限, 解決方法是在運行容器的時候,給容器加入權(quán)限參數(shù) --privileged=true
,以特權(quán)方式啟動容器 。
調(diào)整配置文件
GitLab 通過 gitlab.rb
文件進行配置,我們需要調(diào)整外部鏈接、郵件、SSL 認證等配置。
配置郵件發(fā)送服務(wù)
gitlab_rails['gitlab_email_from'] = 'gitlab@your_domain.com'
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.exmail.qq.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "gitlab@your_domain.com"
gitlab_rails['smtp_password'] = "your_email_password"
gitlab_rails['smtp_domain'] = "qq.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
以上是騰訊企業(yè)郵箱的配置示例,部分郵箱服務(wù)商可能不支持第三方客戶端以郵箱密碼進行登錄,那么就需要去服務(wù)商處獲取別的授權(quán)密碼進行登錄。
開啟 HTTPS
external_url 'https://gitlab.you_domain.com:443'
#配置http自動跳轉(zhuǎn)到https協(xié)議的地址;
nginx['redirect_http_to_https'] = true
#80端口是容器內(nèi)的端口,如果不配置http://宿主IP:80/將不可訪問;
nginx['redirect_http_to_https_port'] = 80
# nginx['ssl_certificate'] = "/etc/gitlab/ssl/gitlab.you_domain.com.pem"
# nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/gitlab.you_domain.com.key"
#配置監(jiān)聽容器內(nèi)的443端口,注意不是外面主機的443端口
nginx['listen_port'] = 443
nginx['proxy_set_headers'] = {
"Host" => "$http_host_with_default",
"X-Real-IP" => "$remote_addr",
"X-Forwarded-For" => "$proxy_add_x_forwarded_for",
"X-Forwarded-Proto" => "https",
"X-Forwarded-Ssl" => "on",
"Upgrade" => "$http_upgrade",
"Connection" => "$connection_upgrade"
}
nginx['custom_error_pages'] = {
'404' => {
'title' => 'Example title',
'header' => 'Example header',
'message' => 'Example message'
}
}
external_url
會影響 GitLab 中創(chuàng)建項目的 URL 地址,如果不配置,則默認使用容器的 hostname,即容器 ID,這里需要配置為 GitLab 服務(wù)的域名。
ssl_certificate
和ssl_certificate_key
用于配置 HTTPS 所需要的證書,這兩份證書需要在啟動 GitLab 時掛載到容器中。
注意,如果external_url
使用 https:
方案一、由gitlab自動生成證書掛載進來
方案二、申請免費的SSL,復(fù)制到/data/gitlab/certs
掛載目錄下,使用openssl命令生成.crt文件。
openssl x509 -outform pem -in gitlab.you_domain.com.pem -out gitlab.you_domain.com.crt
SSH 配置
gitlab_rails['gitlab_ssh_host'] = 'gitlab.you_domain.com'
gitlab_rails['gitlab_shell_ssh_port'] = 1022
gitlab_shell_ssh_port
這里的端口會影響 GitLab 項目的 ssh 地址,所以直接配置宿主機映射的端口。
接下來可以執(zhí)行以下命令使配置變更生效:
docker exec -it my-gitlab gitlab-ctl reconfigure
至此可以通過,一下測試地址訪問。
https://gitlab.you_domain.com:443/
宿主機 Nginx 配置
這部分配置是可選的,主要是對 GitLab 服務(wù)做一個反向代理,以下是配置示例,都是非?;A(chǔ)的 HTTPS Server 配置,就不再贅述了。
server {
listen 80;
server_name gitlab.you_domain.com;
rewrite ^(.*) https://$host$1 permanent;
}
server {
listen 443 ssl;
server_name gitlab.you_domain.com;
ssl on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_certificate /home/admin/.acme.sh/your_domain.com/fullchain.cer;
ssl_certificate_key /home/admin/.acme.sh/your_domain.com/your_domain.com.key;
ssl_trusted_certificate /home/admin/.acme.sh/your_domain.com/ca.cer;
ssl_dhparam /home/admin/.acme.sh/dhparam.pem;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
# 將請求代理到 GitLab 容器
location / {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass https://127.0.0.1:443;
}
# 對 GitLab 的靜態(tài)資源訪問也要做轉(zhuǎn)發(fā),否則頁面樣式可能出錯
location ~ .*.(js|css|png)$ {
proxy_pass https://127.0.0.1:443;
}
}
常見問題
Whoops, GitLab is taking too much time to respond
原因可能是機器內(nèi)存太小,gitlab最小內(nèi)存需要2G,建議加大機器內(nèi)存。
替代方案是增加交換分區(qū)的大小,具體如下:
1、檢查現(xiàn)有的交換空間大?。?/p>
free -m
2、添加交換文件,并設(shè)置大小為 2G:
dd if=/dev/zero of=/swapfile bs=1024 count=2048000
3、創(chuàng)建交換空間:
mkswap /swapfile
4、修改 mem.swap 文件權(quán)限:
chmod 0600 /swapfile
5、啟用新增加的 2G 交換空間:文章來源:http://www.zghlxwxcb.cn/news/detail-769001.html
swapon /swapfile
6、修改 /etc/fstab 文件,添加如下一行:文章來源地址http://www.zghlxwxcb.cn/news/detail-769001.html
/swapfile swap swap defaults 0 0
到了這里,關(guān)于使用Docker部署GitLab服務(wù)并啟用HTTPS的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!