server

deploy con capistrano e ispconfig

Reading Time: 2 minutesAggiungi 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!

 

wallaceer

View Comments

  • Se, alla creazione della directory deploy, riscontrate l'errore
    mkdir: cannot create directory ‘deploy’: Operation not permitted
    questo è dovuto alla presenza dell'attributo immutabile, che si può
    - cambiare da System > Server Config > Web > Permissions > Make web folders immutable (extended attributes)
    - togliere tramite il comando chattr -i

  • La chiave ssh per l'utente web100 può essere generata con il seguente comando
    sudo -u web100 ssh-keygen -t rsa

  • Affinchè l'utente web100 riesca a loggarsi sul server di deploy è necessario che abbia un accesso ssh valido e che nel file passwd sia impostata la bash
    ex. web100:x:5004:5005::/var/www/clients/client1/web100:/bin/bash

Recent Posts

Esclusione di prodotti da una regola a catalogo in Magento 2

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

2 anni ago

Traduzione di testo con googletranslate

Reading Time: < 1 minute Nel video che vedete di seguito, a titolo di esempio,…

2 anni ago

Restart di php-fpm con capistrano dopo un deploy

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

3 anni ago

Manifesto per lo Sviluppo Agile di Software

"Stiamo scoprendo modi migliori di creare software,sviluppandolo e aiutando gli altri a fare lo stesso.Grazie…

3 anni ago

Security patch for Shopware 6

Shopware ha rilasciato una security patch in grado di colmare alcune lacune di sicurezza per…

3 anni ago

E-commerce ed omnicanalità

Il tema e-commerce ed omnicanalità ha sostituito l'ormai obsoleta multicanalità, vediamo di cosa si tratta.…

3 anni ago