- Fix Enter key detection: handle multiple Enter key formats (\n, \r, \r\n) - Reduce flickering: lower render frequency from 60 FPS to 30 FPS - Fix menu bar visibility: re-render menu bar after content to prevent overwriting - Fix content positioning: explicit line positioning for categories and commands - Fix line shifting: clear lines before writing, control newlines manually - Limit visible items: prevent overflow with maxVisibleCategories/Commands - Improve CPU usage: increase sleep interval when no events processed This fixes: - Enter key not working for selection - Strong flickering of the application - Menu bar not visible or being overwritten - Top half of selection list not displayed - Lines being shifted/misaligned
5.3 KiB
5.3 KiB
Traefik/Gitea Redeploy Guide
This guide explains how to perform a clean redeployment of Traefik and Gitea stacks.
Overview
A clean redeploy:
- Stops and removes containers (preserves volumes and SSL certificates)
- Syncs latest configurations
- Redeploys stacks with fresh containers
- Restores configurations
- Verifies service discovery
Expected downtime: ~2-5 minutes
Prerequisites
- Ansible installed locally
- SSH access to production server
- Vault password file:
deployment/ansible/secrets/.vault_pass
Step-by-Step Guide
Step 1: Backup
Automatic backup (recommended):
cd deployment/ansible
ansible-playbook -i inventory/production.yml \
playbooks/maintenance/backup-before-redeploy.yml \
--vault-password-file secrets/.vault_pass
Manual backup:
# On server
cd /home/deploy/deployment/stacks
docker compose -f gitea/docker-compose.yml exec gitea cat /data/gitea/conf/app.ini > /tmp/gitea-app.ini.backup
cp traefik/acme.json /tmp/acme.json.backup
Step 2: Verify Backup
Check backup contents:
# Backup location will be shown in output
ls -lh /home/deploy/backups/redeploy-backup-*/
Verify:
acme.jsonexistsgitea-app.iniexistsgitea-volume-*.tar.gzexists (if volumes were backed up)
Step 3: Redeploy
With automatic backup:
cd deployment/ansible
ansible-playbook -i inventory/production.yml \
playbooks/setup/redeploy-traefik-gitea-clean.yml \
--vault-password-file secrets/.vault_pass
With existing backup:
cd deployment/ansible
ansible-playbook -i inventory/production.yml \
playbooks/setup/redeploy-traefik-gitea-clean.yml \
--vault-password-file secrets/.vault_pass \
-e "backup_name=redeploy-backup-1234567890" \
-e "skip_backup=true"
Step 4: Verify Deployment
Check Gitea accessibility:
curl -k https://git.michaelschiemer.de/api/healthz
Check Traefik service discovery:
# On server
cd /home/deploy/deployment/stacks/traefik
docker compose exec traefik traefik show providers docker | grep -i gitea
Check container status:
# On server
docker ps | grep -E "traefik|gitea"
Step 5: Troubleshooting
If Gitea is not reachable:
-
Check Gitea logs:
cd /home/deploy/deployment/stacks/gitea docker compose logs gitea --tail=50 -
Check Traefik logs:
cd /home/deploy/deployment/stacks/traefik docker compose logs traefik --tail=50 -
Check service discovery:
cd /home/deploy/deployment/stacks/traefik docker compose exec traefik traefik show providers docker -
Run diagnosis:
cd deployment/ansible ansible-playbook -i inventory/production.yml \ playbooks/diagnose/gitea.yml \ --vault-password-file secrets/.vault_pass
If SSL certificate issues:
-
Check acme.json permissions:
ls -l /home/deploy/deployment/stacks/traefik/acme.json # Should be: -rw------- (600) -
Check Traefik ACME logs:
cd /home/deploy/deployment/stacks/traefik docker compose logs traefik | grep -i acme
Rollback Procedure
If something goes wrong, rollback to the backup:
cd deployment/ansible
ansible-playbook -i inventory/production.yml \
playbooks/maintenance/rollback-redeploy.yml \
--vault-password-file secrets/.vault_pass \
-e "backup_name=redeploy-backup-1234567890"
Replace redeploy-backup-1234567890 with the actual backup name from Step 1.
What Gets Preserved
- ✅ Gitea data (volumes)
- ✅ SSL certificates (acme.json)
- ✅ Gitea configuration (app.ini)
- ✅ Traefik configuration
- ✅ PostgreSQL data (if applicable)
What Gets Recreated
- 🔄 Traefik container
- 🔄 Gitea container
- 🔄 Service discovery
Common Issues
Issue: Gitea returns 404 after redeploy
Solution:
- Wait 1-2 minutes for service discovery
- Restart Traefik:
cd /home/deploy/deployment/stacks/traefik && docker compose restart traefik - Check if Gitea is in traefik-public network:
docker network inspect traefik-public | grep gitea
Issue: SSL certificate errors
Solution:
- Verify acme.json permissions:
chmod 600 /home/deploy/deployment/stacks/traefik/acme.json - Check Traefik logs for ACME errors
- Wait 5-10 minutes for certificate renewal
Issue: Gitea configuration lost
Solution:
- Restore from backup:
playbooks/maintenance/rollback-redeploy.yml - Or manually restore app.ini:
cd /home/deploy/deployment/stacks/gitea docker compose exec gitea sh -c "cat > /data/gitea/conf/app.ini" < /path/to/backup/gitea-app.ini docker compose restart gitea
Best Practices
- Always backup before redeploy - Use automatic backup
- Test in staging first - If available
- Monitor during deployment - Watch logs in separate terminal
- Have rollback ready - Know backup name before starting
- Verify after deployment - Check all services are accessible
Related Playbooks
playbooks/maintenance/backup-before-redeploy.yml- Create backupplaybooks/setup/redeploy-traefik-gitea-clean.yml- Perform redeployplaybooks/maintenance/rollback-redeploy.yml- Rollback from backupplaybooks/diagnose/gitea.yml- Diagnose Gitea issuesplaybooks/diagnose/traefik.yml- Diagnose Traefik issues