Gitea容器化部署:Docker与Kubernetes最佳实践
引言:解决自托管Git服务的部署痛点
你是否在部署自托管Git服务时遇到过环境依赖复杂、配置繁琐、升级困难等问题?作为一款轻量级的自托管Git服务(Git with a cup of tea!),Gitea提供了代码托管、代码审查、团队协作、包管理和CI/CD等一站式开发服务。本文将详细介绍如何通过Docker和Kubernetes实现Gitea的容器化部署,帮助你快速搭建稳定、安全、可扩展的Git服务。
读完本文后,你将能够:
- 理解Gitea官方Docker镜像的设计原理
- 使用Docker快速部署单节点Gitea服务
- 构建Gitea的Docker Compose部署方案
- 设计基于Kubernetes的Gitea高可用架构
- 掌握Gitea容器化部署的最佳实践和常见问题解决方案
Gitea容器化部署概述
Gitea容器化优势
容器化部署Gitea具有以下优势:
- 环境一致性:消除"在我机器上能运行"的问题
- 部署简化:一条命令即可完成部署
- 隔离性:与主机系统和其他应用隔离
- 可移植性:在开发、测试和生产环境之间轻松迁移
- 版本控制:轻松管理和切换Gitea版本
- 资源效率:相比虚拟机更轻量级
- 自动化集成:易于集成CI/CD流程
Gitea容器化方案对比
| 部署方案 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 单Docker容器 | 简单、快速、资源占用少 | 不支持高可用、扩展性有限 | 个人使用、小团队、测试环境 |
| Docker Compose | 组件化部署、配置即代码、易于维护 | 横向扩展困难、依赖主机 | 中小团队、开发/生产环境 |
| Kubernetes | 高可用、自动扩缩容、自愈能力 | 复杂度高、资源需求大 | 中大型团队、企业级应用、生产环境 |
Gitea Docker部署详解
Gitea官方镜像解析
Gitea提供两种官方Docker镜像:标准镜像和rootless镜像,分别对应Dockerfile和Dockerfile.rootless。
标准Dockerfile分析
标准Dockerfile采用多阶段构建:
# 构建阶段
FROM docker.io/library/golang:1.25-alpine3.22 AS build-env
# 安装依赖、编译Gitea、构建environment-to-ini工具
# 运行阶段
FROM docker.io/library/alpine:3.22
EXPOSE 22 3000
# 安装运行时依赖
RUN addgroup -S -g 1000 git && adduser -S -H -D -h /data/git -s /bin/bash -u 1000 -G git git
ENV USER=git
ENV GITEA_CUSTOM=/data/gitea
VOLUME ["/data"]
ENTRYPOINT ["/usr/bin/entrypoint"]
CMD ["/usr/bin/s6-svscan", "/etc/s6"]
关键特性:
- 使用s6-overlay作为进程管理器
- 创建git用户(UID/GID 1000)
- 暴露SSH(22)和HTTP(3000)端口
- 数据卷挂载在
/data目录 - 支持通过环境变量配置Gitea
Rootless Dockerfile分析
Rootless镜像(Dockerfile.rootless)是更安全的选择:
FROM docker.io/library/golang:1.25-alpine3.22 AS build-env
# 构建阶段类似标准镜像
FROM docker.io/library/alpine:3.22
EXPOSE 2222 3000
# 使用dumb-init替代s6-overlay
RUN addgroup -S -g 1000 git && adduser -S -H -D -h /var/lib/gitea/git -s /bin/bash -u 1000 -G git git
# 创建必要目录并设置权限
USER 1000:1000
ENV GITEA_WORK_DIR=/var/lib/gitea
ENV GITEA_CUSTOM=/var/lib/gitea/custom
VOLUME ["/var/lib/gitea", "/etc/gitea"]
ENTRYPOINT ["/usr/bin/dumb-init", "--", "/usr/local/bin/docker-entrypoint.sh"]
CMD []
Rootless镜像改进:
- 使用非root用户运行容器(UID/GID 1000)
- SSH端口改为2222,避免需要root权限绑定1024以下端口
- 使用dumb-init作为init系统,更轻量级
- 数据卷分为
/var/lib/gitea(数据)和/etc/gitea(配置)
单Docker容器快速部署
标准镜像部署
使用标准镜像快速启动Gitea:
# 创建数据目录
mkdir -p /var/lib/gitea/data /var/lib/gitea/config
# 启动Gitea容器
docker run -d \
--name gitea \
-p 3000:3000 \
-p 2222:22 \
-v /var/lib/gitea/data:/data \
-e USER_UID=1000 \
-e USER_GID=1000 \
--restart always \
gitea/gitea:latest
Rootless镜像部署
Rootless镜像提供更好的安全性,推荐生产环境使用:
# 创建数据和配置目录
mkdir -p /var/lib/gitea/data /var/lib/gitea/config
# 启动Rootless Gitea容器
docker run -d \
--name gitea-rootless \
-p 3000:3000 \
-p 2222:2222 \
-v /var/lib/gitea/data:/var/lib/gitea \
-v /var/lib/gitea/config:/etc/gitea \
--restart always \
gitea/gitea:latest-rootless
环境变量配置
Gitea支持通过环境变量配置应用,常用环境变量:
| 环境变量 | 描述 | 示例值 |
|---|---|---|
GITEA__database__TYPE | 数据库类型 | postgres |
GITEA__database__HOST | 数据库主机 | db:5432 |
GITEA__database__NAME | 数据库名称 | gitea |
GITEA__database__USER | 数据库用户 | gitea |
GITEA__database__PASSWD | 数据库密码 | secure_password |
GITEA__server__DOMAIN | 服务器域名 | gitea.example.com |
GITEA__server__HTTP_PORT | HTTP端口 | 3000 |
GITEA__server__ROOT_URL | 根URL | https://gitea.example.com/ |
GITEA__security__INSTALL_LOCK | 锁定安装页面 | true |
GITEA__service__DISABLE_REGISTRATION | 禁用注册 | true |
使用环境变量配置Gitea示例:
docker run -d \
--name gitea \
-p 3000:3000 \
-p 2222:22 \
-v /var/lib/gitea/data:/data \
-e USER_UID=1000 \
-e USER_GID=1000 \
-e GITEA__database__TYPE=sqlite3 \
-e GITEA__server__DOMAIN=gitea.example.com \
-e GITEA__server__ROOT_URL=https://gitea.example.com/ \
-e GITEA__security__INSTALL_LOCK=true \
--restart always \
gitea/gitea:latest
Docker Compose部署方案
对于需要数据库等额外服务的场景,Docker Compose是理想选择。创建docker-compose.yml:
version: '3.8'
services:
gitea:
image: gitea/gitea:latest-rootless
container_name: gitea
restart: always
ports:
- "3000:3000"
- "2222:2222"
environment:
- USER_UID=1000
- USER_GID=1000
- GITEA__database__TYPE=postgres
- GITEA__database__HOST=db:5432
- GITEA__database__NAME=gitea
- GITEA__database__USER=gitea
- GITEA__database__PASSWD=gitea_password
- GITEA__server__DOMAIN=gitea.example.com
- GITEA__server__ROOT_URL=https://gitea.example.com/
- GITEA__security__INSTALL_LOCK=true
volumes:
- ./gitea/data:/var/lib/gitea
- ./gitea/config:/etc/gitea
depends_on:
- db
networks:
- gitea-network
db:
image: postgres:16-alpine
container_name: gitea-db
restart: always
environment:
- POSTGRES_USER=gitea
- POSTGRES_PASSWORD=gitea_password
- POSTGRES_DB=gitea
volumes:
- ./postgres/data:/var/lib/postgresql/data
networks:
- gitea-network
redis:
image: redis:7-alpine
container_name: gitea-redis
restart: always
volumes:
- ./redis/data:/data
networks:
- gitea-network
networks:
gitea-network:
driver: bridge
启动服务:
# 创建目录结构
mkdir -p gitea/data gitea/config postgres/data redis/data
# 启动服务
docker-compose up -d
# 查看日志
docker-compose logs -f
Docker部署维护操作
备份与恢复
备份Gitea数据:
# 创建备份目录
mkdir -p /var/lib/gitea/backups
# 执行备份
docker exec -it gitea \
gitea dump -c /data/gitea/conf/app.ini -f /data/backups/gitea-$(date +%Y%m%d-%H%M%S).zip
# 复制备份到主机
docker cp gitea:/data/backups/ /var/lib/gitea/backups/
恢复Gitea数据:
# 复制备份文件到容器内
docker cp /var/lib/gitea/backups/gitea-backup.zip gitea:/data/backups/
# 停止Gitea服务
docker stop gitea
# 执行恢复
docker run --rm -it \
-v /var/lib/gitea/data:/data \
gitea/gitea:latest \
gitea restore -c /data/gitea/conf/app.ini -f /data/backups/gitea-backup.zip
# 启动Gitea服务
docker start gitea
升级Gitea版本
# 拉取最新镜像
docker pull gitea/gitea:latest-rootless
# 停止并删除当前容器
docker stop gitea
docker rm gitea
# 使用新镜像启动容器(使用原来的卷挂载)
docker run -d \
--name gitea \
-p 3000:3000 \
-p 2222:2222 \
-v /var/lib/gitea/data:/var/lib/gitea \
-v /var/lib/gitea/config:/etc/gitea \
--restart always \
gitea/gitea:latest-rootless
使用Docker Compose升级:
# 拉取最新镜像
docker-compose pull
# 重启服务(Gitea会自动执行数据库迁移)
docker-compose up -d
Gitea Kubernetes部署方案
Kubernetes部署架构设计
在Kubernetes环境中部署Gitea,推荐使用以下架构:
主要组件:
- Deployment:管理Gitea应用实例
- StatefulSet:管理数据库(如PostgreSQL)
- Service:提供稳定的网络端点
- Ingress:处理HTTP/HTTPS路由
- ConfigMap:存储配置信息
- Secret:存储敏感信息(密码、密钥等)
- PersistentVolumeClaim:持久化存储数据
Gitea Kubernetes部署清单
Namespace创建
apiVersion: v1
kind: Namespace
metadata:
name: gitea
labels:
name: gitea
ConfigMap配置
apiVersion: v1
kind: ConfigMap
metadata:
name: gitea-config
namespace: gitea
data:
APP_NAME: "Gitea: Git with a cup of tea"
RUN_MODE: "prod"
HTTP_PORT: "3000"
SSH_PORT: "22"
DB_TYPE: "postgres"
DB_HOST: "gitea-db:5432"
DB_NAME: "gitea"
DB_USER: "gitea"
REDIS_HOST: "gitea-redis:6379"
DOMAIN: "gitea.example.com"
ROOT_URL: "https://gitea.example.com/"
Secret配置
apiVersion: v1
kind: Secret
metadata:
name: gitea-secrets
namespace: gitea
type: Opaque
data:
DB_PASSWORD: "Z2l0ZWEtcGFzc3dvcmQ=" # base64编码的"gitea-password"
SECRET_KEY: "c2VjcmV0LWtleS1mb3ItZ2l0ZWE=" # base64编码的随机字符串
INTERNAL_TOKEN: "aW50ZXJuYWwtdG9rZW4=" # base64编码的随机字符串
Gitea Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: gitea
namespace: gitea
spec:
replicas: 2
selector:
matchLabels:
app: gitea
template:
metadata:
labels:
app: gitea
spec:
containers:
- name: gitea
image: gitea/gitea:latest-rootless
ports:
- containerPort: 3000
name: http
- containerPort: 2222
name: ssh
env:
- name: USER_UID
value: "1000"
- name: USER_GID
value: "1000"
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: gitea-secrets
key: DB_PASSWORD
- name: SECRET_KEY
valueFrom:
secretKeyRef:
name: gitea-secrets
key: SECRET_KEY
- name: INTERNAL_TOKEN
valueFrom:
secretKeyRef:
name: gitea-secrets
key: INTERNAL_TOKEN
- name: GITEA__database__PASSWD
valueFrom:
secretKeyRef:
name: gitea-secrets
key: DB_PASSWORD
- name: GITEA__security__INSTALL_LOCK
value: "true"
- name: GITEA__server__SSH_LISTEN_PORT
value: "2222"
- name: GITEA__server__SSH_PORT
value: "22"
volumeMounts:
- name: gitea-data
mountPath: /var/lib/gitea
- name: gitea-config
mountPath: /etc/gitea
resources:
requests:
memory: "256Mi"
cpu: "100m"
limits:
memory: "1Gi"
cpu: "500m"
livenessProbe:
httpGet:
path: /
port: 3000
initialDelaySeconds: 60
periodSeconds: 10
readinessProbe:
httpGet:
path: /
port: 3000
initialDelaySeconds: 5
periodSeconds: 5
volumes:
- name: gitea-data
persistentVolumeClaim:
claimName: gitea-data-pvc
- name: gitea-config
persistentVolumeClaim:
claimName: gitea-config-pvc
PostgreSQL StatefulSet
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: gitea-db
namespace: gitea
spec:
serviceName: gitea-db
replicas: 1
selector:
matchLabels:
app: postgres
template:
metadata:
labels:
app: postgres
spec:
containers:
- name: postgres
image: postgres:16-alpine
ports:
- containerPort: 5432
name: postgres
env:
- name: POSTGRES_USER
valueFrom:
configMapKeyRef:
name: gitea-config
key: DB_USER
- name: POSTGRES_PASSWORD
valueFrom:
secretKeyRef:
name: gitea-secrets
key: DB_PASSWORD
- name: POSTGRES_DB
valueFrom:
configMapKeyRef:
name: gitea-config
key: DB_NAME
volumeMounts:
- name: postgres-data
mountPath: /var/lib/postgresql/data
resources:
requests:
memory: "128Mi"
cpu: "50m"
limits:
memory: "512Mi"
cpu: "250m"
volumeClaimTemplates:
- metadata:
name: postgres-data
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 1Gi
Redis Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: gitea-redis
namespace: gitea
spec:
replicas: 1
selector:
matchLabels:
app: redis
template:
metadata:
labels:
app: redis
spec:
containers:
- name: redis
image: redis:7-alpine
ports:
- containerPort: 6379
name: redis
volumeMounts:
- name: redis-data
mountPath: /data
resources:
requests:
memory: "64Mi"
cpu: "25m"
limits:
memory: "256Mi"
cpu: "100m"
command: ["redis-server", "--appendonly", "yes"]
volumes:
- name: redis-data
persistentVolumeClaim:
claimName: redis-data-pvc
Service配置
apiVersion: v1
kind: Service
metadata:
name: gitea
namespace: gitea
spec:
selector:
app: gitea
ports:
- name: http
port: 80
targetPort: 3000
- name: ssh
port: 22
targetPort: 2222
type: ClusterIP
---
apiVersion: v1
kind: Service
metadata:
name: gitea-db
namespace: gitea
spec:
selector:
app: postgres
ports:
- port: 5432
targetPort: 5432
clusterIP: None # Headless service
---
apiVersion: v1
kind: Service
metadata:
name: gitea-redis
namespace: gitea
spec:
selector:
app: redis
ports:
- port: 6379
targetPort: 6379
Ingress配置
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: gitea-ingress
namespace: gitea
annotations:
kubernetes.io/ingress.class: "nginx"
cert-manager.io/cluster-issuer: "letsencrypt-prod"
nginx.ingress.kubernetes.io/ssl-redirect: "true"
nginx.ingress.kubernetes.io/proxy-body-size: "10m"
spec:
tls:
- hosts:
- gitea.example.com
secretName: gitea-tls
rules:
- host: gitea.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: gitea
port:
number: 80
Kubernetes部署操作
部署Gitea
# 创建命名空间
kubectl apply -f namespace.yaml
# 创建配置
kubectl apply -f configmap.yaml
kubectl apply -f secret.yaml
# 部署数据库和缓存
kubectl apply -f postgres.yaml
kubectl apply -f redis.yaml
# 部署Gitea
kubectl apply -f gitea.yaml
# 创建服务和Ingress
kubectl apply -f service.yaml
kubectl apply -f ingress.yaml
查看部署状态
# 查看Pod状态
kubectl get pods -n gitea
# 查看服务状态
kubectl get svc -n gitea
# 查看Ingress状态
kubectl get ingress -n gitea
# 查看Gitea日志
kubectl logs -n gitea deployment/gitea -f
扩展Gitea副本数
# 扩展到3个副本
kubectl scale deployment gitea -n gitea --replicas=3
# 设置自动扩缩容
kubectl autoscale deployment gitea -n gitea \
--min=2 --max=5 --cpu-percent=70
Gitea容器化最佳实践
数据持久化策略
数据持久化是容器化部署的关键,Gitea需要持久化的数据包括:
- Git仓库数据:用户代码仓库
- 数据库数据:用户、权限、提交记录等元数据
- 配置文件:Gitea配置
- 日志文件:系统和访问日志
- LFS文件:Git LFS大文件存储
- SSH密钥:服务器SSH密钥
推荐的数据持久化策略:
- 使用命名卷而非绑定挂载,提供更好的可移植性
- 为不同类型数据创建独立卷,便于管理和备份
- 数据库使用StatefulSet和PVC,确保数据稳定性
- 考虑使用分布式存储解决方案,如Ceph、GlusterFS等,提供更好的可用性和扩展性
安全加固措施
- 使用Rootless镜像:避免容器内使用root用户
- 设置适当的文件权限:确保数据目录权限正确
- 使用非root用户运行容器:通过USER指令指定普通用户
- 限制容器权限:使用--cap-drop=ALL减少容器 capabilities
- 启用网络隔离:使用Docker网络或K8s NetworkPolicy限制网络访问
- 加密敏感数据:使用Secret存储密码等敏感信息
- 定期更新镜像:及时获取安全补丁
- 启用HTTPS:配置TLS加密所有流量
- 设置资源限制:防止DoS攻击导致资源耗尽
- 使用健康检查:及时发现和恢复异常容器
Docker安全启动示例:
docker run -d \
--name gitea-rootless \
-p 3000:3000 \
-p 2222:2222 \
-v gitea-data:/var/lib/gitea \
-v gitea-config:/etc/gitea \
--user 1000:1000 \
--cap-drop=ALL \
--security-opt no-new-privileges \
--restart always \
gitea/gitea:latest-rootless
性能优化建议
- 资源分配:根据实际需求合理分配CPU和内存资源
- 使用Redis缓存:缓存频繁访问的数据,减轻数据库负担
- 数据库优化:根据数据库类型进行适当优化
- 启用Gzip压缩:减少网络传输数据量
- 配置适当的日志级别:避免过多日志影响性能
- 使用共享内存:对于多实例部署,考虑使用共享内存缓存
- 定期清理:定期清理临时文件和旧日志
- 使用合适的存储类型:Git仓库适合使用低延迟存储
- 配置连接池:优化数据库和Redis连接池
- 监控性能:使用Prometheus等工具监控性能指标
高可用架构设计
对于企业级部署,推荐高可用架构:
高可用架构关键点:
- 多Gitea实例部署,避免单点故障
- 使用负载均衡器分发流量
- 共享存储用于Git仓库数据
- 数据库集群保证数据可靠性
- Redis集群用于缓存和会话存储
- 定期备份确保数据可恢复性
监控与日志管理
-
Gitea内置监控:
- 启用
/api/healthz端点检查健康状态 - 配置Prometheus指标导出
- 启用
-
容器监控:
- 使用Prometheus + Grafana监控容器和应用指标
- 监控CPU、内存、磁盘IO、网络等资源使用情况
-
日志管理:
- 配置集中式日志收集,如ELK栈
- 设置适当的日志级别和轮转策略
- 监控错误日志,及时发现问题
Docker Compose集成Prometheus和Grafana示例:
prometheus:
image: prom/prometheus:v2.45.0
volumes:
- ./prometheus:/etc/prometheus
- prometheus-data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
ports:
- "9090:9090"
networks:
- monitoring-network
grafana:
image: grafana/grafana:10.1.0
volumes:
- grafana-data:/var/lib/grafana
ports:
- "3001:3000"
networks:
- monitoring-network
depends_on:
- prometheus
常见问题解决方案
权限问题
问题:容器内权限不足,无法写入数据。
解决方案:
-
确保宿主机数据目录权限正确:
sudo chown -R 1000:1000 /var/lib/gitea -
启动容器时指定用户ID和组ID:
docker run -d \ --name gitea \ -e USER_UID=1000 \ -e USER_GID=1000 \ ... gitea/gitea:latest -
使用
--user参数指定运行用户:docker run -d \ --name gitea \ --user 1000:1000 \ ... gitea/gitea:latest
端口冲突
问题:容器端口与主机端口冲突。
解决方案:
-
查看端口占用情况:
netstat -tulpn | grep 3000 # 检查3000端口 -
映射到不同的主机端口:
docker run -d \ --name gitea \ -p 8080:3000 # 将容器3000端口映射到主机8080端口 -p 2222:22 # 将容器22端口映射到主机2222端口 ... gitea/gitea:latest
数据备份恢复
问题:需要定期备份或恢复Gitea数据。
解决方案:
-
创建备份脚本
backup-gitea.sh:#!/bin/bash BACKUP_DIR="/var/lib/gitea/backups" TIMESTAMP=$(date +%Y%m%d-%H%M%S) BACKUP_FILE="$BACKUP_DIR/gitea-$TIMESTAMP.zip" # 创建备份目录 mkdir -p $BACKUP_DIR # 执行备份 docker exec gitea gitea dump -c /data/gitea/conf/app.ini -f /data/backups/gitea-$TIMESTAMP.zip # 保留最近10个备份 ls -tp $BACKUP_DIR/*.zip | grep -v '/$' | tail -n +11 | xargs -I {} rm -- {} -
添加到crontab定期执行:
# 每天凌晨3点执行备份 0 3 * * * /path/to/backup-gitea.sh -
恢复数据:
# 停止Gitea docker stop gitea # 恢复备份 docker run --rm -v /var/lib/gitea/data:/data gitea/gitea:latest \ gitea restore -c /data/gitea/conf/app.ini -f /data/backups/gitea-backup.zip # 启动Gitea docker start gitea
升级失败
问题:升级Gitea版本后无法启动。
解决方案:
-
查看日志定位问题:
docker logs gitea -
回滚到之前的版本:
# 停止并删除当前容器 docker stop gitea docker rm gitea # 使用旧版本镜像启动 docker run -d \ --name gitea \ -v /var/lib/gitea/data:/data \ ... gitea/gitea:1.20.5 # 指定之前的稳定版本 -
检查数据库迁移问题:
docker exec -it gitea gitea doctor -c /data/gitea/conf/app.ini
结论与展望
本文详细介绍了Gitea的容器化部署方案,包括Docker单容器部署、Docker Compose多组件部署以及Kubernetes企业级部署,并提供了数据持久化、安全加固、性能优化等最佳实践。
通过容器化部署,你可以快速搭建和维护Gitea服务,实现环境一致性、部署自动化和服务高可用。无论是个人开发者、小团队还是大型企业,都可以根据自身需求选择合适的部署方案。
未来,Gitea容器化部署将朝着更简化、更安全、更智能的方向发展,包括更好的云原生支持、更完善的自动扩缩容策略、更深度的监控集成等。建议保持关注Gitea官方文档和社区,及时获取最新的部署最佳实践。
附录:常用命令参考
Docker命令
# 拉取Gitea镜像
docker pull gitea/gitea:latest
docker pull gitea/gitea:latest-rootless
# 启动Gitea容器
docker run -d --name gitea -p 3000:3000 -p 2222:22 -v gitea-data:/data gitea/gitea:latest
# 查看容器状态
docker ps -a --filter "name=gitea"
# 查看Gitea日志
docker logs -f gitea
# 进入容器内部
docker exec -it gitea /bin/bash
# 停止Gitea容器
docker stop gitea
# 启动Gitea容器
docker start gitea
# 删除Gitea容器
docker rm gitea
# 备份Gitea数据
docker exec gitea gitea dump -c /data/gitea/conf/app.ini -f /data/backups/gitea-backup.zip
Docker Compose命令
# 启动服务
docker-compose up -d
# 停止服务
docker-compose down
# 查看日志
docker-compose logs -f
# 重启服务
docker-compose restart
# 查看服务状态
docker-compose ps
# 拉取最新镜像
docker-compose pull
Kubernetes命令
# 部署Gitea
kubectl apply -f gitea-k8s/
# 查看部署状态
kubectl get pods -n gitea
# 查看服务
kubectl get svc -n gitea
# 查看Ingress
kubectl get ingress -n gitea
# 查看日志
kubectl logs -n gitea deployment/gitea -f
# 扩展副本数
kubectl scale deployment gitea -n gitea --replicas=3
# 执行数据库迁移
kubectl exec -it -n gitea deployment/gitea -- gitea migrate
希望本文能帮助你顺利实现Gitea的容器化部署。如有任何问题或建议,欢迎在评论区留言讨论。如果觉得本文对你有帮助,请点赞、收藏并关注,获取更多关于Gitea和容器化部署的技术文章。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



