Configurare Ruby On Rails un su server web di produzione: differenze tra le versioni

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
mNessun oggetto della modifica
(da adottare)
 
(11 versioni intermedie di 8 utenti non mostrate)
Riga 1: Riga 1:
{{stub}}
{{Guida da adottare}}{{Versioni compatibili|Squeeze}}
Questa piccola guida nasce con l'idea di rendere meno traumatico l'approccio al mondo debian da parte dell'utente principiante e alle prime armi con sistemi basati su GNU/Linux. L'idea di dare la possibilit� all'utente di installare un sistema debian funzionante sul proprio computer e di apprenderne le basi. In sinstesi, la trascrizione dei primi pensieri e delle prime operazioni nel nuovo sistema operativo.
== Introduzione ==
La soluzione più diffusa e stabile, per la messa on-line di un applicativo scritto in ruby on rails, è data dall'accoppiata Mongrel e Apache2.<br/>
La struttura del nostro ambiente di produzione è descritta nella seguente figura:


==Luned�: partizioniamo il disco==
[[Immagine:Apache-mongrel.png]]
==Marted�: installiamo la Debian==
==Mercoled�: tastiera, risoluzione schermo e shell==
Oggi accendo finalmente il pc dopo aver installato la mia prima debian. Un po' di scritte... ecco, adesso posso loggarmi... e finalmente ecco il mio bel desktop! Peccato che la mia eccitazione gi� si arresta appena provo a scrivere due cosettine... i caratteri visualizzati non corrispondono ai tasti premuti... mhmm... lo sapevo che non potevo utilizzare la tastiera del mac...
===La tastiera===
Per "sintonizzare" la tastiera abbiamo due possibilit�: utilizzare le preferenze di GNOME o modificare il file /etc/X11/xorg.conf
====Preferenze GNOME====
Dal menu nella barra superiore scegliere: sistema > preferenze > tastiera. Sotto "Layouts" scegliere il modello (ad es. per mac, macintosh) e la lingua predefinita. Sempre nel caso Apple, per configurare il tasto "Alt-Gr" si pu� andare sotto "Layout Options" > "Third level choosers" e scegliere Left win-key o Right win-key per avere il tasto "mela" di sinistra o destra come un "Alt-Gr".
====/etc/X11/xorg.conf====
In questo file troviamo la configurazione del sistema grafico. La tastiera la troviamo sotto Identifier "Generic Keyboard" o qualcosa del genere. A destra di Option "XkbModel" avremo il modello, ad esempio "macintosh", con Option "XkbLayout" avremo la lingua, ad esempio "it". Se si volesse ancora una volta abilitare un tasto "mela" con la funzione di "Alt-Gr", bisogner� aggiungere l'opzione Option "XkbOptions" "lv3:lwin_switch" per la "mela" di sinistra o "lv3:rwin_switch" per quella di destra.<br /><br />
A questo punto una domanda � per� lecita: come si modifica il file /etc/X11/xorg.conf? Dalla shell... vediamo quasi subito...
===La risoluzione dello schermo===
In questo caso si pu� scegliere da sistema > preferenze > risoluzione monitor un valore. Se non dovrebbe esserci quello che cerchiamo bisogner� ancora una volta modificare il file /etc/X11/xorg.conf. Questa volta cercheremo la parte con Identifier "Default screen". Nelle susseguenti Subsection "Display" andremo sotto Modes ad inserire la risoluzione cercata.
===La shell===
Giusto per chiarire i termini, la shell � la linea di comando (= terminale). In debian si chiama bash. � uno strumento molto potente e alla base di tutte le impostazioni del sistema operativo. Come citato sopra, utilizzeremo la shell per avere i diritti di superuser per poter modificare il file /etc/X11/xorg.conf. Per prima cosa controlliamo se abbiamo installato sudo (superuser do; questo comando ci permette di fare delle azioni come superuser, senza per� doverci "loggare" in quanto tale):<br />
<pre>~$ su (invio), dare la password, ~# apt-get install sudo</pre>
Se � gi� installato il sistema ci avviser�, altrimenti si potr� installare il programma (maggiori dettagli sull'installazione dei programmi si trovano nell'ultima giornata). Per fare il logout da superuser semplicemente scrivere "exit" ed invio. Poi dobbiamo dare al nostro utente i diritti di superuser. Per fare ci� dovremo loggarci dapprima come superuser e poi modificare il file /etc/sudoers tramite visudo:<br />
<pre>~$ su (invio), dare la password, ~# visudo</pre>
A questo punto otterremo una mini interfaccia grafica; fra le righe troveremo la seguente linea:<br />
<pre>root      ALL=(ALL) ALL ; dove sotto aggiugeremo (spostando il cursore con le frecce)
<nostronomeutente>  ALL=(ALL) ALL</pre>
Per concludere, ctrl+O per salvare ed infine ctrl+X per uscire.
Quando vorremo ora eseguire un'azione con diritti da superuser (amministratore) baster� digitare "sudo" e poi l'azione voluta.<br />
Torniamo ora alla modifica del nostro xorg.conf. Il modo pi� semplice � di modificarlo con gedit (gnome). Daremo il comando:<br />
<pre>sudo gedit /etc/X11/xorg.conf</pre>
Avremo cos� aperto il file con un editor grafico, gedit appunto, e grazie a sudo avremo i diritti di scrittura per modificarlo. Nel capitolo relativo ai permessi vedremo altri comandi base della shell ed un chiarimento sui permessi di scrittura di un file.


