Django over Vagrant

Configuración de un entorno Django sobre Vagrant

4 noviembre, 2014

Esta entrada pretende ser una guia paso a paso de cómo configurar un entorno de desarrollo de Django. Podéis leer esta entrada anterior para conocer Vagrant. Elementos instalados en esta guía:

Vamos a editar Vagrantfile y crear un nuevo archivo script para automatizar el aprovisionamiento de nuestra máquina Vagrant. Añadimos al Vagrantfile:

config.vm.provision :shell, :path => "vagrant-bootstrap.sh"
config.vm.network "forwarded_port", guest: 80, host: 8080
config.vm.network "forwarded_port", guest: 8000, host: 8081

Como vamos a estar corriendo PHP sobre Apache tenemos que remitir el puerto 80 hacia el puerto 8080. El reenvío de puerto 8000 es para el proyecto de Django como demostraré más adelante.

A continuación, creamos el archivo vagrant-bootstrap.sh en la misma carpeta que Vagrantfile:

#!/usr/bin/env bash

apt-get update
apt-get -y upgrade

apt-get install -y git subversion curl vim screen ssh
apt-get install -y lynx links links2

######################### apache2 #########################
apt-get install -y apache2
rm -rf /var/www
ln -fs /vagrant /var/www

apt-get install -y libapache2-mod-wsgi

######################### PHP #########################
apt-get install -y php5-cli php5-curl php5-mcrypt php5-gd
mv -i /etc/php5/conf.d/mcrypt.ini /etc/php5/mods-available/
php5enmod mcrypt

######################### Python #########################
apt-get -y install python-pip python-dev build-essential python-virtualenv

######################### MySQL #########################
MYSQL_PASSWORD="django"

echo "mysql-server-5.5 mysql-server/root_password password $MYSQL_PASSWORD" | debconf-set-selections
echo "mysql-server-5.5 mysql-server/root_password_again password $MYSQL_PASSWORD" | debconf-set-selections

apt-get -y install mysql-client mysql-server sqlite3 
apt-get -y install python-mysqldb libmysqlclient-dev python-mysql.connector python3-mysql.connector

######################### phpmyadmin #########################
SYS_PASSWORD="vagrant"

echo "phpmyadmin phpmyadmin/dbconfig-install boolean false" | debconf-set-selections
echo "phpmyadmin phpmyadmin/reconfigure-webserver multiselect apache2" | debconf-set-selections

echo "phpmyadmin phpmyadmin/app-password-confirm password $SYS_PASSWORD" | debconf-set-selections
echo "phpmyadmin phpmyadmin/mysql/admin-pass password $MYSQL_PASSWORD" | debconf-set-selections
echo "phpmyadmin phpmyadmin/password-confirm password $SYS_PASSWORD" | debconf-set-selections
echo "phpmyadmin phpmyadmin/setup-password password $SYS_PASSWORD" | debconf-set-selections
echo "phpmyadmin phpmyadmin/database-type select mysql" | debconf-set-selections
echo "phpmyadmin phpmyadmin/mysql/app-pass password $SYS_PASSWORD" | debconf-set-selections

echo "dbconfig-common dbconfig-common/mysql/app-pass password $SYS_PASSWORD" | debconf-set-selections
echo "dbconfig-common dbconfig-common/mysql/app-pass password" | debconf-set-selections
echo "dbconfig-common dbconfig-common/password-confirm password $SYS_PASSWORD" | debconf-set-selections
echo "dbconfig-common dbconfig-common/app-password-confirm password $SYS_PASSWORD" | debconf-set-selections
echo "dbconfig-common dbconfig-common/app-password-confirm password $SYS_PASSWORD" | debconf-set-selections
echo "dbconfig-common dbconfig-common/password-confirm password $SYS_PASSWORD" | debconf-set-selections

apt-get -y install phpmyadmin

######################### Restart services #########################

service apache2 restart
service mysql restart

######################### Django environment #########################

cd /vagrant
mkdir apps
cd apps
virtualenv venv
source venv/bin/activate
pip install django
pip install MySQL-python
deactivate

Once provisioned we can enter our Vagrant machine and create our fist app:

cd /vagrant/apps
source venv/bin/activate
django-admin.py startproject app1
deactivate

Hago este último paso de forma totalmente independiente, porque me gusta crear proyectos Django manualmente.

Configuramos la base de datos tal como se indica en la documentación oficial utilizando el nombre de usuario/contraseña proporcionada en el vagrant-bootstrap.sh.

A continuación, podemos crear el archivo start.sh con permisos 760:

#!/usr/bin/env bash
cd app/
source venv/bin/activate
python app1/manage.py runserver 0.0.0.0:8000

Ejecutamos este archivo para iniciar el proyecto de Django en el puerto 8000 y como mostré anteriormente ya lo tenemos apuntando al puerto 8081. Abrimos un navegador y escribimos http://localhost: 8081. Ya tenemos un proyecto Django corriendo y deberíamos ver esto:
Running Django project
Podemos continuar con la personalización de la instalación, leyendo este sitio web: fullstackpython

    Etiquetas: , , , , , ,

    2 comentarios

    1. John dice:

      This is an awesome tutorial. Although, it isn’t production ready of course. I am wondering if you could possible create a tutorial with a Vagrant, Apache, and Django stack with HTTPS redirects. That would be awesome!

    Dejar un comentario