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

Vai alla navigazione Vai alla ricerca
mNessun oggetto della modifica
mNessun oggetto della modifica
Riga 1: Riga 1:
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!
Questa guida rappresenta la mia configurazione di Debian su un portatile HP Compaq nx6325. Suggerimenti e miglioramenti sono bene accetti. L'ultima modifica risale al 24 ottobre 2007.


= Introduzione =
== Guide HP ==
La struttura del nostro ambiente di produzione è descritta nella seguente figura:


TODO!!!
Il sito HP mette a disposizione [http://h20000.www2.hp.com/bizsupport/TechSupport/DocumentIndex.jsp?contentType=SupportManual&lang=en&cc=us&docIndexId=179111&taskId=135&prodTypeId=321957&prodSeriesId=1849082 numerose guide], basate per� su Windows, riguardanti questo portatile.


== Hardware ==


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.
Esistono diverse versioni dell'HP Compaq nx6325. Una [http://h18000.www1.hp.com/products/quickspecs/12447_div/12447_div.HTML lista completa dei componenti] � offerta dal sito HP. A meno che il processore non sia un Sempron, si tratta di un processore a 64bit. Per fortuna Debian offre senza battere ciglio una versione amd64.


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, ...
Nel mio caso i principali componenti sono:


* Processori: AMD Turion 64 X2 Dual-Core Mobile Processor TL-60 (2.0-GHz, 2 x 512-KB L2 cache)
* Memoria RAM: 1024 MB (slot 1); dato che uno slot 2 disponibile, ho aggiunto altri 1024 MB di RAM
* Scheda Video: ATI Radeon Xpress 200M (alias 1150), 128 MB di memoria
* Scheda Audio: ATI Technologies Inc SB450 HDA Audio
* Scheda Ethernet: Broadcom NetXtreme BCM 5788 Gigabit Ethernet
* Scheda Wireless: Broadcom BCM 4310 802.11 a/b/g (BCM 4310 ci che lspci mostra; il sito HP dice che si tratta di una BCM 4311).


= Installazione =
Il laptop � dotato di un lettore di schede di memoria 7-in-1 e di un lettore per impronta digitale.
== Apache2 ==
 
Per installare Apache è sufficiente un  
=== Hardware testato e funzionante ===
<pre>
 
# apt-get install apache2-mpm-prefork libapache2-mod-proxy-html
* Scheda video ATI Radeon Xpress 200M: funziona con i driver ati (xserver-xorg-video-ati), ma per l'accelerazione 3D bisogna usare i [[Installazione_driver_proprietari_Ati|driver proprietari ATI]].
</pre>
* Scheda audio ATI Technologies Inc SB450 HDA Audio: funziona con il driver snd_hda_intel.
* Touchpad Synaptics: da configurare in xorg.conf come in [[Synaptics_touchpad|questa guida]].
* Wireless Broadcom BCM4310: funziona decentemente con il driver bcm43xx; viene riportato che su ubuntu  ([http://www.ludreb.plus.com/ubuntuguide.html#6] e [http://vale.homelinux.net/wordpress/?p=106]) funziona meglio l'[[ndisWrapper]].
* Pulsanti multimediali: configurati con xbindkeys (vedi sotto un esempio).
* Lettore di card 7-in-1: funziona con HAL di KDE ed i moduli sdhci, mmc_core, mmc_block, tifm_7xx1, tifm_sd. [http://gentoo-wiki.com/HARDWARE_Gentoo_on_HP_Compaq_nx6325#Onboard_cardreader Card reader e Gentoo].
 
=== Hardware non testato ===
 
* Sensore per impronta digitale AuthenTec AES 2501: secondo [http://www.thinkwiki.org/wiki/How_to_enable_the_fingerprint_reader questa guida] funziona.
* Modem interno
* FireWire
* BlueTooth
 
=== lspci ===
 
Host bridge: ATI Technologies Inc RS480 Host Bridge (rev 10)
PCI bridge: ATI Technologies Inc RS480 PCI Bridge
PCI bridge: ATI Technologies Inc RS480 PCI Bridge
PCI bridge: ATI Technologies Inc Unknown device 5a37
PCI bridge: ATI Technologies Inc RS480 PCI Bridge
IDE interface: ATI Technologies Inc ATI 4379 Serial ATA Controller (rev 80)
USB Controller: ATI Technologies Inc IXP SB400 USB Host Controller (rev 80)
USB Controller: ATI Technologies Inc IXP SB400 USB Host Controller (rev 80)
USB Controller: ATI Technologies Inc IXP SB400 USB2 Host Controller (rev 80)
SMBus: ATI Technologies Inc IXP SB400 SMBus Controller (rev 81)
IDE interface: ATI Technologies Inc Standard Dual Channel PCI IDE Controller ATI (rev 80)
Audio device: ATI Technologies Inc SB450 HDA Audio (rev 01)
ISA bridge: ATI Technologies Inc IXP SB400 PCI-ISA Bridge (rev 80)
PCI bridge: ATI Technologies Inc IXP SB400 PCI-PCI Bridge (rev 80)
Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] HyperTransport Technology Configuration
Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] Address Map
Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] DRAM Controller
Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] Miscellaneous Control
VGA compatible controller: ATI Technologies Inc RS482 [Radeon Xpress 200M]
Ethernet controller: Broadcom Corporation NetXtreme BCM5788 Gigabit Ethernet (rev 03)
CardBus bridge: Texas Instruments PCIxx12 Cardbus Controller
FireWire (IEEE 1394): Texas Instruments PCIxx12 OHCI Compliant IEEE 1394 Host Controller
Mass storage controller: Texas Instruments 5-in-1 Multimedia Card Reader (SD/MMC/MS/MS PRO/xD)
Generic system peripheral [0805]: Texas Instruments PCIxx12 SDA Standard Compliant SD Host Controller
Network controller: Broadcom Corporation BCM4310 UART (rev 01)
 
== Kernel ==
 
Il mio kernel � un 2.6.23.11 customizzato.
 
=== Kernel 2.6.22 ===
 
Opzioni rilevanti sono le seguenti:
* Processore
<pre>Processor Family  --->
    <*> AMD-Opteron/Athlon64
    [*] Symmetric multi-processing support
        [*] SMT (Hyperthreading) scheduler support
        [*] Multi-core scheduler support</pre>
* Scheda wireless, se volete usare il driver broadcom compreso nel kernel:
<pre>Network device support  --->
    Wireless LAN  --->
        [*] Broadcom BCM43xx wireless support</pre>
* Card Reader:
<pre>Device Drivers  --->
    [*] MMC/SD Card Support  --->
        [*] MMC block device driver
        [*] Secure Digital Host Controller Interface support  (EXPERIMENTAL)
        [*] TI Flash Media MMC/SD Interface support  (EXPERIMENTAL)</pre>
=== ACPI ===


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 supporto basta abilitarlo nel kernel; personalmente carico i moduli AC Adapter, Battery, Button, Video, Fan, Processor, Thermal Zone. Con un kernel >= 2.6.22 non ho avuto problemi.
* deflate
* proxy_balancer
* proxy_connect
* proxy_html
* proxy_http
* proxy
* rewrite


per abilitarli:
== Configurazioni ==
<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 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:
=== xorg.conf, ATI e accelerazione 3D ===


TODO
Per avere l'accelerazione 3D bisogna usare i [[Installazione_driver_proprietari_Ati|driver ATI]]. Il pi� recente � alla versione 8.40.4 per linux a 64-bit. Per l'installazione del driver consiglio quella manuale con la creazione dei pacchetti.


Una volta abilitati i moduli e fatte le modifiche necessarie, riavviamo apache:
Una volta installato il driver xorg.conf dovrebbe avere sezioni come queste:
<pre>
  Section "Module"
# /etc/init.d/apache2 restart
        Load  "i2c"
</pre>
        Load  "bitmap"
        Load  "ddc"
        Load  "dri"
        Load  "extmod"
        Load  "freetype"
        Load  "glx"
        Load  "int10"
        Load  "vbe"
        Load  "GLcore"
  EndSection
  ...
  Section "Device"
        Identifier  "Ati Device"
        Driver      "fglrx"
        Option      "VideoOverlay" "on"
        Option      "OpenGLOverlay" "off"
        BusID      "PCI:1:5:0"
  EndSection
  ...
  Section "DRI"
        Mode        0666
  EndSection


L'installazione e la configurazione base di apache sono terminate.
  Section "Extensions"
        Option      "Composite" "Disable"
  EndSection


== Ruby ==
Per il touchpad Synaptics:
Se non è già presente sulla macchina, provvediamo ad installare ruby ed i componenti più importanti, necessari alla compilazione di mongrel:
  Section "InputDevice"
        Identifier  "Synaptics Touchpad"
        Driver      "synaptics"
        Option      "SendCoreEvents" "true"
        Option      "Device" "/dev/psaux"
        Option      "Protocol" "auto-dev"
        Option      "HorizScrollDelta" "0"
  EndSection


<pre>
=== Audio e ALSA ===
# apt-get install ruby irb ri rdoc ruby1.8-dev build-essential
</pre>


L'audio non d problemi. La configurazione segue la norma
# apt-get install alsa-base alsa-utils
# alsaconf


== Rails ==
=== Boot e APIC ===
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]:
Mi capita che APIC riempia i log con errori sulle due CPU:
<pre>
  APIC error on CPU0: 40(40)
