Ir al contenido principal

Desplegando aplicaciones django en Ubuntu 12.04 con un servidor web Apache y el módulo mod_wsgi

Empezaremos por la instalación del software necesario, posiblemente alguno ya se encuentre instalado en nuestro equipo:


sudo apt-get install python
sudo apt-get install python-mysqldb 
sudo apt-get install apache2 libapache2-mod-wsgi
sudo apt-get install mysql-server  
sudo easy_install -U distribute
sudo pip install django 

Verificamos la correcta instalación de django, para ello vemos la versión instalada (actualmente la 1.5.2):
 
django-admin --version


Crear la base de datos y el usuario de mysql que utiliza nuestro proyecto. Una vez conectados a mysql como administrador (root) indicaremos las siguientes ordenes:

mysql>CREATE DATABASE mi_base_de_datos;
mysql>CREATE USER 'mi_usuario'@'localhost' IDENTIFIED BY 'mi_clave';
mysql>GRANT ALL PRIVILEGES ON mi_base_de_datos.* TO 'mi_usuario'@'localhost';
mysql>FLUSH PRIVILEGES;

Copiamos o creamos el proyecto Django, en el caso que sea un proyecto nuevo:

$django-admin startproject mi_proyecto
$cd mi_proyecto
$python manage.py startapp mi_aplicacion

Editamos el fichero de configuración del proyecto (mi_proyecto/settings.py) para adaptar los valores al nuevo equipo, quedaría así:


DEBUG = False
TEMPLATE_DEBUG = DEBUG

ADMINS = (
    # ('Your Name', 'your_email@example.com'),
)

MANAGERS = ADMINS

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': 'mi_base_de_datos',                      # Or path to database file if using sqlite3.
        'USER': 'mi_usuario',                      # Not used with sqlite3.
        'PASSWORD': 'mi_clave',                  # Not used with sqlite3.
        'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.
        'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
    }
}

ALLOWED_HOSTS = ['midominio.es']

TIME_ZONE = 'Europe/Madrid'

LANGUAGE_CODE = 'es-es'

SITE_ID = 1

USE_I18N = True

USE_L10N = True

SE_TZ = True

MEDIA_ROOT = ''

MEDIA_URL = ''

STATIC_ROOT = ''

STATIC_URL = '/static/' 
 
ADMIN_MEDIA_PREFIX ='/static/admin/'
 
STATICFILES_DIRS = (
)

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
#    'django.contrib.staticfiles.finders.DefaultStorageFinder',
)

TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.Loader',
    'django.template.loaders.app_directories.Loader',
#     'django.template.loaders.eggs.Loader',
)

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    # Uncomment the next line for simple clickjacking protection:
)

ROOT_URLCONF = 'mi_proyecto.urls'

WSGI_APPLICATION = 'mi_proyecto.wsgi.application'

TEMPLATE_DIRS = (
    '/home/usuario/mi_proyecto/mi_aplicacion/templates' 
    # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
)

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # Uncomment the next line to enable the admin:
     'django.contrib.admin',
     'mi_aplicacion',
    # Uncomment the next line to enable admin documentation:
    # 'django.contrib.admindocs',
)
                  
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'filters': {
        'require_debug_false': {
            '()': 'django.utils.log.RequireDebugFalse'
        }
    },
    'handlers': {
        'mail_admins': {
            'level': 'ERROR',
            'filters': ['require_debug_false'],
            'class': 'django.utils.log.AdminEmailHandler'
        }
    },
    'loggers': {
        'django.request': {
            'handlers': ['mail_admins'],
            'level': 'ERROR',
            'propagate': True,
        },
    }
}
                  
Si se trata de un proyecto nuevo, creamos las tablas de la base de datos y el usuario administrador mediante:


python manage.py syncdb

Podemos verificar el correcto funcionamiento del proyecto lanzando el servidor web de desarrollo de django. Para que funcione correctamente el servidor de desarrollo en el fichero de configuración tendremos que indicar Debug=True, en caso contrario obtendremos '500 server error':


python manage.py runserver 192.168.0.1:8001


Editamos el fichero de configuración de Apache  /etc/apache2/sites-available/default para indicar dentro del <VirtualHost *:80> la configuración del módulo mod_wsgi.

El fichero quedaría así:

<VirtualHost *:80>
        ServerAdmin webmaster@localhost

        WSGIDaemonProcess miproyecto python-path=/home/usuario/mi_proyecto/
        WSGIProcessGroup miproyecto
        WSGIScriptAlias / /home/usuario/mi_proyecto/mi_proyecto/wsgi.py
 
        Alias /static/admin/ /usr/local/lib/python2.7/dist-packages/django/contrib/admin/static/admin/
               
        <Directory /usr/local/lib/python2.7/dist-packages/django/contrib/admin/static/admin>
            Order allow,deny
            Allow from all
        </Directory>
 
        <Directory /home/usuario/mi_proyecto/mi_proyecto>
        <Files wsgi.py>
        Order deny,allow
        Allow from all
        </Files>
        </Directory> 
 
        ErrorLog ${APACHE_LOG_DIR}/error.log
        LogLevel warn
        CustomLog ${APACHE_LOG_DIR}/access.log combined
 
</VirtualHost> 
 
Reiniciamos el servidor apache y ya estaría listo:

 sudo service apache2 restart

Comentarios

Entradas populares de este blog

Instalación Django en NAS Synology con FastCGI

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

Calcular en Mysql el primer y último día del mes

SELECT DATE_FORMAT(now(),'%Y-%m-01') AS first_day; SELECT date_add(date_add(LAST_DAY(now()),interval 1 DAY),interval -1 MONTH) AS first_day; SELECT LAST_DAY(now()) AS last_day; Calcular en Mysql el primer y último día del mes anterior: SELECT date_add(date_add(LAST_DAY(now()),interval 1 DAY),interval -2 MONTH) AS first_day; SELECT LAST_DAY(date_add(last_day(now()),interval -1 MONTH)) AS last_day;

Instalación del módulo mysql-python en NAS Synology

Instalar gcc en Synology Para la instalación de mysql-python es necesario el compilador gcc, por lo que lo obtendremos de Synology Open Source Project (http://sourceforge.net/projects/dsgpl). El paquete a descargar dependerá de la versión de NAS Synology que tengamos, por lo que tendremos que utilizara el comando: uname -a para conocer la versión de nuestro kernel y arquitectura instalada y descargar el paquete correspondiente. En mi caso he descargado: gcc463_glibc213_i686_cedarview-GPL.tgz pues mi equipo muestra cedarview y i686. Ahora lo descargamos y lo extraemos: cd /usr/local http://kent.dl.sourceforge.net/project/dsgpl/DSM%205.2%20Tool%20Chains/Intel%20x86%20Linux%203.2.40%20%28Cedarview%29/cedarview-gcc463_glibc213_i686_patched-GPL.txz tar -xvJf cedarview-gcc463_glibc213_i686_patched-GPL.txz rm cedarview-gcc463_glibc213_i686_patched-GPL.txz Instalación de las fuentes de Mysql Synology utiliza MariaDB, pero para la compilación del módulo de python podemos utiliz