server

deploy con capistrano e ispconfig

Reading Time: 2 minutes

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!

 

wallaceer

Recent Posts

Bash monitor per linux server con alerts

Il progetto che prevedeva uno script bash per il monitoraggio, tramite crontab, delle risorse di…

7 giorni ago

RicetteUmbre: da sito web ad app mobile con React Native e AI

Portare un progetto editoriale sullo smartphone non significa necessariamente riscriverlo da zero. Con RicetteUmbre abbiamo…

2 settimane ago

Monitorare le risorse di un server o computer linux in modo semplice

Reading Time: 2 minutesMonitorare le risorse di un server o computer linux in modo semplice…

1 anno ago

Esclusione di prodotti da una regola a catalogo in Magento 2

Reading Time: < 1 minuteEsclusione di una serie di prodotti selezionati tramite l'apposito menù e…

4 anni ago

Traduzione di testo con googletranslate

Reading Time: < 1 minuteNel video che vedete di seguito, a titolo di esempio, ho…

4 anni ago

Restart di php-fpm con capistrano dopo un deploy

Reading Time: 2 minutesVediamo come è possibile fare il restart di php-fpm con capistrano dopo…

4 anni ago