Cuando se trata de iniciar un desarrollo de software lo más complicado es tener el entorno de desarrollo listo y en esto se puede perder mucho tiempo. Una solución es utilizar Vagrant. Con esta herramienta puedes tener un entorno listo en cuestión de minutos y aquí te digo como implementar un entorno de desarrollo para Python 3 y Django 2.x en Ubuntu Server 18.04 usando Vagrant.
Python 3 y Django en Ubuntu 18.04 con Vagrant
Daremos por sentado que tienes Virtual Box y Vagrant instalados y funcionando en tu equipo y suponemos que utilizas un cliente Linux que puede ser cualquier distribución como Ubuntu, Linux Mint, Manjaro o Debian.
Lo primero que tenemos que hacer es asignar un directorio para tu proyecto, por ejemplo, yo lo ubiqué dentro de la carpeta personal en la ruta ~/Development/django_basic_app/ y en esta carpeta se necesitan crear dos archivos llamado Vagrant y provision.sh
El archivo Vagrant contiene la configuración de la máquina virtual que servirá como entorno de desarrollo y permitirá operar la aplicación simulando el entorno de producción en el que se supone deberá correr la aplicación. Crea un archivo con este nombre y agrega el siguiente código:
Vagrant.configure("2") do |config| config.vm.box = "ubuntu/bionic64" config.vm.network "forwarded_port", guest: 80, host: 8080 config.vm.network "forwarded_port", guest: 3306, host: 33306 config.vm.network "private_network", ip: "10.4.4.51" config.vm.synced_folder "./django" , "/var/www/django", nfs: true, nfs_version: 3, nfs_udp: false config.vm.provider "virtualbox" do |vb| # Display the VirtualBox GUI when booting the machine vb.gui = false # Customize the amount of memory on the VM: vb.customize ["modifyvm", :id, "--memory", "1024"] vb.customize ["modifyvm", :id, "--cpuexecutioncap", "95"] vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"] vb.customize ["modifyvm", :id, "--natdnsproxy1", "on"] end config.ssh.shell = "bash -c 'BASH_ENV=/etc/profile exec bash'" # install some base packages config.vm.provision :shell, :path => "provision.sh" end
El siguiente archivo es el provision.sh que contiene los comandos para instalar y configurar el software que tendrá el entorno de desarrollo para agilizar su despliegue para uno o más desarrolladores. Crea un archivo con este nombre y agrega el código siguiente:
#!/usr/bin/env bash export DEBIAN_FRONTEND=noninteractive # update package list sudo apt update -q sudo apt upgrade -y sudo apt install debconf-utils sudo apt install python3-pip -y sudo apt install python3-dev libmysqlclient-dev libpq-dev -y sudo -H pip3 install virtualenv mkdir /home/vagrant/.virtualenvs sudo -H pip3 install virtualenvwrapper sudo -H pip3 install pipenv # update profile sudo cat >> /home/vagrant/.bash_profile <<'EOF' export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3.6 # Virtual Env export WORKON_HOME=~/.virtualenvs . /usr/local/bin/virtualenvwrapper.sh # Aliases alias rundjango="python manage.py runserver 0.0.0.0:8000" EOF sudo chown vagrant:vagrant /home/vagrant/.*
Esto archivos también los puedes descargar desde este repositorio en GitHub.
Observa que para arrancar el servidor de Django se tiene que ejecutar con el comando python manage.py runserver 0.0.0.0:8000 pero a mi me parece engorroso y he decidido crear un alias para que este comando se ejcute cuando tecleé «rundjango» por eso he incluido este alias en el archivo provision.sh
# Aliases alias rundjango="python manage.py runserver 0.0.0.0:8000"
Arrancar el entorno de Desarrollo con Ubuntu Server 18.04 Bionic
Una vez que tengas los archivos configurados puedes arrancar la máquina virtual y acceder a ella con los siguientes comandos:
vagrant up vagrant ssh
Una vez que ingreses a la máquina virtual necesitas instalar y configurar la base de datos.
sudo apt install mariadb-server mariadb-client sudo mysql_secure_installation
Al asegurar la instalación debes proveer las respuestas como se muestra en el ejemplo:
Enter current password for root (enter for none): Solo presiona Enter
Set root password? [Y/n]: Y
New password: pass1234
Re-enter new password: pass1234
Remove anonymous users? [Y/n]: Y
Disallow root login remotely? [Y/n]: Y
Remove test database and access to it? [Y/n]: Y
Reload privilege tables now? [Y/n]: Y
Una vez asegurada la instalación solo ingresa a la terminal de Mysql para crear la base de datos:
sudo mysql
Para crear la base de datos y el usuario con privilegios para usar esta base de datos.
CREATE DATABASE django_db; CREATE USER 'django_user'@'localhost' IDENTIFIED BY 'pass1234'; GRANT ALL PRIVILEGES ON django_db.* TO 'django_user'@'localhost'; FLUSH PRIVILEGES;
Crear el Entorno Virtual
El siguiente paso es crear un entorno virtual para Python 3 y poder instalar los módulos necesarios
cd /var/www/django/ mkvirtualenv env
Edita el archivo /home/vagrant/.virtualenvs/env/bin/postactivate y agrega al final esta línea de texto:
cd /var/www/django/
Luego sal del entorno virtual con el siguiente comando:
deactivate
Instalar los Módulos de Python
Para crear el proyecto de Django que vas a desarrollar necesitas tener instalados al menos los módulos de python django y mysqlclient.
workon env pip3 install django pip3 install mysqlclient
Una vez que están instalados los módulos puedes usar el Framework Django y la base de datos mysql con Python mediante este framework. El siguiente paso es instalar el proyecto.
django-admin startproject django_project
Dentro del proyecto debes instalar tu aplicación core
cd django_project/ python manage.py startapp core
Prueba que tu el servidor Django arranca, para ejecutarlo usa el comando
rundjango
Recuerda que este es un alias que se ha creado mediante el script provision.sh. Si ves una salida de texto como la siguiente, significa que todo está funcionando correctamente.
Performing system checks... System check identified no issues (0 silenced). You have 14 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions. Run 'python manage.py migrate' to apply them. April 13, 2018 - 17:50:40 Django version 2.0.4, using settings 'django_project.settings' Starting development server at http://0.0.0.0:8000/ Quit the server with CONTROL-C.
Presiona Ctrl+C para detener el servidor de Django y aplica la migration de la base de datos para que se creen las tablas y los datos iniciales.
python manage.py migrate
Aprovecha para crear el superuser del sistema, solo crear un nombre de usuario como «admin» o el que tu quieras, indica un email el blanco y una contraseña.
python manage.py createsuperuser
Listo tu Entorno de Desarrollo para tu nuevo proyecto con Django está listo para crear tu nueva aplicación. Solo tienes que ejecutar el servidor
rundjango
y abrir la URL http://10.4.4.51:8000/ y debes ver una pantalla como la siguiente imagen: