Archivo de la etiqueta: php

Emular terminal desde PHP en Servidores Virtuales Gestionados (caso de Comvive)

Desde que trabajo en Pórtico Legal quería empezar a usar el sistema de control de versiones (yo siempre lo uso y aquí no tenían nada, una locura) y poder usarlo para los despliegues en preproducción y producción como solución intermedia hasta que tengamos algo más avanzado. Hasta la fecha se estaban haciendo mediante ftp con todos los problemas que eso supone, entre ellos los siguientes y sus posibles soluciones:

  • Mientras se ha subido un archivo y se está subiendo otro que depende de este la web se puede romper, lo más probable es que ocurra. Esto no se solventa completamente usando git sobre un único servidor pero se minimiza muchísimo.
  • Nunca se sabe que versión está en producción. En algunos momento se habían subido archivos por diferentes personas y una no sabía lo que había subido la otra.
  • Si se toca algo en el servidor un simple “git status” te lo va a chivar, y un simple “git checkout …” te va a solucionar la papeleta.
  • Se va a poder desplegar nuevas versiones simplemente etiquetando y haciendo un “git checkout tag

 

Aquí el problema venía por parte del hosting de comvive que al ser un VPS gestionado no te dan cuenta de shell. Para solucionarlo al final utilicé un pequeño script php que ejecutaba la orden que le pasas como parámetro:

<?php

$command = $_GET[“command”];

$res = execute($command, __DIR__ . ‘/..’);
echo “<pre>”;
echo “\nCódigo de salida: ” . $res[‘code’];
echo “\n” . $res[‘out’];
echo “\nSalida de error:\n” . $res[‘err’];
echo “</pre>”;

function execute($cmd, $workdir = null) {
if (is_null($workdir)) {
$workdir = __DIR__;
}

$descriptorspec = array(
0 => array(“pipe”, “r”), // stdin
1 => array(“pipe”, “w”), // stdout
2 => array(“pipe”, “w”), // stderr
);

$process = proc_open($cmd, $descriptorspec, $pipes, $workdir, null);

$stdout = stream_get_contents($pipes[1]);
fclose($pipes[1]);

$stderr = stream_get_contents($pipes[2]);
fclose($pipes[2]);

return [
‘code’ => proc_close($process),
‘out’ => trim($stdout),
‘err’ => trim($stderr),
];
}

 

La etiqueta pre la utilizo para que la salida se vea bien si la llamamos desde un navegador. Pues bien, una vez subido podemos ejecutar cualquier orden como:

https://dominio/path/script.php?command=orden

Pero como estarás pensando esto no es seguro. Lo que hice yo es meterlo en un directorio y en este meter un .htaccess para que sólo yo tuviera acceso.

Al final lo único que quería era poder usar git, así que me creé un shell script con wget para llamar a esta url. El script es tal que así:

#!/bin/bash

domain=””

command=”wget -qO – \”http://$domain/commands/command.php?command=git $*\” | sed ‘1d’ | sed ‘\$d'”
echo “Dominio: $domain”
echo “Parámetros: $*”
eval $command

 

Ahora sólo hay que darle permisos de escritura y en mi caso lo he llamado rgit y lo he puesto en el path por comodidad. Esta sería una salida de la orden “rgit status -s“, en este caso un status limpio:

Dominio: www.dominio.com
Parámetros: status -s
Código de salida: 0
Salida de error:

Lo suyo es que el directorio .git con todo el ínidice esté fuera del htdocs del servidor, para ello se puede usar el parámetro –work-tree de git. Si por algún motivo no puede estar fuera podéis utilizar de nuevo un .htaccess para que nadie pueda entrar:

 

deny from all

 

Y con esto he conseguido un rodeo para poder usar una “shell” remota a través de un script PHP. Espero que os sea de ayuda.

 

 

 

Freeguras, figuras de arcilla de mascotas del mundo del Software Libre

Estaba leyendo apuntes antiguos de Genbeta Dev y me ha aparecido una referencia a Freeguras y la verdad es que me ha gustado mucho. Pero ¿qué es Freeguras?, pues como ellos mismos dicen una freegura es una reproducción artesanal de algún personaje o mascota del mundo del Software Libre moldeada manualmente. Algunas de las figuras que tienen son el Ñu de Gnu, diversos modelos de Tux, el elefante de PHP, etc.Ñu con flauta

Tux Red Hat

Elefante PHP

 

 

 

 

 

 

 

 

 

 

 

 

 

Una de las cosas más interesantes es que el 10% de los beneficios van al proyecto de software libre que tú elijas, si no indicas ningún entonces los donarán a la Free Software Foundation. Yo ya voy a ver si me hago con algunas figuritas.

 

Cheli

Trabajando en Planeta Huerto

Hace ya un mes que trabajo en Planeta Huerto y este es el balance de la experiencia hasta ahora.

Planeta Huerto es un sistema de comercio electrónico alicantino de venta de productos de jardinería, ecológicos y bricolaje aunque a día de hoy venden muchas otras cosas. A mi me han contratado con el objetivo de mejorar los procesos internos de gestión, lo cual nos ha llevado a un rediseño del actual backoffice. Lo interesante del proyecto para mi es:

 

  • La empresa es muy joven, Planeta Huerto como tal acaba de cumplir 3 años y por lo tanto aún tiene mucho recorrido. Hay bastantes cosas por hacer y muchas de ellas son muy interesantes.
  • La empresa es muy joven, y ahora me refiero a los empleados. La media de edad posiblemente esté por debajo de los 30 años, aunque yo ya los he pasado hace algún tiempo jejejeje.
  • Los dueños tienen muy claro cual es su hoja de ruta y la enfocan claramente en el crecimiento y la mejora constante de su servicio.
  • Poco después de llegar yo abrieron la web de Portugal así que podríamos decir que ya es una empresa internacional.
  • El software está desarrollado en PHP y utiliza el framework Yii. Hacía mucho tiempo que no programaba en php y además no había utilizado este framework, de momento me ha gustado bastante además de ser muy sencillo de aprender y utilizar.
  • Estoy aprendiendo cosas. No había trabajado en una implantación tan grande de comercio electrónico con lo que no había analizado y pensado en ciertos problemas que hay que resolver para que todo funcione adecuadamente (mejorar el proceso de venta, posicionamiento, escalabilidad, etc). Aprender cosas nuevas siempre es enriquecedor.
  • Me hacen bastante caso, en ese sentido se dejan aconsejar aunque al final la última palabra la tiene el jefe jejejeje.
  • Utilizan la metodología Kanban. No es que sea mi metodología preferida pero se trabaja bien con ella, me siento cómodo.

 

De momento lo dejo aquí, ya os iré contando como me va. Si tenéis alguna pregunta sobre como está montado Planeta Huerto la podéis hacer en los comentarios y siempre que no sea algo comprometedor intentaré contestaros.

 

Cheli

Problemas con timezone y PHP 5.3.x

Después de actualizar PHP en mi servidor Centos empezaron a salirme advertencias de este estilo por todas partes.

 

Warning: date() [function.date]: It is not safe to rely on the system’s timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier.

 

El problema reside en que a partir de PHP 5.1.0 es necesario definir el timezone, y desde la versión 5.3.0 se muestran estas advertencias. Tal y como nos advierte hay dos formas de solucionarlo, la primera es mediante código utilizando la función date_default_timezone_set(). La segunda consiste en definir la variable date.timezone en nuestro php.ini, en mi caso quedaría así.

 

date.timezone = “Europe/Madrid”

 

Con esto solucionamos el problema.

 

Listado de zonas.

 

Cheli