# wget http://rubyforge.org/frs/download.php/28174/rubygems-0.9.5.tgz
  APIC error on CPU1: 40(40)
# tar xzvf rubygems-0.9.5.tgz
  APIC error on CPU0: 40(40)
# cd rubygems-0.9.5
  APIC error on CPU1: 40(40)
# ruby setup.rb
  ...
</pre>


Ora possiamo installare rails, facendo attenzione alla versione richiesta dal nostro applicativo:
Se nelle opzioni di boot viene aggiunto '''-noapic -nolapic''' succede che viene rilevato un solo processore. Per ora mi tengo gli errori sulle CPU!
* Ultima versione
<pre>
# gem install rails
</pre>
* Una versione specifica
<pre>
# gem install rails -v 1.2.5
</pre>


=== Wireless ===


== Mongrel ==
La scheda wireless funziona abbastanza bene con il driver bcm43xx compreso nel kernel (>= 2.6.21). Mi succede che non riceva sempre offerte dhcp quando tento di connettermi e mi � stato consigliato l'ndiswrapper.
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 =
=== xbindkeys per l'audio ===  
== 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
</pre>


Nei dettagli tutte le voci:
La configurazione di xbindkeys per i tre pulsanti audio in alto a destra � come segue.
; cwd : ''current work directory'', cioè la directory in cui è presente l'applicativo. È consigliato usare SEMPRE un percorso assoluto.
Il file di configurazione � ~/.xbindkeysrc.
; log_file : dove conservare i log di mongrel. Il valore di default va più che bene
<pre># Volume up
; port : la porta iniziale per l'array di server mongrel
"amixer set Master 4+"
; 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.
  m:0x0 + c:176
