Etiqueta : php

Docker para desarollo

post image

Por David González
Big Data Manager de OpenSistemas

¿Cuanto tiempo invertimos en montar los entornos de desarrollo? Una persona experimentada, puede montar un entorno LAMP en apenas 15 minutos, pero no siempre estamos ante este tipo de perfiles, pudiendo provocarse cuellos de botellas que implican distracciones de tareas más importantes para los miembros senior. Incluso en ocasiones, la complejidad del proyecto es tal, que un perfil de estas características puede necesitar un tiempo para aclimatarse. Supongamos un proyecto que realizamos hace un par de años y que comienza su segunda fase, es necesario recurrir a la documentación (en el mejor de los casos) para ver las librerías y las versiones necesarias, obligando a veces a modificar el entorno actual.

 

No hay que olvidar que muchas personas trabajan en varios proyectos, en este caso la situación  se agrava, supongamos que para uno de los proyectos se utilizan diferentes versiones de PHP y de MySQL, no es tan trivial el manejo, y muchas veces se opta por una versión que no es la indicada porque el desarrollo funciona, esto puede acarrear problemas en el futuro, ya que los desarrollos que realiza podrían no funcionar posteriormente con la versión oficial del proyecto.

Docker al rescate!

En la mayoría de las empresas se desarrolla sobre un control de versiones (me gustaría poder decir que en todas), utilizando todo el equipo un mismo repositorio donde van agregando las funcionalidades. ¿No sería genial que al descargar el repositorio, ya tuviéramos todo lo necesario para trabajar?… ojalá, pero descargarse todo el entorno de desarrollo es demasiado costoso, una imagen que contenga la foto completa puede ocupar cientos de MB. Sin embargo utilizando docker-compose, podemos guardar la “foto” de un entorno completo en pocos MB (incluso < 1MB)… Además, estos ficheros son texto plano, nuestro control de versiones podría informamos de cualquier cambio en la arquitectura. La cosa se pone interesante, manos a la obra:

 

Supongamos el siguiente repositorio git:

+ app

+ test

 

Añadamos nuestra carpeta de docker:

+ app

+ test

+ docker

 

Queremos montar un entorno LAMP, así que vamos a crear una arquitectura de contenedores con Apache, PHP y MySQL. Vamos a definirlo en nuestro docker-compose.yml:

 

version: ‘2’

services:

mysql:

image: mysql

container_name: app_mysql

environment:

MYSQL_ROOT_PASSWORD: root

ports:

– ‘3306:3306′

volumes:

– db:/var/lib/mysql

php:

image: php:7-apache

container_name: app_php

ports:

– ’80:80’

volumes:

– ../app:/var/www/html

depends_on:

– mysql

extra_hosts:

– “local.app.com:127.0.0.1”

volumes:

db:

 

Si ejecutaremos “docker-compose up”, crearíamos dos contenedores, uno con PHP y Apache, y otro con MySQL. Al primero podríamos acceder por el puerto 80 desde nuestro ordenador, y al segundo accederíamos tanto desde nuestro ordenador por el 3306 como desde el primer contenedor.

 

En el primer contenedor hemos montado un volumen, que tiene nuestro código (versionado 😉). Esto es genial porque no es una foto del momento en el que se creó el contenedor, sino una referencia. Es decir, suponiendo que usamos Git, si hacemos un Git Pull, vamos a ver los cambios inmediatamente en nuestro navegador.

 

