Files

128 lines
3.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Gitea self-hosted
Stack Docker per un server Git self-hosted con interfaccia web HTTPS e accesso SSH.
## Requisiti
### Host
- **Sistema operativo**: Linux (qualsiasi distribuzione moderna)
- **Docker** (v20.10+) e **Docker Compose** (v2+) installati
- Spazio su disco sufficiente per i dati di Gitea (repository, DB)
### Porte
Le seguenti porte devono essere **libere sull'host** (non in uso da altri servizi) e **raggiungibili dall'esterno** (aperte sul firewall e, se dietro NAT, con port forwarding sul router):
| Porta | Uso |
|-------|-----|
| **80** | HTTP (Caddy, redirect a HTTPS) |
| **443** | HTTPS (Caddy + Let's Encrypt) |
| **2222** | SSH Git (Gitea) |
> La porta **3000** viene usata internamente da Gitea ed è esposta solo su `localhost` — non deve essere raggiungibile dall'esterno, ma deve essere libera sull'host.
### Dominio
È necessario un dominio puntato all'IP pubblico della macchina host. Caddy lo usa per ottenere automaticamente il certificato TLS tramite Let's Encrypt. Può essere:
- un dominio acquistato o un sottodominio
- un servizio DDNS gratuito come [NoIP](https://www.noip.com/) o [DuckDNS](https://www.duckdns.org/)
## 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)
```