; 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.


# Volume down
"amixer set Master 4-"
  m:0x0 + c:174


== Apache ==
# Mute
Questo è un classico file di configurazione di apache per un VirtualHost, che sfrutta 3 server mongrel.
"muter"
  m:0x0 + c:160</pre>


Il programma 'muter' un piccolo script shell che mi sono scritto:
<pre>
<pre>
da inserire
#!/bin/sh
#
# amix muter for HP Compaq nx6325
# Francesco Marass - 2007 May 22
# fmarass@uvic.ca
#
STATE=`amixer get Master | grep "Front Left" | grep "\[on\]"`
if [ -z "$STATE" ]; then
amixer -q set Master unmute
else
amixer -q set Master mute
fi
exit 0;
</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 =
== Ringraziamenti ==
In questa parte del tutorial vedremo come lanciare, fermare e riavviare una batteria di server mongrel:
== Avvio ==
== Arresto ==
== Riavvio ==


== Inserimento nel processo di Boot ==
Nello scrivere la prima versione di questa guida ho fatto riferimento alle pagine:
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!!!
*[[Debian_on_a_HP_Compaq_NX6110|Debian su HP Compaq nx6110]],
*[http://gentoo-wiki.com/HARDWARE_Gentoo_on_HP_Compaq_nx6325 Gentoo su HP Compaq nx6325].


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.
== Links utili ==


=== File di Configurazione ===
* [http://h18000.www1.hp.com/products/quickspecs/12447_div/12447_div.HTML HP - Specifiche del portatile]
I file di configurazione che verranno letti dallo script andranno inseriti nella directory '''/etc/mongrel_cluster/'''.  
* [http://h20000.www2.hp.com/bizsupport/TechSupport/DocumentIndex.jsp?contentType=SupportManual&lang=en&cc=us&docIndexId=179111&taskId=135&prodTypeId=321957&prodSeriesId=1849082 HP - Manuali]
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''.
* [http://h20000.www2.hp.com/bizsupport/TechSupport/SoftwareIndex.jsp?lang=en&cc=us&prodNameId=3315736&prodTypeId=0&prodSeriesId=1849082&swLang=8&taskId=135&swEnvOID=181 HP - Drivers Download]
* [http://www.puchalla-online.de/nx6325.html Puchalla Online - Debian su HP Compaq nx6325]


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/'''
----
<pre>
Autore: [[Utente:Francys|Francys]] | 23 ottobre 2007
</pre>
=== Inserimento dello script ===


= Conclusione =
[[Categoria:Laptop]]
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 ;)