==Gioved�: allacciamoci alla rete==
Tutte le richieste arriveranno al server web apache, che si occuperà di dirottare le richieste dinamiche a uno dei server mongrel, mentre servirà i contenuti di tipo statico direttamente, senza così appesantire le istanze di mongrel con richieste che possono essere processate direttamente da apache.
Con il cavo dell'ethernet conficcato nella scheda ho potuto per fortuna installare sudo... ora per� vorrei capire meglio come funziona la rete e come potrei configurarla. E se volessi anche un Wireless? Gi� non ci capisco pi� niente...
===Configurare la rete tramite il file /etc/network/interfaces===
Per configurare una rete esistono varie applicazioni grafiche (come network-manager), ma il consiglio � quello di configurarla con il file sopracitato (che verr� "caricato" durante l'accensione del pc); una volta capito il sistema non avrete cos� mai un problema. Come prima cosa, onde evitare spiacevoli interazioni con il sistema grafico, andremo a disinstallare il network-manager:<br />
<pre>sudo apt-get remove network-manager network-manager-gnome</pre>
Avendo fatto l'installazione tramite la net-install e la rete diamo per scontato che la scheda ethernet funziona. Per vedere le schede di rete del nostro sistema diamo il comando:
<pre>~$ sudo ifconfig -a</pre>
Otterremo una lista con a sinistra i nome delle interfacce e a destra la loro configurazione. La scheda ethernet dovrebbe avere un nome tipo "eth0". La scheda con il nome di "lo" al momento la lasceremo perdere, non ci servir�.


==Venerd�: permessi e spostamento files/cartelle==
Questa struttura, inoltre, permette espansioni future per garantire una buona scalabilità in caso di un forte aumento delle richieste: potremo, in futuro, spostare le varie istanze di mongrel su server differenti, distribuire il filesystem in modo da avere "più apache" pronti ad accettare le richieste, etc.
==Sabato: repository... ?==
 
==Domenica: installiamo i programmi==
 
== Installazione ==
=== Apache2 ===
Per installare Apache è sufficiente un
<pre>
# apt-get install apache2-mpm-prefork libapache2-mod-proxy-html
</pre>
 
Consiglio la versione "prefork" in quanto è supportata pienamente anche da php5, e di conseguenza non ci saranno problemi ad installare anche applicazioni come phpmyadmin, molto comoda per la gestione di database mysql. Per approfondimenti sull'installazione di Apache, si vedano ad esempio queste guide:
* [[Installare un ambiente LAMP: Linux, Apache2, SSL, MySQL, PHP5]]
* [[LAMP: Linux, Apache, MySQL e PHP]]
 
L'installazione base di apache, però, non è sufficiente per i nostri fini, infatti dobbiamo abilitare alcuni moduli:
* <code>deflate</code>
* <code>proxy_balancer</code>
* <code>proxy_connect</code>
* <code>proxy_html</code>
* <code>proxy_http</code>
* <code>proxy</code>
* <code>rewrite</code>.
 
Per abilitarli:
<pre>
# a2enmod deflate
# a2enmod proxy_balancer
# a2enmod proxy_connect
# a2enmod proxy_html
# a2enmod proxy_http
# a2enmod proxy
# a2enmod rewrite
</pre>
 
La configurazione di default del modulo <code>proxy</code> permette connessioni solo dall'indirizzo ip 127.0.0.1. Questa situazione rende impossibile, però, l'accesso al VirtualHost che andremo a configurare dall'esterno. A tal proposito dobbiamo modificare il file di configurazione del modulo (''nome del file di configurazione'') modificando la seguente riga:
 
<pre>
<Proxy *>
    AddDefaultCharset off
    Order allow,deny
    Allow from .example.com
    Deny from all
</Proxy>
</pre>
 
in
 
<pre>
<Proxy *>
    AddDefaultCharset off
    Order allow,deny
    Allow from all
    #Allow from .example.com
</Proxy>
 
</pre>
 
Una volta abilitati i moduli e fatte le modifiche necessarie, riavviamo apache:
<pre>
# /etc/init.d/apache2 restart
</pre>
 
L'installazione e la configurazione base di apache sono terminate.
 
=== Ruby ===
Se non è già presente sulla macchina, provvediamo ad installare ruby ed i componenti più importanti, necessari alla compilazione di mongrel:
 
<pre>
# apt-get install ruby irb ri rdoc ruby1.8-dev build-essential
</pre>
 
 
=== Rails ===
Prima di tutto scarichiamo rubygems dal sito ufficiale: http://www.rubygems.org/
 
In questo momento l'ultima versione è la [http://rubyforge.org/frs/download.php/28174/rubygems-0.9.5.tgz 0.9.5]:
<pre>
# wget http://rubyforge.org/frs/download.php/28174/rubygems-0.9.5.tgz
# tar xzvf rubygems-0.9.5.tgz
# cd rubygems-0.9.5
# ruby setup.rb
</pre>
 
Ora possiamo installare rails, facendo attenzione alla versione richiesta dal nostro applicativo:
* Ultima versione
<pre>
# gem install rails
</pre>
* Una versione specifica
<pre>
# gem install rails -v 1.2.5
</pre>
 
 
=== Mongrel ===
Mongrel si installa allo stesso modo di rails, inoltre installeremo anche mongrel-cluster, che ci semplificherà moltissimo la vita:
<pre>
# gem install mongrel
# gem install mongrel_cluster
</pre>
 
== Configurazione ==
=== Mongrel ===
La configurazione del cluster di server mongrel è semplice, e si riduce a creare un semplice file di configurazione. Questo è quello base, da cui partire:
<pre>
---
cwd: /opt/ror/
log_file: log/mongrel.log
port: "3000"
environment: production
address: 127.0.0.1
pid_file: tmp/pids/mongrel.pid
servers: 3
user: mongrel
group: mongrel
</pre>
 
Nei dettagli tutte le voci:
; <code>cwd</code>: ''current work directory'', cioè la directory in cui è presente l'applicativo. È consigliato usare SEMPRE un percorso assoluto;
; <code>log_file</code>: dove conservare i log di mongrel. Il valore di default va più che bene;
; <code>port</code>: la porta iniziale per l'array di server mongrel;
; <code>environment</code>: l'environment di rails da utilizzare: normalmente si usa production (essendo un server di produzione), ma in casi particolari si può inserire un nuovo ambiente;
; <code>address</code>: l'indirizzo IP su cui mettersi in ascolto. Le scelte più comuni sono:
:; <code>127.0.0.1</code>: il cluster sarà raggiungibile solo da applicazioni residenti sul server su cui è in esecuzione mongrel, impostazione consigliata a meno di configurazioni più complesse;
:; <code>0.0.0.0</code>: il cluster sarà raggiungibile da qualsiasi indirizzo esterno, scelta sconsigliata a meno che non ci si trovi in un ambiente protetto;
; <code>pid_file</code>: dove inserire i [[pid]] dei vari processi mongrel;
; <code>servers</code>: il numero di server mongrel da lanciare;
; <code>user</code>: l'utente che sarà usato per lanciare i server mogrel;
; <code>group</code>: come sopra, ma relativo al gruppo
 
{{box|Nota:|se si specifica un utente diverso da ''www-data'', sarà necessario crearlo: normalmente si utilizza l'utente ''mongrel'', e lo si può creare nel seguente modo:
<pre>
# adduser --system mongrel  --no-create-home --disabled-login --disabled-password
</pre>}}
 
 
=== Apache ===
Questo è un classico file di configurazione di apache per un VirtualHost, che sfrutta 3 server mongrel.
 
<pre>
<Proxy balancer://www_test_it_mongrel_cluster>
  BalancerMember http://127.0.0.1:8000
  BalancerMember http://127.0.0.1:8001
  BalancerMember http://127.0.0.1:8002
</Proxy>
 
<VirtualHost *>
  ServerAdmin info@debianizzati.org
  ServerName www.test.it
  DocumentRoot /opt/ror/public/
  ErrorLog /var/log/apache2/www.test.it-error.log
 
  # Superflue, dato che ogni richiesta "non statica" viene gestita da
  # Mongrel, che usa RubyGems ed ha una configurazione indipendente.
  #  SetEnv RUBYOPT rubygems
  #  SetEnv RAILS_ENV production
  <Directory /opt/ror/public/>
    Options -ExecCGI FollowSymLinks -Indexes
    AllowOverride None
    Order allow,deny
    allow from any
  </Directory>
 
  # Inutile cercare di gestire la possibile mancanza di alcuni moduli: ci
  # servono e quindi assumiamo che siano disponibili.
  RewriteEngine on
 
  # Pagina di "manutenzione" per disabilitare l'accesso all'applicazione.
  RewriteCond %{DOCUMENT_ROOT}/maintenance.html -f
  RewriteCond %{SCRIPT_FILENAME} !maintenance.html
  RewriteRule ^.*$ /maintenance.html [L]
 
  # Lasciamo le richieste "statiche" ad Apache.
  RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f
  RewriteRule (.*) $1 [L]
 
  # Le richieste "non statiche" vengono redirette ai membri del cluster.
  RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
  RewriteRule ^/(.*)$ balancer://www_test_it_mongrel_cluster%{REQUEST_URI} [P,QSA,L]
 
  # Comprimiamo un po' di cose.
  AddOutputFilterByType DEFLATE text/html
  AddOutputFilterByType DEFLATE application/x-javascript
  AddOutputFilterByType DEFLATE text/css
  AddOutputFilterByType DEFLATE text/plain
  AddOutputFilterByType DEFLATE text/xml
  AddOutputFilterByType DEFLATE application/xml
  BrowserMatch ^Mozilla/4 gzip-only-text/html
  BrowserMatch ^Mozilla/4.0[678] no-gzip
  BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
</VirtualHost>
</pre>
le spiegazioni sono nei commenti del file di configurazione. Consiglio di non cancellarli quando si utilizza questo template, in quanto possono sempre tornare utili nel futuro. ;)
 