Por desgracia, esto no sirve de mucho, seguramente necesitemos habilitar algún mod de Apache, o utilizar un virtual host, o cualquier cambio de configuración que no este incluido en la imagen oficial… No os preocupéis, vamos a crear nuestras propias imágenes (mejor, nuestras propias definiciones de imágenes, y también estarán versionadas.

 

Recordemos en que punto estamos, y añadamos un par de carpetas:

 

+ app

+ test
– docker

– docker-compose.yml

+ php

+ mysql

 

Modificamos nuestro docker-compose.yml para decirle que la imagen va a ser construida:

 

version: ‘2’

services:

mysql:

build: ./mysql

container_name: app_mysql

environment:

MYSQL_ROOT_PASSWORD: root

ports:

– ‘3306:3306′

volumes:

– db:/var/lib/mysql

php:

build: ./php

container_name: app_php

ports:

– ’80:80’

volumes:

– ../app:/var/www/html

depends_on:

– mysql

extra_hosts:

– “local.app.com:127.0.0.1”

volumes:

db:

 

Ahora, vamos a por nuestros docker files, empezamos por el sencillo, mysql:

 

FROM mysql:5.7

#COPY ./my.cnf /etc/mysql/conf.d/

 

Este docker file realmente no hace nada, podíamos haber dejado la imagen como estaba, pero si quisierais meter una configuración especial, bastaría con desconectar esa linea y meter el fichero en la carpeta. Ahora vamos con el siguiente php+apache:

 

FROM php:7-apache

ADD app.conf /etc/apache2/sites-enabled/app.conf

COPY php.ini /usr/local/etc/php/

RUN a2enmod rewrite

RUN apt-get update \

&& apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libpng12-dev libmcrypt-dev \

&& docker-php-ext-install pdo_mysql mysqli mbstring gd iconv mcrypt

 

Esto ya es otra historia, veamos que hace cada linea:

  • Añadimos el fichero del virtual host al contenedor
  • Remplazamos el php.ini por uno propio
  • Habilitamos el módulo rewrite
  • Instalamos las librerías necesarias para el correcto funcionamiento de la aplicación.
Finalmente tendríamos la siguiente estructura:

+ app

+ test
– docker
  – docker-compose.yml
  – php

– Dockerfile

– php.ini

– app.conf

– mysql

– Dockerfile

– my.cnf

 

Ahora si, ejecutando “docker-compose up -d” tendremos todo nuestro entorno montado!

 

Espero que os haya gustado, pero sobre todo que os sea de utilidad. Me gustaría acabar el post diciendo los siguientes pasos que se me ocurren, y que pueden ser interesantes. Por un lado, generalizarlo y crear configuraciones específicas para cada tipo e proyecto (LAMP, Node+MongoDB, Niginx…), así al descargar un repositorio vacío de un proyecto X, ya tendríamos el 80% del entorno montado y solo tendriamos que personalizarlo. Y por otro lado, utilizarlo como entorno de desarrollo “no local”, aprovechando los driver que nos ofrece Docker-Machine, haciendo muy sencillo crear la misma infraestructura en la nube.

 

Nota: Prestad atención a los nombres de los ficheros y aseguraos de tener los puertos libres. Aquí podéis descargar una carcasa de la parte de Docker de prueba.

Laravel, una apuesta segura para grandes desarrollos

Por Tamara Osona
Developer en OpenSistemas

Laravel es un framework de código abierto, bajo licencia MIT, para desarrollar apliaciones PHP de un modo mucho más rápido, ágil y sobre todo de calidad. En Laravel se emplea el más que conocido patrón de diseño MVC.

Es fácil de aprender y ofrece una interesante propuesta, especialmente para los desarrolladores que estén buscando una herramienta eficiente y de rápido aprendizaje en el desarrollo web. Además, incorpora el gestor de paquetes Composer que nos permite tener al día nuestras librerías.
(más…)

Divagando… Cuando algo es gratis, el producto eres tú

Por Néstor Chacón
Sysadmin de OpenSistemas

Facebook, Google, Twitter, Amazon  y otros tantos viven y negocian de lo que recaban de ti: con quién hablas, cuándo lo haces, qué temas tratas, cuál es tu patrón de uso, qué cosas te agradan o desagradan, qué buscas, qué compras, etc.

Eso por no mencionar la monitorización y espionaje que realizan las diversas agencias gubernamentales. Este escenario que parece haberse normalizado entre los individuos cobra especial relevancia a nivel empresarial, donde se observa una tendencia cada vez mayor hacia el cloud computing.

(más…)

A vueltas con la tecnología de integración

Por Jose Ignacio Yarza Vidal
Project Manager de OpenSistemas

En este post voy a contar brevemente la experiencia que hemos tenido integrando dos productos con tecnologías diferentes como son JavaEE y PHP.

En un proyecto reciente había que integrar un gestor de contenidos (CMS – Nuxeo DAM, tecnología JavaEE) con un sistema de eLearning (LMS – Dokeos, tecnología PHP). El uso que se le iba a dar al CMS era como repositorio y reproductor de contenidos multimedia, en particular vídeo. Se trataba de almacenar vídeos con sus metadatos y luego reproducirlos desde las páginas del LMS. (más…)

Las pruebas funcionales para el éxito de los proyectos

por Fernando Monera
I+D y nuevos negocios en OpenSistemas

Para alcanzar el éxito de un proyecto de software es imprescindible diseñar un plan de pruebas funcionales de calidad. Este plan de pruebas debe: cubrir todos y cada uno de los requisitos funcionales; y en los procesos críticos, reproducir todos los posibles escenarios que puedan afectar. (más…)

Diario de un becario en OpenSistemas

Becario Open sistemas

Mi andadura en Open sistemas empezó hace un año aproximadamente. En su momento y gracias al consejo de un compañero de carrera y amigo, acepté una beca de formación para trabajar aquí, y con el paso del tiempo he ido renovando mis periodos hasta completar un año entero en la empresa.

Anteriormente a Open sistemas, trabajé en otras empresas del sector, pero os puedo asegurar que la experiencia en Open sistemas es única por muchos aspectos.

En primer lugar, es una empresa pequeña donde los empleados crean un entorno magnifico para el desarrollo laboral. Todos poseen un nivel de conocimientos muy alto y están siempre dispuestos a compartir sus ideas, trucos y puntos de vista. La comunicación y el trabajo en equipo es algo que se respira nada mas entrar en la oficina.

En segundo lugar, trabajamos con una gran variedad de tecnologías open source, que te permiten incrementar tu aprendizaje en diferentes áreas del sector. En mi caso, al entrar en la empresa trabajé en un entorno E-learning. Tras un pequeño periodo empecé a colaborar en un proyecto de Business Intelligence – Oracle, y a su vez en la instalación, desarrollo y personalización de webs basadas en la herramienta Joomla, especialmente recuerdo la integración para un MySql Server. Desde hace unos meses empece a trabajar con Magento, una herramienta para la creación de tiendas online. En todo momento he variado de tecnología y lo mas importante siempre te empapas del trabajo de tus compañeros, lo cual hace que te familiarices con los entornos en los que trabajan ellos también. Open sistemas ademas te brinda la oportunidad de asistir a cursos o eventos de herramientas open source que son de gran ayuda.

Por último, quiero destacar el nivel de responsabilidad y la presencia en la empresa. Es una empresa donde a pesar de ser becario, tras un periodo de aprendizaje, puedes llegar a tener una importancia muy alta en el desarrollo de algún proyecto, realizando tareas de gran envergadura o tratando con clientes de forma directa, y no como suele ser habitual en otras empresas del sector, donde a un becario se le suelen asignar tareas monótonas y sin importancia. Siempre tienes que mostrar compromiso con los proyectos que dependen de ti y esto es un factor que me ha permitido desarrollarme profesionalmente.

Para concluir, decir que ha sido un año muy importante para mi en el aspecto profesional, y dar las gracias a las personas que conforman Open sistemas por la oportunidad que he tenido de estar en esta empresa creciendo como persona y como informático.

Becas en Open Sistemas

En Opensistemas estamos buscando personas interesadas en acceder a una beca de formación en Sistemas o Desarrollo, dentro de nuestra empresa. Los perfiles buscados se detallan más abajo. Las condiciones generales son:

  • 25 horas semanales.
  • Prácticas en la sede de Opensistemas (Madrid, C/ Castrobarto 10).
  • Requisitos: Estudiante de últimos cursos de Ing. Técnica o Grado de Informática, Telecomunicaciones o afines.
  • Dotación: 550 euros / mes.

Las características de los perfiles son:

Administración de sistemas. (1 vacante)

El estudiante se incorporará a un equipo de trabajo administrando entornos de máquinas Linux y desarrollando proyectos en el ámbito de la integración de sistemas usando para ello tecnologías de software libre. Se requiere cierto conocimiento en este tipo de tecnologías, ganas de aprender y trabajar y buena capacidad de trabajo en equipo.

Requisitos específicos:

  • Conocimientos de sistema operativo Linux a nivel de administración.
  • lenguajes de scripting ( bash, python, perl )
  • conocimientos de redes y entornos TCP/IP
  • conocimientos en servicios de red ( DHCP, SNMP, DNS, … )
  • conocimientos de alguna base de datos libre (MySQL, PostgreSQL…)
  • ganas de aprender

Si tienes interés en este perfil, por favor envía tu CV y razones para optar a la beca, a jjamor_en_opensistemas.com.

Desarrollador entornos LAMP. (2 vacantes)

El estudiante se incorporará a un equipo de trabajo desarrollando proyectos en el ámbito web usando tecnologías Open Source, PHP y de Gestión de Contenidos web.

Requisitos específicos:

  • Conocimientos de desarrollo en PHP y MySQL.
  • Conocimientos en gestores de contenidos (CMS), como Joomla.
  • Nivel medio con Linux.
  • Capacidad de trabajo en equipo, proactividad, comunicación y ganas de aprender.
  • Conocimientos de base solidos en programacion y desarrollo software o algún framework de desarrollo.

Si tienes interés en este perfil, por favor envía tu CV y razones para optar a la beca, a lflores_en_opensistemas.com.

También puedes pedir más información sobre cualquiera de las becas en el 902 10 73 96.

Muchas gracias!

___
Publicado simultáneamente en el Blog de DrAmor.
http://dramor.net/blog