作為一個開發,少不了和git打交道,像github,gitee是很流行的git線上托管平台,而我們也搭建自己的git托管平台,有條件的可以使用gitlab,它對硬件有要求,像博主這種沒條件用虛擬機的,推薦使用gogs。
Gogs 的是一個由 Go 語言開發的、可以簡單、快速搭建自助 Git 服務。在宿主機上的安裝可以參考官網:https://gogs.io/docs/installation 。
不過在宿主機上直接安裝會麻煩一點,需要自行安裝git工具,如果使用ssh還要安裝ssh服務器,如果使用源碼安裝,還可能需要go語言的編譯環境,所以,如果是自己或者是小團隊使用,推薦使用docker來安裝
安裝
首先,我們要安裝docker,可以參考:docker簡單安裝
接着使用docker獲取gogs的鏡像:
# pull gogs鏡像 sudo docker pull gogs/gogs
鏡像中已經包換了git,ssh服務器等工具,無需我們安裝,我們只需使用鏡像創建容器即可:
# 創建並運行一個容器,將宿主機的10022端口映射到容器的22端口,將宿主機的13000端口映射到容器的3000端口,10022端口和13000端口可以根據自己的情況修改 sudo docker run -d -p 10022:22 -p 13000:3000 -v /var/gogs:/data gogs/gogs
這里需要注意的是兩點:
1、22端口是gogs的ssh服務端口,如果不開啟ssh服務,可不做這個端口映射,3000是gogs應用服務端口,這兩個端口可以修改,但是需要結合后續配置一同修改,這點在后面配置時來說明。 2、這里做了一個卷映射,/data是容器內部gogs的數據目錄,gogs后續的配置、git倉庫等等都在這個目錄中,我們將它映射到宿主中,方便數據保存以及配置的改動,比如我這里的/var/gogs,需要提前將目錄創建好:sudo mkdir /var/gogs。
容器成功運行后,我們可以在瀏覽器通過宿主機的ip+13000端口打開gogs的首次運行安裝程序 ,比如我這里是 http://192.168.209.128:13000
數據庫設置
gogs目前支持3種數據庫:MySQL、PostgreSQL、SQLite3
如果沒有可用的數據庫,可以選擇SQLite3:
如果是MySQL或者PostgreSQL,大致是這樣的:
如果您使用 MySQL,請使用 INNODB 引擎以及 utf8_general_ci 字符集。
應用基本設置
基本應用設置說明:
應用名稱:可以換成自定義名稱 倉庫根目錄:使用默認就行了,默認/data/git/gogs-repositories,如果采用了數據卷映射,比如我這里因為/var/gogs映射/data,所以這個目錄在宿主機中的地址是/var/gogs/git/gogs-repositories 運行系統用戶:不要修改,默認就是git用戶,修改可能會有問題 域名:使用ssh時使用的域名或者IP(看后文使用說明) SSH 端口號:gogs啟用ssh時使用的端口號,默認22端口,如果修改了這個端口號,那么在上面創建容器時要對應的將10022端口映射到修改的端口號,如果不啟用ssh,則置空 HTTP 端口號:gogs應用啟動的http端口,默認3000,如果修改了這個端口號,那么在上面創建容器時要對應的將13000端口映射到修改的端口號 應用 URL:即打開應用的url地址,因為這里采用了docker,所以我們要修改成宿主機的地址轉發去訪問,比如這里我的宿主機地址:192.168.209.128,它的13000端口會轉發到容器的3000端口,所以這里填:http://192.168.209.128:13000/
日志路徑:gogs的日志保存路徑,默認就行了
注:更多配置在/data/gogs/conf/app.ini中,如果采用了數據卷映射,比如我這里因為/var/gogs映射/data,所以這個文件在宿主機中的/var/gogs/gogs/conf/app.ini,更多說明見后文
其他可選配置可按自己的需求修改,修改完成后點擊立即安裝即可。
使用說明
安裝完成之后,就可以使用了,默認情況下,我們需要自己注冊一個賬號,然后登陸:
注冊登錄之后,我們可以在右上角的+號創建一個倉庫:
例如:
創建完成之后大概是這樣子的:
默認情況下是可以使用http進行git clone的,當然我們也可以使用https,不過需要做更多的配置,這時需要修改/data/gogs/conf/app.ini文件中的配置了,因為沒有cert證書,所以就不演示了。
另外,因為我們啟用了ssh,我們也可以使用ssh來操作:
其中,我們上面安裝=》應用基礎設置中的【域名】配置就是上圖中紅色方框中的 git@域名:XXXX/XXX 中的域名部分
注意,如果你直接使用這個ssh地址去clone,會讓你輸入git的密碼:git@192.168.209.128's password:
這里可能你輸入任何密碼都是錯的,哪怕輸入對了密碼,可能也提示目錄不存在,什么原因?
首先,說明一下,ssh的連接地址是 user@host:path 格式,對於上面的demo倉庫中,git是用戶名,host是宿主機地址(192.168.209.128),test/demo.git是倉庫路徑。
那端口呢?屬性ssh命令的話就會知道,ssh命令如果要指定端口,需要使用-p選項來指定,否則使用的是默認端口22.
再來看看,上面說過,因為我們的gogs是部署在docker上,對於ssh,我們使用宿主機的10022端口轉發到容器的22端口,那使用ssh進行clone時,我們的宿主機地址是192.168.209.128,因為沒有指定端口,所以連接的端口是宿主機的22端口,但是我們的宿主機的22端口沒有戰法到容器的22端口呀!!!所以他會認為git用戶是宿主機的,如果宿主機沒有創建git用戶,那么輸入任何密碼都是錯的,哪怕密碼對了,也可能因為未在宿主機安裝gogs或者路徑不存在而訪問失敗。
那是不是說我們在docker上部署的gogs不能使用ssh?其實是可以的,你可以將宿主的22端口轉發到容器的22端口。另外,還有一個做法,這里只是因為 git@域名:XXXX/XXX 這種格式進行clone不能指定端口而不能使用,我們可以使用另外一種類似http請求Url的ssh格式:ssh://user@host:port/path,例如這里demo倉庫:git clone ssh://git@192.168.209.128:10022/test/demo.git
不過這里我們clone還是失敗了,大致的意思是,我們沒有配置ssh秘鑰。
ssh秘鑰
ssh秘鑰生成及使用參考:SSH公/私秘鑰的生成及使用
創建完成后,我們打開.ssh目錄下id_rsa.pub文件(公鑰文件),復制里面的全部內容,然后打開gogs控制面板=》右上角用戶配置=》SSH秘鑰=》新增秘鑰:
保存后,我們就可以使用ssh://協議去clone了
注:如果還是失敗,可以刪除.ssh目錄下的known_hosts文件再試試