ubuntu gitlab+frp 對映 版本管理平臺搭建

GK_Jerry發表於2024-06-24

環境準備

站點伺服器:ubuntu server 22 LST , RAM 4G +(不然很可能502)
個人PC:Vscode , git , xshell遠端工具

站點伺服器雲伺服器,實體機子均可。再次動用家裡的NAS-unraid開了一臺ubuntu 虛擬機器,虛擬機器用任意linux發行最新版本均可。

搭建開始

上一篇文章分享了hexo部落格站點的搭建,但是苦於github在偉大的牆外,時不時會給你來個失聯,又不太想頻繁動用神秘力量,所以目標盯上了gitlab,準備藉著本地環境做一個私有化版本管理。為什麼不選gitee呢,因為適用要申請,我懶得填我郵箱等他回覆

前期準備

安裝ubuntu沒啥特別要講的,就有幾點注意下,

  • 沒特殊需求,別裝輕量版,輕量版很多包都要後下載
  • 網路配置裡subnet不是填子網掩碼,是填寫的子網網段,例如ip地址是192.168.199.100/24,subnet就填寫192.168.199.0/24
  • 安裝系統會要求建立個人賬號,該賬號為特權使用者
  • 安裝過程中會可以直接更換源的地址,建議安裝過程中直接換成國內映象源。如果忘記更換,可參考該網站清華映象源說明文件https://mirror.tuna.tsinghua.edu.cn/help/ubuntu/

安裝完系統後,vnc登陸到後臺,先修改源映象下載地址並更新軟體包,速度依據網速而定

$ sudo apt update
$ sudo apt upgrade -y

由於ubuntu為了安全,預設禁用了root使用者的ssh直連,並且密碼和自建的個人賬號不一樣,需要更換

$ sudo passwd root

然後修改一下ssh的配置檔案,找到#PermitRootLogin prohibit-password,將取消註釋,按如下填寫

$ vi /etc/ssh/sshd_config

#...
PermitRootLogin yes
#...

配置檔案儲存後,重啟ssh服務

$ sudo systemctl restart ssh.service

隨後,在個人PC上就可以直接用root遠端ssh了

部署私有化gitlab

本來是直接參考官網的安裝步驟的,但有些東西說的很含糊,直接無腦跟著教程走一遍直接報錯無法啟動,參考網上分享的經驗帖,整合了一下才將gitlab搭建完成。

前期準備

按照gitlab官網ubuntu安裝的教程,先安裝依賴

$ sudo apt-get install -y curl openssh-server ca-certificates tzdata perl

本地離線gitlab,postfix服務就不用裝了,直接下一步下載本體

$ curl -fsSL https://packages.gitlab.cn/repository/raw/scripts/setup.sh | /bin/bash

下一步官網教程就很耐人尋味了,如果你需要使用域名進行訪問,那麼至少要確保本機能夠使用這個域名訪問,公網你申請域名、備案、做公網dns就可以了。本篇描述的是區域網內,而且一般情況下區域網內不會單獨設定一臺dns伺服器。
先修改主機名,以及host檔案資訊

$ sudo hostnameclt set-hostname gitlab.example.com
$ vi /etc/hosts

#...
xxx.xxx.xxx.xxx gitlab.example.com
#...

然後測試一下這個域名是否指向你裝置的ip,如果對了的話就沒問題

這裡注意一下,如果所處的區域網能夠訪問外網,需要確認一下這個域名是不是本來就存在的,如果本來就存在會有影響

$ host gitlab.example.com
# gitlab.example.com has address xxx.xxx.xxx.xxx

自發ssl證書(可選)

預先建立gitlab目錄,建立私有金鑰

$ mkdir -p /etc/gitlab/ssl
$ openssl genrsa -out "/etc/gitlab/ssl/gitlab.example.com.key" 2048

建立私有證書,資訊隨便填寫就行,或者如下填寫(其中填寫的密碼等會會用到,記得保留)

