diff --git a/STATO_SESSIONE_2026-09-01.md b/STATO_SESSIONE_2026-09-01.md deleted file mode 100644 index 30237b3..0000000 --- a/STATO_SESSIONE_2026-09-01.md +++ /dev/null @@ -1,92 +0,0 @@ -# STATO SESSIONE — Gitea + Cloudflare (1 set 2026) - -File di memorizzazione del lavoro fatto, per riprendere dopo un cambio di -ambito. Aggiornato: 2026-09-01. - ---- - -## 1. Obiettivo della sessione - -Deploy di **Gitea** sul VPS OVH (145.239.94.49, Debian 12) come `https://git.zomas.net` -per tracciare il progetto Tacticus e aprirlo (in futuro) a contributi esterni. -Backup automatico incluso. Tutto completato e verificato. - ---- - -## 2. Stato finale (TUTTO FUNZIONANTE) - -| Componente | Stato | -|---|---| -| Gitea 1.27.3 | attivo (systemd, `/etc/gitea/app.ini`), DB sqlite `/var/lib/gitea/data/gitea.db` | -| Web | `https://git.zomas.net` → Apache → `127.0.0.1:3000` (200 esterno) | -| SSH git | server **built-in** Gitea su `0.0.0.0:2222` (host key ed25519/rsa/ecdsa) | -| SSH cliente | questo PC → `gitea@git.zomas.net:2222` (IP origine 145.239.94.49, chiave `~/.ssh/id_ed25519`) | -| Repo | `zomas/tacticus` **privato**, `main`, con README + `bot/.env.example` | -| Mailer | `smtp+starttls` → smtp.gmail.com:587, App Password, test email **ok** | -| 2FA | attiva (richiesta globale) + `TWO_FACTOR_AUTH=enforced` | -| Backup | `/var/backups/gitea/gitea-dump-*.zip` (gitea dump, cron giornaliero 02:30, retention 14gg) | -| Cloudflare | proxy arancio su git/zomas.net/zomas.org, SSL Full (strict), Universal SSL, CAA a posto | - -### Warning Gitea: TUTTI RISOLTI -- `https://(null)/` → colpa di `RequestHeader set Host %{HTTP_HOST}e` in Apache - (Host vuoto). Rimosso, basta `ProxyPreserveHost On`. -- Deprecazioni `[mailer].MAILER_TYPE/HOST/IS_TLS_ENABLED/SKIP_VERIFY` → - opzioni moderne (`PROTOCOL=smtp+starttls`, `SMTP_ADDR`, `SMTP_PORT`). - Log: "NESSUNA deprecazione residua". - ---- - -## 3. Errori incontrati e soluzioni (utile se si ripete) - -1. **`(null)` nel warning** → `RequestHeader set Host %{HTTP_HOST}e` sovrascrive Host - con vuoto (variabile senza valore). Fix: riga rimossa. -2. **Server SSH non partiva** → Gitea default `START_SSH_SERVER=false` (usa OpenSSH - esterno). Config: `START_SSH_SERVER=true` + `SSH_LISTEN_HOST=0.0.0.0`. - Con built-in, l'utente SSH è il **RUN_USER di Gitea = `gitea`** (NON `git`, - NON zomas): remote = `gitea@git.zomas.net:zomas/tacticus.git`. -3. **`git@` "Permission denied"** → normale: il client SSH deve usare `gitea@`. - Config in `~/.ssh/config`: `Host git.zomas.net → HostName 145.239.94.49, - Port 2222, User gitea`. -4. **Cloudflare non passa TCP 2222** → il record proxied serve solo 80/443; - per SSH si punta all'IP origine via `HostName 145.239.94.49`. -5. **SSH rifiuto public key "invalid \r"** → il `.pub` finiva con CRLF; STRIPPARE `\r` - prima di POST all'API `POST /api/v1/user/keys`. -6. **Backup "permission denied"** → `gitea dump` gira come utente `gitea`, che non - può scrivere in `/var/backups/gitea` (root). Fix: dump in `/tmp`, poi `mv` da root. -7. **Sole IPv6 da questo PC** → `git.zomas.net` risolve solo IPv6 (anycast CF); - per curl ok, per ssh serve IP IPv4 esplicito. - ---- - -## 4. Credenziali / segreti (NON committare) - -- `/home/zomas/vps-admin/vps_ssh.env` — `VPS_*`, `TOKEN_CLOUDFLARE`, `GITEA_TOKEN` -- `bot/.env` — chiavi API Tacticus + token bot Telegram (niente nel repo) -- Il repo `tacticus.git` NON contiene segreti (verificato: `.env`, `vps_ssh.env`, - `risultati.txt`, script setup esclusi da `.gitignore`). - ---- - -## 5. Comandi utili - -```bash -# SSH git (da questo PC) -git -C /home/zomas/tacticus remote -v # gitea@git.zomas.net:zomas/tacticus.git -git -C /home/zomas/tacticus push # aggiorna il remote - -# Backup manuale (da root sul VPS) -/usr/local/sbin/backup_gitea.sh -ls -lh /var/backups/gitea/ # retention 14 giorni - -# Stato servizi -systemctl status gitea apache2 cron # VPS -ss -tlnp | grep -E ':(2222|3000)\b' -``` - ---- - -## 6. PROSSIMI PASSI (cambio di ambito dell'utente) - -- (Opzionale) Download automatico dei backup VPS sul PC locale (ora solo sul VPS). -- (Opzionale) Girare il repo `tacticus` da privato a pubblico + aprire contributi. -- (Opzionale) `daily.py --fresh` (proposta rimasta aperta dal 31 ago, mai richiesta). \ No newline at end of file diff --git a/backup_gitea.sh b/backup_gitea.sh deleted file mode 100644 index 3dfd115..0000000 --- a/backup_gitea.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/bash -# Backup automatico Gitea via `gitea dump` (db sqlite + repos + config in un unico zip). -# Retention: 14 giorni (modificare KEEP_DAYS). -set -euo pipefail - -BACKUP_DIR=/var/backups/gitea -KEEP_DAYS=14 -STAMP=$(date +%Y%m%d-%H%M%S) -TMP_ARC="/tmp/gitea-dump-$STAMP.zip" -ARC="$BACKUP_DIR/gitea-dump-$STAMP.zip" - -mkdir -p "$BACKUP_DIR" - -# Esegue il dump come utente 'gitea' (stesso user del servizio). -# Il file va in /tmp (scrivibile da gitea), poi lo spostiamo come root. -su -s /bin/bash gitea -c \ - "/usr/local/bin/gitea dump --config /etc/gitea/app.ini --file '$TMP_ARC' --type zip" \ - >/tmp/gitea-dump.log 2>&1 - -if [ ! -s "$TMP_ARC" ]; then - echo "ERRORE: dump non creato" >>/tmp/gitea-dump.log - exit 1 -fi - -mv "$TMP_ARC" "$ARC" - -# Pulisce i dump piu' vecchi di KEEP_DAYS -find "$BACKUP_DIR" -name 'gitea-dump-*.zip' -mtime +"$KEEP_DAYS" -delete - -echo "OK: $ARC ($(du -h "$ARC" | cut -f1))" \ No newline at end of file diff --git a/comandi_backup_root.txt b/comandi_backup_root.txt deleted file mode 100644 index f713a78..0000000 --- a/comandi_backup_root.txt +++ /dev/null @@ -1,2 +0,0 @@ -# Verifica integrita' del dump (lo script e' gia' in /tmp) -su -s /bin/bash gitea -c "python3 /tmp/check_dump.py" 2>/dev/null || su -s /bin/bash gitea -c "python3 /tmp/check_dump.py" \ No newline at end of file diff --git a/fix_gitea_builtin_ssh.sh b/fix_gitea_builtin_ssh.sh deleted file mode 100644 index bff5f4d..0000000 --- a/fix_gitea_builtin_ssh.sh +++ /dev/null @@ -1,26 +0,0 @@ -# FIX: attiva il server SSH BUILT-IN di Gitea (default: esterno -> le chiavi finivano in authorized_keys senza nessun sshd su 2222) -# Dal cheat sheet: START_SSH_SERVER=false di default => Gitea delega a OpenSSH esterno. - -# 1) Backup -cp /etc/gitea/app.ini /etc/gitea/app.ini.bak.$(date +%Y%m%d%H%M%S) - -# 2) Imposta START_SSH_SERVER = true nella sezione [server] -sed -i 's/^DISABLE_SSH = false/DISABLE_SSH = false\nSTART_SSH_SERVER = true/' /etc/gitea/app.ini - -# controllo: se non ci fosse la riga DISABLE_SSH esatta, aggiunge comunque -grep -q '^START_SSH_SERVER = true' /etc/gitea/app.ini || sed -i '/^\[server\]/a START_SSH_SERVER = true' /etc/gitea/app.ini - -# 3) Mostra la sezione [server] -sed -n '/^\[server\]/,/^\[/p' /etc/gitea/app.ini - -# 4) Riavvio -systemctl restart gitea -sleep 6 - -# 5) Verifica: 2222 deve essere in ascolto E devono essere generate le host key -echo "--- listener ---" -ss -tlnp | grep -E ':(2222|3000)\b' -echo "--- host key ---" -ls -la /var/lib/gitea/data/ssh/ 2>/dev/null || echo "ATTENZIONE: nessuna host key creata" -echo "--- log avvio ssh ---" -journalctl -u gitea --since "-1 min" --no-pager | grep -iE 'ssh|listen' | tail -8 \ No newline at end of file diff --git a/fix_gitea_ssh_listen.sh b/fix_gitea_ssh_listen.sh deleted file mode 100644 index b0dee20..0000000 --- a/fix_gitea_ssh_listen.sh +++ /dev/null @@ -1,18 +0,0 @@ -# Fix SSH di Gitea: forza il listener built-in su tutte le interfacce -# (di default Gitea deriva SSH_LISTEN_HOST da SSH_DOMAIN = IP Cloudflare -> bind fallisce) - -# 1) Backup -cp /etc/gitea/app.ini /etc/gitea/app.ini.bak.$(date +%Y%m%d%H%M%S) - -# 2) Aggiunge SSH_LISTEN_HOST = 0.0.0.0 dopo SSH_PORT nella sezione [server] -sed -i 's/^SSH_PORT = 2222/SSH_PORT = 2222\nSSH_LISTEN_HOST = 0.0.0.0/' /etc/gitea/app.ini - -# 3) Riavvio -systemctl restart gitea -sleep 5 - -# 4) Verifica: il listener ora deve esserci -ss -tlnp | grep -E ':(2222)\b' && echo "OK: 2222 in ascolto" || echo "ERRORE: 2222 assente" - -# 5) Verifica log avvio (liste meno, mostra le righe rilevanti) -journalctl -u gitea --since "-1 min" --no-pager | grep -iE 'ssh|listen|bind|error|warn' | tail -10 \ No newline at end of file diff --git a/fix_mailer_deprecation.sh b/fix_mailer_deprecation.sh deleted file mode 100644 index 022052d..0000000 --- a/fix_mailer_deprecation.sh +++ /dev/null @@ -1,26 +0,0 @@ -# Correzione deprecazioni residue in [mailer] (Gitea moderno) -# Sostituisce: HOST, IS_TLS_ENABLED, SKIP_VERIFY -> SMTP_ADDR+SMTP_PORT, PROTOCOL, FORCE_TRUST_SERVER_CERT - -# 1) Backup e riscrittura della sezione [mailer] con opzioni moderne -cp /etc/gitea/app.ini /etc/gitea/app.ini.bak.$(date +%Y%m%d%H%M%S) - -# 2) Sostituisce le righe obsolete (lasciando PASSWD, FROM, USER, ENABLED intatti) -sed -i \ - -e 's|^HOST = .*|SMTP_ADDR = smtp.gmail.com\nSMTP_PORT = 587|' \ - -e 's|^IS_TLS_ENABLED = .*||' \ - -e 's|^SKIP_VERIFY = .*||' \ - /etc/gitea/app.ini - -# 3) Garantisce PROTOCOL corretto per il 587 (starttls esplicito) -sed -i 's|^PROTOCOL = smtp$|PROTOCOL = smtp+starttls|' /etc/gitea/app.ini - -# 4) Controlla il risultato (senza esporre PASSWD) -awk '/^\[mailer\]/{p=1} p{print} /^\[/ && !/\[mailer\]/{p=0}' /etc/gitea/app.ini | sed 's/^PASSWD.*/PASSWD = ***/' - -# 5) Riavvia Gitea -systemctl restart gitea -sleep 3 -systemctl status gitea --no-pager | head -6 - -# 6) Verifica che NON compaiano piu deprecazioni mailer all'avvio -journalctl -u gitea --since "-1 min" --no-pager | grep -i deprecat || echo "NESSUNA deprecazione residua" \ No newline at end of file diff --git a/fix_warning_gitea.sh b/fix_warning_gitea.sh deleted file mode 100644 index 428ce1c..0000000 --- a/fix_warning_gitea.sh +++ /dev/null @@ -1,12 +0,0 @@ -# Correzione warning Gitea/Cloudflare -# 1) Rimuove "RequestHeader set Host" (causa Host=null nel warning giallo) -sed -i '/RequestHeader set Host/d' /etc/apache2/sites-available/git.zomas.net-ssl.conf -apache2ctl configtest && systemctl reload apache2 - -# 2) Corregge opzione deprecata MAILER_TYPE -> PROTOCOL -sed -i 's/^MAILER_TYPE = smtp/PROTOCOL = smtp/' /etc/gitea/app.ini -grep -nE '^MAILER_TYPE|^PROTOCOL' /etc/gitea/app.ini -systemctl restart gitea - -# 3) Legge le altre deprecazioni dai log (per completare) -journalctl -u gitea --no-pager | grep -i -E "deprecat|\[config\]" | tail -30 \ No newline at end of file diff --git a/gitea-theme-pack.tar.gz b/gitea-theme-pack.tar.gz deleted file mode 100644 index 7a9c91f..0000000 Binary files a/gitea-theme-pack.tar.gz and /dev/null differ diff --git a/install_backup_gitea.sh b/install_backup_gitea.sh deleted file mode 100644 index 7fa4322..0000000 --- a/install_backup_gitea.sh +++ /dev/null @@ -1,59 +0,0 @@ -# ============================================================ -# INSTALLAZIONE BACKUP AUTOMATICO GITEA (da eseguire da ROOT) -# Incolla tutto questo blocco nel terminale root del VPS. -# ============================================================ - -# 1) Crea la directory backup -mkdir -p /var/backups/gitea - -# 2) Scrivi lo script di backup in /usr/local/sbin (autosufficiente) -cat > /usr/local/sbin/backup_gitea.sh <<'EOF' -#!/bin/bash -# Backup automatico Gitea via `gitea dump` (db sqlite + repos + config in un unico zip). -# Retention: 14 giorni (modificare KEEP_DAYS). -set -euo pipefail - -BACKUP_DIR=/var/backups/gitea -KEEP_DAYS=14 -STAMP=$(date +%Y%m%d-%H%M%S) -ARC="$BACKUP_DIR/gitea-dump-$STAMP.zip" - -mkdir -p "$BACKUP_DIR" - -# Esegue il dump come utente 'gitea' (stesso user del servizio) -su -s /bin/bash gitea -c \ - "/usr/local/bin/gitea dump --config /etc/gitea/app.ini --file '$ARC' --type zip" \ - >/tmp/gitea-dump.log 2>&1 - -if [ ! -s "$ARC" ]; then - echo "ERRORE: dump non creato" >>/tmp/gitea-dump.log - exit 1 -fi - -# Pulisce i dump piu' vecchi di KEEP_DAYS -find "$BACKUP_DIR" -name 'gitea-dump-*.zip' -mtime +"$KEEP_DAYS" -delete - -echo "OK: $ARC ($(du -h "$ARC" | cut -f1))" -EOF -chmod 0755 /usr/local/sbin/backup_gitea.sh - -# 3) TEST: esegui un backup manuale adesso -/usr/local/sbin/backup_gitea.sh -ls -lh /var/backups/gitea/ - -# 4) Installa il cron giornaliero alle 02:30 via /etc/cron.d -cat > /etc/cron.d/gitea-backup <<'CRON' -# Backup giornaliero Gitea alle 02:30, stdout/stderr su log -30 2 * * * root /usr/local/sbin/backup_gitea.sh >>/tmp/gitea-dump.log 2>&1 -CRON -chmod 0644 /etc/cron.d/gitea-backup - -# 5) Verifica -echo "--- cron installato ---" -ls -l /etc/cron.d/gitea-backup -echo "--- contenuto ---" -cat /etc/cron.d/gitea-backup -echo "--- sistema crontab attivo? ---" -systemctl is-active cron 2>/dev/null || service cron status 2>/dev/null | head -2 || echo "cron non attivo (verificare)" -echo "--- ultimo backup (zona) ---" -ls -lh /var/backups/gitea/ \ No newline at end of file diff --git a/install_gitea_vps.sh b/install_gitea_vps.sh deleted file mode 100644 index edd7d8d..0000000 --- a/install_gitea_vps.sh +++ /dev/null @@ -1,249 +0,0 @@ -# Installazione Gitea su VPS OVH — copia/incolla (root/sudo) -# Obbiettivo: git.zomas.net (Gitea dietro Apache; non tocca zomas.net / zomas.org) -# VPS: Debian 12, 4 vCPU, 7.6GB RAM -# Chi esegue: TU (root o sudo). Esegui i blocchi in ordine. - -# -# ⚠️ PREREQUISITO DNS: prima del Passo 5 deve risolvere pubblicamente: -# dig +short git.zomas.net -> deve tornare 145.239.94.49 -# (finché dà NXDOMAIN, SALTA il Passo 5 e resta solo in HTTP) -# - -############################################################################### -# PASSO 1 — Installa Gitea (binario ufficiale + utente dedicato + sqlite) -############################################################################### - -apt-get update && apt-get upgrade -y -apt-get install -y git sqlite3 curl wget - -# utente di sistema dedicato (senza login) -adduser --system --group --disabled-password --home /var/lib/gitea gitea -mkdir -p /etc/gitea /var/lib/gitea/custom /var/lib/gitea/data /var/lib/gitea/log -chown -R root:gitea /etc/gitea -chown -R gitea:gitea /var/lib/gitea/ -chmod -R g+rws /var/lib/gitea/ -chmod -R g+rw /var/lib/gitea/ - -# ultima versione stabile -VERSION=$(curl -sL https://dl.gitea.com/gitea/version.json | python3 -c "import sys,json;print(json.load(sys.stdin)['latest']['version'])" 2>/dev/null || echo "1.22.0") -echo "Installazione Gitea $VERSION" -curl -sL -o /tmp/gitea "https://dl.gitea.com/gitea/$VERSION/gitea-$VERSION-linux-amd64" - -# sposta e rendi eseguibile -install -o root -g root -m 755 /tmp/gitea /usr/local/bin/gitea -/usr/local/bin/gitea --version - -############################################################################### -# PASSO 2 — Configurazione Gitea (app.ini) -############################################################################### - -cat > /etc/gitea/app.ini <<'EOF' -RUN_USER = gitea -RUN_MODE = prod - -[server] -; porta INTERNA: Apache farà da proxy verso questa -HTTP_PORT = 3000 -HTTP_ADDR = 127.0.0.1 -ROOT_URL = https://git.zomas.net/ -DOMAIN = git.zomas.net -DISABLE_SSH = false -SSH_PORT = 2222 -LFS_START_SERVER = true - -[database] -DB_TYPE = sqlite3 -PATH = /var/lib/gitea/data/gitea.db - -[repository] -ROOT = /var/lib/gitea/data/gitea-repositories - -[service] -DISABLE_REGISTRATION = false ; metti true quando vuoi bloccare le iscrizioni esterne -EOF - -chown -R gitea:gitea /etc/gitea - -############################################################################### -# PASSO 3 — Servizio systemd -############################################################################### - -tee /etc/systemd/system/gitea.service >/dev/null <<'EOF' -[Unit] -Description=Gitea (Git with a cup of tea) -After=syslog.target -After=network.target - -[Service] -RestartSec=2s -Type=simple -User=gitea -Group=gitea -WorkingDirectory=/var/lib/gitea/ -ExecStart=/usr/local/bin/gitea web --config /etc/gitea/app.ini -Restart=always -Environment=USER=gitea HOME=/var/lib/gitea GITEA_WORK_DIR=/var/lib/gitea - -[Install] -WantedBy=multi-user.target -EOF - -systemctl daemon-reload -systemctl enable gitea -systemctl start gitea -systemctl status gitea --no-pager | head -15 - -# verifica locale (deve rispondere HTTP) -curl -sI http://127.0.0.1:3000 | head -3 - -############################################################################### -# PASSO 4 — Virtualhost Apache (reverse proxy verso Gitea) -############################################################################### - -# abilita i moduli necessario (i siti zomas.net/zomas.org NON vengono toccati) -a2enmod proxy_http proxy ssl -systemctl reload apache2 - -# virtualhost HTTP (redirect -> https) -cat > /etc/apache2/sites-available/git.zomas.net.conf <<'EOF' - - ServerName git.zomas.net - Redirect permanent / https://git.zomas.net/ - -EOF - -# virtualhost HTTPS (proxy verso Gitea su 127.0.0.1:3000) — certbot poi aggiunge il SSL -cat > /etc/apache2/sites-available/git.zomas.net-ssl.conf <<'EOF' - - ServerName git.zomas.net - CustomLog /var/log/apache2/git.zomas.net-access.log combined - ErrorLog /var/log/apache2/git.zomas.net-error.log - - ProxyPreserveHost On - RequestHeader set Host %{HTTP_HOST}e - ProxyRequests Off - ProxyPass / http://127.0.0.1:3000/ - ProxyPassReverse / http://127.0.0.1:3000/ - -EOF - -# abilita i virtualhost (mantenendo net/org intatti) -a2ensite git.zomas.net.conf -a2ensite git.zomas.net-ssl.conf -systemctl reload apache2 - -# verifica: il vhost :80 deve rispondere -curl -sI http://127.0.0.1:80 -H "Host: git.zomas.net" | head -3 - -############################################################################### -# PASSO 5 — Certificato HTTPS con Let's Encrypt -# ⚠️ FAI SOLO QUANDO git.zomas.net risolve pubblicamente (dig +short = 145.239.94.49) -############################################################################### - -# richiedi il certificato per git.zomas.net (usa il vhost :80 come challenge) -certbot --apache -d git.zomas.net -# quando ti chiede il redirect HTTP->HTTPS scegli: 2 - -systemctl reload apache2 - -# verifica finale HTTPS -curl -sI https://git.zomas.net | head -3 - -############################################################################### -# PRIMO ACCESSO (dopo il Passo 3, già funziona in HTTP) -############################################################################### -# Apri nel browser: https://git.zomas.net (o http:// se non hai ancora il passo 5) -# Al primo avvio Gitea mostra la pagina di installazione: -# - DB: SQLite3 -# - Path DB: /var/lib/gitea/data/gitea.db -# - URL: https://git.zomas.net/ -# - Crea l'account amministratore (utente final, nome, email, password) -# Si può rilanciare la procedura con: su gitea -s /bin/bash -c "cd /var/lib/gitea && /usr/local/bin/gitea admin create-user --username admin --password 'ScegliPasswordSicura' --email you@example.com --admin" -# (poi applica via web) -# -# Nota SSH: Gitea usa la porta 2222 per git over SSH (oltre alla web). Da client: -# git clone ssh://git@git.zomas.net:2222//.git - -############################################################################### -# PASSO 6 — Certificati Let's Encrypt per origine (plugin dns-cloudflare) -# ⚠️ da eseguire come ROOT sul VPS. Il token CF è già in /tmp/cloudflare_tmp.ini -# Genera i cert con challenge DNS: funziona anche con i record messi "proxied". -# NON tocca i vhost esistenti di zomas.net / zomas.org (stesso --cert-name). -############################################################################### - -set -ea -mkdir -p /root/.config/letsencrypt -[ -f /tmp/cloudflare_tmp.ini ] && { cp /tmp/cloudflare_tmp.ini /root/.config/letsencrypt/cloudflare.ini; chmod 600 /root/.config/letsencrypt/cloudflare.ini; } || { echo "Manca /tmp/cloudflare_tmp.ini"; exit 1; } - -echo "=== 1/3 zomas.net + www ===" -certbot certonly --dns-cloudflare \ - --dns-cloudflare-credentials /root/.config/letsencrypt/cloudflare.ini \ - --dns-cloudflare-propagation-seconds 60 \ - -d zomas.net -d www.zomas.net \ - --cert-name zomas.net --non-interactive --agree-tos -m zomas@zomas.net --force-renewal - -echo "=== 2/3 zomas.org + www ===" -certbot certonly --dns-cloudflare \ - --dns-cloudflare-credentials /root/.config/letsencrypt/cloudflare.ini \ - --dns-cloudflare-propagation-seconds 60 \ - -d zomas.org -d www.zomas.org \ - --cert-name zomas.org --non-interactive --agree-tos -m zomas@zomas.org --force-renewal - -echo "=== 3/3 git.zomas.net ===" -certbot certonly --dns-cloudflare \ - --dns-cloudflare-credentials /root/.config/letsencrypt/cloudflare.ini \ - --dns-cloudflare-propagation-seconds 60 \ - -d git.zomas.net \ - --cert-name git.zomas.net --non-interactive --agree-tos -m zomas@zomas.net - -echo "=== file generati in /etc/letsencrypt/live ===" -ls -la /etc/letsencrypt/live/ -echo "=== certificati git ===" -ls -la /etc/letsencrypt/live/git.zomas.net/ - -############################################################################### -# PASSO 7 — (dopo aver generato i cert) Completare il vhost SSL di git -# e riabilitarlo. Il certificato git ora esiste in live/git.zomas.net. -# ⚠️ Leggi il contenuto di git.zomas.net-ssl.conf e COMPLETA il blocco -# aggiungendo: SSLEngine on + SSLCertificateFile/Key con i path git. -# Esempio (sostituisci tutto il contenuto del file): -############################################################################### - -cat > /etc/apache2/sites-available/git.zomas.net-ssl.conf <<'EOF' - - ServerName git.zomas.net - CustomLog /var/log/apache2/git.zomas.net-access.log combined - ErrorLog /var/log/apache2/git.zomas.net-error.log - - SSLEngine on - Include /etc/letsencrypt/options-ssl-apache.conf - SSLCertificateFile /etc/letsencrypt/live/git.zomas.net/fullchain.pem - SSLCertificateKeyFile /etc/letsencrypt/live/git.zomas.net/privkey.pem - - ProxyPreserveHost On - RequestHeader set Host %{HTTP_HOST}e - ProxyRequests Off - ProxyPass / http://127.0.0.1:3000/ - ProxyPassReverse / http://127.0.0.1:3000/ - -EOF - -# riabilita il vhost SSL di git (dopo aver verificato che i cert esistono) -a2ensite git.zomas.net-ssl.conf -apache2ctl configtest -systemctl reload apache2 - -# verifica certificato da linea di comando -curl -sk -o /dev/null -w "https git (via IP/SNI) HTTP %{http_code}\n" https://127.0.0.1 -H "Host: git.zomas.net" --resolve git.zomas.net:443:127.0.0.1 - -############################################################################### -# PASSO 8 — Pannello Cloudflare: attiva il proxy (arancio) SOLO sui record web -# ⚠️ NON toccare: MX, mail.*, sole, calendar, docs, _dmarc, SPF, SRV -# Metti "Proxy (arancio)" su: -# - git.zomas.net (già arancio) -# - zomas.net (A) -# - www.zomas.net (CNAME) -# - zomas.org (A) -# - www.zomas.org (CNAME) -# Poi in SSL/TLS -> Overview seleziona: "Full (strict)" -###############################################################################