linuxgitlab伺服器搭建
1. Gitlab+Jenkins+Docker+Harbor+K8s集群搭建CICD平台
上帝藉由各種途徑使人變得孤獨,好讓我們可以走向自己。 ——赫爾曼·黑塞《德米安》
CI即為 持續集成(Continue Integration,簡稱CI) ,用通俗的話講,就是 持續的整合版本庫代碼編譯後製作應用鏡像 。建立有效的持續集成環境可以減少開發過程中一些不必要的問題、 提高代碼質量、快速迭代 等,
Jenkins :基於Java開發的一種持續集成工具,用於監控持續重復的工作,旨在提供一個開放易用的軟體平台,使軟體的持續集成變成可能。
Bamboo : 是一個企業級商用軟體,可以部署在大規模生產環境中。
CD即持續交付Continuous Delivery和持續部署Continuous Deployment,用通俗的話說,即可以持續的部署到生產環境給客戶使用,這里分為兩個階段,持續交付我理解為滿足上線條件的過程,但是沒有上線,持續部署,即為上線應用的過程
關於 CD環境 ,我們使用以前搭建好的 K8s集群 ,K8s集群可以實現應用的 健康 檢測,動態擴容,滾動更新 等優點,關於K8s集群的搭建,小夥伴可以看看我的其他文章
拉取鏡像,啟動並設置開機自啟
配置docker加速器
GitLab 不多介紹。一個基於Git的版本控制平台,,提供了Git倉庫管理、代碼審查、問題跟蹤、活動反饋和wiki,當然同時也提供了
切記:這里的埠要設置成80,要不push項目會提示沒有報錯,如果宿主機埠被佔用,需要把這個埠騰出來
external_url 'http://192.168.26.55』
gitlab_rails[『gitlab_ssh_host』] = 餘.168.26.55』
gitlab_rails[gitlab_shell_ssh_port] = 222
修改完配置文件之後。直接啟動容器
相關的git命令
下面我們要配置私有的docker鏡像倉庫,用到的機器為:
這里倉庫我們選擇 harbor ,因為有web頁面,當然也可以使用 registry
首先需要設置selinux、防火牆
安裝並啟動docker並安裝docker-compose,關於docker-compose,這里不用了解太多,一個輕量的docker編排工具
解壓harbor 安裝包:harbor-offline-installer-v2.0.6.tgz,導入相關鏡像
修改配置文件
harbor.yml:設置IP和用戶名密碼
./prepare && ./install.sh
查看相關的鏡像
訪問測試
這里因為我們要在192.168.26.55(CI伺服器)上push鏡像到192.168.26.56(私倉),所有需要修改CI伺服器上的Docker配置。添加倉庫地址
修改後的配置文件
載入使其生效
CI機器簡單測試一下
push一個鏡像,可以在私倉的web頁面查看
鏡像jenkins拉取
這里為什麼要改成 1000,是因為容器里是以 jenkins 用戶的身份去讀寫數據,而在容器里jenkins 的 uid 是 1000,
更換國內清華大學鏡像,Jenkins下載插件特別慢,更換國內的清華源的鏡像地址會快不少
"http://www.google.com/" 替換為 "http://www..com/"
替換後查看
重啟docker,獲取登錄密匙
需要修改jenkins綁定的docker的啟動參數 , ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2376 -H fd:// --containerd=/run/containerd/containerd.sock
修改鏡像庫啟動參數後需要重啟docker
後面 gitlab 要和 jenkins 進行聯動,所以必須要需要對 jenkins 的安全做一些設置,依次點擊 系統管理-全局安全配置-授權策略,勾選"匿名用戶具有可讀許可權"
添加 JVM 運行參數 -Dhudson.security.csrf..DISABLE_CSRF_PROTECTION=true 運行跨站請求訪問
這里的話我們要通過jenkins上的kubectl客戶端連接k8s,所以我們需要安裝一個k8s的客戶端kubectl,下載k8s客戶端
然後拷貝kubeconfig 證書,k8s集群中查看證書位置,這里的證書是之前創建好的,小夥伴可以看看我之前的文章
命令測試沒有問題
我們要部署 Nginx 來運行 hexo 博客系統, hexo 編譯完後為一堆靜態文件,所以我們需要創建一個 svc 和一個 deploy ,使用 SVC 提供服務,使用 deploy 提供服務能力,使用 Nginx+hexo的靜態文件 構成的鏡像
這里我們先用一個Nginx鏡像來代替hexo博客的鏡像
查看deployments和pod
訪問測試沒有問題,之後我們配置好jenkins上的觸發器,直接替換就OK
我們通過 kubectl set 命令更新 deploy 的鏡像時,獲取的鏡像是通過私倉獲取的,所以需要在啟動參數添加私倉地址
這里所有的節點都需要設置後重啟docker
訪問jenkins,接下來才是重點,我們要的jenkins上配置整個CICD流程,從而實現自動化
下面我們編譯一下hexo,生成public的一個文件夾,然後上傳gitlab
同時需要編寫Dockerfile文件來創建鏡像
2. Gitlab+Jenkins通過鉤子實現自動部署web項目,圖文詳細教程
擴展參考:Jenkins+Gitlab通過腳本自動部署回滾web項目至集群
1):Gitlab伺服器:ubuntu 192.168.152.131 ---參考搭建:Linux安裝gitlab,docker安裝gitlab教程
2):Jenkins伺服器:ubunu 192.168.152.130 ---參考搭建:linux安裝Jenkins,或docker安裝Jenkins教程
在伺服器上生成ssh-keygen,用於配置web伺服器和Gitlab伺服器。
3):web伺服器:centos 192.168.152.150 ---已搭建好LNMP環境
4):開發者電腦:Windows+key密鑰 (用於提交代碼)
1:在gitlab創建項目Test Project
2.1): 配置一個開發者電腦的ssh公鑰到gitlab
配置一個開發者電腦的ssh公鑰到gitlab,這樣才能模擬開發上傳代碼到gitlab。
windows生成key過程及git安裝,可參考:Windows下git和github的使用圖文詳細教程_the丶only的博客-CSDN博客_github win
在windows測試clone,和提交代碼。
註:最新版git 已經將默認分支master改為main了。所以看到main,而不是master不要太奇怪
測試成功,在gitlab也顯示有index.html文件。
2.2): 配置jenkins公鑰到gitlab
同理,同樣需要jenkins公鑰,因為jenkins也需要拉去gitlab的代碼。
在 jenkins伺服器 上查看公鑰並復制添加到gitlab,並命名為jekins。
1:插件管理,安裝插件
jenkins本身沒什麼功能,主要是依靠插件來實現各種強大的功能。
基本需要添加的插件:Gitlab Hook、Build Authorization Token Root、Publish Over SSH、Gitlab Authentication、Gitlab、Git Parameter
可以在 Manage Jenkins >> Manage Plugins 查看管理插件。在Available 選項搜索安裝插件即可。
安裝完成後,重啟Jenkins。
2:添加需要部署的web主機
在 Manage Jenkins >> Configure System 中往下翻,找到 Publish over SSH 選項,點擊add ssh server。
在Jenkins伺服器上,查看私鑰,注,是私鑰,不是公鑰。
將私鑰填寫在key位置,還有添加web伺服器相關信息。
註:如果測試報錯如下
Failed to connect or change directory
jenkins.plugins.publish_over.BapPublisherException: Failed to add SSH key. Message [invalid privatekey: [B@2e54414f]
是因為默認用ssh-keygen命令,默認生成了OPENSSH 格式密鑰。而Jenkins暫時不支持這種私鑰,私鑰開頭結尾如下:
所以,需要生成rsa密鑰格式的。用開頭說的ssh-keygen加其他參數生成即可。
私鑰開頭結尾如下:
再次測試,顯示success,則成功。然後點擊save保存即可。
3:構建任務項目
首頁創建任務或者一個項目
命名為web-project,選擇為freestyle project 自由項目。然後ok確認。
3.1):源碼管理 Source Code Management
選擇源碼管理,添加gitlab的項目clone地址。
註:最後路徑選擇分支,我gitlab主分支名字為main,如果是master,則寫master,或者合並的其他分支。
在add添加用戶
添加完成後,選擇git用戶,這時沒有紅色提醒,說明已成功連接
3.2):構建觸發器 Build Triggers
現在Build Triggers,勾選build when....,其他默認,並記下鏈接 http://192.168.152.130:8080/project/web-project
點擊高級 advance 選項。
勾選filter branches regex選擇,填寫分支,生產token。其他默認
3.3):構建 Build
選擇Build 選項。選擇ssh
添加web伺服器
添加完畢,最後save保存。
1:添加鉤子webhooks.
選擇自己的項目Test Project,在設置setting里,選擇鉤子webhooks.
填寫剛才記下的http://192.168.152.130:8080/project/web-project和token值。
最後Add webhook完成:
2:如添加失敗,報錯,更改Network
註:如填寫失敗提示Url is blocked: Requests to the local network are not allowed
還需更改Network選項。
3:測試鉤子
添加完成後,下面會出現鉤子選擇。點擊test中的,push event。
出現successful,即添加成功。
在Jenkins也可以看到剛才的測試時間信息。
在開發電腦上測試提交,我這里為Windows電腦測試。
打開Git Bash,輸入以下命令:
提交成功,回到Jenkins,查看是否構建成功:
綠色顯示構建成功,無錯誤顯示。回到gitlab查看項目。
時間顯示剛才也提交成功,無錯誤。最後在瀏覽器輸入web地址測試,本人配置了web訪問埠8082。所以輸入IP加埠訪問。
內容也已經自動更新成功。
完結撒花!!!
3. 如何在 Ubuntu/Fedora/Debian 中安裝 GitLab
1. 安裝先決條件
首先,我們需要安裝 GitLab 所依賴的軟體包。我們將安裝 curl,用以下載我們所需的文件;安裝openssh-server ,以此來通過 ssh 協議登錄到我們的機器上;安裝ca-certificates,用它來添加 CA 認證;以及 postfix,把它作為一個 MTA(Mail Transfer Agent,郵件傳輸代理)。
註: 若要安裝 GitLab 社區版,我們需要一個至少包含 2 GB 內存和 2 核 CPU 的 linux 機器。
在 Ubuntu 14 .04/Debian 8.x 中
鑒於這些依賴包都可以在 Ubuntu 14.04 和 Debian 8.x 的官方軟體倉庫中獲取到,我們只需通過使用 apt-get 包管理器來安裝它們。為此,我們需要在一個終端或控制台中執行下面的命令:
#apt-get install curl openssh-server ca-certificates postfix
install dependencies gitlab ubuntu debian
在 Fedora 22 中
在 Fedora 22 中,由於 yum 已經被棄用了,默認的包管理器是 dnf。為了安裝上面那些需要的軟體包,我們只需運行下面的 dnf 命令:
# dnf install curl openssh-server postfix
install dependencies gitlab fedora
2. 打開並開啟服務
現在,我們將使用我們默認的初始化系統來打開 sshd 和 postfix 服務。並且我們將使得它們在每次系統啟動時被自動開啟。
在 Ubuntu 14.04 中
由於在 Ubuntu 14.04 中安裝的是 SysVinit 初始化系統,我們將使用 service 命令來開啟 sshd 和 postfix 守護進程:
# service sshd start
# service postfix start
現在,為了使得它們在每次開機啟動時被自動開啟,我們需要運行下面的 update-rc.d 命令:
# update-rc.d sshd enable
# update-rc.d postfix enable
在 Fedora 22/Debian 8.x 中
鑒於 Fedora 22 和 Debian 8.x 已經用 Systemd 代替了 SysVinit 來作為默認的初始化系統,我們只需運行下面的命令來開啟 sshd 和 postfix 服務:
#systemctl start sshd postfix
現在,為了使得它們在每次開機啟動時可以自動運行,我們需要運行下面的 systemctl 命令:
#systemctl enable sshd postfix
Created symlink from/etc/systemd/system/multi-user.target.wants/sshd.service to /usr/lib/systemd/system/sshd.service.
Created symlink from/etc/systemd/system/multi-user.target.wants/postfix.service to /usr/lib/systemd/system/postfix.service.
3. 下載 GitLab
現在,我們將使用 curl 從官方的 GitLab 社區版倉庫下載二進制安裝文件。首先,為了得到所需文件的下載鏈接,我們需要瀏覽到該軟體倉庫的頁面。為此,我們需要在運行著相應操作系統的 linux 機器上運行下面的命令。
在 Ubuntu 14.04 中
由於 Ubuntu 和 Debian 使用相同的 debian 格式的安裝包,我們需要在 https://packages.gitlab.com/gitlab/gitlab-ce?filter=debs 下搜索所需版本的 GitLab,然後點擊有著 ubuntu/trusty 標簽的鏈接,即我們運行著的 Ubuntu 14.04。接著一個新的頁面將會出現,我們將看到一個下載按鈕,然後我們在它的上面右擊,得到文件的鏈接,然後像下面這樣使用 curl 來下載它。
# curl https://packages.gitlab.com/gitlab/gitlab-ce/packages/ubuntu/trusty/gitlab-ce_8.1.2-ce.0_amd64.deb
Downloading Gitlab Ubuntu
在 Debian 8.x 中
與 Ubuntu 類似,我們需要在 https://packages.gitlab.com/gitlab/gitlab-ce?filter=debs 頁面中搜索所需版本的 GitLab,然後點擊帶有 debian/jessie 標簽的鏈接,即我們運行著的 Debian 8.x。接著,一個新的頁面將會出現,然後我們在下載按鈕上右擊,得到文件的下載鏈接。最後我們像下面這樣使用 curl 來下載該文件。
# curl https://packages.gitlab.com/gitlab/gitlab-ce/packages/debian/jessie/gitlab-ce_8.1.2-ce.0_amd64.deb/download
Downloading Gitlab Debian
在 Fedora 22 中
由於 Fedora 使用 rpm 文件來作為軟體包,我們將在 https://packages.gitlab.com/gitlab/gitlab-ce?filter=rpms 頁面下搜索所需版本的 GitLab,然後點擊所需發行包的鏈接,這里由於我們運行的是 Fedora 22,所以我們將選擇帶有 el/7 標簽的發行包。一個新的頁面將會出現,在其中我們可以看到一個下載按鈕,我們將右擊它,得到所需文件的鏈接,然後像下面這樣使用 curl 來下載它。
# curl https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/7/gitlab-ce-8.1.2-ce.0.el7.x86_64.rpm/download
Downloading Gitlab Fedora
4. 安裝 GitLab
在相應的軟體源被添加到我們的 linux 機器上之後,現在我們將使用相應 linux 發行版本中的默認包管理器來安裝 GitLab 社區版。
在 Ubuntu 14.04/Debian 8.x 中
要在運行著 Ubuntu 14.04 或 Debian 8.x linux 發行版本的機器上安裝 GitLab 社區版,我們只需運行如下的命令:
# dpkg -i gitlab-ce_8.1.2-ce.0_amd64.deb
Installing Gitlab Ubuntu Debian
在 Fedora 22 中
我們只需執行下面的 dnf 命令來在我們的 Fedora 22 機器上安裝 GitLab。
# dnf install gitlab-ce-8.1.2-ce.0.el7.x86_64.rpm
Installing Gitlab Fedora
5. 配置和開啟 GitLab
GitLab 社區版已經成功地安裝在我們的 linux 系統中了,接下來我們將要配置和開啟它了。為此,我們需要運行下面的命令,這在 Ubuntu、Debian 和 Fedora 發行版本上都一樣:
# gitlab-ctl reconfigure
Reconfiguring Gitlab
6. 允許通過防火牆
假如在我們的 linux 機器中已經啟用了防火牆程序,為了使得 GitLab 社區版的 web 界面可以通過網路進行訪問,我們需要允許 80 埠通過防火牆,這個埠是 GitLab 社區版的默認埠。為此,我們需要運行下面的命令。
在 iptables 中
Ubuntu 14.04 默認安裝和使用的是 iptables。所以,我們將運行下面的 iptables 命令來打開 80 埠:
# iptables -A INPUT -p tcp -m tcp --dport 80-j ACCEPT
# /etc/init.d/iptables save
在 firewalld 中
由於 Fedora 22 和 Debian 8.x 默認安裝了 systemd,它包含了作為防火牆程序的 firewalld。為了使得 80 埠(http 服務) 能夠通過 firewalld,我們需要執行下面的命令。
# firewall-cmd --permanent --add-service=http
success
# firewall-cmd --reload
success
7. 訪問 GitLab Web 界面
最後,我們將訪問 GitLab 社區版的 web 界面。為此,我們需要將我們的 web 瀏覽器指向 GitLab 伺服器的網址,根據我們的配置,可能是 http://ip-address/ 或 http://domain.com/ 的格式。在我們成功指向該網址後,我們將會看到下面的頁面。
Gitlab Login Screen
現在,為了登錄進面板,我們需要點擊登錄按鈕,它將詢問我們的用戶名和密碼。然後我們將輸入默認的用戶名和密碼,即 root 和 5iveL!fe 。在登錄進控制面板後,我們將被強制要求為我們的 GitLab root 用戶輸入新的密碼。
Setting New Password Gitlab
8. 創建倉庫
在我們成功地更改密碼並登錄到我們的控制面板之後,現在,我們將為我們的新項目創建一個新的倉庫。為此,我們需要來到項目欄,然後點擊 新項目 綠色按鈕。
Creating New Projects
接著,我們將被詢問給我們的項目輸入所需的信息和設定,正如下面展示的那樣。我們甚至可以從其他的 git 倉庫提供商和倉庫中導入我們的項目。
Creating New Project
做完這些後,我們將能夠使用任何包含基本 git 命令行的 Git 客戶端來訪問我們的 Git 倉庫。我們可以看到在倉庫中進行的任何活動,例如創建一個里程碑,管理問題,合並請求,管理成員,便簽,Wiki 等。
Gitlab Menu
總結
GitLab 是一個用來管理 git 倉庫的很棒的開源 web 應用。它有著漂亮的帶有諸多酷炫功能的響應式界面。它還打包有許多酷炫功能,例如管理群組,分發密鑰,持續集成,查看日誌,廣播消息,鉤子,系統 OAuth 應用,模板等。(註:OAuth 是一個開放標准,允許用戶讓第三方應用訪問該用戶在某一網站上存儲的私密的資源(如照片,視頻,聯系人列表),而無需將用戶名和密碼提供給第三方應用。--- 摘取自 維基網路上的 OAuth 詞條) 它還可以和大量的工具進行交互如 Slack,Hipchat,LDAP,JIRA,Jenkins,有很多類型的鉤子和完整的 API。它至少需要 2 GB 的內存和 2 核 CPU 來流暢運行,支持多達 500 個用戶,但它也可以被擴展到多個工作伺服器上。
4. Jenkins Gitlab 前端構建發布
流程:通常是從gitlab/github拉取項目,構建,把產出文件發到伺服器。
一、環境
創建任務之前,要先配置兩項:
問題1:jenkins credentials配置SSH
系統管理 -> Manage Credentials -> 全局憑據 (unrestricted) ->添加或者編輯
注意:這里的key是個大坑,最開始我糾結是填私鑰還是公鑰,發現粘貼進去都不對。(粘貼私鑰時我粘貼的是正文,沒有復制首尾兩行,導致一直報錯。)最後把私鑰整個粘貼進去就對了。
原因:
由於Jenkins的安全策略配置了CSRF跨站點保護。
解決方案:
進入Jenkins,系統管理-->全局安全配置,勾選匿名用戶具有可讀許可權和去掉CSRF防止跨站點請求偽造:
在 /configure 下
這個插件是jenkins連接linux系統的時候使用。
以下針對插件的每個屬性進行說明。
Name
SSH Server的Name屬性就是你希望連接的伺服器。
Source files
這里輸入的是你希望傳到伺服器的文件夾和文件。路勁是相對jenkins的workspace的項目名稱的。例如編譯打包後的路徑為dist文件夾下的jenkinszip.tar.gz,則Surce files填入dist/jenkinszip.tar.gz。
Remove prefix
如果Source files為dist/jenkinszip.tar.gz,但是不想把dist目錄創建到伺服器端,這個時候就可以在Remove prefix里填入dist
Remote directory
這里指定文件將被拷貝到伺服器的路徑。
PS:被拷貝文件在伺服器上的完整路徑=登錄伺服器賬號的默認路徑(就是全局設置的Remote Directory)+當前任務配置的Remote directory。
例如我的伺服器路徑是 /home/wwwroot/aaa
我全局配置Remote Directory 是 /home/wwwroot
當前任務配置的Remote Directory 是 /aaa/
Exec command
這里就是連接伺服器之後需要執行的命令。
注意:這里配置的Secret token和 webhook要填寫到gitlab裡面,路徑如下:
參考文章: https://blog.csdn.net/hou_ge/article/details/103507947
5. 使用Docker部署GitLab
查看是否拉取成功
編寫內容
在該文件目錄下,授予 gitlab_start.sh 執行許可權
要注意埠是否被佔用
修改 gitlab_start.sh 文件,將映射到宿主機的埠改為 8088 ,或者其它沒被佔用的埠
重新運行 ./gitlab_start.sh 文件,報錯如下
這是因為之前的容器雖然沒有運行起來,但是已經創建了,把它刪除掉
重新運行 gitlab_start.sh 文件
可以看到容器成功啟動
創建 docker-compose.yml 文件,並在該文件所在的文件夾目錄下運行 docker-compose up -d
需要事先安裝 docker-compose
安裝docker-compose
注 :埠和映射目錄可根據需要修改
若開放訪問埠為 80 , external_url 可不加埠號,默認80
若以 3.1 方法創建,需要修改相關配置文件
在Gitlab容器 運行狀態 時,重啟服務,並遠程訪問網站測試
*若訪問Gitlab出現502等錯誤,使用命令檢查錯誤原因
e.g.
查看上述配置文件,查找錯誤原因
[圖片上傳失敗...(image-e9789-1636370071222)]
雖然容器啟動成功,但是卻沒辦法根據 ip:port 訪問gitlab
拉取tomcat鏡像
為了測試8088埠是否可用,先把gitlab的容器暫停
啟動tomcat容器,並將tomcat容器的8080埠映射到宿主機的8088埠
一切正常,訪問ip:8088,還是和以前一樣訪問不了
因為之前系統的防火牆一直是關閉的並且其它的服務能正常訪問,所以沒有懷疑是防火牆的問題
把防火牆打開
訪問之前能正常訪問的服務,果然沒法正常訪問。
把該服務的埠開發,正常訪問。
打開8088埠
再次訪問
返回tomcat的404頁面: HTTP Status 404 – Not Found
雖然是404頁面,但是說明此時的埠是能正常訪問的
把tomcat的容器停止運行,重新運行gitlab容器
雖然沒啟動成功,但離成功更進一步了:)
嘗試把這個容器刪除掉,再創建一次後還是得到這個錯誤。
還是訪問不了,檢查一下GitLab內部是否有問題
一切正常
我再次換成tomcat容器進行測試,發現8088埠訪問不了了。
但是在宿主機內ping本機是可以的
但是,換成 ip:8088 則不行
根據以上兩篇文章,提出 阿里雲的內網eth0 網段正好跟Docker 的虛擬網卡都是 172 網段,有沖突
觀察發現我使用的雲伺服器也是阿里雲,並且通過 ifconfig 查看
並且查看阿里雲的內網ip確實也是 172 開頭。
編輯配置文件 /etc/docker/daemon.json ,若 daemon.json 文件不存在新建即可。
重新啟動docker服務
可以看到docker0 的地址變了。
但是要注意,使用 docker 啟動的服務會默認使用 docker0 ,如果是用 docker-compose 啟動的服務則不會。上面的 br-12aa369ee4a6 對應的是docker-compose啟動的服務,可以看到還是172的網段。
docker-compose up使用自定義的網段的兩種方式(從其根源指定)
根據該文使用方法2,即修改 daemon.json 。但並不能成功訪問,我的環境是: docker:20.10.7 , docker-compose:1.24.1
後面發現訪問不成功的原因在於 docker 與防火牆之間的關系,可以關掉防火牆,開啟 docker ,不能訪問則打開防火牆。在它們之間來回試探 = =。
後面嘗試過關閉 firewalld ,打開 iptables 。
在啟用 iptables 時,一般關掉 iptables 可以正常訪問,打開則不能正常訪問。
在啟用 firewalld 時,按照 docker 和 firewalld 之間啟動關閉的順序不同,有時是開著防火牆能訪問,有時是關了防火牆能訪問。
但是容器內不能訪問外部網路,該問題現在還未解決。 有一種迂迴的解決方法就是容器使用 host 網路模式
問題 :懷疑是docker,firewalld與iptables之間的設置問題
Docker與IPtables
docker 埠映射 及外部無法訪問問題
Docker and IPtables
還有一種訪問不了GitLab的情況是埠映射和配置文件有誤。
快速的解決方法:將宿主機埠號和容器號設置相同,可參考下面的博客。
利用GitLab Docker images安裝GitLab(填坑)
[圖片上傳失敗...(image-457ad3-1636370071221)]
如果系統環境正常,安裝會十分順利,一般不會有奇怪的問題。
我在不同的伺服器安裝過
阿里雲 CentOS 7.6 : 訪問正常,但是因內存不夠出現502錯誤,容器內可正常連接外部網路
阿里雲 Alibaba Cloud Linux 2 : 可能不能正常訪問容器,容器內不能正常連接外部網路。懷疑是防火牆與docker的問題。
修改密碼:
6. GitLab搭建個人(或公司)版本控制系統
說明:Git,Github,GitLab三者關系。
Git - 是一款自由和開源的分布式版本控制系統,用於敏捷高效地處理任何或小或大的項目。是 Linus Torvalds 為了幫助管理 Linux 內核開發而開發的一個開放源碼的版本控制軟體。(svn是集中化的版本控制系統)。
GitHub - 是一個面向開源及私有軟體項目的託管平台(也就一個網站),提供給用戶空間創建git倉儲,保存用戶的一些數據文檔或者代碼等。它可以託管各種git庫,並提供一個web界面。被戲稱為「全世界最大的同性交流社區」。
GitLab - 基於Git的項目管理軟體。使用Git作為代碼管理工具,並在此基礎上搭建起來的web服務。
當然啦國內開源中國出的「碼雲」,第一次聽得人還以為是「馬雲」。我醬紫。它跟Github功能差不多,都能建立公有和私有的倉庫。不過嘛感覺有點封閉,社區沒有Github熱鬧。
有的人就說啦,我完全可以在Github或者GitLab上做遠端代碼倉庫,為啥還要倒騰GitLab自建代碼託管系統?就一個字: 「代碼安全性」(公司保密規定)。 對於公司來說,GitLab讓開發團隊對他們的代碼倉庫擁有更多的控制,相比於GitHub,它有不少的特色:
一、自建代碼託管系統都需要做些什麼工作?
1. 選擇開源軟體
Git 大家族的 GitLab ,它提供了完善的用戶許可權管理,除了涵蓋 Git 所有的功能,同時又提供方便的後台管理。分別有CE(社區版)、EE(企業版)、OM(RPM 包完整版)三個版本,目前市面上開發者們的普遍選擇是使用 CE 版的源碼,成本較低且相對方便。
2. 硬體設施方面
如果是對於中小型企業來講,自建機房一般成本較高,所以除非是大型集團企業。現在市面上存在太多的雲伺服器廠商,平均價格多在 5000元/年以上,都是不錯的選擇。
可能遇到的坑:
3.由於個人眼界以及信息不對稱,目前大部分公司都是在公司區域網內自行用GitLab搭建代碼託管系統。部署Gitlab 是對伺服器有配置要求的建議是CPU兩核,內存4G以上。個人經驗,勿噴啦。
二、搭建過程(這里僅是作者接觸的,其實還有很多更高級的盤法)
Gitlab的服務構成
1.搭建方法分為:傳統方式安裝GitLab和Docker安裝(推薦)。
2.傳統安裝過程(平台使用centos7安裝)
安裝和配置必要的依賴項:
安裝Postfix以發送通知郵件:
在安裝Postfix期間,可能會出現配置屏幕。選擇「Internet Site」並按enter鍵。使用您的伺服器的外部DNS以「mail name」並按enter。如果出現額外的屏幕,繼續按enter鍵接受默認值。
添加GitLab鏡像源並安裝gitlab伺服器:
注意這里設置的埠不能被佔用,默認是8080埠,如果8080已經使用,請自定義其它埠,並在防火牆設置開放相對應得埠。
重置並啟動GitLab:
訪問 GitLab頁面:如果沒有域名,直接輸入伺服器ip和指定埠進行訪問
獲取/修改超級管理員root的密碼:
最後我們使用默認的賬號:root 和剛剛設置好的密碼12345678進行登錄。
後面的步驟配置SSH key,git Bash的global config等初始化設置跟GitHub一樣。可是還有一點就是「漢化」。(英文不好的小夥伴)但是有一定風險,後面我打開報502錯誤。有兩種方法:用git比對出英文與中文的補丁,將英文打補丁。第二是直接下載中文版,替換英文。
3.Docker安裝(推薦)
(1)配置docker鏡像
直接從 docker hub 獲取的話速度非常慢,所以需要配置一個鏡像。我使用的是 cloud.io提供的加速器,速度很快。
(2)獲取 GitLab 鏡像
下載完成後,查看鏡像列表
(3)啟動容器
3個--publish指定容器與主機的埠映射,分別是 http、https、ssh
3個--volume指定數據卷的映射,分別是 gitlab 的 配置、日誌、數據
(4)配置外部訪問 URL
修改 gitlab 配置文件:
找到 external_url 這一項修改為自己伺服器的訪問地址:
保存後,重啟容器
(5)訪問
初次訪問時,gitlab 要求我們重置管理員密碼,修改完成後登錄。默認用戶root。
當然以上為個人實驗,公司裡面大部分為CTO等大佬已經搭建完畢,我們主要是折騰。
最後推薦個人用很順手的工具: SourceTree (可視化界面的Git),當然啦要想成為大牛或者裝13也好,還是從Git Bash里敲命令行。
7. 本地伺服器怎麼使用gitlab pages
GitLab由Ruby語言發基於LinuxGit伺服器我見強Git伺服器發現立即決定Git伺服器換GitLab
安裝GitLab面臨問題何伺服器git項目直接導入GitLab前Git伺服器由git+apache搭建(詳見Linux用Apache搭建Git伺服器)
網發現篇文檔——Import bare repositories into your GitLab instance並按進行操作
1)設置存放代碼庫主目錄
vi /etc/gitlab/gitlab.rb
比設置:git_data_dir "/gitlab/repos"
2)訪問剛搭建GitLab站點創建group比cnblogs
/gitlab/repos 創建 /gitlab/repos/repositories/cnblogs 文件夾
/gitlab/repos/repositories/創建文件夾比cnblogs
3)現所git項目文件復制文件夾
cp -r /data/git/* /gitlab/repos/repositories/cnblogs
4)修改復制文件夾所者:
chown -R git:git /gitlab/repos/repositories/cnblogs
5)運行GitLab導入命令
cd /var/opt/gitlab
gitlab-rake gitlab:import:repos
等段間顯示done卻項目沒導入進
經研究發現導入GitLab認文件夾名.git結尾項目於要導入項目文件夾名稱加.git綴再進行導入
結顯示導入功比:
Processing cnblogs/CNBlogsJob.git
* Created CNBlogsJob (cnblogs/CNBlogsJob.git)
Done!
GitLab站點卻看已導入項目努力沒能解決問題
實沒辦改手導入導入:
1)GitLab站點創建與要導入項目同名項目
2)進入剛創建項目文件夾
cd /gitlab/repos/repositories/cnblogs/項目名稱.git
3)刪除該文件所文件
rm -rf *
4)要導入項目文件夾所文件復制
cp -r /data/git/CNBlogsJob/* /gitlab/repos/repositories/cnblogs/CNBlogsJob.git
項目導入進
5)導入完修改導入所項目文件所者
chown -R git:git /gitlab/repos/repositories/cnblogs
修改所者客戶端進行git push
手完現Git項目導入
備註:操作系統CentOS 6.2GitLab版本7.8.4