部署Gitlab-CE with Docker私有云環境

應用環境
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一切直接放入文件名就可以了。當然主文件名或擴展名是支持通配符的。

-待續-

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/82353.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/82353.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/82353.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MyBatis 的動態 SQL 特性來實現有值字段才進行插入或更新

MyBatis 動態 SQL 解決方案 <!-- 動態INSERT語句 --> <insert id"addDailyFreezeTer" parameterType"com.linyang.pecker.pojo.DailyFreezeTerminalBean">INSERT INTO dailyfreezeter_info<trim prefix"(" suffix")" …

網絡原理與 TCP/IP 協議詳解

一、網絡通信的本質與基礎概念 1.1 什么是網絡通信&#xff1f; 網絡通信的本質是跨設備的數據交換&#xff0c;其核心目標是讓不同物理位置的設備能夠共享信息。這種交換需要解決三個核心問題&#xff1a; 如何定位設備&#xff1f; → IP地址如何找到具體服務&#xff1f;…

CUDA編程筆記(1)--最簡單的核函數

本文用來記錄cuda編程的一些筆記以及知識 本筆記運行在windows系統&#xff0c;vs編譯器中&#xff0c;cuda版本是12.6 先看一下最基本的代碼例子&#xff1a; #include<iostream> #include<cstdio> #include "cuda_runtime.h" #include "device…

系統架構中的限流實踐:構建多層防護體系(二)

系統架構中的限流實踐:構建多層防護體系 一、接入層限流:流量攔截第一關二、應用層限流(服務內限流)Java生態方案對比三、分布式限流(跨服務限流)四、數據層限流(數據庫/緩存限流)1. 數據庫防護策略2. 緩存優化方案五、中間件層限流(消息隊列/分布式服務)六、客戶端限…

AI學習筆記二十八:使用ESP32 CAM和YOLOV5實現目標檢測

若該文為原創文章&#xff0c;轉載請注明原文出處。 最近在研究使用APP如何顯示ESP32 CAM的攝像頭數據&#xff0c;看到有人實現把ESP32 CAM的數據流上傳&#xff0c;通過YOLOV5來檢測&#xff0c;實現拉流推理&#xff0c;這里復現一下。 一、環境 arduino配置esp32-cam開發環…

uni-app(5):Vue3語法基礎上

Vue (讀音 /vju?/&#xff0c;類似于 view) 是一套用于構建用戶界面的漸進式框架。與其它大型框架不同的是&#xff0c;Vue 被設計為可以自底向上逐層應用。Vue.js 的核心是一個允許采用簡潔的模板語法來聲明式地將數據渲染進 DOM 的系統&#xff0c;只關注視圖層&#xff0c;…

JAVA:Kafka 存儲接口詳解與實踐樣例

?? 1、簡述 Kafka 以其高吞吐、可擴展和高可靠性著稱,其強大性能的背后核心在于其高效的存儲設計。Kafka 不是傳統意義上的隊列,而是一個分布式日志系統,其存儲模塊是核心組成部分。 本文將深入剖析 Kafka 的存儲接口實現機制,并結合 Java 示例進行模擬驗證。 ?? 2、…

Docker 使用鏡像[SpringBoot之Docker實戰系列] - 第537篇

歷史文章&#xff08;文章累計530&#xff09; 《國內最全的Spring Boot系列之一》 《國內最全的Spring Boot系列之二》 《國內最全的Spring Boot系列之三》 《國內最全的Spring Boot系列之四》 《國內最全的Spring Boot系列之五》 《國內最全的Spring Boot系列之六》 《…

數據庫入門教程:以商品訂單系統為例

數據庫入門教程&#xff1a;以商品訂單系統為例 一、前言 數據庫是現代軟件開發中不可或缺的基礎&#xff0c;掌握數據庫的基本概念和操作&#xff0c;是每個開發者的必經之路。本文將以“商品-品牌-客戶-訂單-訂單項”為例&#xff0c;帶你快速入門數據庫的核心知識和基本操…

GeoServer樣式設置:使用本地圖標及分層/分視野顯示

GeoServer樣式設置:使用本地圖標及分層/分視野顯示 1、本地圖標生效設置2、GeoServer添加不同視野的圖標點樣式1)服務預覽效果2)本地圖標引用3)不同視野顯示不同圖標4)標注注記顯示空間的點數據,使用圖標來表示是非常常見的業務需求,而且由于在不同比例尺下,可能需要設…

DL00347-基于人工智能YOLOv11的安檢X光危險品刀具檢測含數據集

