PHP 7.2 + mcrypt en Mac OSX Sierra

Como putee por encontrar esto, ahora lo comparto, y me lo guardo… como siempre.

Supongo que tienen instalado PHP con Homebrew, ahora tenemos que hacer funcionar mcrypt por alguna dependencia de un paquete no actualizado.

Bueno, PHP no lo tiene como paquete oficial, pero esta en PECL. El otro problema es que hay que tener instalada la libreria mcrypt para que cuando PECL lo compile encuentre las cabeceras.

Tampoco es dificil, solo no esta muy bien documentado que digamos.

luego… hacemos la magia de PECL

Somos felices…

PHP 7+ en Debian Jessie y Stretch

Es fácil no tengo ganas de escribir, aca esta la papa:

https://packages.sury.org

Por lo que leí es un maintener de Debian, así que tiene un buen nivel de confiabilidad (no dejen de chequearlo ustedes).

Para sacar andando los repos… todo lo que necesitan es el siguiente README:

https://packages.sury.org/php/README.txt

Ok, me compadeci y agregue una lineas extras…

PHP CLI ya levanto todo bien desde el apt-get install.

 

Nos vemos…

 

 

Instalar Redmine usando Docker

La instalación de Redmine suele ser medio un dolor de cabeza si no estas en el palo de Ruby.

No quise sufrir está vez y lo levante desde un container de Docker especificamente de Redmine.

Basándome en la documentación del link anterior, mejore algunas configuraciones para extraer los datos que maneja el sistema de adentro del contenedor (no esta bueno dejar datos que uno quiere persistir dentro del contenedor).

¿Como lo instale?

Primero necesito levantar una base de datos:

¿Que tiene diferente el comando con el del tutorial original?

  • Saco el directorio /var/lib/mysql para persistirlo si borro el contenedor.
  • Público el puerto 3066 para poder conectarme desde afuera de los contenedores al MySQL.

Sobre este ultimo bullet, es necesario hacer un cambio para poder conectarse desde afuera:

Accedo al contenedor, abro el cliente MySQL local y ejecuto el siguiente comando:

En nuestro caso teníamos una base vieja, por lo que cargue el backup dentro del MySQL antes de arrancar el contenedor de Redmine para que en lugar de crear una base nueva, intente migrarla, no voy a explicar el como, supongo que lo saben hacer.

Sigo con la instalación levantando el contenedor de Docker.

¿Que tiene diferente el comando con el del tutorial original?

  • Cargo la configuración desde afuera /usr/src/redmine/config/configuration.yml
  • Utilizamos SAML, por lo que cargo una configuración especifica /usr/src/redmine/config/initializers/saml.rb
  • Extraigo el directorio plugins por fuera del container, para poder persitir
  • Extraigo el directorio files por fuera del container, para poder persitir
  • Público el puerto 3000 para poder conectarme desde afuera.

Luego con un apache en modo proxy, transformo el puerto 80 en 3000. (Ahora que lo pienso podría no ser necesario ya que con el mismo Docker lo puedo transformar de 3000 a 80)

¿Como actualizar?

Los pasos básicamente son:

  1. Actualizo la imagen
  2. Paro el contenedor
  3. Borro el contenedor
  4. Creo nuevamente el contenedor (pero está vez lo hace con la imagen nueva)

La versión en comandos es:

¿Si está caído?

Proba si realmente está caído.

Y si lo está:

¿Y si quiero ver algo dentro del docker?

Con esto nos da una consola bash dentro del container

Implementando g3w3 (SIU-Guaraní para alumnos) y que se la banque!

logo_medio

Me toco una difícil, y que no sabia realmente como solucionar. Fue un trabajo muy fuerte en equipo:

  • Daniel Palazzo (DBA) @palazzo_d http://danielpalazzo.com.ar/
  • Lucas Szczuczko (sysadmin)
  • Nicolas Samus (Sysadmin) @nikosamus