$ cd /etc/gitlab/ssl
$ openssl req -new -key "/etc/gitlab/ssl/gitlab.example.com.key" -out "/etc/gitlab/ssl/gitlab.example.com.csr"
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN          CN  #國家
State or Province Name (full name) []:SX      SX   #省份
Locality Name (eg, city) [Default City]:XA    XA   #城市  
Organization Name (eg, company) [Default Company Ltd]:    #空格
Organizational Unit Name (eg, section) []:                #空格
Common Name (eg, your name or your server's hostname) []:gitlab.example.com    
Email Address []:123456@qq.com                 #郵箱地址
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:123456                # 密碼
An optional company name []:                  #空格

ssl金鑰和證書都建立好以後,利用兩者建立crt簽署證書

$ openssl x509 -req -days 365 -in "/etc/gitlab/ssl/gitlab.example.com.csr" -signkey "/etc/gitlab/ssl/gitlab.example.com.key" -out "/etc/gitlab/ssl/gitlab.example.com.crt"
Signature ok
subject=/C=CN/ST=SX/L=XA/O=Default Company Ltd/CN=gitlab.example.com/emailAddress=123456@qq.com
Getting Private key

利用openssl簽署pem證書,並修改剛剛建立的證書許可權

$ openssl dhparam -out /etc/gitlab/ssl/dhparams.pem  2048
Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
..............................+..............................................................................................................................................................................................................................+.+..........................................................+...........................................................................................................................................+...........................................................................................................................................................................................................................................................+.....................................................................................+.........................................
$ chmod 600 * /etc/gitlab/ssl/

開始安裝gitlab

前面準備工作完成後,回到官方文件進行gitlab快速安裝,這裡的EXTERNAL_URL就是前面配置的域名資訊,如果配置了ssl證書,可以直接填寫https協議。
這條命令理論上也可以直接使用ip地址去訪問,因為這一步安裝時間比較長,就沒進行測試。

$ sudo EXTERNAL_URL="https://gitlab.example.com" apt-get install gitlab-jh

等待比較長一段時間,過程中可能會卡在ruby_block[wait for logrotate service socket]這裡一直不動。直接CTRL+C或者CTRL+Z直接強制中斷,然後重啟服務sudo systemctl restart gitlab-runsvdir
執行完成後,重置配置gitlab-ctl reconfigure

等待重置後,因為剛剛執行的命令是快速安裝,抹蜜是隨機生成的,會存放在/etc/gitlab/initial_root_password目錄中,該檔案會在24小時後自動刪除
訪問https://gitlab.example.com進到gitlab登陸頁面後,使用root賬號以及上述檔案中的密碼進行登陸,就成功進入到gitlab管理員後臺頁面了。

frp內網對映

本次使用的是櫻花對映SakuraFrp進行內網穿透,如果有其他內網穿透工具原理相通。

地址:https://www.natfrp.com/,該平臺主要用在遊戲小型伺服器開服對映

使用者註冊略過,該平臺使用節點需要進行實名驗證(一個身份證只能用於一個賬號,而且會拉取支付寶進行人臉識別認證),如有建站需求,還需要額外進行網站備案的驗證。
實名驗證完成後,部分節點才能進行使用。一般情況下不需要氪金,普通使用者組就夠用了,10Mbps,按每月訪問流量進行計算的,每天簽到均可拿流量。

登陸後點服務-隧道列表,建立一個隧道。因為是普通使用者,滿載和無許可權就不要選了,這些節點基本夠用了,隨便選擇一個。
隧道型別選擇https或者http建站隧道,ip地址可以就填寫127.0.0.1,或者寫內網ip也行,埠選擇gitlab的443,如果說有購買過域名的,將域名填寫進去。

因為之前本片是區域網搭建,直接不用建站節點也能訪問,雖然有機率被查然後隧道禁掉。本片提到的內網對映僅用於臨時測試與技術學習,建站請符合規定,進行站點備案。選擇udp節點,隧道型別選擇tcp隧道,本地ip和埠同上127.0.0.1:443,遠端埠為對映後的埠,如果不填寫會隨機生成,其他留空。

建立完成後會彈出配置檔案資訊,其中內容只要關注-f xxxxx:xxxx這行內容即可。
回到gitlab伺服器上,確認處理器架構。

一般都是顯示amd64,即x86_64,詳細可參考https://doc.natfrp.com/frpc/usage.html

$ uname -m
amd64

確定了伺服器的架構後,回到櫻花對映網站,選擇服務-軟體下載,並將對應作業系統、
處理器架構的客戶端下載連結複製。再回到gitlab伺服器上,

$ cd /usr/local/bin
$ wget -O frpc <剛剛複製的下載地址>
# 如果上面的命令報錯,請嘗試這條:
$ curl -Lo frpc <剛剛複製的下載地址>

修改檔案許可權並校驗檔案是否傳輸正確,櫻花對映網站下載頁面有提供md5資訊

$ chmod 755 /usr/local/bin/frpc
$ md5sum /usr/local/bin/frpc

檢查完成後,執行如下命令檢視frpc版本。

$ frpc -v 
0.45.0-sakura-2.3

如正常返回版本資訊,則說明客戶端安裝完成,簡單進行臨時測試直接將前面提到的配置檔案的-f xxxx:xxxx作為引數執行即可

$ frpc -f xxxx:xxxx

執行後,會列印日誌資訊顯示可以使用的域名/ip以及埠,該地址和所建立的隧道繫結,只要隧道資訊沒有變更,該地址不會修改。

但是該方法,遠端視窗關閉以後就會對映就會終止,可採用下面的命令,遠端視窗關閉也不受影響

$ nohup frpc -f xxxx:xxxx &

gitlab訪問與維護

新註冊的使用者註冊後無法直接登入到平臺,需要管理員登陸後臺進行批准才能授權登陸。

由於自建的gitlab站點ssl證書是自籤的,git通常是無法認證ssl證書,因此需要將該檢查關閉,為減小安全風險,可就對該專案內配置資訊生效

$ git config –local http.sslVerify false
$ git config –local https.sslVerify false

資料備份與恢復(未完待更,2023/2/28)

因為我本地有nas的原因,我可以直接建立一個nfs空間進行虛機資料的備份,gitlab本身也自帶備份功能,不需要像其他linux裝置整盤備份那麼佔用空間。

建立備份目錄,檢測遠端nfs伺服器掛載目錄,並將該目錄掛載到本地。檢視本地目錄有遠端nfs掛載說明已經掛載到指定目錄了。

$ mkdir -p /backup
$ showmount -e xxx.xxx.xxx.xxx
Export list for xxx.xxx.xxx.xxx:
/mnt/user/system-backup *
$ mount xxx.xxx.xxx.xxx:/mnt/user/system-backup /backup
$ df -h
檔案系統                                 容量  已用  可用 已用% 掛載點
devtmpfs                                 888M     0  888M    0% /dev
tmpfs                                    907M     0  907M    0% /dev/shm
tmpfs                                    907M  8.6M  898M    1% /run
tmpfs                                    907M     0  907M    0% /sys/fs/cgroup
/dev/mapper/xxxx                           30G  3.9G   27G   13% /
/dev/mapper/xxxx                           50G  2.2G   48G    5% /data
/dev/mapper/xxxx                          15G  140M   15G    1% /home
/dev/sda1                               1014M  283M  732M   28% /boot
tmpfs                                     79M     0   79M    0% /run/user/0
xxx.xxx.xxx.xxx:/mnt/user/system-backup  8.7T  349G  8.3T    4% /backup

frp內網對映後

在內網訪問的時候,可選用ssh協議或者https協議進行程式碼進行版本管理。但是進行內網對映後需要修改資訊,因為製作了443埠的對映,因此ssh協議就無法使用了。原則上也可以再申請一個隧道把ssh協議打通
之前訪問的地址是https://gitlab.example.com/xxx/xxx.git,由於埠對映的原因,需要去訪問https://<櫻花對映地址>:<櫻花對映埠>/xxx/xxx.git進行管理,可臨時新增一個倉庫源

$ cd <專案目錄>
$ git remote add gitlab-local-frpc https://<櫻花對映地址>:<櫻花對映埠>/xxx/xxx.git
$ git pull gitlab-local-frpc main

進行賬號認證後,即可順利訪問到gitlab目標倉庫。

最後編輯時間 2023/03/01 23:25

References:

  1. gitlab本地環境搭建
    Gitlab搭建詳細步驟:https://blog.csdn.net/qq_15290209/article/details/126230624
    Gitlab官方搭建文件:https://docs.gitlab.cn/omnibus/installation/index.html
    Gitlab官方使用文件:https://gitlab.cn/install/
    公司內網安裝gitlab (1. 安裝時卡在ruby_block[wait for logrotate service socket] action run ,2.安裝之後訪問報502):https://blog.csdn.net/pcc945/article/details/123180611
  2. 內網對映
    櫻花對映官方使用文件:https://doc.natfrp.com/frpc/usage.html
  3. 擴充
    Linux的nfs服務:https://blog.csdn.net/m0_71521555/article/details/125904597
    gitlab官方備份與恢復文件:https://docs.gitlab.cn/jh/raketasks/backup_restore.html#%E5%A4%87%E4%BB%BD%E5%92%8C%E6%81%A2%E5%A4%8D%E6%9E%81%E7%8B%90gitlab

相關文章