Il deploy di un sito web o un’applicazione web con capistrano su uno spazio di hosting gestito tramite ispconfig non è affatto immediato; ciò dipende dall’architettura, o meglio dalla struttura delle directory del virtual host, prevista da ispconfig.
L’alberatura delle directory di un virtual host di ispconfig è di questo tipo
- cgi-bin - log - private - ssl - tmp - web - webdav
La directory di nostro interesse in questo momento è web, in quanto quella che contiene tutto il codice del nostro sito web o applicazione.
Capistrano prevede invece una struttura diversa, di questo tipo
- current - releases -- 20200108143420 -- 20200109104523 -- 20200109133325
Il codice della nostra applicazione risiede nelle directory contenute in releases e current.
In current troviamo la versione on-line della nostra applicazione; quesato in realtà è un link simbolico alla directory vera e propria, che nell’albertaura mostrata sopra è releases/0200109133325
Risulta evidente la differenza.
Con queste diversa gestione delle directory, con capistrano il deploy su ispconfig non è fattibile.
Premesso che non è possibile rinominare o sostituire la directory web di ispconfig, possiamo integrare i due sistemi in questo modo:
- creiamo la direcory deploy allo stesso livello della directory web
- effettuiamo un deploy della nostra applicazione, impostando la directory deploy come radice dello spazio su cui capistrano dovrà fare il deploy
- creiamo la directory current, all’interno della directory deploy, come link simbolico della directory dell’ultimo deploy (es. releases/20200108143420)
- eliminiamo la directory web
- ricreiamo web, ma come link simbolico della directory deploy/current
La configurazione è così completa.
E’ importante che l’utente con cui capistrano si collega alla macchina abbia i permessi per
- effettuare il download del codice dal repository
- creare/eliminare file e directory sul server
Come sappiamo ISPconfig crea un utente per ogni virtual host, il cui nome è composto da web e dal numero del vh stesso, ad esempio web100.
Affinchè capistrano possa fare il deploy e le directory del progetto vengano assegnate all’utente ispconfig corretto, nel nostro esempio web100, dobbiamo
- creare nella home di web100 la directory .ssh
- creare all’interno di .ssh il file authorized_keys
- inserire all’interno del file authorized_keys la chiave dell’utente con cui lanciamo il deploy
Questo un esempio di configurazione di capistrano
server "xxx.xxx.xxx.xxx", :app, :web, :db, :primary => true set :deploy_to, "/ispconfig_user_home/deploy/" set :branch, 'master' set :ssh_options, {user: 'ispconfig_user', forward_agent: true} set :user, "ispconfig_user" set :use_sudo, false set :keep_releases, 5
dove
- deploy_to è la path completa della directory di deploy del virtual host
- ispconfig_user è l’utente ispconfig proprietario del virtual host; nel nostro esempio web100
Fatto ciò dobbiamo fare un’ultima cosa, autorizzare l’utente ispconfig web100 all’accesso al repository git. Per fare ciò dobbiamo
- generare una chiave ssh per l’utente web100
- aggiungere la chiave di web100 nella configurazione del repository git
- accettare in maniera permanente lo scambio chiave tra web100 e git, effettuando una prima chiamata al repository git dal server su cui faremo il deploy; per intenderci il server di produzione, che utilizza ispconfig
Buon deploy!