Ti trovi qui: start » it » Documentazione interna » Estensioni DokuWiki (WvdS) » ADO-Git » Messa in servizio del proxy git sullo stack portabile

Messa in servizio del proxy git sullo stack portabile

Stato

Accettato. Lo stato qui descritto è quello in esercizio.

Contesto

Il pacchetto gira su un server portabile: Apache con PHP come modulo, non IIS e non FastCGI. Il proxy git è l'unica parte del pacchetto che non passa per doku.php, bensì per un endpoint proprio, con PATH_INFO dopo il nome del file. Proprio queste due proprietà — l'endpoint separato e lo stack portabile — sono entrate in conflitto in due punti durante la messa in servizio.

Il plugin fornisce un file web.config. È puro IIS e su questo stack non produce alcun effetto; le sue tre esigenze hanno dovuto essere dimostrate o sostituite una per una.

Meccanismo

AcceptPathInfo per file anziché globale. L'Apache portabile imposta AcceptPathInfo off per l'intero server nel file server/conf/httpd.conf. Risponde perciò a ogni richiesta nella forma …/git.php/code/{progetto}/{repository}/info/refs con 404 prima che PHP si avvii — il proxy non vede mai la richiesta. Un file .htaccess nella cartella del plugin attiva l'opzione solo per git.php:

<Files "git.php">
    AcceptPathInfo On
</Files>

L'impostazione globale resta intatta, perché per il resto del wiki è quella giusta.

Le altre due esigenze del file web.config erano già soddisfatte e sono state dimostrate anziché ricostruite: il modulo mod_deflate non è caricato, quindi non c'è compressione gzip capace di rovinare un packfile, e LimitRequestBody non è impostato. Poiché PHP gira come modulo, anche l'intestazione Authorization raggiunge PHP senza configurazioni aggiuntive — con FastCGI sarebbe servita una regola apposita.

curl è stato installato in seguito. Il trasporto verso Azure DevOps e l'intero percorso REST passano per esso; senza l'estensione il connettore si dichiara inattivo, il browser dei repository non si carica e il proxy si interrompe. Il server portabile non lo forniva. Sono stati aggiunti il file ext/php_curl.dll e le dipendenze di runtime libssh2.dll e nghttp2.dll dal pacchetto ufficiale php-8.2.13-Win32-vs16-x64.zip; la riga extension=curl è presente in server/php/php.ini.

Percorsi verificati dopo la messa in servizio. L'elenco è una prova, non una promessa di funzionamento:

Percorso Stato
git clone, fetch e push attraverso il proxy funziona; la controprova direttamente su Azure DevOps conferma il ramo inviato
verifica dei permessi per identità utente autenticato senza diritti di amministratore al livello readonly: lettura 200, scrittura 403
browser dei repository con caricamento delle cartelle funziona
{{source>ado:…}} direttamente su una pagina di progetto funziona
{{source>ado:…}} nel cassetto, selezionando un file funziona
modifica per sezioni di una pagina con contenuto Markdown reso funziona; ogni modifica tocca solo la propria sezione

Conseguenze

  • Non rimuovete il file .htaccess dalla cartella del plugin. Sembra superfluo perché accanto si trova un web.config; senza di esso il proxy su questo stack risponde 404, e il guasto non ha l'aspetto di un problema di configurazione del server.
  • Non attivate AcceptPathInfo a livello globale per ottenere lo stesso risultato. L'opzione per file è la soluzione più stretta.
  • Un aggiornamento di PHP deve portarsi dietro curl. L'estensione deve corrispondere esattamente alla build del server: stessa versione minore, stessa sicurezza dei thread e stesso compilatore. Una verifica affidabile è confrontare la somma di controllo del file php8ts.dll del pacchetto con quella sul server.
  • In caso di passaggio a FastCGI occorre verificare di nuovo l'intestazione Authorization; l'ipotesi odierna vale solo per PHP come modulo.
  • max_execution_time vale 30 secondi. Irrilevante per le dimensioni di repository verificate, il limite successivo per quelli molto grandi.

Argomenti correlati

it/wiki/dwe/wkdoadogit/note-commissioning.txt · Ultima modifica: da 0.0.0.0