# Gitea self-hosted Stack Docker per un server Git self-hosted con interfaccia web HTTPS e accesso SSH. ## Requisiti - **Docker** e **Docker Compose** - **Un dominio** puntato all'IP della macchina host (necessario per Caddy, che ottiene il certificato TLS tramite Let's Encrypt). Può essere un dominio acquistato, un sottodominio, o un servizio DDNS gratuito come [NoIP](https://www.noip.com/) o [DuckDNS](https://www.duckdns.org/). - Le porte **80**, **443** e **2222** aperte e raggiungibili dall'esterno. ## Architettura - **Gitea** – server Git (interfaccia web + accesso SSH) - **Caddy** – reverse proxy con HTTPS automatico via Let's Encrypt ``` Internet ──→ Caddy (80/443) ──→ Gitea (3000, interno) ──→ SSH (2222) ──→ Gitea (22, interno) ``` ## Configurazione iniziale Prima di avviare, sostituire `your-domain.com` nel file `Caddyfile` con il proprio dominio: ``` your-domain.com { reverse_proxy gitea:3000 } ``` ## Porte (configurazione di default) | Servizio | Porta esterna | Porta interna | Note | |----------|--------------|---------------|------| | HTTP | 80 | 80 | Redirect automatico a HTTPS gestito da Caddy | | HTTPS | 443 | 443 | Caddy ottiene e rinnova il certificato da Let's Encrypt | | SSH Git | **2222** | 22 | Porta standard alternativa per SSH Gitea | | Web UI | (interno) | 3000 | Esposta solo su `127.0.0.1`, proxata da Caddy | ## Avvio ```bash docker compose up -d ``` Al primo avvio seguire la [guida all'inizializzazione](SETUP.md) per configurare Gitea tramite browser. ## Aggiornamento Gitea ```bash docker compose pull docker compose up -d ``` ## Clone via SSH Gitea mostra automaticamente l'URL SSH corretto per ogni repository nell'interfaccia web — basta copiarlo e usarlo direttamente. Se si vuole evitare di specificare la porta ogni volta da terminale, si può aggiungere a `~/.ssh/config`: ``` Host your-domain.com Port 2222 User git ``` --- ## Risoluzione problemi ### La porta 2222 è già occupata Se sulla macchina host la porta 2222 è già in uso da un altro servizio, cambiare la porta esterna SSH nel `docker-compose.yml` con una libera, ad esempio 2223: ```yaml ports: - "2223:22" # prima era "2222:22" ``` Gitea mostrerà automaticamente la porta corretta negli URL SSH della sua interfaccia web. Per verificare quali porte sono già in uso: ```bash ss -tlnp | grep '2222\|2223' ``` ### Caddy non ottiene il certificato TLS Caddy richiede che il dominio configurato nel `Caddyfile` punti all'IP pubblico della macchina e che le porte 80 e 443 siano raggiungibili dall'esterno (non bloccate dal firewall o dal router). Verificare: ```bash # Controllare che le porte siano aperte curl -v http://your-domain.com ``` --- ## Struttura directory ``` . ├── docker-compose.yml # Definizione dei servizi Docker ├── Caddyfile # Configurazione del reverse proxy ├── caddy/ # Dati runtime Caddy (non versionati: certificati TLS, config generata) └── gitea-data/ # Dati Gitea (non versionati: repository, DB, secrets, chiavi SSH host) ```