== Avvio, Arresto e Riavvio di un cluster Mongrel ==
In questa parte del tutorial vedremo come lanciare, fermare e riavviare una batteria di server mongrel:
=== Avvio ===
<pre>mongrel_rails cluster::start -C /opt/ror/config/mongrel.yml</pre>
=== Arresto ===
<pre>mongrel_rails cluster::stop  -C /opt/ror/config/mongrel.yml</pre>
=== Riavvio ===
<pre>mongrel_rails cluster::restart  -C /opt/ror/config/mongrel.yml</pre>
 
=== Inserimento nel processo di Boot ===
Giunti a questo punto siamo in grado di gestire manualmente l'avvio, l'arresto e il riavvio di un cluster mongrel, però siamo di fronte ad un problema: in caso di riavvio (accidentale o no) della macchina dovremo avviare manualmente tutti i vari cluster, questo non è assolutamente accettabile in un ambiente di produzione!!!
 
Per ovviare a tutti ciò, inseriremo negli script di boot (e di shutdown) uno script che si prenderà il carico di avviare tutti i cluster mongrel da noi specificati.
 
==== File di Configurazione ====
I file di configurazione che verranno letti dallo script andranno inseriti nella directory <code>'''/etc/mongrel_cluster/'''</code>.
Normalmente non è una buona idea, nelle applicazioni in ruby on rails, inserire file di un progetto all'esterno della directory del progetto stesso, in quanto richiederebbe sempre un accesso alla macchina per l'aggiornamento del file di configurazione del cluster, soprattutto se si utilizza il comodo sistema di deploy ''capistrano''.
 