&#x1f6a8; AI技術革新&#xff0c;提升安檢效率與安全性&#xff01;YOLOv11助力X光危險品刀具檢測&#xff01; &#x1f4a1; 在安全領域&#xff0c;效率與精準度的要求從未如此迫切。作為科研人員&#xff0c;是否一直在尋找一款可以提升安檢準確率、減少人工干預、提…

測試計劃與用例撰寫指南

測試計劃與用例撰寫指南 一、測試計劃&#xff1a;項目測試的 “導航地圖”1.1 測試計劃的核心目標 1.2 測試計劃的關鍵要素 1.2.1 項目概述 1.2.2 測試策略 1.2.3 資源與進度 1.2.4 風險評估與應對 二、測試用例&#xff1a;測試執行的 “行動指南”2.1 測試用例的設計原則 2…

微服務的應用案例

從“菜市場”到“智慧超市”&#xff1a;一場微服務的變革之旅 曾經&#xff0c;我們的系統像一個熙熙攘攘的傳統菜市場。所有功能模塊&#xff08;攤販&#xff09;都擠在一個巨大的單體應用中。用戶請求&#xff08;買菜的顧客&#xff09;一多&#xff0c;整個市場就擁堵不堪…

Java設計模式之觀察者模式:從基礎到高級的全面解析

文章目錄 一、觀察者模式基礎概念1.1 什么是觀察者模式?1.2 觀察者模式的四大角色1.3 觀察者模式類圖二、觀察者模式實現步驟2.1 基礎實現步驟2.2 詳細代碼實現第一步:定義主題接口第二步:定義觀察者接口第三步:創建具體主題第四步:創建具體觀察者第五步:客戶端使用三、觀…

GATT 服務的核心函數bt_gatt_discover的介紹

目錄 概述 1 GATT 基本概念 1.1 GATT 的介紹 1.2 GATT 的角色 1.3 核心組件 1.4 客戶端操作 2 bt_gatt_discover函數的功能和應用 2.1 函數介紹 2.1 發現類型&#xff08;Discover Type&#xff09; 3 典型使用流程 3.1 服務發現示例 3.2 級聯發現模式 3.3 按UUID過…

【更新至2023年】1985-2023年全國及各省就業人數數據(無缺失)

1985-2023年全國及各省就業人數數據&#xff08;無缺失&#xff09; 1、時間&#xff1a;1985-2023年 2、來源&#xff1a;Z國統計年鑒、各省年鑒、新中國60年 3、指標&#xff1a;就業人數 4、范圍&#xff1a;全國及31省 5、缺失情況&#xff1a;無缺失 6、指標解釋&am…

0基礎學習Linux之揭開朦朧一面:環境基礎開發工具

目錄 Linux下安裝軟件的方案&#xff1a; 對于操作系統的理解&#xff1a; 操作系統的生態問題&#xff1a; 什么是好的操作系統&#xff08;os&#xff09;&#xff1a; 重新理解centos VS ubnutu VS kail&#xff1a; 關于yum: 用 yum 安裝軟件(安裝和卸載軟件一定要有r…

YOLO 算法詳解:實時目標檢測的里程碑

在計算機視覺領域&#xff0c;目標檢測一直是一個關鍵且熱門的研究方向&#xff0c;而 YOLO&#xff08;You Only Look Once&#xff09;算法憑借其出色的實時性和較高的檢測精度&#xff0c;成為了目標檢測算法中的明星選手。本文將深入探討 YOLO 算法的原理、發展歷程、技術優…

leetcode98.驗證二叉搜索樹:遞歸法中序遍歷的遞增性驗證之道

一、題目深度解析與BST核心性質 題目描述 驗證二叉搜索樹&#xff08;BST&#xff09;是算法中的經典問題&#xff0c;要求判斷給定的二叉樹是否滿足BST的定義&#xff1a; 左子樹中所有節點的值嚴格小于根節點的值右子樹中所有節點的值嚴格大于根節點的值左右子樹本身也必須…

MathQ-Verify:數學問題驗證的五步流水線,為大模型推理筑牢數據基石

MathQ-Verify&#xff1a;數學問題驗證的五步流水線&#xff0c;為大模型推理筑牢數據基石 大語言模型在數學推理領域進展顯著&#xff0c;但現有研究多聚焦于生成正確推理路徑和答案&#xff0c;卻忽視了數學問題本身的有效性。MathQ-Verify&#xff0c;通過五階段流水線嚴格…