Ander San Miguel

Desarrollador Web

29/04/2017

Preparando un entorno de desarrollo

No acabaría nunca si empezara a contar el número de veces que he tenido que instalar un entorno de desarrollo (para mi y para otra gente).

No es algo difícil, es incluso menos si lo tienes documentado, pero al final, y no importa que o como, siempre hay algo que cambia y/o se olvida. También importante que es un rollo, y vamos si tienes que gestionar proyectos con diferentes versiones de librerías o programas ya ni te cuento.

Y entonces llegó Docker.

Es una manera genial de gestionar dependencias en base a cada proyecto, es muy fácil también, además hay infinitas imágenes preparadas para cualquier cosa. Un día mientras estaba leyendo sobre docker en el internet me encontré con un artículo de utilizar binarios dockerizados (no recuerdo la fuente), en su momento me moló bastante la idea y entonces cuando (oh, horror) me mangaron el portátil me propuse utilizar docker para todo. Bueno, primero me propuse intentar utilizar windows, que he leído que puede molar, pero nope, no aguanté ni dos semanas (y eso que me parecía un buen sistema, y rapidísimo). Pero nada, linux: permite hacer de todo, no falla y (será porque estoy acostumbrado) es mucho más fácil de usar.

Entonces, tengo un linux pelado, bueno, con su entorno de ventanas y eso, que cada vez menos, pero de vez en cuando también uso el ratón. Y me pongo a instalar cosas: git, docker, gvim y ya está, no necesito nada más. Es mentira claro, necesito un montón de cosas más pero son relativas al tipo de proyectos en los que suelo trabajar y/o tengo que mantener:

  1. Configuraciones varias: bash y vim principalmente.
  2. PHP: un binario para consola y composer.
  3. Node.js: el binario y npm, claro.
  4. Otras cosas que no son extrictamente necesarias pero es bueno tenerlas.

Configuraciones varias

Pues tengo mi repositorio de dotfiles, que tengo que dedicar un rato a actualizar pero que de base me sigue valiendo. Clonar, enlazar y hecho.

PHP

Añadir un alias a bash (si no lo tuviera añadido ya en mi dotfiles...) para el binario y otro para composer:

alias php='docker run -it --rm -v "$PWD":/usr/src/myapp -w /usr/src/myapp php:7.0-cli php'
alias composer='docker run --rm -v $(pwd):/app composer/composer'

Node

Pues parecido, es una de las cosas que molan de este sistema, todo existe en docker: https://github.com/nodejs/docker-node

dnsmasq

Aquí tenía mirado utilizar docker para tener dnsmasq, pero mi linux (Linux Mint, todas las distros basadas en Ubuntu, creo) venía con una mini versión y me basta con añadir mi dominio de desarrollo local (.dev) y que reolviera siempre a localhost, luego tengo un proxy inverso que hace unas magias y como en cada proyecto le digo que nombre tiene pues meto la url: http://proyecto.dev en el navegador y ya funciona todo.

Para dnsmasq, en la configuración añadir:

address=/dev/127.0.0.1

Y para el proxy:

alias proxy="docker run -d -p 80:80 -v /var/run/docker.sock:/tmp/docker.sock:ro jwilder/nginx-proxy"

Luego, en cada proyecto tengo que asegurarme de que el proxy sabe que tiene que resolver el dominio, suelo usar docker-compose, así que además de la configuración básica me tengo que asegurar de un par de cosas: tengo que usar la misma red, que docker ahora crea una red por cada instancia, eso es con network_mode y luego tengo que añadir una variable de entorno para que el proxy sepa que dominio es. Un ejemplo básico de un wordpress:


version: '2'

services:
  web:
    depends_on:
      - db
    links:
      - db:mysql
    image: chialab/php:5.6-apache
    volumes:
      - .:/var/www/html
    environment:
      - VIRTUAL_HOST=proyecto.dev
    expose:
      - "80"
    network_mode: "bridge"
  db:
    image: mysql:5.6
    volumes:
      - db_data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: proyecto
      MYSQL_USER: user
      MYSQL_PASSWORD: pass
    network_mode: "bridge"

volumes:
    db_data:

No estoy seguro de si es mejor utilizar Docker para todo, pero sienta bien, es como más natural para mí hacerlo así, que igual en el futuro no lo vuelvo a hacer así, epro de momento no me ha dado ningún problema, así que me lo quedo.

Desarrollo Web

Esto es a lo que me dedico, así que es lo que más vas a encontrar en esta página.

Contacto

Esta sección está clara, si quieres contactar conmigo, este es un buen sitio.