# Présentation et Initialisation

> **Gitea** est un service de développement logiciel tout-en-un, facile à utiliser et auto-hébergé. Il inclut l'hébergement Git, la révision de code, la collaboration en équipe, un registre de paquets et des fonctionnalités d'intégration continue et de déploiement continu (CI/CD). Il est similaire à GitHub, Bitbucket et GitLab.

<p class="callout info">À l'origine, **Gitea** est issu d'un fork de *Gogs*, mais la quasi-totalité du code a été remaniée.</p>

## Objectifs - Déploiement Docker Compose

<span style="text-decoration: underline;">**Résumé :**</span> Rédiger une stack Gitea auto-hébergée, pensée pour tourner derrière un Apache déjà en place sur un serveur, avec accès Git en SSH.

<span style="text-decoration: underline;">**Prérequis :** </span>

- `PostgreSQL` comme base de données (conteneur dédié, réseau interne isolé)
- Le serveur SSH intégré de Gitea exposé sur le port hôte **2222** (le port 22 est déjà pris par le sshd système)
- Un accès HTTP publié uniquement sur `127.0.0.1:3000`, car **Apache** (natif sur l'hôte) fait déjà reverse-proxy/TLS pour les autres vhosts de ce serveur et gérera aussi celui-ci
- Domaine cible : `git.mondomain.ovh` (email admin : placeholder `admin@mondomain.ovh`, à changer)
- Inscription publique désactivée (comptes créés par l'admin uniquement)
- Gitea Actions et mailer désactivés pour le moment (documentés en option, pas activés)
- Toute la configuration versionnable en clair, tous les secrets externalisés dans un `.env` non commité

### Architecture

```
                 Internet
                    │
                    │ 80/443 (TLS géré par Apache, certs Certbot existants)
                    ▼
   ┌────────────────────────────────┐
   │   Apache (natif, sur l'hôte)   │
   │   vhost git.mondomain.ovh      │
   └───────────────┬─────────────────┘
                    │ proxy_pass http://127.0.0.1:3000
                    ▼
   ┌────────────────────────────────────────────┐
   │ Docker : réseau "backend" (internal)         │
   │                                                │
   │  ┌───────────────┐        ┌─────────────────┐ │
   │  │ gitea          │  SQL   │ db (postgres)   │ │
   │  │ (rootless)     │◄──────►│ 16-alpine       │ │
   │  │ HTTP  :3000    │        │ non exposé hôte │ │
   │  │ SSH   :2222    │        └─────────────────┘ │
   │  └───────┬────────┘                            │
   └──────────┼──────────────────────────────────────┘
              │ port 2222 publié sur toutes les interfaces
              ▼
        Clients Git (ssh://git@git.mondomain.ovh:2222/...)

```

### Installation

#### 1. Préparer les configuration

Nous proposons le docker-compose et le modèle app.ini par défaut.

Copier les deux fichiers dans votre dossier pour les configurer.


```bash
cd gitea/
cp <from Wiki>.env.exemple .env
cp <from Wiki>docker-compose.yaml
cp <from Wiki>app.ini app.ini
chmod 600 .env
```

Le template de la configuration App est accessible [<span style="text-decoration: underline;">**ici**</span>](https://wiki.mira-ceti.ovh/books/gitea/page/templates "Templates"), sans aucun secret.  
Le template de la configuration docker-compose est accessible [<span style="text-decoration: underline;">**ici**</span>](https://wiki.mira-ceti.ovh/books/gitea/page/templates "Templates"), sans aucun secret.  
Le template de la configuration .env est accessible [<span style="text-decoration: underline;">**ici**</span>](https://wiki.mira-ceti.ovh/books/gitea/page/templates "Templates"), sans aucun secret.

#### 2. Configurer les variables &amp; les secrets

Générer un mot de passe PostgreSQL fort :

```bash
openssl rand -base64 32
```

Générer les trois secrets internes de Gitea (aucun conteneur ne tourne encore, on utilise l'image pour exécuter juste la commande) :

```bash
docker run --rm gitea/gitea:1.27-rootless gitea generate secret SECRET_KEY
docker run --rm gitea/gitea:1.27-rootless gitea generate secret INTERNAL_TOKEN
docker run --rm gitea/gitea:1.27-rootless gitea generate secret JWT_SECRET
```

Reporter chaque valeur générée dans le `.env` ou directement dans le fichier `app.ini` (`POSTGRES_PASSWORD`, `GITEA_SECRET_KEY`, `GITEA_INTERNAL_TOKEN`, `GITEA_OAUTH2_JWT_SECRET`).

App.ini c'est le fichier dans lequel l'entrypoint Gitea écrit directement les secrets au démarrage (mot de passe DB, `SECRET_KEY`, `INTERNAL_TOKEN`, `JWT_SECRET`). Il permet également de configurer Gitea pour les logs et la gestion des inscriptions des comptes etc...

Avant le premier démarrage vérifier dans les 3 fichiers (`docker-compose.yml` / `.env` / `app.ini`) :

- Les secrets sont remplacés par ceux généré précédemment
- Le domaine `git.mondomain.ovh` et l'email admin placeholder (`admin@mondomain.ovh`) sont remplacés

#### 3. Démarrer la stack

```bash
docker compose up -d db
docker compose ps          # attendre que "db" soit "healthy"
docker compose up -d gitea
docker compose logs -f gitea
```

#### 4. Créer le premier compte administrateur

L'inscription publique étant désactivée, le premier compte se crée en ligne de commande :

```bash
docker compose exec gitea gitea admin user create \
  --username admin \
  --password 'UN_MOT_DE_PASSE_FORT' \
  --email admin@mondomain.ovh \
  --admin \
  --must-change-password=false

```

Vérifier en local avant de brancher Apache :

```bash
curl -I http://127.0.0.1:3000/
```