Per semplificarci la vita useremo un link simbolico. Supponiamo che la nostra applicazione sia in <code>'''/opt/ror/'''</code>, e che il file di configurazione sia nella directory di configurazione dell'applicativo: <code>'''/opt/ror/config/'''</code>.
 
<pre>
# ln -s /opt/ror/config/mongrel.yml /etc/mongrel_cluster/www.test.it.yml
</pre>
 
==== Inserimento dello script ====
Lo script si trova in <code>'''/usr/lib/ruby/gems/1.8/gems/mongrel_cluster-1.0.5/resources/mongrel_cluster'''</code> (supponendo di avere installata la versione 1.0.5 di mongrel_cluster).
Per inserirlo nel processo di avvio è sufficiente eseguire i seguenti comandi:
<pre>
# cp /usr/lib/ruby/gems/1.8/gems/mongrel_cluster-1.0.5/resources/mongrel_cluster /etc/init.d/
# ln -s /etc/init.d/mongrel_cluster /etc/rc2.d/S90mongrel_cluster
</pre>
 
== Conclusione ==
Giunti a questo punto abbiamo configurato alla perfezione sia apache che mongrel. Se tutto funziona a dovere il nostro applicativo dovrebbe essere visibile dall'esterno. ;)
 
{{Autori
|Autore = [[Utente:MaXeR|MaXeR]]
}}
 
[[Categoria:Web server]][[Categoria: Ruby]]

Versione attuale delle 16:51, 28 feb 2016

Guida da adottare! Bannermv.png


Edit-clear-history.png Attenzione. Questa guida è da considerarsi abbandonata, per via del tempo trascorso dall'ultima verifica.

Potrà essere resa obsoleta, previa segnalazione sul forum, se nessuno si propone per l'adozione.


Debian-swirl.png Versioni Compatibili

Debian 6 "squeeze"

Introduzione

La soluzione più diffusa e stabile, per la messa on-line di un applicativo scritto in ruby on rails, è data dall'accoppiata Mongrel e Apache2.
La struttura del nostro ambiente di produzione è descritta nella seguente figura:

Apache-mongrel.png

Tutte le richieste arriveranno al server web apache, che si occuperà di dirottare le richieste dinamiche a uno dei server mongrel, mentre servirà i contenuti di tipo statico direttamente, senza così appesantire le istanze di mongrel con richieste che possono essere processate direttamente da apache.

Questa struttura, inoltre, permette espansioni future per garantire una buona scalabilità in caso di un forte aumento delle richieste: potremo, in futuro, spostare le varie istanze di mongrel su server differenti, distribuire il filesystem in modo da avere "più apache" pronti ad accettare le richieste, etc.


Installazione

Apache2

Per installare Apache è sufficiente un

# apt-get install apache2-mpm-prefork libapache2-mod-proxy-html

Consiglio la versione "prefork" in quanto è supportata pienamente anche da php5, e di conseguenza non ci saranno problemi ad installare anche applicazioni come phpmyadmin, molto comoda per la gestione di database mysql. Per approfondimenti sull'installazione di Apache, si vedano ad esempio queste guide:

L'installazione base di apache, però, non è sufficiente per i nostri fini, infatti dobbiamo abilitare alcuni moduli:

  • deflate
  • proxy_balancer
  • proxy_connect
  • proxy_html
  • proxy_http
  • proxy
  • rewrite.

Per abilitarli:

# a2enmod deflate
# a2enmod proxy_balancer
# a2enmod proxy_connect
# a2enmod proxy_html
# a2enmod proxy_http
# a2enmod proxy
# a2enmod rewrite

La configurazione di default del modulo proxy permette connessioni solo dall'indirizzo ip 127.0.0.1. Questa situazione rende impossibile, però, l'accesso al VirtualHost che andremo a configurare dall'esterno. A tal proposito dobbiamo modificare il file di configurazione del modulo (nome del file di configurazione) modificando la seguente riga:

<Proxy *>
    AddDefaultCharset off
    Order allow,deny
    Allow from .example.com
    Deny from all
</Proxy>

in

<Proxy *>
    AddDefaultCharset off
    Order allow,deny
    Allow from all
    #Allow from .example.com
</Proxy>

Una volta abilitati i moduli e fatte le modifiche necessarie, riavviamo apache:

# /etc/init.d/apache2 restart

L'installazione e la configurazione base di apache sono terminate.

Ruby

Se non è già presente sulla macchina, provvediamo ad installare ruby ed i componenti più importanti, necessari alla compilazione di mongrel:

# apt-get install ruby irb ri rdoc ruby1.8-dev build-essential


Rails

Prima di tutto scarichiamo rubygems dal sito ufficiale: http://www.rubygems.org/

In questo momento l'ultima versione è la 0.9.5:

# wget http://rubyforge.org/frs/download.php/28174/rubygems-0.9.5.tgz
# tar xzvf rubygems-0.9.5.tgz
# cd rubygems-0.9.5
# ruby setup.rb

Ora possiamo installare rails, facendo attenzione alla versione richiesta dal nostro applicativo:

  • Ultima versione
# gem install rails
  • Una versione specifica
# gem install rails -v 1.2.5


Mongrel

Mongrel si installa allo stesso modo di rails, inoltre installeremo anche mongrel-cluster, che ci semplificherà moltissimo la vita:

# gem install mongrel
# gem install mongrel_cluster

Configurazione

Mongrel

La configurazione del cluster di server mongrel è semplice, e si riduce a creare un semplice file di configurazione. Questo è quello base, da cui partire:

--- 
cwd: /opt/ror/
log_file: log/mongrel.log
port: "3000"
environment: production
address: 127.0.0.1
pid_file: tmp/pids/mongrel.pid
servers: 3
user: mongrel
group: mongrel

Nei dettagli tutte le voci:

cwd
current work directory, cioè la directory in cui è presente l'applicativo. È consigliato usare SEMPRE un percorso assoluto;
log_file
dove conservare i log di mongrel. Il valore di default va più che bene;
port
la porta iniziale per l'array di server mongrel;
environment
l'environment di rails da utilizzare: normalmente si usa production (essendo un server di produzione), ma in casi particolari si può inserire un nuovo ambiente;
address
l'indirizzo IP su cui mettersi in ascolto. Le scelte più comuni sono:
127.0.0.1
il cluster sarà raggiungibile solo da applicazioni residenti sul server su cui è in esecuzione mongrel, impostazione consigliata a meno di configurazioni più complesse;
0.0.0.0
il cluster sarà raggiungibile da qualsiasi indirizzo esterno, scelta sconsigliata a meno che non ci si trovi in un ambiente protetto;
pid_file
dove inserire i pid dei vari processi mongrel;
servers
il numero di server mongrel da lanciare;
user
l'utente che sarà usato per lanciare i server mogrel;
group
come sopra, ma relativo al gruppo
Info.png Nota:
se si specifica un utente diverso da www-data, sarà necessario crearlo: normalmente si utilizza l'utente mongrel, e lo si può creare nel seguente modo:
# adduser --system mongrel  --no-create-home --disabled-login --disabled-password


Apache

Questo è un classico file di configurazione di apache per un VirtualHost, che sfrutta 3 server mongrel.

<Proxy balancer://www_test_it_mongrel_cluster>
  BalancerMember http://127.0.0.1:8000
  BalancerMember http://127.0.0.1:8001
  BalancerMember http://127.0.0.1:8002
</Proxy>

<VirtualHost *>
  ServerAdmin info@debianizzati.org
  ServerName www.test.it
  DocumentRoot /opt/ror/public/
  ErrorLog /var/log/apache2/www.test.it-error.log

  # Superflue, dato che ogni richiesta "non statica" viene gestita da
  # Mongrel, che usa RubyGems ed ha una configurazione indipendente.
  #  SetEnv RUBYOPT rubygems
  #  SetEnv RAILS_ENV production
  <Directory /opt/ror/public/>
    Options -ExecCGI FollowSymLinks -Indexes
    AllowOverride None
    Order allow,deny
    allow from any
  </Directory>

  # Inutile cercare di gestire la possibile mancanza di alcuni moduli: ci
  # servono e quindi assumiamo che siano disponibili.
  RewriteEngine on

  # Pagina di "manutenzione" per disabilitare l'accesso all'applicazione.
  RewriteCond %{DOCUMENT_ROOT}/maintenance.html -f
  RewriteCond %{SCRIPT_FILENAME} !maintenance.html
  RewriteRule ^.*$ /maintenance.html [L]

  # Lasciamo le richieste "statiche" ad Apache.
  RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f
  RewriteRule (.*) $1 [L]

  # Le richieste "non statiche" vengono redirette ai membri del cluster.
  RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
  RewriteRule ^/(.*)$ balancer://www_test_it_mongrel_cluster%{REQUEST_URI} [P,QSA,L]

  # Comprimiamo un po' di cose.
  AddOutputFilterByType DEFLATE text/html
  AddOutputFilterByType DEFLATE application/x-javascript
  AddOutputFilterByType DEFLATE text/css
  AddOutputFilterByType DEFLATE text/plain
  AddOutputFilterByType DEFLATE text/xml
  AddOutputFilterByType DEFLATE application/xml
  BrowserMatch ^Mozilla/4 gzip-only-text/html
  BrowserMatch ^Mozilla/4.0[678] no-gzip
  BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
</VirtualHost>

le spiegazioni sono nei commenti del file di configurazione. Consiglio di non cancellarli quando si utilizza questo template, in quanto possono sempre tornare utili nel futuro. ;)

Avvio, Arresto e Riavvio di un cluster Mongrel

In questa parte del tutorial vedremo come lanciare, fermare e riavviare una batteria di server mongrel:

Avvio

mongrel_rails cluster::start -C /opt/ror/config/mongrel.yml

Arresto

mongrel_rails cluster::stop  -C /opt/ror/config/mongrel.yml

Riavvio

mongrel_rails cluster::restart  -C /opt/ror/config/mongrel.yml

Inserimento nel processo di Boot

Giunti a questo punto siamo in grado di gestire manualmente l'avvio, l'arresto e il riavvio di un cluster mongrel, però siamo di fronte ad un problema: in caso di riavvio (accidentale o no) della macchina dovremo avviare manualmente tutti i vari cluster, questo non è assolutamente accettabile in un ambiente di produzione!!!

Per ovviare a tutti ciò, inseriremo negli script di boot (e di shutdown) uno script che si prenderà il carico di avviare tutti i cluster mongrel da noi specificati.

File di Configurazione

I file di configurazione che verranno letti dallo script andranno inseriti nella directory /etc/mongrel_cluster/. Normalmente non è una buona idea, nelle applicazioni in ruby on rails, inserire file di un progetto all'esterno della directory del progetto stesso, in quanto richiederebbe sempre un accesso alla macchina per l'aggiornamento del file di configurazione del cluster, soprattutto se si utilizza il comodo sistema di deploy capistrano.

Per semplificarci la vita useremo un link simbolico. Supponiamo che la nostra applicazione sia in /opt/ror/, e che il file di configurazione sia nella directory di configurazione dell'applicativo: /opt/ror/config/.

# ln -s /opt/ror/config/mongrel.yml /etc/mongrel_cluster/www.test.it.yml

Inserimento dello script

Lo script si trova in /usr/lib/ruby/gems/1.8/gems/mongrel_cluster-1.0.5/resources/mongrel_cluster (supponendo di avere installata la versione 1.0.5 di mongrel_cluster). Per inserirlo nel processo di avvio è sufficiente eseguire i seguenti comandi:

# cp /usr/lib/ruby/gems/1.8/gems/mongrel_cluster-1.0.5/resources/mongrel_cluster /etc/init.d/
# ln -s /etc/init.d/mongrel_cluster /etc/rc2.d/S90mongrel_cluster

Conclusione

Giunti a questo punto abbiamo configurato alla perfezione sia apache che mongrel. Se tutto funziona a dovere il nostro applicativo dovrebbe essere visibile dall'esterno. ;)




Guida scritta da: MaXeR Swirl-auth20.png Debianized 20%
Estesa da:
Verificata da:

Verificare ed estendere la guida | Cos'è una guida Debianized