最近有線上朋友私信問我怎么搭建個人博客,也有咨詢我個人項目的代碼是如何保管的,還有一個朋友問我買了服務器玩了一段時間,等新鮮感過了就不知道做什么了。
關於這些問題並沒有一個標准答案,每個人都有自己的使用習慣,找到適合你的才是最好的。關於博客搭建及使用的工具或服務在我博客的關於頁里已經寫的比較詳細了,如果有人想看具體步驟我可以專門寫一篇詳細的教程,本篇先來講講我的個人項目代碼是如何保管的。
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種:
- Docker安裝(強烈推薦)
- 二進制安裝
- 源碼編譯安裝
第三種源碼安裝的方式最繁瑣,需要先安裝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二進制文件同級目錄下:
默認運行的端口是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
拉取成功后,通過docker images
看到已經有Gitea的鏡像信息了:
運行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 ...
如果出現上述問題,那么你需要關閉SELINUX
,方法如下:
-
臨時關閉:
setenforce 0
-
永久關閉:
vim /etc/selinux/config
,修改SELINUX
的值為disabled
然后重啟機器即可,看圖:
啟動完畢之后,訪問服務器的9000端口就能看到頁面了,點擊登錄開始配置。
配置Gitea
安裝完成首次訪問需要對Gitea進行配置,默認的參數都已經配好了的,如果使用SQLite3數據庫,甚至什么都不用做,直接點擊立即安裝即可。這里簡單做一下說明:
數據庫配置
第一項是數據庫配置,一般默認使用SQLite3數據庫即可(因為無需額外安裝),使用其他數據庫你需要有相關環境支持。以MySQL數據庫為例,需提前在MySQL創建好對應的數據庫,關於MySQL的安裝教程已經准備好了:Linux 系統 MySQL 源碼安裝學習記錄:
站點信息配置
一般配置里,頁面基本上都告訴你這些參數是干什么的,各種目錄都會有默認值,不喜歡可以按照你的喜好修改。端口你也可以設置為你自己想要的,比如我修改成9000端口。
需要注意的一點是,如果你修改了默認的3000端口號,那么安裝完后不會立即生效,新的端口在重啟服務后生效,不重啟你依然需要通過3000端口訪問。重啟服務器按Ctrl + C
殺掉進程,重新執行./gitea web
即可。
可選配置
可選配置里可以不用配置,這些都是可以后期在配置文件里進行修改的。
自用的話一般也不用配置電子郵箱,服務器和第三方服務設置使用默認的就好。
管理員這里如果不設置那么第一個注冊的用戶將成為管理員,這里我不配置直接點立即安裝。
安裝完成會跳轉到登錄頁面,如果你修改了端口這時候是訪問不到的,要么你繼續用3000端口訪問,要么重啟服務以啟用新的端口。點擊注冊,你將成為Gitea權限最高的管理員:
注冊並登錄上去開啟你的Git私服之旅吧。關於Docker的更多使用教程請跳轉:Docker 虛擬化管理:30 分鍾教你學會用 Docker