# Riferimento configurazione (app.ini) Percorso nel container: `/data/gitea/conf/app.ini` (host: `./gitea-data/gitea/conf/app.ini`). Riavviare Gitea dopo ogni modifica: `docker compose restart gitea`. ## Override via variabili d'ambiente (compose) Forma: `GITEA____=valore`, applicata a ogni avvio del container. Per leggere da file: `GITEA______FILE=/percorso`. ```yaml services: gitea: environment: - GITEA__server__ROOT_URL=https://your-domain.com/ - GITEA__service__DISABLE_REGISTRATION=true - USER_UID=1000 - USER_GID=1000 ``` `USER_UID/USER_GID` devono combaciare col proprietario di `./gitea-data`. Sezioni con punto: `[ssh.minimum_key_sizes]` → `GITEA__ssh.minimum_key_sizes__RSA`. ## Root | Chiave | Default | Note | |---|---|---| | APP_NAME | "Gitea: Git with a cup of tea" | titolo pagine | | RUN_USER | utente corrente | nel container `git`; deve combaciare con l'utente OS | | RUN_MODE | prod | `dev` solo debug | ## [server] | Chiave | Default | Note | |---|---|---| | PROTOCOL | http | anche https, fcgi, http+unix | | DOMAIN | localhost | host mostrato negli URL | | HTTP_ADDR / HTTP_PORT | 0.0.0.0 / 3000 | | | ROOT_URL | http://localhost:3000/ | **deve essere l'URL pubblico** (https://dominio/) | | LOCAL_ROOT_URL | | da impostare se la porta web interna non è 3000 | | SSH_DOMAIN | = DOMAIN | host SSH negli URL clone | | SSH_PORT | 22 | porta **mostrata** negli URL (qui 2222) | | SSH_LISTEN_PORT | = SSH_PORT | porta su cui ascolta il server SSH built-in (qui 22) | | DISABLE_SSH | false | | | START_SSH_SERVER | false | SSH built-in (nell'immagine Docker è già gestito da sshd) | | LFS_START_SERVER | false | abilita Git LFS | | OFFLINE_MODE | true | disabilita CDN/Gravatar | | ENABLE_ACME | false | non serve: TLS lo fa Caddy | | APP_DATA_PATH | data | | ## [database] | Chiave | Default | Note | |---|---|---| | DB_TYPE | mysql | sqlite3 / postgres / mysql / mssql (qui sqlite3) | | PATH | data/gitea.db | solo sqlite | | HOST, NAME, USER, PASSWD | 127.0.0.1:3306, gitea, root, vuoto | | | SSL_MODE | disable | | | MAX_OPEN_CONNS / MAX_IDLE_CONNS | 0 / 2 | | | AUTO_MIGRATION | true | migrazioni all'avvio | ## [security] | Chiave | Default | Note | |---|---|---| | INSTALL_LOCK | false | true dopo il wizard (blocca /install) | | SECRET_KEY | casuale | **non cambiare mai** dopo l'install (2FA e dati cifrati) | | INTERNAL_TOKEN | casuale | comunicazione interna | | LOGIN_REMEMBER_DAYS | 31 | | | PASSWORD_HASH_ALGO | pbkdf2 | argon2, scrypt, bcrypt | | MIN_PASSWORD_LENGTH / PASSWORD_COMPLEXITY | 8 / off | | | REVERSE_PROXY_LIMIT | 1 | | | REVERSE_PROXY_TRUSTED_PROXIES | 127.0.0.0/8,::1/128 | in Docker aggiungere la subnet compose (es. 172.16.0.0/12) | | DISABLE_GIT_HOOKS | true | hook custom = esecuzione codice sull'host | | EGRESS_MODE | lax | `strict` richiede allow-list | ## [service] | Chiave | Default | Note | |---|---|---| | DISABLE_REGISTRATION | false (ma il wizard lo propone) | true = solo admin crea utenti | | REQUIRE_SIGNIN_VIEW | false | true = server privato | | REGISTER_EMAIL_CONFIRM | false | richiede mailer | | ENABLE_BASIC_AUTHENTICATION | true | | | ENABLE_CAPTCHA | false | | | DEFAULT_USER_VISIBILITY / DEFAULT_ORG_VISIBILITY | public | | | ENABLE_NOTIFY_MAIL | false | | | ENABLE_TIMETRACKING | true | | ## [repository] ROOT (`{APP_DATA_PATH}/gitea-repositories`; nel Docker `/data/git/repositories`), DEFAULT_BRANCH (main), DEFAULT_PRIVATE (last|private|public), DEFAULT_OBJECT_FORMAT (sha1|sha256), DISABLE_HTTP_GIT, DISABLE_MIGRATIONS, DISABLE_STARS, MAX_CREATION_LIMIT (-1), DEFAULT_REPO_UNITS, DISABLED_REPO_UNITS (disabilita funzioni globalmente, es. `repo.actions,repo.packages`). ## [ssh.minimum_key_sizes] ED25519 256, ECDSA 256, RSA 3071, DSA -1 (disabilitato). ## [mailer] Vedi [email.md](email.md). ## [actions] ENABLED true (da 1.21); default action host `github`; retention log 365g, artifact 90g, run 400g; zombie task timeout 10m; endless task 3h; abandoned job 24h. Vedi [actions-runner.md](actions-runner.md). ## [session] PROVIDER file, PROVIDER_CONFIG data/sessions, COOKIE_NAME i_like_gitea, SESSION_LIFE_TIME 86400, SAME_SITE lax. Aggiungere `COOKIE_SECURE=true` dietro HTTPS. ## [log] MODE console, LEVEL Info. Modalità file: `gitea.log`, rotazione 7 giorni. Necessario su file per fail2ban. ## [cron] / [cron.*] `[cron] ENABLED=false` (globale); task: archive cleanup `@midnight`, update_mirrors `@every 10m`, repo health check `@midnight`, stop_zombie_tasks `@every 5m`, stop_endless_tasks `@every 30m`, cancel_abandoned_jobs `@every 6h`, update_checker `@every 168h`. ## Altre sezioni - **[attachment]**: ENABLED, MAX_SIZE 100 (MB), MAX_FILES 5, STORAGE_TYPE local, PATH attachments. - **[lfs]**: PATH ./data/lfs; batch 20, concurrency 8. - **[packages]**: ENABLED true; limiti per tipo -1; CHUNKED_UPLOAD_PATH tmp/package-upload. Registry container richiede `/v2` alla radice del dominio. - **[oauth2]**: ENABLED, ACCESS_TOKEN_EXPIRATION_TIME 3600, REFRESH_TOKEN_EXPIRATION_TIME 730h, JWT_SIGNING_ALGORITHM RS256. - **[cache]**: ADAPTER memory, INTERVAL 60, ITEM_TTL 16h. - **[api]**: ENABLE_SWAGGER true, MAX_RESPONSE_ITEMS 50, DEFAULT_PAGING_NUM 30. - **[other]**: SHOW_FOOTER_VERSION, SHOW_FOOTER_POWERED_BY, ENABLE_SITEMAP, ENABLE_FEED. - **[indexer], [ui], [openid], [webhook], [storage]**: non verificate in questo riferimento; consultare https://docs.gitea.com/administration/config-cheat-sheet.