marți, 1 decembrie 2009

Cum ne configuram mediul de development?

In acest post incerc sa descriu o configurare posibila a mediului de development care se apropie foarte mult de mediul de productie. Desi este putin mai mult de lucru beneficiile sunt enorme: sansele de a obține un comportament diferit pe mediul de producție(mi s-a întâmplat de multe ori asta). Pentru tehnologiile open source precum java, python și php această metodă este eficientă.

Primul pas este să instalați un server apache pe mediul de development și să îl configurați să suporte virtual host-uri (așa sunt configurate toate mediile de producție). Vom presupune că aplicația la care lucrăm se numește: myexample.com (va fi accesată în producție prin www.myexample.com).

Simulare DNS:

În fișierul hosts adăugăm următoare intrare:

127.0.0.1 localhost.myexample.com

În funcție de sistemul de operare folosit fișierul hosts poate fi găsit în:
  • Windows: %WINDOWS%/system/drivers/etc/hosts
  • Linux / Unix / OS X: /etc/hosts
Soluție pentru aplicație java

Plasăm liniile de mai jos într-un fișier în interiorul directorului de configurare apache. O să îl numim virtualhosts.conf.

NameVirtualHost *:80

<VirtualHost *:80>
ServerAdmin rcosnita@myexample.com
ServerName localhost.myexample.com

ProxyRequests Off
ProxyPreserveHost On

ProxyPass / http://localhost:8080/myexample.com/
ProxyPassReverse / http://localhost:8080/myexample.com/
</VirtualHost>

În httpd.conf, la sfârșitul fișierului, adăugam Include "virtualhosts.conf".

Soluție pentru aplicație php:

Procedăm la fel ca și în cazul aplicațiilor java. VirtualHost-ul arată un pic diferit:

ServerAdmin rcosnita@myexample.com
ServerName localhost.myexample.com
DocumentRoot /Users/raduviorelcosnita/Proiecte/myexample.com

DirectoryIndex index.php

AllowOverride All
Options +Indexes +FollowSymLinks
Order allow,deny
Allow from all

Partea bună este că reușim să testăm și partea de rescriere url utilizând fișierul .htaccess. Este la fel ca în mediul de producție.

Soluție pentru aplicație python:

Pentru partea de python, lucrurile sunt un pic mai complicate deoarece există multe moduri de rulare în producție. Întrucât eu folosesc django și wsgi module o să descriu această modalitate de deploy:

ServerAdmin rcosnita@myexample.com
ServerName localhost.myexample.com
DocumentRoot /Users/raduviorelcosnita/Proiecte/myexample.com

Order allow,deny
Allow from all

WSGIDaemonProcess myexample.com processes=2 threads=15 display-name=%{GROUP}
WSGIProcessGroup myexample.com
WSGIScriptAlias / /Users/raduviorelcosnita/Proiecte/myexample.com/src/mysite/apache/django.wsgi

Order allow,deny
Allow from all

Aici sunt multe detalii de povestit, dar ceea ce facem este să mapăm handler-ul de fișiere python pentru aplicația noastră django. Pentru a face refresh la aplicație, trebuie să executăm următoare instrucțiune pe linux: touch django.wsgi

Din câte știu, este singura modalitate de deploy a unei aplicații python care nu necesită restartarea server-ului apache.

Încheiere

Indiferent de tehnologia folosită pentru a dezvolta aplicația, tot ce va trebui să faceți în browser este să introduceți url-ul: http://localhost.myexample.com/. Cu siguranță această metodă de acces a aplicației este mult mai aproape de mediul de producție decât varianta clasică de acces direct pe server-ul dedicat: tomcat / jboss pentru java sau server-ul propriu django pentru python.