天天看點

自建Git伺服器 - 建立屬于你自己的代碼倉庫

最近有線上朋友私信問我怎麼搭建個人部落格,也有咨詢我個人項目的代碼是如何保管的,還有一個朋友問我買了伺服器玩了一段時間,等新鮮感過了就不知道做什麼了。

關于這些問題并沒有一個标準答案,每個人都有自己的使用習慣,找到适合你的才是最好的。關于部落格搭建及使用的工具或服務在我部落格的關于頁裡已經寫的比較詳細了,如果有人想看具體步驟我可以專門寫一篇詳細的教程,本篇先來講講我的個人項目代碼是如何保管的。

Git私服的選擇

最開始托管代碼我使用的是GitHub和Gitee,後面折騰久了我就開始自己搭建Git服務了(包括很多其他服務我也有自建),現在我絕大部分個人項目代碼都放在我的Git私服裡面(還有一小部分放在自建SVN中沒有遷移過來)。

搭建Git私服的工具其實有很多,比較出名的有gitlab,它的優點是功能特别全,你用的你不用的它都有,但對機器要求也很高,2C4G起步,适合企業使用,我們公司也是用它來搭建内網Git服務的,但我并不推薦個人使用gitlab私服。

其次有Gogs和Gitea(本文教程),它們都屬于輕量級的Git服務,對配置要求較低很适合個人使用,1C1G就能跑。

Gitea其實是Gogs的孿生兄弟,它是從Gogs源碼的基礎上開發的,且前期它們的功能也極為相似,官方介紹是Gitea是一個開源社群驅動的Gogs克隆。那為何會出兩個功能如此類似的産品呢?我在網上找到的資料是這樣的:

基本上就是有一部分開發者認為Gogs的開發者效率比較慢,而且不接受他人加入開發,所有修改和PR都需要經過他一個人的稽核,這對Gogs的發展很不利。因而部分開發者決定基于Gogs重開一個項目,這就是Gitea,關于這件事我不予置評,但是開源社群不就是因為這樣才充滿活力與生機嗎,百花齊放。

是以才有了現在的Gitea,從2016年11月Fork至今,它的功能相較于Gogs已經發生了很大的變化,我個人也比較喜歡Gitea這個更有活力的産品,是以我選擇了它來管理我的代碼。

安裝Gitea有多種方式,以Linux為例,常見的有3種:

  1. Docker安裝(強烈推薦)
  2. 二進制安裝
  3. 源碼編譯安裝

第三種源碼安裝的方式最繁瑣,需要先安裝Go語言環境,這裡介紹前面兩種安裝方式。

首發位址:https://www.guitu18.com/post/2020/02/04/67.html

二進制安裝

考慮到有些同學不熟悉Docker,這裡先說第二種最簡單的二進制安裝。二進制安裝需要Git支援。

安裝Git:

yum install git -y
           

下載下傳二進制檔案并賦予執行權限:

# 建立工作目錄
mkdir -p /usr/local/gitea && cd /usr/local/gitea
wget -O gitea https://dl.gitea.io/gitea/1.11.4/gitea-1.11.4-linux-amd64 && chmod +x gitea
           

運作Gitea:

./gitea web
           

運作成功界面如下,所有的運作資料都會生成在你的gitea二進制檔案同級目錄下:

自建Git伺服器 - 建立屬于你自己的代碼倉庫

預設運作的端口是3000,這樣通過你的你的IP+端口就能通路你的Gitea服務了(記得放行3000端口或者關閉防火牆),要停止服務直接按

Ctrl + C

即可。若要背景運作,用下面的指令執行:

nohup ./gitea web > gitea.log 2>&1 &
           

在首頁點選登入,會跳轉到配置頁面,請根據實際情況進行配置。

Docker方式安裝(強烈推薦)

安裝Docker:

yum install docker -y
           

略作等待後即可安裝成功,啟動docker服務:

systemctl start docker
           

執行

docker -v

檢視docker版本,要看更詳細的資訊請執行

docker info

[root@localhost gitea]# docker -v
Docker version 1.13.1, build cccb291/1.13.1
           

為了更加愉快的使用Docker你可能還需要配置鏡像加速,執行

vim /etc/docker/daemon.json

,修改為如下配置:

{
    "registry-mirrors":[
        "https://reg-mirror.qiniu.com/",
        "https://hub-mirror.c.163.com/"
    ]
}
           

重新加載配置及重新開機Docker服務:

systemctl daemon-reload
systemctl restart docker
           

拉取Gitea鏡像

至此Docker安裝完成,那麼可以開始部署Gitea了,第一步,拉去Gitea鏡像:

docker pull gitea/gitea:latest
           
自建Git伺服器 - 建立屬于你自己的代碼倉庫

拉取成功後,通過

docker images

看到已經有Gitea的鏡像資訊了:

自建Git伺服器 - 建立屬于你自己的代碼倉庫

