New version slots (major version jumps): - gitea: 1.24.3 -> 28.2.0 (slot 1 -> 28) - ghost: 5.130.6 -> 6.72.0 (slot 5 -> 6) - formbricks: 3.6.0 -> 6.1.0 (slot 3 -> 6) - mattermost: 10.8.1 -> 12.0.1 (slot 10 -> 12) - zulip: 9.4 -> 12.3 (slot 9 -> 12) - immich: 1.135.3 -> 3.3.5 (slot 1 -> 3) - openproject: 16.1.1 -> 17.9.3 (slot 16 -> 17) - listmonk: 5.0.3 -> 6.1.0 (slot 5 -> 6) - discourse: 3.5.3 -> 2026.10.0 (slot 3 -> 2026, calver) Same-slot large bumps: - vllm: 0.9.2 -> 0.32.0 - longhorn: v1.8.1 -> v1.13.0 Infrastructure: - cert-manager: v1.17.2 -> v1.21.2 - coredns: v1.12.0 -> v1.14.7 - externaldns: v0.13.4 -> v0.23.0 - metallb: v0.15.0 -> v0.16.1 - mysql: 9.1.0 -> 9.7.4 - node-feature-discovery: v0.17.3 -> v0.20.1 - nvidia-device-plugin: v0.17.1 -> v0.20.1
85 lines
3.4 KiB
Markdown
85 lines
3.4 KiB
Markdown
# Gitea Configuration
|
|
|
|
This Gitea deployment uses a hybrid configuration approach combining environment variables with Gitea's self-managed configuration file.
|
|
|
|
## Configuration Architecture
|
|
|
|
### Environment Variables (gitea.env)
|
|
Non-secret configuration is stored in `gitea.env` and automatically loaded via kustomize's `configMapGenerator`. This includes:
|
|
- Server settings (domain, URLs, ports)
|
|
- Database connection details (except password)
|
|
- SMTP settings (except password)
|
|
- Service settings (registration, notifications)
|
|
- Repository and storage paths
|
|
|
|
### Kubernetes Secrets (gitea-secrets)
|
|
Sensitive configuration is stored in the `gitea-secrets` secret and managed by the wild-cloud deployment system:
|
|
- `adminPassword` - Gitea admin user password
|
|
- `secretKey` - Application secret key
|
|
- `jwtSecret` - JWT signing secret
|
|
- `dbPassword` - Database password
|
|
- `smtpPassword` - SMTP authentication password
|
|
|
|
Secrets are defined in `secrets.yaml` and listed in `manifest.yaml` under `defaultSecrets`. When deploying, the system automatically ensures all required secrets exist in the `gitea-secrets` secret before deployment.
|
|
|
|
### Persistent Configuration (app.ini)
|
|
Gitea manages its own `app.ini` file on persistent storage for:
|
|
- Generated security tokens
|
|
- Runtime configuration changes made via web UI
|
|
- Database migration state
|
|
- User-modified settings
|
|
|
|
## How It Works
|
|
|
|
1. **Startup**: Kustomize generates a ConfigMap from `gitea.env`
|
|
2. **Environment Loading**: Pod loads non-secret config from ConfigMap via `envFrom`
|
|
3. **Secret Loading**: Pod loads sensitive config from Kubernetes secrets via `env`
|
|
4. **Configuration Merge**: Gitea's environment-to-ini process merges environment variables into `app.ini`
|
|
5. **Persistence**: Gitea writes the merged configuration plus generated tokens to persistent storage
|
|
|
|
## Making Configuration Changes
|
|
|
|
### Non-Secret Settings
|
|
1. Edit `gitea.env` with your changes
|
|
2. Deploy the app via the web app, CLI, or API to apply changes
|
|
3. Pod will restart and pick up new configuration
|
|
|
|
### Secret Settings
|
|
1. Edit `secrets.yaml` with your secret values
|
|
2. Ensure the secret key is listed in `manifest.yaml` under `defaultSecrets`
|
|
3. Deploy the app via the web app, CLI, or API - this will automatically update the `gitea-secrets` secret and restart the pod
|
|
|
|
### Web UI Changes
|
|
Configuration changes made through Gitea's admin web interface are automatically persisted to the `app.ini` file on persistent storage and will survive pod restarts.
|
|
|
|
## Configuration Precedence
|
|
|
|
1. **Kubernetes Secrets** (highest priority)
|
|
2. **Environment Variables** (from gitea.env)
|
|
3. **Persistent app.ini** (lowest priority)
|
|
|
|
Environment variables override file settings, and secrets override everything.
|
|
|
|
## Troubleshooting
|
|
|
|
### Check Current Configuration
|
|
```bash
|
|
# View environment variables
|
|
kubectl describe pod -n gitea -l app=gitea | grep -A 20 "Environment"
|
|
|
|
# View current app.ini
|
|
kubectl exec -it deployment/gitea -n gitea -- cat /data/gitea/conf/app.ini
|
|
```
|
|
|
|
### Configuration Not Applied
|
|
- Verify the ConfigMap was generated: `kubectl get configmap -n gitea`
|
|
- Check pod restart: `kubectl get pods -n gitea`
|
|
- Review startup logs: `kubectl logs -n gitea -l app=gitea`
|
|
|
|
|
|
## External Dependencies
|
|
|
|
- **Database**: PostgreSQL instance in `postgres` namespace
|
|
- **Storage**: Longhorn distributed storage
|
|
- **Ingress**: Traefik with Let's Encrypt certificates
|
|
- **DNS**: External-DNS with Cloudflare integration |