一、基础信息
因Gitlab对系统资源占用过高,所以采用Gitea,首先将镜像下载到harbor,地址为192.168.2.104/library/gitea@latest
二、环境准备
2.1、数据库
复用192.168.2.105上的Postgresql数据库,使用如下命令创建数据库以及用户
1
2
3
4
5
6
7
8
9
10
11
| #登入数据库
docker exec -it postgres_primary psql -U zabbix -d zabbix
#创建用户
CREATE USER gitea WITH ENCRYPTED PASSWORD 'Gitea_Pwd_2026';
#创建数据库
CREATE DATABASE gitea OWNER gitea;
#对用户授权
GRANT ALL PRIVILEGES ON DATABASE gitea TO gitea;
#查看数据库
\l
#有数据库gitea即可
|

2.2、共享存储准备
共享存储使用NFS,服务器在192.168.2.104上,使用如下命令进行处理
1
2
3
4
5
6
7
8
9
| dnf install -y nfs-utils
mkdir -p /data/nfs/gitea sudo chown -R 1000:1000 /data/nfs/gitea
# Gitea默认用户ID是1000
echo "/data/nfs/gitea *(rw,sync,no_subtree_check,no_root_squash)" | sudo tee -a /etc/exports sudo exportfs -ra
#启动服务
systemctl start nfs-server
systemctl enable nfs-server
#在各个k8s主机上安装软件
dnf install -y nfs-utils
|
配置PV,在headlamp上进行配置
1
2
3
4
5
6
7
8
9
10
11
12
| apiVersion: v1
kind: PersistentVolume
metadata:
name: gitea-pv
spec:
capacity:
storage: 20Gi
accessModes:
- ReadWriteMany
nfs:
server: 192.168.2.104
path: /data/nfs/gitea
|
等待PV状态正常,如果pvc没有创建,状态为Available
创建PVC,在headlamp上创建该PVC
1
2
3
4
5
6
7
8
9
10
11
| apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: gitea-pvc
namespace: default
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 20Gi
|
等待状态正常

三、部署Gitea
3.1、部署
在headlamp上部署如下Depolyment
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
| apiVersion: apps/v1
kind: Deployment
metadata:
name: gitea
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: gitea
template:
metadata:
labels:
app: gitea
spec:
containers:
- name: gitea
image: 192.168.2.104/library/gitea:latest
ports:
- containerPort: 3000
name: http
- containerPort: 22
name: ssh
env:
- name: GITEA__database__DB_TYPE
value: "postgres"
- name: GITEA__database__HOST
value: "192.168.2.105:5432"
- name: GITEA__database__NAME
value: "gitea"
- name: GITEA__database__USER
value: "gitea"
- name: GITEA__database__PASSWD
value: "你的密码"
volumeMounts:
- name: gitea-data
mountPath: /data
volumes:
- name: gitea-data
persistentVolumeClaim:
claimName: gitea-pvc
|
等待deployment运行状态正常

3.2、对外映射
在headlamp上部署如下Service
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| # 1. 先给 Gitea 创建一个内部 Service 暴露端口
apiVersion: v1
kind: Service
metadata:
name: gitea
namespace: default
spec:
selector:
app: gitea # 绑定刚才部署的 gitea pod
ports:
- name: http
port: 3000
targetPort: 3000
- name: ssh
port: 22
targetPort: 22
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| # 创建 Ingress 路由规则
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: gitea-ingress
namespace: default # 必须和 Service 在同一个命名空间
spec:
ingressClassName: nginx
rules:
- host: gitea.xxx.com # 你的 Gitea 访问域名
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: gitea # 指向上面创建的 Service 名字
port:
number: 3000 # 对应 Service 的 3000 端口
|
查询该Ingress 路由规则绑定的地址,对headlamp不太熟悉,点击Ingress中Gitea,选择View Yaml
查询到该域名解析到的地址
将该地址和域名写入DNS服务器即可
四、配置
初次进入Gitea,需要进行初始化,根据具体情况填写即可,进入系统后即可
