Los NAS Synology no traen el módulo de apache mod-wsgi por lo que he utilizado el módulo mod-fastcgi en su lugar para hacer funcionar Django en los NAS Synology.
Necesitamos del módulo mysql-python, para su instalación podemos seguir la entrada que ya se publicó en este mismo blog: http://ilizaran.blogspot.com.es/2014/09/instalacion-del-modulo-mysql-python-en.html
De la instalación de mysql-python ya tendremos instalado pip en el NAS por lo que podremos instalar Django con algunos módulos necesarios:
pip install Django
pip install setuptools
pip install flup
Para saber que la instalación de Django ha sido correcta y verificar la versión podemos realizar:
python
import django
django.VERSION
Ahora modifcamos la configuración de apache editando el fichero /etc/httpd/conf/httpd.conf-user para hacer accesible los ficheros css, imágenes y javascript de la parte administrativa de Django, por lo que añadimos:
Alias /static/admin /usr/local/packages/@appstore/Python/usr/local/lib/python2.7/site-packages/django/contrib/admin/static/admin
<Directory /usr/local/packages/@appstore/Python/usr/local/lib/python2.7/site-packages/django/contrib/admin/static/admin >
Order allow,deny
Allow from all
</Directory>
Dependiendo de donde se instale Django puede que esta configuración sea diferente, también se me ha dado el caso siguiente:
Alias /static/admin /lib/python2.7/site-packages/django/contrib/admin/static/admin
<Directory /lib/python2.7/site-packages/django/contrib/admin/static/admin >
Order allow,deny
Allow from all
</Directory>
Reiniciar apache desde el DSM para que surta efecto.
El resto de configuración de apache la podemos realizar mediante un fichero .htaccess, que lo tendremos que crear en la carpeta del alojamiento web de nuestro NAS. En mi caso la carpeta por defecto de alojamiento de páginas web es /volume1/web y ahí creo el fichero con el contenido:
AddHandler fastcgi-script .fcgi
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.fcgi/$1 [QSA,L]
Ahora creamos un pequeño script en python que situaremos en el espacio web (en mi caso /volume1/web/), para ver si FastCGI y python funcionan correctamente, lo llamamos por ejemplo test.fcgi:
Desde un navegador web indicamos http://mi-ip-nas/test.fcgi y debemos obtener la configuración del entorno FastCGI.
Ahora hay que configurar un puente entre FastCGI y Django para ello vamos obtener el script fcgi.py de Allan Saddi gracias a Keikubo (descargarlo de: https://github.com/keikubo/Python-FastCGI-Sample) y localizarlo en nuestro espacio web.
wget -nd https://github.com/keikubo/Python-FastCGI-Sample/archive/master.zip
unzip master.zip
mv Python-FastCGI-Sample-master/lib/fcgi.py /volume1/web
Ahora tenemos que crear el fichero que utiliza fcgi.py para lanzar nuestra aplicación Django, por ejemplo lo podemos llamar index.fcgi y contendrá:
#!/usr/bin/python
import sys, os
sys.path.append("/volume1/mi-carpeta/mi-aplicacion-django")
os.chdir("/volume1/mi-carpeta/mi-aplicacion-django")
os.environ.setdefault("DJANGO_SETTINGS_MODULE","mi-aplicacion-django.settings")
from fcgi import WSGIServer
#from django.core.handlers.wsgi import WSGIHandler
#WSGIServer(WSGIHandler()).run()
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
WSGIServer(application).run()
La aplicación de Django no se pone en el espacio web, en mi caso /volume1/mi-carpeta, dentro está mi aplicación Django.
Ya podemos acceder a nuestra aplicación Django en http://ip-nas/
http://zoia.org/2006/12/16/como-correr-django-y-python-usando-apache-y-fastcgi
https://docs.djangoproject.com/en/dev/howto/deployment/fastcgi/
Necesitamos del módulo mysql-python, para su instalación podemos seguir la entrada que ya se publicó en este mismo blog: http://ilizaran.blogspot.com.es/2014/09/instalacion-del-modulo-mysql-python-en.html
De la instalación de mysql-python ya tendremos instalado pip en el NAS por lo que podremos instalar Django con algunos módulos necesarios:
pip install Django
pip install setuptools
pip install flup
Para saber que la instalación de Django ha sido correcta y verificar la versión podemos realizar:
python
import django
django.VERSION
Ahora modifcamos la configuración de apache editando el fichero /etc/httpd/conf/httpd.conf-user para hacer accesible los ficheros css, imágenes y javascript de la parte administrativa de Django, por lo que añadimos:
Alias /static/admin /usr/local/packages/@appstore/Python/usr/local/lib/python2.7/site-packages/django/contrib/admin/static/admin
<Directory /usr/local/packages/@appstore/Python/usr/local/lib/python2.7/site-packages/django/contrib/admin/static/admin >
Order allow,deny
Allow from all
</Directory>
Dependiendo de donde se instale Django puede que esta configuración sea diferente, también se me ha dado el caso siguiente:
Alias /static/admin /lib/python2.7/site-packages/django/contrib/admin/static/admin
<Directory /lib/python2.7/site-packages/django/contrib/admin/static/admin >
Order allow,deny
Allow from all
</Directory>
Reiniciar apache desde el DSM para que surta efecto.
El resto de configuración de apache la podemos realizar mediante un fichero .htaccess, que lo tendremos que crear en la carpeta del alojamiento web de nuestro NAS. En mi caso la carpeta por defecto de alojamiento de páginas web es /volume1/web y ahí creo el fichero con el contenido:
AddHandler fastcgi-script .fcgi
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.fcgi/$1 [QSA,L]
Ahora creamos un pequeño script en python que situaremos en el espacio web (en mi caso /volume1/web/), para ver si FastCGI y python funcionan correctamente, lo llamamos por ejemplo test.fcgi:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
from cgi import escape
import sys, os
from flup.server.fcgi import WSGIServer
def app(environ, start_response):
start_response('200 OK', [('Content-Type', 'text/html')])
yield '<h1>FastCGI Environment</h1>'
yield '<table>'
for k, v in sorted(environ.items()):
yield '<tr><th>%s</th><td>%s</td></tr>' % (escape(k), escape(v))
yield '</table>'
WSGIServer(app).run()
Desde un navegador web indicamos http://mi-ip-nas/test.fcgi y debemos obtener la configuración del entorno FastCGI.
Ahora hay que configurar un puente entre FastCGI y Django para ello vamos obtener el script fcgi.py de Allan Saddi gracias a Keikubo (descargarlo de: https://github.com/keikubo/Python-FastCGI-Sample) y localizarlo en nuestro espacio web.
wget -nd https://github.com/keikubo/Python-FastCGI-Sample/archive/master.zip
unzip master.zip
mv Python-FastCGI-Sample-master/lib/fcgi.py /volume1/web
Ahora tenemos que crear el fichero que utiliza fcgi.py para lanzar nuestra aplicación Django, por ejemplo lo podemos llamar index.fcgi y contendrá:
#!/usr/bin/python
import sys, os
sys.path.append("/volume1/mi-carpeta/mi-aplicacion-django")
os.chdir("/volume1/mi-carpeta/mi-aplicacion-django")
os.environ.setdefault("DJANGO_SETTINGS_MODULE","mi-aplicacion-django.settings")
from fcgi import WSGIServer
#from django.core.handlers.wsgi import WSGIHandler
#WSGIServer(WSGIHandler()).run()
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
WSGIServer(application).run()
La aplicación de Django no se pone en el espacio web, en mi caso /volume1/mi-carpeta, dentro está mi aplicación Django.
Ya podemos acceder a nuestra aplicación Django en http://ip-nas/
Fuentes de información utilizadas:
http://forum.synology.com/enu/viewtopic.php?f=40&t=18423http://zoia.org/2006/12/16/como-correr-django-y-python-usando-apache-y-fastcgi
https://docs.djangoproject.com/en/dev/howto/deployment/fastcgi/
Comentarios