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
mNessun oggetto della modifica
Riga 1: Riga 1:
=Installazione moduli da repository ufficiali Debian (consigliato)=
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!
Con l'avvento sui repository Debian (stable, testing e unstable) dei pacchetti contenenti moduli, firmware e regulatory daemon, installazione e configurazione possono essere risolte mediante un semplice apt-get.
 
Se stiamo usando un kernel precompilato (ad esempio quello installato durante il setup di Debian, oppure scaricato tramite APT) baster� scaricare i moduli ipw3945 compilati appositamente per la versione corrente del kernel:
= Introduzione =
La struttura del nostro ambiente di produzione è descritta nella seguente figura:
 
TODO!!!
 
 
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 verie istanze di mongrel su server differenti, distribuire il filesystem in modo da avere "più apache" pronti ad accettare le richieste, ...
 
 
= Installazione =
== Apache2 ==
Per installare Apache è sufficiente un
<pre>
<pre>
apt-get install firmware-ipw3945 ipw3945d ipw3945-modules-`uname -r`
# apt-get install apache2-mpm-prefork libapache2-mod-proxy-html
</pre>
</pre>


== Caricamento del modulo ==
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. L'installazione base di apache, però, non è sufficiente per i nostri fini, infatti dobbiamo abilitare alcuni moduli:
Il regulatory daemon, installato di default nei runlevel 2, 3, 4, 5, gestisce anche il caricamento del modulo ipw3945 nel kernel Linux; eseguendo iwconfig (come super utenti) dovremmo poter essere in grado di vedere l'interfaccia associata al chip wifi:
* deflate
* proxy_balancer
* proxy_connect
* proxy_html
* proxy_http
* proxy
* rewrite
 
per abilitarli:
<pre>
<pre>
eth2      unassociated  ESSID:off/any
# a2enmod deflate
          Mode:Managed  Channel=0  Access Point: 00:00:00:00:00:00
# a2enmod proxy_balancer
          Bit Rate=0 kb/s  Tx-Power=20 dBm
# a2enmod proxy_connect
          RTS thr:off  Fragment thr:off
# a2enmod proxy_html
          Encryption key:off
# a2enmod proxy_http
          Power Management:off
# a2enmod proxy
          Link Quality:0  Signal level:0  Noise level:0
# a2enmod rewrite
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0  Missed beacon:0
</pre>
</pre>


=Installazione mediante compilazione sorgenti (sconsigliato)=
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:
==Prerequisiti==
Prima di seguire quanto riportato nella guida, assicuriamoci di avere a nostra disposizioni gli headers per il nostro kernel. Se abbiamo compilato noi stessi il kernel, allora possiamo essere tranquilli, ma se stiamo usando un kernel precompilato (ad esempio quello installato durante il setup di Debian, oppure scaricato tramite APT) allora dobbiamo necessariamente scaricare il pacchetto Debian contenente gli headers.
Ecco come procedere:
<pre># apt-get install kernel-headers-`uname -r`</pre>


