decoding

deploy con capistrano e ispconfig

Reading Time: 2 minutesFavoriteLoadingAggiungi ai preferiti

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!