venerdì, febbraio 05, 2021

Aggiornare un sito web remoto in PHP con GIT, senza FTP e senza SSH

Può capitare di dover gestire un server remoto con del codice PHP, ma di non avere a disposizione un accesso SSH.

Se il codice PHP è gestito con un sistema di controllo di versione come git, avere il modo di aggiornare i file sul server dopo ogni commit/push può rivelarsi comodo. In genere si accede al server remoto via SSH e da lì si dà un comando per fare un git pull e recuperare gli aggiornamenti.

Ma se non si ha a disposizione un accesso SSH? Visto che abbiamo la possibilità di usare PHP sul server, perché non usare degli script per gestire gli aggiornamenti?

Per alcuni usi personali, ho predisposto due script che fanno quanto (a me) serve:

  • uno script lato client, che lancio dopo ogni commit/push,
    • esegue il comando
      git diff-tree --name-only --no-commit-id -r ababab
      dove ababab è l'identificativo dell'ultimo commit, per ottenere l'elenco dei file oggetto di cambiamento nell'ultimo commitM
    • produce un file JSON con le informazioni su questi file (percorso del file e suo contenuto, codificato in Base 64 per essere binary-safe);
    • fa un POST allo script lato server;
  • uno script lato server, che
    • riceve il file JSON e lo decodifica;
    • salva i file aggiunti / modificati, oppure elimina quelli per cui riceve un contenuto vuoto;
    • informa sull'esito dell'operazione.
Ho messo il codice a disposizione su GitHub, nel caso servisse a qualcuno.