運作Gitea容器

現在可以通過Gitea鏡像運作Gitea容器了,指令如下:

# 建立挂載目錄
mkdir -p /usr/local/gitea
# 運作容器
docker run -d --name=gitea -p 9020:22 -p 9000:3000 -v /usr/local/gitea:/data gitea/gitea:latest
           

指令參數說明(更加詳細的說明請檢視Docker篇):

-d:背景運作

--name:為啟動的容器命名

-p:端口映射,前面的為主控端端口,後面的為容器端口

-v:目錄挂載,前面的為主控端目錄,後面的為容器内目錄

這個指令是背景運作的,執行完成會輸出一個容器ID,你可以執行

docker ps -a

來檢視容器的運作狀态:

[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS              PORTS                                          NAMES
82c6b17c5710        gitea/gitea:latest   "/usr/bin/entrypoi..."   4 minutes ago       Up 1 second         0.0.0.0:9020->22/tcp, 0.0.0.0:9000->3000/tcp   gitea
           

正常來講都會運作成功,你可通過IP+端口通路你的Gitea服務了,但是如果你的

gitea

容器的STATUS不是Up狀态,那麼可能是啟動遇到錯誤了。

報錯處理

如果容器沒有正常運作起來,比如下面這樣:

[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS                      PORTS               NAMES
4985556f611f        gitea/gitea:latest   "/usr/bin/entrypoi..."   22 seconds ago      Exited (0) 20 seconds ago                       gitea
           

那麼你就需要檢查原因了,你需要檢視啟動日志資訊,咱們先删除這個啟動失敗的容器,執行指令:

# 4985556f611f 是你在`docker ps -a`指令看到的gitea的容器ID(CONTAINER ID)
docker rm 4985556f611f
           

再用下面的指令重新啟動容器:

docker run -it --name=gitea -p 9020:22 -p 9000:3000 -v /usr/local/gitea:/data gitea/gitea:latest
           

把之前啟動指令中的

-d

改為

-it

,這樣你就能通過前台啟動,進而看到報錯資訊了。

接着看,最常見的是你們很可能遇到這個錯:

mkdir: can\'t create directory \'/data/gitea/\': Permission denied ...

自建Git伺服器 - 建立屬于你自己的代碼倉庫

如果出現上述問題,那麼你需要關閉

SELINUX

,方法如下:

  1. 臨時關閉:

    setenforce 0

  2. 永久關閉:

    vim /etc/selinux/config

    ,修改

    SELINUX

    的值為

    disabled

    然後重新開機機器即可,看圖:
    自建Git伺服器 - 建立屬于你自己的代碼倉庫

啟動完畢之後,通路伺服器的9000端口就能看到頁面了,點選登入開始配置。

配置Gitea

安裝完成首次通路需要對Gitea進行配置,預設的參數都已經配好了的,如果使用SQLite3資料庫,甚至什麼都不用做,直接點選立即安裝即可。這裡簡單做一下說明:

資料庫配置

自建Git伺服器 - 建立屬于你自己的代碼倉庫

第一項是資料庫配置,一般預設使用SQLite3資料庫即可(因為無需額外安裝),使用其他資料庫你需要有相關環境支援。以MySQL資料庫為例,需提前在MySQL建立好對應的資料庫,關于MySQL的安裝教程已經準備好了:Linux 系統 MySQL 源碼安裝學習記錄:

自建Git伺服器 - 建立屬于你自己的代碼倉庫

站點資訊配置

一般配置裡,頁面基本上都告訴你這些參數是幹什麼的,各種目錄都會有預設值,不喜歡可以按照你的喜好修改。端口你也可以設定為你自己想要的,比如我修改成9000端口。

需要注意的一點是,如果你修改了預設的3000端口号,那麼安裝完後不會立即生效,新的端口在重新開機服務後生效,不重新開機你依然需要通過3000端口通路。重新開機伺服器按

Ctrl + C

殺掉程序,重新執行

./gitea web

即可。

自建Git伺服器 - 建立屬于你自己的代碼倉庫

可選配置

可選配置裡可以不用配置,這些都是可以後期在配置檔案裡進行修改的。

自用的話一般也不用配置電子郵箱,伺服器和第三方服務設定使用預設的就好。

管理者這裡如果不設定那麼第一個注冊的使用者将成為管理者,這裡我不配置直接點立即安裝。

自建Git伺服器 - 建立屬于你自己的代碼倉庫

安裝完成會跳轉到登入頁面,如果你修改了端口這時候是通路不到的,要麼你繼續用3000端口通路,要麼重新開機服務以啟用新的端口。點選注冊,你将成為Gitea權限最高的管理者:

自建Git伺服器 - 建立屬于你自己的代碼倉庫

注冊并登入上去開啟你的Git私服之旅吧。關于Docker的更多使用教程請跳轉:Docker 虛拟化管理:30 分鐘教你學會用 Docker