Le but de cet HowTo n'est pas de faire un cours sur Ruby on Rails mais simplement de détailler les outils nécessaires à son bon fonctionnement. Nous prendrons pour exemple le déploiement d'un blog développé en Ruby nommé Typosphere en utilisant MySQL (cf Installation & Sécurisation MySQL pour l'installation et le paramétrage de MySQL).
Nginx a été choisi pour ses capacités avancées de load balancing, toutefois d'autres serveurs web font l'affaire.
Le résultat sera celui ci : typo.jpg
Je vous invite à prendre connaissance du HowTo : http://wiki.openbsd-france.org/documentations/astuces/installer_un_package_rapidement
On l'installe :
# pkg_add -r nginx
On le configure pour démarrer au lancement du système :
# vi /etc/rc.local
if [ -x /usr/local/sbin/nginx ]; then
echo -n ' nginx'; /usr/local/sbin/nginx
fi
On installe les différents éléments nécessaires :
# pkg_add -r ruby
# pkg_add -r ruby-gems
# pkg_add -r ruby-rails
# pkg_add -r ruby-rake
# pkg_add -r ruby-iconv
# pkg_add -r ruby-sqlite3
# gem install mysql
On crée le squelette de l'architecture rail :
# rails /var/nginx/html/
Nous allons nous servir de l'utilitaire gem installé précédemment pour rapatrier typo :
# gem install typo
# typo install /var/nginx/html/typo db_user=root db_name=typo db_host=localhost db_password=pass
NB : Les informations de votre base sont contenues dans config/database.yml
Par défaut, typo utilise mongrel un serveur web ruby. Nous allons le configurer directement via typo pour qu'il écoute sur 127.0.0.1 avec 3 threads sur les ports 3000-3002.
# typo config /var/nginx/html/typo bind-address=127.0.0.1 # typo config /var/nginx/html/typo port-number=3000 # typo config /var/nginx/html/typo web-server=mongrel_cluster # typo config /var/nginx/html/typo threads=3
On crée le répertoire de logs des pids parce qu'il n'est pas fichu de le faire tout seul au lancement :
# mkdir /var/nginx/html/typo/tmp/pids
On le démarre :
# typo start /var/nginx/html/typo
A ce stade votre application est déjà accessible à l'adressse 127.0.0.1:3000-3002, mais on veut faire plus !
# vi /etc/nginx/nginx.conf
user _nginx;
worker_processes 5;
error_log /var/log/nginx.error.log;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] $request '
'"$status" $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx.access.log main;
sendfile on;
keepalive_timeout 65;
# on déclare l'adresse du cluster :
upstream mongrel_cluster {
server 127.0.0.1:3000;
server 127.0.0.1:3001;
server 127.0.0.1:3002;
}
server {
listen 80;
server_name 192.168.1.30; #changez par votre IP
root /var/nginx/html;
# on pointe notre blog vers la racine et on va chercher le contenu sur le serveur ruby
location / {
proxy_pass http://mongrel_cluster;
break;
}
}
}
On lance nginx :
# /usr/local/sbin/nginx
Plus qu'à aller à l'adresse de votre serveur, vous devriez tomber immédiatement sur la page de configuration de l'admin.
Il existe un autre serveur ruby offrant un meilleur gain et permettant l'utilisation de socks, il s'agit de Thin.
Attention, selon les versions des packages / ports il est possible que ça ne marche pas. La compatibilité avec OpenBSD reste extrêmement relative.
On l'installe :
# gem install thin # mkdir /etc/thin # vi /etc/thin/thin.ymp
pid: /var/nginx/tmp/pids/thin.pid socket: /var/nginx/tmp/thin.sock log: log/thin.log timeout: 30 max_conns: 1024 chdir: /var/nginx/html/typo max_persistent_conns: 512 environment: production daemonize: true require: [] servers: 3
On configure Nginx :
upstream thin_cluster {
server unix:/tmp/thin.0.sock;
server unix:/tmp/thin.1.sock;
server unix:/tmp/thin.2.sock;
}
location / {
proxy_pass http://thin_cluster;
break;
}
On lance l'application :
# thin -C /etc/thin/thin.yml start
Comme son nom l'indique Memcached va servir de cache pour Nginx :
# pkg_add memcached # vi /etc/rc.local
if [ -x /usr/local/bin/memcached ]; then
echo -n ' memcached'
/usr/local/bin/memcached -d -l 127.0.0.1 \
-u _memcached -P /var/run/memcached.pid
fi
On configure Nginx pour l'utiliser :
location / {
set $memcached_key $uri;
memcached_pass 127.0.0.1:11211;
default_type text/html;
error_page 404 = /fallback;
}
location = /fallback {
proxy_pass http://thin_cluster;
}
Auteur : Angeli Matthieu
Date de réalisation : 08/13/2009
Version d'OpenBSD : 4.6