Lo que implementamos fue una solución con un frontend que balance carga y varios nodos backend con la aplicación. La aplicación se conecta a una base de datos (DB1) y por seguridad generamos dos replicas, en el mismo cluster y otro cluster (para no tener dependencia de ningun tipo). Como al empezar a tener mucho trafico se generaban demasiadas conexiones contra la base instalamos un pgPool para manejarlo de una manera mas eficiente.

Por ahora ahora la solución que buscamos es solo performance y seguridad de datos (¡que no se pierda nada!), próximamente buscamos alta disponibilidad.

DiagramaImplementacionG3W3-2

Y que la fuerza nos acompañe, después les cuento como nos fue…

No se la banco!… la base volo por los aires. Y miren que si salio mal que nos dedicaron un meme.

Mejorando performance de Apache

apache-logo

Espero que esto sea la “parte 1”, esto es una primera aproximación, claramente despues hay que ajustar las configuraciones a cada sitio, pero por ahora con esto mejora sustancialmente.

Lo que propongo es agregar un par de configuraciones para reducir la cantidad de contenido que se trafica después de la primera visita.

Sigue leyendo

Logstash filter para PHP errors

logstash-logoLas aplicaciones tienen errores, algunos mas graves otros menos graves. Algunos mas visibles, otros irreproducibles. Los distintos lenguajes y servidores de aplicación hacen logs de los errores que se encuentran. Pero seamos sinceros, a menos que nos llamen para decirnos de que algo anda mal, el 90% de las veces no nos entereamos y probablemente ni nos interese (hay cosas mas divertidas para hacer que casar bugs).

Para ser un poco mas pro activo en la búsqueda de problemas, o para hacernos la vida un poco mas facil a la hora de buscar la causa del error cuando ya no nos lo reportaron, es necesario revisar los logs de la aplicación. Pero es un dolor de cabeza!!!

Por todo esto estoy trabajando un poco para poner en funcionamiento una instancia del stack ELK (intentando sin exito hacer algunos dashboards útiles) y no pude encontrar un parsing decente de los logs de Apache para los errores PHP, y así tener datos mas útiles sobre los errores, por lo que arme uno propio.

Aquí lo comparto en un gist la configuración que arme (próximamente mas info).

Sigue leyendo

Links interesantes de hace unas cuantas semanas atras

Lo que estuve taggeando en los últimos días (realmente lo hace todo basado en mi delicious, que lo tengo olvidado, aún mas que mi blog… pero bueno… encontré que estaba en borrador, y lo publico)

Como poner un sitio en mantenimiento… pero bien..

La versión oldschool, sacamos el sitio de publicación o apuntamos el virtualhost a una carpeta diferente donde hay un index.html con el mensaje… pero … es suficiente ? No!

Hoy en día los buscadores web como Google indexan todo el sitio, y cualquier visitante puede llegar a consultar por una página especifica y no necesariamente la raíz del sitio, por lo que nuestra solución revienta. También relacionado con los buscadores, pueden pasar a indexarnos nuevamente, y no va a haber contenido, por lo que borrarían los links a páginas que nos interesan mantener.

Otro caso, es por ejemplo correos… de notificaciones, foros, etc… siempre está el link especifico al foro… otro caso donde revienta como sapo… acá la solución para Apache.

Primero que nada, debemos tener una página para recibir … que yo la bautice mantenimiento.html pero pueden llamarlo como les gusta, y segundo hay un archivo.. que sirve de “flag” para saber si esta en mantenimiento… que en mi caso es mantenimiento.enable este ultimo, con solo borrarlo el contenido vuelve a estar público.

Algo no menos interesante, es que uno puede definir la IP desde donde está trabajando, para uno si poder ver el contenido correctamente.

Este .htaccess necesita tener los modulos mod_headers y mod_rewrite funcionando, y por supuesto tener el flag allow_overwrite en true en la configuración del virtualhost.

Sean felices.