Gitea是一个轻量级的Git代码仓库服务器,和我们见得比较多的Github、Gitee以及Gitlab一样,都是一个Git仓库。对于Github和Gitee都是开源项目的Git仓库,对于公司、企业这样的有私有化的需求的场景下,则通常使用Gitlab/Gitea这样的私有化Git仓库。
目前市面上使用最多的是Gitlab,因为它的功能很齐全,也很成熟,但是也带来一个问题就是占用的资源比较多,Gitlab的基础运行条件是2C的CPU、4-5G的内存,而Gitea则只需要200M左右的内存即可轻松运行,哪怕是一个小小的树莓派,都能轻松运行一个Gitea仓库(Gitlab没有ARM版本的,所以树莓派无法部署Gitlab,Gitea支持ARM,可以部署在树莓派)。Gitea对于小公司,或者是个人开发者都是很友好的,通过Docker容器即可轻松部署一个属于自己的私有Git仓库。
Gitea的官网:Gitea官网。
下面我们在K8S集群当中,去部署一个Gitea代码仓库服务,供我们内网使用。
1. 创建PVC并指定存储类
先创建Gitea的Namespace
kubectl create namespace gitea
创建Gitea数据存放的持久卷PVC配置。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: gitea-pvc
namespace: gitea
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Gi
storageClassName: nfs-storage # 根据你的存储类设置
2. 部署Gitea服务
# gitea-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: gitea
namespace: gitea
spec:
replicas: 1
selector:
matchLabels:
app: gitea
template:
metadata:
labels:
app: gitea
spec:
containers:
- name: gitea
image: wanna1314y.top:1443/gitea/gitea:latest
ports:
- containerPort: 3000
name: http
- containerPort: 22
name: ssh
volumeMounts:
- name: gitea-data
mountPath: /data
volumes:
- name: gitea-data
persistentVolumeClaim:
claimName: gitea-pvc
3. 配置Gitea允许外网访问
apiVersion: v1
kind: Service
metadata:
name: gitea-service
namespace: gitea
spec:
selector:
app: gitea
ports:
- name: http
port: 3000
targetPort: 3000
- name: ssh
port: 22
targetPort: 22
type: ClusterIP
通过Ingrss配置外放访问的域名
kind: Ingress
apiVersion: networking.k8s.io/v1
metadata:
name: gitea-nginx-ingress
namespace: gitea
spec:
ingressClassName: nginx
tls:
- hosts:
- <domain>
secretName: <secret>
rules:
- host: <domain>
http:
paths:
- path: /
pathType: ImplementationSpecific
backend:
service:
name: gitea-service
port:
number: 3000
4.外网push/pull代码
4.1 基于HTTPS的方式进行代码的push/pull
我们可以通过如下的命令进行代码的clone:
git clone https://gitea.wanna1314y.top/wanna-spring/wanna-spring-projects.git
我们通过git remote add
命令添加远程仓库地址。
git remote add gitea <repository-url>
# example
git remote add gitea https://gitea.wanna1314y.top/wanna-spring/wanna-spring-projects.git
使用git push
命令将代码推送到远程仓库,期间可能会要求输入密码,HTTPS不能实现免密登录,免密登录得使用SSH的方式。
git push -u gitea main
4.2 基于SSH的方式进行代码的push/pull(免密)
SSH方式,不仅需要在Ingress处配置,还需要在Service当中把SSH端口也通过NodePort的方式暴露出来,不然Gitea无法使用SSH服务。
apiVersion: v1
kind: Service
metadata:
name: gitea-service
namespace: gitea
spec:
selector:
app: gitea
ports:
- name: http
port: 3000
targetPort: 3000
- name: ssh
port: 22
targetPort: 22
nodePort: 31822
type: NodePort
由于默认SSH使用的是22端口进行的通信,但是OpenSSHServer通常都已经在22端口启动,因为我们有需要使用SSH登录到目标机器的场景。但是Gitea如果使用SSH的方式拉取/推送代码时,也会是用到22端口,会导致端口冲突,因此我们需要额外配置SSH的配置文件,让访问Gitea的SSH时,使用另外的一个端口号进行通信,而不是使用默认的SSH的22端口进行通信。
我们需要使用如下的命令去编辑SSH的配置文件
sudo vim ~/.ssh/config
往其中加入如下的内容,让我们在访问gitea.wanna1314y.top
这个域名的SSH时,使用31822端口进行通信。
Host gitea.wanna1314y.top
Port 31822
理论上应该配置成为如下内容的配置,必须得跟上域名为*
的配置才行,如果单独使用如上的内容,可能会导致除了这个域名之外的其他的域名的Git服务的SSH免密登录无法正常访问。
Host gitea.wanna1314y.top
Port 31822
Host *
HostkeyAlgorithms +ssh-rsa
PubkeyAcceptedKeyTypes +ssh-rsa
接着就正常了,可以尝试使用类似如下的命令去拉取Gitea当中我们现有仓库(如果没有的话,可以在Gitea上手动新建一个仓库)当中的代码进行测试,发现拉取代码已经正常。
git clone git@gitea.wanna1314y.top:wanna-spring/wanna-spring-projects.git
我们通过git remote add
命令添加远程仓库地址。
git remote add gitea <repository-url>
# example
git remote add gitea git@gitea.wanna1314y.top:wanna-spring/wanna-spring-projects.git
使用git push
命令将代码推送到远程仓库,可以进行SSH免密push代码。
git push -u gitea main
5. 额外配置Gitea
Gitea的配置信息存放位置为:
/data/gitea/conf/app.ini
比如Gitea需要修改DB连接地址,就可以找到配置文件的如下这部分,进行更多的自定义的修改:
[database]
PATH = /data/gitea/gitea.db
DB_TYPE = mysql
HOST = {db_host}:{db_port}
NAME = {dbname}
USER = {username}
PASSWD = {password}
LOG_SQL = false
SCHEMA =
SSL_MODE = disable
基于Kubectl执行配置文件,让Gitea服务重启从而使得配置能够及时生效。
kubectl apply -f gitea-deployment.yaml