應用環境
Ubuntu 20.04.6 LTS (GNU/Linux 5.15.0-139-generic x86_64)
Docker version 28.1.1, build 4eba377
文章目錄
- 拉取容器鏡像
- 生成Run腳本
- 參數解讀
- 實例腳本
- 環境配置
- 管理員密碼遺忘
- 服務郵箱配置
- 郵件測試
- 運維問題集錦
- (1) 端口映射關系
- (2) 服務日志
- (3) 分支受保護
- 項目操作
- (1) 建立群組
- (2) 創建項目
- (3) 項目的版本控制
拉取容器鏡像
sudo apt-get update## gitlab-ce:17.9.6-ce.0
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/gitlab/gitlab-ce:17.9.6-ce.0## gitlab-ce:17.10.4-ce.0
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/gitlab/gitlab-ce:17.10.4-ce.0
## 添加標簽名Tag
docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/gitlab/gitlab-ce:17.10.4-ce.0 docker.io/gitlab/gitlab-ce:17.10.4-ce.0
## 移除標簽名Tag
docker rmi swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/gitlab/gitlab-ce:17.10.4-ce.0
國內鏡像參考:
渡渡鳥鏡像
清華大學開源軟件鏡像
生成Run腳本
可參考:渡渡鳥-Run助手
參數解讀
# 將鏡像進實例化成容器并運行
docker run# 【i】保持STDIN(標準輸入)開放,即使沒有附加任何東西。這通常用于讓容器的進程保持運行,即使沒有附加到終端。例如,你可以在容器內部運行一個交互式shell
# 【t】分配一個偽終端(pseudo-TTY),這對于交互式shell非常重要,比如當你想要在容器中運行bash或sh時。
# 【d】后臺運行,即所謂的“detached”模式。容器會在后臺啟動,并且你會得到容器的ID或名稱
-itd# 容器命名
--name gitlab-ce# 重啟策略
## no:不自動重啟,缺省時默認
## always:始終重啟
## unless-stopped:Docker 服務重啟后自動啟動容器,除非容器被手動停止。可指定最大重試次數,例如 --restart=on-failure:3(最多重啟3次)。
## on-failure:僅在容器非正常退出(退出狀態碼非0)時重啟。
--restart=always \# 【p】映射策略,<宿主端口>:<容器端口>
## 比如gitlab,22為ssh協議;80為http協議;443為https協議
-p 1022:22 \
-p 81:80 \
-p 10443:443 \# 使用本地時區
-e TimeZone='Asia/Shanghai' \
-e TZ='Asia/Shanghai' \
-v /etc/localtime:/etc/localtime \# Host域名映射
--add-host=gitlab.oh.com:172.10.3.200 \# 掛載卷映射(宿主:容器)
## /etc/gitlab:配置文件
## /var/log/gitlab:日志數據
## /var/opt/gitlab:應用數據
-v /gitlab-ce/config:/etc/gitlab \
-v /gitlab-ce/logs:/var/log/gitlab \
-v /gitlab-ce/data:/var/opt/gitlab \# 讓容器獲取宿主機root權限
--privileged=true \# 最后一行所引用的docker鏡像源
實例腳本
建議http服務,不要使用默認的80端口。很容易與其它docker容器服務或宿主機其它服務沖突,比如宿主機安裝的nginx、apache服務。
docker run -itd \
--name gitlab-ce \
--restart=always \
-p 1022:22 \
-p 81:80 \
-p 10443:443 \
-e TimeZone='Asia/Shanghai' \
-e TZ='Asia/Shanghai' \
-v /etc/localtime:/etc/localtime \
-v /gitlab-ce/config:/etc/gitlab \
-v /gitlab-ce/logs:/var/log/gitlab \
-v /gitlab-ce/data:/var/opt/gitlab \
--privileged=true \
docker.io/gitlab/gitlab-ce:17.10.4-ce.0
環境配置
# 打開配置文件
sudo vim /gitlab-ce/config/gitlab.rb
編輯內容如下
## GitLab URL
external_url 'http://192.168.1.50'## GitLab SSH
gitlab_rails['gitlab_ssh_host'] = '192.168.1.50'
gitlab_rails['time_zone'] = 'Asia/Shanghai'### GitLab Shell settings for GitLab
gitlab_rails['gitlab_shell_ssh_port'] = 1022
# gitlab_rails['gitlab_shell_git_timeout'] = 800
輸入:wq
保存退出后,進入Gitlab bash控制臺
sudo docker exec -it gitlab-ce bash
# 更新配置
gitlab-ctl reconfigure#修改gitlab.yml
vi /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml
內容如下
提示
如果不在Gitlab bash控制臺中打開,則在宿主機/gitlab-ce/data/gitlab-rails/etc/gitlab.yml
打開編輯
sudo vim /gitlab-ce/data/gitlab-rails/etc/gitlab.yml
重啟服務
sudo docker restart gitlab-ce
輸入:wq!
保存退出后,重啟容器
gitlab-ctl restart
執行結果如下
當成功執行后,會生成容器ID(docker后端會直接開始運行該容器)。通過portainer-ce WEB端查看,就能看到當前運行狀態
當運行狀態呈現綠色時,就可以直接訪問容器Web端了。在訪問前,需要先查看Gitlab實例化時隨機生成的root密碼(注意密碼僅24小時內有效)
# 先退出Gitlab控制臺
exit
# 查看root初始化密碼
sudo cat initial_root_password
內容如下
登錄到Web端后,先修改顯示語言:
- 左側導航欄右上角頭像,進入【Preferences】偏好設置。
- 拉到最下面【Localization】本地化,將【Language】語言,設置為【Chinese, Simplified】中文。
- 再拉到底,直接【Save changes】保存。
保存成功后,直接刷新頁面或直接按F5即可。之后再進入左側導航欄【密碼】,修改root密碼即可。
提示
如果宿主機是虛擬機環境(比如Ubuntu Sublinux with WSL),那仍需將GitLab私有服做物理網絡穿透。否則宿主機所在局域中其它計算機仍無法訪問該Gitlab服務。
管理員密碼遺忘
直接進入Gitlab bash控制臺
sudo docker exec -it gitlab-ce bash--連接gitlab數據庫(#號前綴是控制臺提示符狀態)
gitlab-rails console -e production## 執行結果
--------------------------------------------------------------------------------Ruby: ruby 3.2.5 (2024-07-26 revision 31d0f1a2e7) [x86_64-linux]GitLab: 17.6.1 (8a31863db02) FOSSPostgreSQL: 14.11
------------------------------------------------------------[ booted in 32.61s ]
Loading production environment (Rails 7.0.8.4)
irb(main):001:0>--修改root密碼
# 查找并指向到root賬號
irb(main):005:0> user = User.find_by(username: 'root')
=> #<User id:1 @root>
# 修改root密碼(注意第2遍為確認密碼),user.save即為保存
irb(main):006:0> user.password = 'S87fdj@&yhkk'
irb(main):007:0> user.password_confirmation = 'S87fdj@&yhkk'
irb(main):008:0> user.save!
=> true
irb(main):009:0> exit# 退出Gitlab bash控制臺
root@2a11f26e011d:/# exit
服務郵箱配置
# 打開配置文件
sudo vim /gitlab-ce/config/gitlab.rb
追加內容如下
### GitLab email server settings
###! Docs: https://docs.gitlab.com/omnibus/settings/smtp.html
###! **Use smtp instead of sendmail/postfix.**
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qq.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "admin@smtp.com"
gitlab_rails['smtp_password'] = "S87fdj@&yhkk"
gitlab_rails['smtp_domain'] = "qq.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = false
gitlab_rails['smtp_tls'] = true
# gitlab_rails['smtp_pool'] = false###! **Can be: 'none', 'peer', 'client_once', 'fail_if_no_peer_cert'**
###! Docs: http://api.rubyonrails.org/classes/ActionMailer/Base.html
gitlab_rails['smtp_openssl_verify_mode'] = 'none'# gitlab_rails['smtp_ca_path'] = "/etc/ssl/certs"
# gitlab_rails['smtp_ca_file'] = "/etc/ssl/certs/ca-certificates.crt"### Email Settings
gitlab_rails['gitlab_email_enabled'] = true##! If your SMTP server does not like the default 'From: gitlab@gitlab.example.com'
##! can change the 'From' with this setting.
gitlab_rails['gitlab_email_from'] = 'master@gitlab.com'
gitlab_rails['gitlab_email_display_name'] = 'GitLab CE'
gitlab_rails['gitlab_email_reply_to'] = 'master@gitlab.com'
# gitlab_rails['gitlab_email_subject_suffix'] = ''
# gitlab_rails['gitlab_email_smime_enabled'] = false
# gitlab_rails['gitlab_email_smime_key_file'] = '/etc/gitlab/ssl/gitlab_smime.key'
# gitlab_rails['gitlab_email_smime_cert_file'] = '/etc/gitlab/ssl/gitlab_smime.crt'
# gitlab_rails['gitlab_email_smime_ca_certs_file'] = '/etc/gitlab/ssl/gitlab_smime_cas.crt'
郵件測試
輸入:wq
保存退出后,進入Gitlab bash控制臺
sudo docker exec -it gitlab-ce bash
# 更新配置
gitlab-ctl reconfigure# 重啟gitlab-ctl服務
gitlab-ctl restart# 郵件測試
gitlab-rails console -e production
Notify.test_email('admin@smtp.com', 'Subject', 'Body').deliver_now
郵箱有收到郵件,就表示配置成功!
運維問題集錦
(1) 端口映射關系
# 登錄gitlab控制臺
sudo docker exec -it gitlab-ce bash# 查看運行進程
netstat -ltwen# 查看宿主機運行進程
sudo netstat -tunlp
sudo netstat -aptn##查看指定端口占用情況
sudo ps aux | grep 'xrdp*'
sudo netstat -tunlp | grep 端口號
(2) 服務日志
# 宿主機docker跟蹤
## 參數:--tail 10表示實時跟蹤最新的10條記錄
sudo docker logs -f gitlab-ce --tail 10# 直接進入如下路徑,Gitlab容器內相關子服務進程日志都在這里,比如nginx、redis、reconfigure重載配置實例化記錄等等
cd /gitlab-ce/logs/# 將地址解析添加到hosts列表
echo "192.168.1.50 gitlab.local" | sudo tee -a /etc/hosts# 查看配置內容, 僅輸出有效的配置項
sudo cat gitlab.rb | grep -vE '^#|^$'
(3) 分支受保護
錯誤信息【IntelliJ Idea or WebStorm】
remote: GitLab: You are not allowed to push code to protected branches on this project.
不允許將代碼推送到此項目的受保護分支。
錯誤信息【Visual Sutdio】
Git failed with a fatal error.Unencrypted HTTP is not recommended for Gitlab. Ensure the repository remote URL is using HTTPS.
Git失敗并出現致命錯誤。不建議對Gitlab使用未加密的HTTP。確保存儲庫遠程URL使用HTTPS。該錯誤也是因為支分保護的問題,本身極狐官方不推薦在http協議下進行遠程操作代碼。推薦是采用
https或SSH
代碼操作方案。
打開項目【設置】-【倉庫】-【受保護分支】一欄
將允許推送和合并角色調整為如圖(含開發角色),或者直接取消保護也可以(選項是立即生效的)。
項目操作
(1) 建立群組
(2) 創建項目
(3) 項目的版本控制
在解決方案中,經常會存在多個項目和項目目錄,經常需要處理忽略對某個項目、項目里某個文件夾、文件的版本跟蹤控制。
忽略某個項目版本控制,在解決方案根下的.gitignore文件,按下圖添加該目錄路徑即可。
忽略文件夾版本控制(含子目錄及文件),編輯項目根下的.gitignore文件,按下圖添加該目錄路徑即可。
忽略某個文件,在上圖中# Editor directories and files
一切直接放入文件名就可以了。當然主文件名或擴展名是支持通配符的。
-待續-