Skip to main content
Version: 25.4.3

Install on Kubernetes

Deploy Gitea Enterprise to Kubernetes using the upstream Helm chart and container image.

Prerequisites

  • Kubernetes 1.24+ cluster with persistent storage and ingress support.

  • Recommended hardware sized for your expected user base:

    Team size (approx.)MemoryCPU coresSSD capacity
    ~10 users2-4 GB2-4 cores50-100 GB
    ~100 users4-8 GB4-8 cores200-500 GB
    ~1000 users16-32 GB8-16 cores2-5 TB
  • kubectl configured for the target cluster.

  • Helm 3 installed locally.

  • Access to a container registry that can pull the commitgo/gitea-ee image if your cluster requires mirroring.

  • Git is bundled inside the Enterprise container image so no extra package install is necessary on the nodes.

  • (Optional) An Enterprise license to enable premium features. Use License Activation to request a trial and upload the license after deployment.

1. Add the Gitea chart repository

helm repo add gitea https://dl.gitea.io/charts/
helm repo update

The chart documented at gitea/charts supports Enterprise deployments out of the box.

2. Prepare a namespace and secrets

kubectl create namespace gitea
kubectl -n gitea create secret generic gitea-admin \
--from-literal=username=admin \
--from-literal=password='replace-with-strong-password'

3. Create a values file

Save the configuration below as values-enterprise.yaml and adjust domains, ingress classes, storage classes, and persistence storage settings for your environment:

image:
registry: docker.io
repository: commitgo/gitea-ee
tag: 25.4.3
rootless: true
pullPolicy: IfNotPresent

service:
http:
type: ClusterIP
ssh:
type: ClusterIP

ingress:
enabled: true
annotations:
kubernetes.io/ingress.class: <your-ingress-class>
hosts:
- host: gitea.example.com
paths:
- path: /
pathType: Prefix
tls:
- secretName: gitea-tls
hosts:
- gitea.example.com

gitea:
admin:
existingSecret: gitea-admin
config:
server:
DOMAIN: gitea.example.com
ROOT_URL: https://gitea.example.com/

persistence:
size: 20Gi
storageClass: standard
  • Update tag to the Enterprise release you plan to deploy.
  • To use an external database instead of the built-in PostgreSQL, see External Database.
  • Follow the README to configure SSH according to your needs and specific environment.

4. Install the release

helm upgrade --install gitea gitea-charts/gitea \
--namespace gitea \
-f values-enterprise.yaml

Verify that the pods are running and the ingress is reachable:

kubectl -n gitea get pods
kubectl -n gitea get ingress

5. Post-installation tasks

  • Sign in to https://gitea.example.com/ with the admin credentials stored in gitea-admin.
  • Complete License Activation.
  • Configure object storage, SMTP, and other integrations using the upstream Helm values.
  • Review the upstream Configuration Cheat Sheet for the full list of app.ini options and apply them via Helm values or additionalConfigSources.

6. Upgrades and maintenance

  • Update the image.tag in your values file to the newer Enterprise version, then rerun the helm upgrade command.
  • Back up the persistent volume and database before applying upgrades.
  • Use helm diff upgrade (with the diff plugin) to preview manifest changes in CI/CD pipelines.
  • Monitor the pods with kubectl logs and standard Kubernetes observability tooling.
  • Plan high availability by scaling Redis, object storage, and load balancing components according to your Kubernetes topology and recovery objectives.

Gitea Enterprise follows the same chart structure across releases, so existing GitOps workflows only need the image override to adopt Enterprise features.