Aller au contenu

Trace install tas - Gitea

De Loic Wiki
Version datée du 4 août 2026 à 16:09 par Daneel (discussion | contributions) (Rendre la gestion du mot de passe PostgreSQL instructive)
(diff) ← Version précédente | Version actuelle (diff) | Version suivante → (diff)

Trace install tas - Gitea

Gitea fournit le service Git local de tas.

Accès et exposition

Runtime

Le runtime est Podman rootless + Quadlet + systemd utilisateur.

  • Application : /home/loic/.config/containers/systemd/gitea.container
  • PostgreSQL : /home/loic/.config/containers/systemd/postgresql-gitea.container
  • Réseau : gitea-net, assuré par /home/loic/.config/systemd/user/gitea-network.service
  • Données Gitea : volume Podman gitea_data monté sur /data
  • Cache Gitea : volume Podman gitea_cache monté sur /cache
  • Données PostgreSQL : /media/loic/nem/gitea/postgres
  • Reverse proxy : bloc Gitea dans /etc/caddy/Caddyfile

Images actuellement utilisées et tags versionnés :

  • docker.io/gitea/gitea:1.27.1
  • docker.io/library/postgres:17.10

Secret PostgreSQL

Les Quadlets ne contiennent plus la valeur du mot de passe. Les deux conteneurs utilisent le secret Podman gitea-postgres-password : POSTGRES_PASSWORD pour PostgreSQL et GITEA__database__PASSWD pour Gitea.

La valeur n'est jamais publiée dans cette documentation. Pour vérifier uniquement la présence du secret :

podman secret inspect gitea-postgres-password

Pour créer ou remplacer le secret sans l'écrire dans un Quadlet :

read -r -s -p 'Mot de passe PostgreSQL Gitea: ' GITEA_DB_PASSWORD
printf '\n'
printf '%s' "$GITEA_DB_PASSWORD" | podman secret create --replace gitea-postgres-password -
unset GITEA_DB_PASSWORD

Visualiser la valeur actuelle

podman secret inspect affiche les métadonnées du secret, mais pas sa valeur. Pour la récupérer localement, on peut l'injecter temporairement dans un conteneur et l'afficher dans le terminal :

podman run --rm \
  --secret gitea-postgres-password,type=env,target=GITEA_DB_PASSWORD \
  docker.io/library/postgres:17.10 \
  sh -c 'printf "%s\n" "$GITEA_DB_PASSWORD"'

Cette commande ne modifie ni PostgreSQL ni Gitea, mais révèle le mot de passe à l'écran. Ne pas l'utiliser dans une session partagée, une capture d'écran ou une commande enregistrée.

Modifier le mot de passe

Le mot de passe doit être identique dans le rôle PostgreSQL gitea et dans le secret Podman gitea-postgres-password. POSTGRES_PASSWORD ne modifie pas un rôle déjà initialisé : il n'est utilisé qu'à la création initiale du répertoire de données.

La méthode recommandée génère un mot de passe hexadécimal et modifie le rôle SQL avant de remplacer le secret :

new_password="$(openssl rand -hex 32)"
printf "ALTER ROLE gitea PASSWORD '%s';\n" "$new_password" \
  | podman exec -i gitea-db psql -U gitea -d gitea -v ON_ERROR_STOP=1 -f -
printf '%s' "$new_password" | podman secret create --replace gitea-postgres-password -
unset new_password
systemctl --user restart gitea.service

Vérifier ensuite :

podman exec gitea-db pg_isready -U gitea -d gitea
systemctl --user is-active postgresql-gitea.service gitea.service
curl -fsS -o /dev/null -w '%{http_code}\\n' http://127.0.0.1:8105/

Ne pas modifier uniquement le secret Podman ou uniquement le rôle SQL : les deux valeurs doivent rester synchronisées.

Étapes de configuration

  1. Créer le réseau gitea-net et le maintenir par gitea-network.service.
  2. Créer le secret Podman gitea-postgres-password.
  3. Démarrer PostgreSQL avec le volume persistant et le secret injecté dans POSTGRES_PASSWORD.
  4. Démarrer Gitea avec le même secret injecté dans GITEA__database__PASSWD.
  5. Configurer Gitea pour PostgreSQL sur gitea-db:5432, avec la base et l'utilisateur gitea.
  6. Publier le port HTTP local 8105 via Caddy vers gitea.lololand.org et le port externe 25702.
  7. Vérifier systemd, PostgreSQL, la réponse HTTP locale et la réponse publique.

Commandes de vérification

systemctl --user daemon-reload
systemctl --user is-active gitea-network.service postgresql-gitea.service gitea.service
podman exec gitea-db pg_isready -U gitea -d gitea
podman exec gitea gitea --version
podman exec gitea-db postgres --version
curl -fsS -o /dev/null -w '%{http_code}\\n' http://127.0.0.1:8105/

Sauvegarde et retour arrière

Le backup de la modification du 4 août 2026 est dans :

/home/loic/backups/gitea-quadlet-hardening-20260804T102558+0200/

Restaurer les Quadlets depuis ce dossier, exécuter systemctl --user daemon-reload, puis redémarrer PostgreSQL et Gitea dans cet ordre. Ne pas supprimer le volume PostgreSQL lors d'un retour arrière.

Vérifications du 4 août 2026

  • Gitea 1.27.1 actif.
  • PostgreSQL 17.10 actif et pg_isready positif.
  • HTTP local : 200.
  • HTTP public sur https://gitea.lololand.org/ : 200.
  • Aucun mot de passe en clair dans les deux Quadlets Gitea/PostgreSQL.