==Software Occorrente==
TODO
* [http://bughost.org/ipw3945/ Microcode/Firmware]
* [http://bughost.org/ipw3945/ Binary Userspace Regulatory Daemon]
* [http://ieee80211.sourceforge.net/ Network Stack ieee80211 per kernel Linux]
* [http://ipw3945.sourceforge.net/ Drivers Intel PRO/Wireless 3945ABG per kernel Linux]
E' consigliabile scaricare le versioni stabili (quelle con numero di versione che termina con .0) dei sorgenti del driver per Intel PRO/Wireless 3945ABG e dello stack ieee80211.
Creiamoci uno spazio di lavoro in cui scaricare e compilare i sorgenti:
<pre>mkdir ipw3945</pre>


=== Compilazione e installazione del sottosistema ieee80211 ===
Una volta abilitati i moduli e fatte le modifiche necessarie, riavviamo apache:
<pre>
<pre>
tar xzvf ieee80211-1.1.14.tgz
# /etc/init.d/apache2 restart
cd ieee80211-1.1.14
make
</pre>
</pre>
Potremmo essere avvisati del fatto che nel kernel installato siano gi� presenti componenti ieee80211:
 
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>
<pre>
/lib/modules/2.6.18-3-686/net/ieee80211/ieee80211.ko
# apt-get install ruby irb ri rdoc ruby1.8-dev build-essential
/lib/modules/2.6.18-3-686/net/ieee80211/ieee80211_crypt.ko
/lib/modules/2.6.18-3-686/net/ieee80211/ieee80211_crypt_wep.ko
/lib/modules/2.6.18-3-686/net/ieee80211/ieee80211_crypt_ccmp.ko
/lib/modules/2.6.18-3-686/net/ieee80211/ieee80211_crypt_tkip.ko
/lib/modules/2.6.18-3-686/net/ieee80211/.tmp_versions/ieee80211.mod
/lib/modules/2.6.18-3-686/net/ieee80211/.tmp_versions/ieee80211_crypt.mod
/lib/modules/2.6.18-3-686/net/ieee80211/.tmp_versions/ieee80211_crypt_wep.mod/lib/modules/2.6.18-suspend2/net/ieee80211/.tmp_versions/ieee80211_crypt_ccmp.mod
/lib/modules/2.6.18-3-686/net/ieee80211/.tmp_versions/ieee80211_crypt_tkip.mod
/lib/modules/2.6.18-3-686/include/net/ieee80211.h
/lib/modules/2.6.18-3-686/include/net/ieee80211_crypt.h
/lib/modules/2.6.18-3-686/include/net/ieee80211_radiotap.h
Above files found.  Remove? [y],n
</pre>
</pre>
Rispondendo affermativamente i componenti verranno eliminati e il successivo comando make install provveder� a installare i componenti ieee80211 che stiamo compilando.
 
Infine (questa istruzione potrebbe necessitare dei diritti di super utente)
 
== 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>
<pre>
make install
# wget http://rubyforge.org/frs/download.php/28174/rubygems-0.9.5.tgz
cd ..
# tar xzvf rubygems-0.9.5.tgz
# cd rubygems-0.9.5
# ruby setup.rb
</pre>
</pre>
=== Compilazione e installazione del modulo ipw3945 ===
 
Ora possiamo installare rails, facendo attenzione alla versione richiesta dal nostro applicativo:
* Ultima versione
<pre>
<pre>
tar xzvf ipw3945-1.1.3.tgz
# gem install rails
cd ipw3945-1.1.3
make
</pre>
</pre>
Per rendere il modulo compilato visibile al tool modprobe dobbiamo copiarlo nel path di depmod:
* Una versione specifica
<pre>
<pre>
cp ipw3945.ko  /lib/modules/$(uname -r)/kernel/drivers/net/wireless
# gem install rails -v 1.2.5
depmod -a
</pre>
</pre>
Ora possiamo utilizzare
 
<pre>modprobe ipw3945</pre>
 
per caricare il modulo nel kernel e
== Mongrel ==
<pre>modprobe ipw3945 -r</pre>
Mongrel si installa allo stesso modo di rails, inoltre installeremo anche mongrel-cluster, che ci semplificherà moltissimo la vita:
per rimuoverlo.
== Installazione del firmware ==
<pre>
<pre>
tar xzvf ipw3945-ucode-1.13.tgz
# gem install mongrel
cp ipw3945-ucode-1.13/ipw3945.ucode /usr/local/lib/firmware/
# gem install mongrel_cluster
</pre>
</pre>
=== Installazione del regulatory daemon ===
 
= 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>
<pre>
tar xzvf ipw3945d-1.7.22.tgz
---
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
</pre>
</pre>
Per sistemi a 32 bit:
 
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'envirorment 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.
 
 
== Apache ==
Questo è un classico file di configurazione di apache per un VirtualHost, che sfrutta 3 server mongrel.
 
<pre>
<pre>
cp ipw3945d-1.7.22/x86/ipw3945d /sbin
da inserire
</pre>
Per sistemi a 64 bit:
<pre>
cp ipw3945d-1.7.22/x86_64/ipw3945d /sbin
</pre>
</pre>
le spiegazioni sono nei commenti del file di configuarzione. 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 ==
== Arresto ==
== Riavvio ==
== 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 problema 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.


== Caricamento del modulo ==
=== File di Configurazione ===
Ora che compilazione e installazione sono completate possiamo procedere al caricamento del modulo nel kernel.
I file di configurazione che verranno letti dallo script andranno inseriti nella directory '''/etc/mongrel_cluster/'''.
Riportiamoci nella directory del driver ipw3945:
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''.
<pre>
cd ipw3945-1.1.3
</pre>
e carichiamo il modulo (ripulendo anche il log del kernel)
<pre>
./load debug=0
</pre>
Eseguendo iwconfig dovremmo poter essere in grado di vedere l'interfaccia associata al chip wifi:
<pre>
# ifconfig
eth2      unassociated  ESSID:off/any
          Mode:Managed  Channel=0  Access Point: 00:00:00:00:00:00
          Bit Rate=0 kb/s  Tx-Power=20 dBm
          RTS thr:off  Fragment thr:off
          Encryption key:off
          Power Management:off
          Link Quality:0  Signal level:0  Noise level:0
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0  Missed beacon:0
</pre>


== Automatizzare l'esecuzione del regulatory daemon mediante modprobe ==
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/'''
Per farlo basta creare un file nella directory /etc/modprobe.d
<pre>nano /etc/modprobe.d/</pre>
contenente le seguenti due righe:
<pre>
<pre>
install ipw3945 /sbin/modprobe --ignore-install ipw3945 ; sleep 0.5 ; /sbin/ipw3945d --quiet
remove ipw3945  /sbin/ipw3945d --kill ; /sbin/modprobe -r --ignore-remove ipw3945
</pre>
</pre>
=== Inserimento dello script ===


----
= Conclusione =
Autore: [[Utente:fulvio|fulvio]] Feb 06, 2007
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 ;)
[[Categoria:Hardware]][[Categoria:Wireless]]

Versione delle 08:54, 12 dic 2007

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!

Introduzione

La struttura del nostro ambiente di produzione è descritta nella seguente figura:

TODO!!!


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 verie istanze di mongrel su server differenti, distribuire il filesystem in modo da avere "più apache" pronti ad accettare le richieste, ...


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. 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:

TODO

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

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'envirorment 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.


Apache

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

da inserire

le spiegazioni sono nei commenti del file di configuarzione. 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

Arresto

Riavvio

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 problema 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/


Inserimento dello script

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 ;)