944 063 154

Blog

Obtener los paths definidos desde Plesk

Publicado enSistemas TI

Saber cómo puedes obtener los paths definidos para las aplicaciones y los servicios del panel de control Plesk puede ser de gran utilidad. Especialmente, conocer dónde se encuentra cada cosa y cuáles son las diferentes variables de Plesk. Igualmente, en el caso de que gestionéis diferentes entornos entre los que no sea posible realizar una configuración homogénea. En todas estas ocasiones, pueden facilitaros la labor de forma muy sustancial.

Accediendo a los paths definidos

Recuerda que antes de realizar cualquier modificación en el archivo, es necesario que consultes la documentación de Plesk.  Asimismo, no tienes que olvidar que los scripts que te facilitamos a continuación únicamente tienen la función de mostrar dónde se encuentra la información relacionada con el panel de control Plesk. De forma que cualquier cambio realizado en Plesk, o en los archivos relacionados con él, podría afectar al comportamiento del servicio; además de a su disponibilidad. Para evitar cualquier incidencia, sigue las recomendaciones que se especifican en la documentación de Plesk.

En relación a cómo se estrcutura la información, se sigue el siguiente formato:

variable [whitespace characters] value

Esto es, el nombre del campo seguido por espacios o tablas, seguidos a su vez por el valor del campo. Cualquier otro elemento puede eliminarse sin que afecte a la sintaxis del script.


# cat /etc/psa/psa.conf

#

# Plesk tree
PRODUCT_ROOT_D /usr/local/psa

# Directory of SysV-like Plesk initscripts
PRODUCT_RC_D /etc/init.d

# Directory for config files
PRODUCT_ETC_D /usr/local/psa/etc

# Directory for service utilities
PLESK_LIBEXEC_DIR /usr/lib64/plesk-9.0

# Virtual hosts directory
HTTPD_VHOSTS_D /srv/www/vhosts

# Apache configuration files directory
HTTPD_CONF_D /etc/apache2

# Apache include files directory
HTTPD_INCLUDE_D /etc/apache2/conf.d

# Apache binary files directory
HTTPD_BIN_D /usr/bin

#Apache log files directory
HTTPD_LOG_D /var/log/apache2

#apache startup script
HTTPD_SERVICE apache2

# Qmail directory
QMAIL_ROOT_D /var/qmail

# Location of qmail maildirs
PLESK_MAILNAMES_D /var/qmail/mailnames

# Path to rblsmtpd
RBLSMTPD /usr/sbin/rblsmtpd

# Courier-IMAP
COURIER_IMAP_ROOT_D /

# Proftpd
FTPD_CONF /etc/proftpd.conf
FTPD_CONF_INC /etc/proftpd.include
FTPD_BIN_D /usr/bin
FTPD_VAR_D /var/run/proftpd
FTPD_SCOREBOARD /var/run/proftpd/scoreboard

# Bind
NAMED_RUN_ROOT_D /var/lib/named
NAMED_OPTIONS_CONF /etc/named.conf.include.plesk-options
NAMED_ZONES_CONF /etc/named.conf.include.plesk-zones

# Webalizer
WEB_STAT /usr/bin/webalizer

# Logrotate
LOGROTATE /usr/local/psa/logrotate/sbin/logrotate

# MySQL
MYSQL_VAR_D /var/lib/mysql
MYSQL_BIN_D /usr/bin

# PostgreSQL
PGSQL_DATA_D /var/lib/pgsql/data
PGSQL_BIN_D /usr/bin

# Backups directory
DUMP_D /var/lib/psa/dumps

# Mailman directories
MAILMAN_ROOT_D /usr/lib/mailman
MAILMAN_VAR_D /var/lib/mailman

# Python binary
PYTHON_BIN /usr/bin/python2.6

# Tomcat root directory
CATALINA_HOME /usr/share/tomcat6

# DrWeb
DRWEB_ROOT_D /opt/drweb
DRWEB_ETC_D  /etc/drweb

# GnuPG binary
GPG_BIN /usr/bin/gpg

# Tar binary
TAR_BIN /bin/tar

# AWStats
AWSTATS_ETC_D /etc/awstats
AWSTATS_DOC_D /usr/share/apache2/icons/awstats

# openssl binary
OPENSSL_BIN /usr/bin/openssl

LIB_SSL_PATH /lib/libssl.so
LIB_CRYPTO_PATH /lib/libcrypto.so

CLIENT_PHP_BIN /usr/local/psa/bin/php-cli
CGI_PHP_BIN /usr/bin/php-cgi5
AWSTATS_TOOLS_D /usr/share/doc/packages/awstats/tools
AWSTATS_BIN_D   /srv/www/cgi-bin

Cambiar la ejecución de PHP a FastCGI en Plesk Windows

Publicado enSistemas TI

En IIS, el servidor web de Microsoft, es muy recomendable cambiar la forma en que se ejecutan las aplicaciones PHP a FastCGI. Entre otas cosas porque esta acción ayuda a mejorar notablemente el rendimiento del servidor web. Además, en entornos en los que hay corriendo más de una aplicación PHP, esto nos permite separar los procesos. Además, al cambiar el modo de ejecución se facilitará enormemente las tareas de administración. Igualmente, esto permitirá aislar una aplicación de otra.

Si utilizas el panel de control Plesk, este utiliza ISAPI por defecto para la ejecución de las aplicaciones. Un sistema que te permite elegir entre el protocolo CGI y FastCGI. Si no sabes cuál de las dos opciones utilizar, nuestro consejo es siempre utilizar FastCGI. El uso de este protocolo contribuye a la mejora del rendimiento del servidor, haciendo que tu sitio web caya mucho más rápido. Así que, siempre y cuando sea posible y no haya otra alternativa, establece FastCGI como forma de ejecución de una aplicación programada en PHP.

Establecer PHP a FastCGI por defecto

Si quieres establecer «FastCGI» por defecto en el panel de control Plesk en Windows, primero es necesario establecerlo en el registro. Para ello, en primer lugar, ve a la siguiente ruta dentro del registro de Windows:

HKEY_LOCAL_MACHINESOFTWAREPLESKPSA ConfigConfig

Una vez allí, deberemos establecer lo siguiente:

PLESKCP_PHP_MODE -> fastcgi

A continuación, vamos a la consola de Windows (CMD). Desde el directorio %plesk_dir% deberemos ejecutar el siguiente comando. Esto servirá para que los cambios que se han introducido en el panel de control Pesk se apliquen de forma correcta.

reconfigurator.exe /check=Services

Versiones recientes de Plesk

Actualmente, las diferentes versiones del panel de control que van publicándose, permiten activar esta funcionalidad desde la propia interfaz. Con este cambio, cambiar el modo de ejecución de PHP a FastCGI es mucho más sencillo; ya que no es necesario recurrir a modificaciones de código. Para ello, solo es necesario modificar la configuración del hosting dentro del apartado sitios web y dominios del panel de control. Una vez allí, deberemos ir al apartado de estadísticas y scripting web para cambiar el modo de ejecución de la aplicación.

Llegados a este punto, en ejecutar PHP como deberemos seleccionar la opción aplicación FastCGI y hacer click en aceptar. De esta manera, se aplicarán de forma correcta los cambios que acabamos de introducir en la configuración del servidor.

Este cambio es igualmente válido en el caso de un alojamiento Windows como en Linux; aunque algunas opciones son diferentes en función del sistema operativo del servidor. En este caso no afecta a la posibilidad de activar FastCGI desde el propio panel de control Plesk.

Acceder a la configuración de Symfony con sfConfig

Publicado enDesarrollo y Programación

En ocasiones es posible que, al crear una tarea que debería ejecutarse desde línea de comandos en una aplicación que ha sido escrita con Symfony, necesitemos tomar algunos valores concretos del archivo de configuración. De esta forma, y haciéndolo a través de sfConfig, evitaremos hardcodear el código interno. Además de evitar todos los problemas que esto podría conllevar. Para poder hacerlo, necesitaremos especificar cuál es el nombre de la aplicación de la que queremos leer el archivo de configuración. En el caso de que no especifiquemos esta información, Symfony no será capaz de buscar los valores que necesita en ninguno de los archivos de configuración.

Los archivos de configuración tienen la misión de transformarse en el código en PHP. Esto se debe a que la mayoría de las opciones que ofrecen únicamente puede ser utilizadas por parte de los frameworks de este lenguaje de programación. Entre las tecnologías que son compatibles con esta forma de acceder a la configuración se encuentra, por ejemplo, el framework Symfony. Sin embargo, es posible que algunas veces necesitemos poder acceder a esos archivos a través del código de la aplicación. Con independencia de que esto vaya a tener lugar dentro de una acción, en una determinada plantilla o en una clase propia. A cualquiera de ellas se puede acceder a través de la opción definida previamente en el archivo correspondiente (generalmente settings.yml, app.yml o module.yml). Pero, si lo prefieres, también es posible hacerlo utilizando una clase especial: la clase sfConfig.

Configurando con sfConfig

La clase sfConfig es una clase que permite el acceso a las opciones de configuración de una aplicación desde cualquier punto del código. Una especie de registro de configuración que facilita disponer de un método que podrás utilizar en cualquier parte del código de una aplicación. De esta manera, con sfConfig, es posible hacer que el código sea más accesible; además de ser mucho más sencillo poner solución a cualquier tipo de problema que se pueda encontrar en el código.

Cuando, por ejemplo, queramos hacer que Symfony busque algún determinado valor dentro del archivo de configuración podemos recurrir al parámetro –application. Este parámetro será el encargado de llamar a la tarea que queremos ejecutar; así como de permitir que se muestre la información que hemos solicitado. Pero la principal ventaja de utilizar la tarea sfConfig es que, además, podremos hacer cualquier tarea sin romper el código de la aplicación. De esta forma, podremos realizar cualquier cambio de una manera totalmente segura.


php symfony namespace:tarea --application=frontend

Como vemos, en ocasiones realizar modificaciones en el código de una aplicación es mucho más fácil de lo que pueda parecer. Especialmente si tenemos en cuenta que evitamos que el código pueda acabar rompiéndose y provocar que la aplicación deje de funcionar. Por ello, es recomendable dedicar algo de tiempo a conocer algunas clases de los distintos lenguajes de programación y frameworks. Estar en un proceso de aprendizaje continuo es la mejor forma de mejorar nuestro código y no dejarlo decaer; con los problemas de seguridad que eso podría conllevar para el sitio web o la aplicación.

Optimizar el consumo de recursos de Firefox

Publicado enGeneral

Si usáis Firefox de forma habitual seguramente habréis sufrido sus cuelges y visto con impotencia como devora la memoria RAM del equipo sin contemplación. Un problema que no es exclusivo de Mozilla, ya que Chrome cuenta con una fama muy similar. Por lo que podríamos decir que este elevado consumo de memoria RAM es algo aplicable a (casi) todos los navegadores.

Aunque pueda parecer difícil, es posible recurrir a un par de trucos para evitar en gran medida este tipo de inconvenientes. Para ello, en este breve post vamos a explicar qué podemos hacer para optimizar el consumo de recursos de Firefox a través de dos técnicas.

Limitar el uso de la memoria

Por defecto, el uso de memoria en Firefox acostumbra a tener un valor muy alto que podemos reducir siguiendo los pasos que indicamos a continuación.

1. En el campo de URL de Firefox escribe about:config. Inmediatamente aparecerá una advertencia; pero no tienes porqué preocuparte si llevas a cabo cada una de las modificaciones como te lo explicamos a continuación. De seguir nuestros pasos puedes tener la total tranquilidad de que no romperás nada.

Optimizar el consumo de recursos de Firefox-I

2. En el cuadro de búsqueda pon browser.cache y pulsa enter. El valor que tendrás que cambiar es el de browser.cache.disk.capacity. Aunque depende mucho de la memoria que tengas disponible en tu equipo, nuestra recomendación es bajarlo a un valor situado entre 15.000 y 20.000. Luego, como en todo tuneo es cuestión de ir afinando en función de cada equipo. Así que, si los niveles que te proponemos siguen siendo demasiado elevados para tu equipo, puedes ir bajando hasta alcanzar los números más adecuados.

Optimizar el consumo de recursos de Firefox-II

Liberar memoria cuando Firefox se minimiza

Si no vas a trabajar con Firefox durante un tiempo y lo minimizas, este seguirá consumiendo memoria igualmente ya que continúa ejecutándose en segundo plano. Para evitarlo, tendrás que cerrarlo o reiniciarlo para que la memoria RAM pueda liberarse. Una cosa muy útil es decir a Firefox que escriba el contenido de la memoria a disco cuando este minimizado; y que recupere los datos únicamente en el momento en el que se maximice la aplicación. De esta forma mejoraremos en gran medida el consumo de recursos de Firefox.

Para ello, desde el about:config, pincha con el botón derecho y elige Nuevo > Lógico para crear un nuevo valor que debes llamar config.trim_on_minimize y establecer su valor a TRUE. Después, tendrás que reiniciar Firefox para que los cambios que has aplicado funcionen de forma correcta.

Optimizar el consumo de recursos de Firefox-III

Optimizar el consumo de recursos de Firefox-IV

Esperamos que este sencillo tutorial te haya sido de utilidad y te sirva de ayuda para reducir el consumo de recursos en tu equipo por parte de Firefox.

Puedes seguir leyendo artículos del blog de Linube; o, mejor, ya que estamos hablando de Firefox, échale un ojo al artículo sobre su esfuerzo para mejorar la seguridad de los usuarios en la web mediante el estándar Secure Contexts.

Nuestro compromiso con el Green Computing

Publicado enSistemas TI

Estos últimos meses hemos estado leyendo sobre cómo empresas tecnológicamente punteras apuestan e invierten en el Green Computing.

¿Por qué Green Computing?

En Linube también apostamos seriamente en este sentido a la hora de construir infraestructuras de sistemas y desarrollar aplicaciones web. Así, además de contribuir a reducir el impacto medioambiental conseguimos reducir los costes que nuestros clientes hacen en infraestructura TI.

En nuestras soluciones de Sistemas TI

En el campo de sistemas TI nuestra mayor apuesta reside en la virtualización con HyperV. Esto nos permite principalmente reducir el número de servidores en nuestro centro de datos. Esto se traduce en mayor redundancia, mejor seguridad, gestión y recuperación frente a desastres.

Gracias a nuestras soluciones facilitamos la migración de los servidores físicos de nuestros clientes a nuestra infraestructura virtual. Todo ello sin riesgos de conflictos de software en caso de posibles incompatibilidades o requisitos por parte de antiguos desarrollos a medida. En estos casos podemos separar e incluso reducir el margen de inestabilidad de aplicaciones que se han desarrollado hace décadas. Incluso si es necesario actualizar la plataforma sobre la que están implementadas. Desde nuestra experiencia, hemos comprobado que este tipo de aplicaciones utilizan hardware antiguo que conlleva un alto impacto medioambiental.

Además de reducir el hardware de servidor, podemos reducir el hardware de las terminales de trabajo. Disponemos de soluciones que permiten virtualizar las aplicaciones ofimáticas o el propio sistema operativo que el usuario utiliza. Sustituyendo los equipos con los que trabajan por ordenadores de menor consumo eléctrico y menor impacto medioambiental.

También en nuestros desarrollos

La mayoría de los proyectos web que nos piden nuestros clientes tienen como objetivo la sustitución de los programas instalados en los ordenadores que utiliza el personal en cada una de sus empresas, por aplicaciones web accesibles a través del navegador en dichos equipos. Con esto se pueden reducir los requisitos de hardware de las estaciones de trabajo e incluso sustituirlos por netbooks. Estos son unos aparatos que tienen un consumo eléctrico e impacto menores cara al medio ambiente. Suponiendo además una reducción de gastos en términos económicos más que considerable.

A la hora de desarrollar y diseñar la arquitectura de nuestras aplicaciones pensamos siempre en cómo reducir el consumo de recursos de los servidores. Para ello, distribuimos las diferentes tareas a realizar entre varios de nuestros servidores; y optimizamos al máximo el código para que el acceso a disco y al procesador sea el estrictamente necesario.

En Linube siempre estamos a la vanguardia de la innovación y el desarrollo sostenible, comprometidos con el medio ambiente y ¡el green computing!

Configuración rápida de Virtual Host en Apache

Publicado enSistemas TI

LAMP, es una infraestructura de internet open source compuesta por Apache + PHP + MySQL. Es por ello que, si has decidido pasarte a LAMP, cuando finalices la instalación; es posible que te veas en la necesidad de crear alojamientos virtuales, o virtual hosts, para todos tus dominios. El servidor web Apache acostumbra a guardar todos los archivos de configuración de los Virtual Host en una ruta como la siguiente: /etc/apache2/vhosts.d/ . Por ello, en el caso de que no hayas configurado ninguno, verás allí una serie de plantillas; si quieres que puedes usarlas como base para la configuración. Una de ellas va unida a la instalación de un certificado SSL y la otra no requiere de un certificado de seguridad.

Configurar Virtual Host en Apache

Para que entenderlo te sea mucho más sencillo, vamos con un ejemplo. En él, vamos a crear un archivo de configuración en nombre de Linube; para ello, utilizaremos la distribución de Linux OpenSuse.

En primer lugar, tendremos que movernos al directorio de configuración que se encuentra dentro del virtual host. Algo que podremos hacer de la siguiente manera; recurriendo para ellos a unas sencillas líneas de código:

cd /etc/apache2/vhosts.d

A continuación, deberemos copiar la plantilla que nos proporciona Apache a un nuevo archivo. De esta forma, podremos configurar el servidor web como nosotros queramos. Debería ser algo similar a esto:

cp vhost.template linube.conf

Seguidamente, tendremos que hacer lo mismo en la otra distribución. Lo habitual es recurrir a una ruta de aspecto similar a esta /var/www/vhosts/

mkdir -p /srv/www/vhosts/linube/

Llegados a este punto, es importante tener en cuenta que el archivo de configuración siempre debe terminar con el sufijo «.conf». De no ser así, Apache no podrá leerlo; y, por tanto, no será posible la creación de los alojamientos virtuales que necesitamos para alojar nuestros dominios.

Cuando ya esté creado el host, deberemos editarlo y sustituir el dominio de ejemplo que proporciona la aplicación, «dummy-host.example.com», por el dominio nuestro. Además, también deberemos modificar las rutas, que en nuestro ejemplo es la siguiente /srv/www/vhosts/linube/. Asimismo, tenemos que asegurarnos, sobre todo, que se establece correctamente el DocumentRoot y que la ruta del directorio tiene un aspecto similar a esta:  <Directory «/srv/www/vhosts/dummy-host.example.com»>.

Por último, bastará con reiniciar Apache para que se apliquen correctamente todos los cambios que hemos introducido. La acción de reiniciar un servidor es la forma más común de asegurarnos de que se apliquen los cambios introducidos en su configuración. Para ello, realizaremos lo siguiente:

/etc/init.d/apache2 restart

Con esto, ya habremos acabado de configurar un Virtual Host en Apache para nuestros dominios.

Instalar extensión php-memcached en Suse Linux

Publicado enDesarrollo y Programación

PHP-memcached es un sistema que permite almacenar datos en la memoria RAM para no tener que solicitar todos los datos a un servidor externo. Esta información puede solicitarse utilizando las librerías de los diferentes lenguajes de programación a través de cadenas hash. Así, no será necesario tener que buscar en la base de datos, ya que la todos los datos necesarios estarán disponibles en esta memoria. De esta forma, las solicitudes se sirven en un período de tiempo mucho menor que si los datos tuvieran que solicitarse a otro agente.

Aunque este tutorial está escrito pensando en una distribución Suse y openSuse, los pasos a realizar se pueden aplicar a otras distribuciones; como por ejemplo Debian 9 o Debian 10. Antes de empezar, tenemos que elegir entre dos opciones: php-memcached o php-memcache. Ambos sistemas funcionan igual en la capa de programación PHP, pero cada uno tiene sus particularidades:

  • Php-memcache. De las dos opciones, esta es la más antigua. Una extensión de PHP que se caracteriza por no requerir de librerías adicionales.
  • Php-memcached. Desarrollada por Andrei Zmievski (desarrollador del core de PHP), es la extensión más nueva de las dos a elegir. A diferencia de la anterior, php-memcached sí requiere de una librería adicional: libmemcached. En nuestro caso hemos optado por esta opción, el hecho de que Andrei sea el responsable de su desarrollo nos da más confianza.

* Nota: recuerda que si usas symfony 1.2 o inferior, debes usar la extensión más antigua, php-memcache; ya que la otra opción no es compatible.

Instalando php-memcached

Para comenzar con la instalación de php-memcached, primero deberemos descargar la extensión libmemcached. Cuando la descarga haya finalizado, hay que compilarla. Algo que puedes hacer con las siguientes líneas de código:


wget http://download.tangent.org/libmemcached-0.35.tar.gz

tar -xvf libmemcached-0.35.tar.gz

cd libmemcached-0.35/

/configure

make

make install

Al terminar la compilación, tenemos que bajar la extensión php-memcached del sitio web pecl; no sin antes instalar las librerías de desarrollo de PHP, de otra forma no será posible compilar dicha extensión.

#instalamos las librerías de desarrollo de php
zypper install php5-devel

#ahora nos bajamos la extensión de pecl
wget http://pecl.php.net/get/memcached-1.0.0.tgz
cd memcached-1.0.0/

#hacemos un phpize para generar el configurador
phpize

#compilamos
/configure
make
make install

Por último, con todas las descargas previas finalizadas, debemos crear el archivo /etc/php5/conf.d/memcached.ini; en ese archivo deberemos indicar lo siguiente para que PHP pueda activar de forma correcta esta extensión:

extension=memcached.so

Como en la gran mayoría de cambios que se realicen en un servidor web, para disponer de esta extensión habilitada es necesario reiniciar el servidor. Cuando el sistema se encienda nuevamente, php-memcached ya estará instalado y verás cómo mejora el rendimiento de tu web gracias a su uso.

Instalar LAMP (Linux+Apache2+MySQL5+PHP5) en openSuse 11.2

Publicado enSistemas TI

LAMP es el acrónimo formado por algunas de las herramientas más importantes y utilizadas en estos momentos para la creación de sitios web. Este completo sistema de infraestructura de internet está compuesto por el sistema operativo Linux, el servidor web Apache, MySQL como gestor de bases de datos y PHP como lenguaje de programación. Un conjunto de tecnologías que permiten desarrollar todo tipo de sitios web sin necesidad de más herramientas.

Como herramienta en sí misma, LAMP, concentra todas las ventajas del software de código abierto. Además, el uso de LAMP proporciona todos los conocimientos necesarios para desplegar cualquier tipo de aplicación web. Desde la puesta en marcha de un servidor Apache al desarrollo de la aplicación, así como de su posterior instalación en el servidor.

Así, puedes utilizar LAMP en diferentes distribuciones Linux, como por ejemplo openSUSE, una de las distribuciones más utilizadas del software libre. OpenSUSE permite, entre otras cosas, realizar desarrollos totalmente personalizados y posibilita el mantenimiento de nuevos sistemas operativos basados en Linux.

Instalación de LAMP en openSUSE

1. En primer lugar, deberás instalar los paquetes necesarios para poder obtener LAMP. Es decir, necesitarás contar con tres elementos: el servidor web Apache, el languaje de programación PHP y el gestor de bases de datos MySQL. Para ello, puedes ejecutar el siguiente código y realizar la petición a través de Bash:


# zypper install apache2 php5 mysql

2. Una vez los paquetes hayan sido descargados, el siguiente paso es levantar tanto Apache como MySQL. Para poder hacerlo, puedes recurrir nuevamente a Bash; escribiendo el siguiente fragmento de código cada uno de los elementos comenzará a ejecutarse.


# rcapache2 start
# rcmysql start

3. A continuación, será necesario crear una configuración segura en la que poder realizar la instalación de MySQL como sistema de gestión de bases de datos. Algo que, una vez más, es posible hacer a través de Bash.


# mysql_secure_installation

En este punto de la instalación, se nos pedirá que generemos una clave para el usuario root de MySQL. Entonces, deberemos eliminar cada uno de los usuarios anónimos creados por defecto y también la base de datos ‘test’ que también que el sistema crea de forma predeterminada. Todo ello sin olvidarnos de deshabilitar el login remoto con privilegios de root. De otra forma, la instalación no se podrá realizar de manera correcta.

4. Una vez MySQL haya sido instalado, abriremos el puerto 80. Este es el puerto por defecto que permite que HTTP pueda ejecutarse. Además, este puerto permite que se comuniquen entre sí el servidor web y el cliente haciendo posible que la información pueda entrar y salir del firewall.


# SuSEfirewall2 open EXT TCP http

# SuSEfirewall2 stop

# SuSEfirewall2 start

5. Llegados a este punto, solo nos queda comprobar que todas las aplicaciones que hemos ido instalado en los pasos anteriores funcionan de forma correcta. Para ello, basta con que ejecutemos las siguientes líneas de código:


# touch /srv/www/htdocs/phpinfo.php
# echo '<php phpinfo()>' > /srv/www/htdocs/phpinfo.php

Finalmente, deberemos acceder desde el navegador a http://ipserver/phpinfo.php. En este paso es necesario prestar atención y confirmar que las versiones más recientes de PHP y MySQL aparecen como instaladas. El uso de las últimas versiones estables de lenguajes de programación y servicios añaden seguridad a los servidores y aplicaciones, además de aumentar el número de funcionalidades.

Enviar correo con Gmail en PHP usando swift mailer 4

Publicado enDesarrollo y Programación

SwiftMailer es probablemente la mejor librería para enviar correos mediante smtp y sendmail que existe para php. Escrita en 2005 por Fabien Potencier, CEO de Sensio Labs y Lead developer del framework Symfony para php. Inicialmente, SwiftMailer formaba parte de un proyecto académico. Un desarrollo que posibilitaba el envío de correos recurriendo al protocolo SMTP (Simple Mail Transfer Protocol). Desde entonces, la librería ha estado en continua evolución, hasta llegar a convertirse en la biblioteca de complementos que conocemos en la actualidad.

Características de SwiftMailer

Al igual que muchos otros proyectos de código abierto, el desarrollo de SwiftMailer no hubiera sido posible sin la ayuda de la comunidad. SwiftMailer, además, permite enviar correos electrónicos directamente desde tu aplicación en PHP a cualquier servidor SMTP. Por lo que puedes utilizarlo para enviar al servicio de correo de Google: Gmail. Entre sus principales ventajas se encuentran su facilidad de configuración o la potencia de la librería. Usando esta librería, podrás enviar correos multimedia y consumir menos recursos.  En el caso de envío a gmail, además, podrás elegir el protocolo criptográfico: SSL o TLS.

SwiftMailer Gmail: enviando correo con SMTP

El siguiente código nos permite enviar correo usando el servidor smtp de gmail con esta herramienta:


 $transport = Swift_SmtpTransport::newInstance('smtp.gmail.com',
                                               465,
                                               'ssl')
             >setUsername('usuario@gmail.com')
             >setPassword('tu contraseña');

 //Creamos el mailer pasándole el transport con la configuración de gmail
 $mailer = Swift_Mailer::newInstance($transport);

 //Creamos el mensaje
 $message = Swift_Message::newInstance($subject)
             >setFrom(array('tuemail@blackslot.gov' >'Blackslot'))
             >setTo($to_addresses)
             >setBody($body);

 //Enviamos
 $result = $mailer->send($message);

No podíamos terminar este artículo sin mencionar algún que otro plugin; aquellas pequeñas porciones de código que aumentan la funcionalidad de nuestra librería. Plugins para la aplicación de correo Swift Mailer:

  • AntiFlood plugin: la mayoría de los servidores SMTP están limitados en cuanto a cantidad de envío de mensajes. Este complemento permite administrar una gran cantidad de emails manteniéndose dentro de esos límites.
  • Decorator plugin: ¿necesitas enviar el mismo mensaje a múltiples destinatarios con ligeras variaciones en el cuerpo del mensaje? Decorator es la solución para permitir esas sutiles diferencias.
  • Logger plugin: su objetivo es identificar el porqué de que un servidor rechace direcciones o cualquier otro problema derivado del uso. En resumen, ayuda con la depuración en el proceso de envío.
  • Throttler plugin: a veces, el servidor SMTP tiene restricciones que limitan la velocidad en el envío de correos. Throttler consigue ejecutar Swift Mailer a una velocidad limitada.

Y, ¿si existen errores en el envío de emails? Consulta nuestro artículo para saber más acerca de los errores SMTP más habituales.

Generar un archivo CSR en IIS 6.0

Publicado enSistemas TI

La instalación de un certificado de seguridad SSL es fundamental para poder garantizar la máxima seguridad de un sitio web. Un movimiento que empezó por las tiendas online y todos los sitios web que solicitaran información sensible al usuario y que ha acabado por extenderse a todo tipo de páginas web. Actualmente existen diferentes tipos de certificados SSL en el mercado, tanto de pago como los gratuitos de Let’s Encrypt. Lo común a todos ellos que tú mismo puedes instalar tu certificado SSL o dejar que lo haga la empresa en la que lo adquieres. Por ejemplo, en Linube nos encargamos de la instalación y de la configuración de los certificados SSL que nuestros clientes adquieran en nuestro site; para que tener una web cifrada sea mucho más sencillo.

Si por el motivo que sea tienes que ser tú quien se encargue de la instalación del SSL, ten en cuenta que necesitarás un CSR. Es decir, una solicitud que posibilita la firma del certificado. En este archivo se encuentran algunos de los datos que serán incluidos en el certificado SSL. Por ejemplo, el CSR contiene información como el nombre de tu empresa, una dirección asociada a la misma o el dominio para el que se ha generado dicho certificado SSL. Además de esta información, en el CSR se incluye una llave pública que también es necesaria para la instalación del certificado. Si tu servidor web utiliza Windows como sistema operativo, y por tanto es IIS, te mostramos cómo puedes generar el CSR en IIS 6.0.

Generando un CSR en IIS 6.0

Para generar un CSR en IIS 6.0, en primer lugar tenemos que acceder al servidor web de Windows IIS. Una vez allí, debemos acudir a Propiedades del sitio > Seguridad de directorios. Aquí, es necesario hacer click en Certificado del servidor de forma que podamos Crear un nuevo certificado. En este momento tendremos que elegir la opción Preparar la petición ahora pero enviarla más tarde y, a continuación, poner un cifrado para el certificado SSL. Nuestra recomendación es que dejes la longitud del cifrado en 1024 bits. Después, rellena el resto de los datos que se solicitan en el formulario hasta finalizar la tarea.

Es importante que tengas en cuenta que donde se solicita el ‘nombre común’ (common name) deberás poner el nombre completo del dominio para el que se solicita el certificado de seguridad. En nuestro caso, el dominio sería www.linube.com; en tu caso deberás poner el nombre completo de tu dominio.

Cómo salvar la key privada

Una vez hayas terminado con el punto anterior será necesario que salves la clave privada que permitirá el funcionamiento del certificado SSL. Para ello, ve a MMC y escoge como complemento Certificates. En este punto deberás seleccionar Request > All task y exportar la información que obtengas del sistema.

Si necesitas más información acerca de cómo puedes generar un CSR en IIS 6.0, puedes acudir a la documentación oficial.

Y, si vas a decantarte por otro tipo de certificado, como un SSL de pago puedes contactarnos para informarte acerca de los tipos de certificados de seguridad que ofrecemos en Linube.

Crear un certificado SSL autofirmado en IIS7

Publicado enCertificados SSL

Mediante este sencillo tutorial, te mostramos cómo puedes crear un certificado autofirmado SSL en IIS7. El uso de este tipo de certificado tiene ciertos riesgos y nada tiene que ver con la contratación de un certificado de seguridad SSL. La principal diferencia entre ambos tipos de certificados de seguridad es que en el caso de un SSL autofirmado no se valida la autenticidad del sitio web; sino que únicamente se encripta la información que se comparta en el sitio web. De esta forma, todas las conexiones que establezcas serán mucho más seguras ya que toda la información se encontrará encriptada dificultando así el acceso a la misma por parte de terceros.

A pesar de que no se valide la autenticidad del sitio web, utilizar un certificado autofirmado en IIS también tiene sus ventajas. Por ejemplo, puede ser de gran utilidad en entornos de desarrollo, ya que permite añadir seguridad SSL sin necesidad de pagar por ello. Es decir, no permite garantizar la autenticidad de una web o alojamiento, pero proporciona un canal seguro para las comunicaciones que se produzcan.

Cómo crear un certificado autofirmado en IIS7

Si quieres instalar un certificado SSL autofirmado en tu alojamiento Windows, te recomendamos seguir los siguientes pasos:

  1. Abre el Administrador de IIS y selecciona el nodo. A continuación, haz click en abrir Certificados de servidor.
  2. Selecciona la opción Crear un certificado autofirmado. Una vez allí, el sistema te solicitará el nombre del dominio al que deseamos poner el certificado. En nuestro caso hemos elegido el hostname de la propia máquina.
  3. Ve al sitio web donde quieres que se instale el certificado. Nosotros hemos optado por Default Web Site, en este caso tú deberías indicar el nombre de tu dominio. A continuación, ve a Enlaces.
  4. Haz click en Agregar.
  5. Escoge el tipo de HTTPS, ten en cuenta que por defecto el puerto siempre será el 443. A continuación, puedes escoger el nombre del certificado.
  6. Cuando hayas aceptado, en el panel de acciones verás que aparece una nueva opción. Esta nueva pestaña te permitirá enlazar al sitio seguro. Recuerda que si quieres que siempre se requiera el acceso a través de HTTPS, deberás especificarlo en la Configuración de SSL.
  7. Cuando ya hayas introducido todos los cambios solicitados, haz click en Requerir SSL y el certificado autofirmado ya estará listo.

Otras opciones gratuitas

Desde hace poco disponemosde otra opción de SSL gratuita: los certificados Let’s Encrypt. Un tipo de certificado SSL totalmente gratuito fruto del trabajo de la comunidad open source por mejorar la seguridad en internet. De esta forma, también puedes beneficiarte de la máxima seguridad a coste cero. Al igual que en el caso de los SSL autofirmados, debes tener en cuenta que la emisión de un SSL Let’s Encrypt también se produce de forma automática. Por lo que en función de las características del sitio es probable que lo más recomendado sea un certificado de seguridad de pago que además de cifrar la web, valide su autenticidad.

Como siempre, antes de optar por uno u otro tipo de certificado de seguridad te recomendamos tener en cuenta las ventajas e inconvenientes de cada uno de ellos. De esta forma podrás elegir el que mejor se adecúe a las necesidades de tu sitio; más que a las de tu bolsillo.

Obtener el nombre de una máquina HyperV desde la máquina

Publicado enSistemas TI

Las máquinas virtuales son un dispositivo de gran utilidad a la hora de probar un determinado software o de utilizar aplicaciones o servicios nuevos. Esto se debe a que este tipo de máquinas nos permiten asegurarnos de que el sistema operativo permanece intacto en todo momento. Es decir, que a pesar de todos los cambios que se realicen, el sistema seguirá en el mismo estado en que se encontraba cuando la máquina en cuestión fue creada. Y el hecho de que el sistema operativo permanezca inalterado es especialmente importante cuando realizamos pruebas en las máquinas. Igualmente, en el caso de que consideremos que la aplicación pueda ser inestable o pueda causar algún daño.

En este sentido, podríamos decir que una máquina virtual es una especie de banco de pruebas. Un entorno en el que se utiliza hardware real y que tiene la habilidad de comportarse como un equipo tradicional. Así, en 2008 Microsoft creó HyperV, una tecnología que permite virtualizar un sistema operativo de una forma profesional. Eso sí, para ello es necesario tener en cuenta que el hardware tiene que permitirlo; es decir, que sea compatible con esta tecnología.

A pesar de sus múltiples ventajas es probable que algunos usuarios no sepan manejarse con este tipo de tecnología. Una tecnología que ha llegado para simplificarnos las tareas relacionadas con la gestión de servidores, pero que por falta de conocimientos no están al alcance del gran público. Entre las tareas de mayor utilidad que ofrece esta tecnología se encuentra la obtención del nombre de una máquina HyperV. Una labor que si no sabes cómo puedes llevarla a cabo, te lo mostramos con un sencillo fragmento de código.

Obteniendo el nombre de una máquina HyperV

Conocer cuál es el nombre de una máquina hypervirtualizada es mucho más sencillo de lo que pueda parecer. Además, aunque parezca un dato insignificante, es una información de gran utilidad para la gestión de dicha máquina. Para ello, podemos recurrir a un sencillo código de Windows PowerShell, la interfaz de consola creada por Windows para estos fines. Es decir, un script de aspecto similar al siguiente:


$Name = Get-ItemProperty -path "HKLM:SOFTWAREMicrosoftVirtual MachineGuestParameters" -Name VirtualMachineName

$Name.VirtualMachineName

 

Conocer el nombre de la máquina virtual puede resultarnos muy útil para realizar otras tareas relacionadas con un servidor virtual. Además, se trata de una sencilla tarea cuya realización apenas nos llevará unos segundos. Obtener esta información es mucho más sencilo gracias a las posibilidades que ofrece Windows Powershell. Ya que la interfaz de Windows permite la escritura y la unión de comandos, entre la enorme variedad de funcionalidades de esta consola.

Extraer elementos de una lista HTML y exportarlos con PHP

Publicado enDesarrollo y Programación

Puede que en algún momento de nuestras apasionantes vidas como desarrolladores web nos interese extraer el contenido de cada uno de los elementos de una lista HTML. Algo que habitualmente suele ir encabezado por <li>,<option> o similares. También puede que queramos almacenar esa información en un array que nos permita utilizarlos a lo largo de nuestra aplicación en cualquier otro momento.

Una lista HTML no es más que un párrafo en el que se recogen secuencias de artículos estructurados. Es decir, parte del código de la página web ordenado y agrupado según diferentes criterios. El lenguaje de marcado HTML define tres tipos de listas, la lista ordenada, la no ordenada y la lista de definiciones. Pero, para exportar estas listas a un array con PHP, no importa cuál sea el tipo de la lista. Puesto que el método que vamos a emplear a continuación es igualmente válido para cualquiera de los tres tipos de listas.

Cómo exportar una lista HTML

Para pasar la lista en HTML a un array en PHP, hemos escrito la función preg_replace de PHP. Esta función hace precisamente eso, buscar una expresión regular y sustituirla por otra diferente. Además, esta función permite no sólo sustituir funciones, sino también caracteres y cadenas en una cadena de texto. El uso de preg_replace() es de gran utilidad para eliminar espacios en blanco en el código de la web; además de corregir faltas de ortografía como acentos o editar caracteres especiales y saltos de línea. También es de gran utilidad para la creación de URLs amigables que mejoren en posicionamiento SEO de la página web. Vamos, que prácticamente resulta imprescindible tener acceso a esta información.

Para recurrir a la función preg_replace, deberemos ejecutar un código similar al que mostramos a continuación:


function li2Array($html,$elemento="li"){

  $a = array("/<".$elemento.">(.*?)</".$elemento.">/is");
  $b = array("$1 <explode>");

  $html  = preg_replace($a, $b, $html);
  $array = explode("<explode>",$html);

  return $array;

}

Así, una vez enviada la petición, el resultado que devolverá la función será un array con toda la información que contuviera dicha lista en HTML. De esta forma, podremos utilizar esa información en cualquier otra aplicación recurriendo a PHP. Extrayendo la información del HTML evitamos tener que volver a introducirla de forma manual. Además, al ser compatible con PHP podremos utilizar esos datos en cualquier otra herramienta que sea compatible con PHP.

De esta forma cualquier modificación que vaya a realizarse en el código de la web será mucho más sencilla. Asimismo, el código será más limpio y ordenado y será más fácil actualizarlo a las nuevas versiones de PHP.

Y, como siempre, ¡mantente informado sobre PHP y mucho más en el mejor blog sobre programación!

Solución al error HTTP/1.1: 417 en PHP con cURL

Publicado enDesarrollo y Programación

Es habitual que cada vez que desarrollamos con PHP como lenguaje de programación hagamos uso de la librería cURL para poder hacer peticiones de tipo HTTP POST. Y a su vez, en cada uno de estos intentos, también es muy común que se produzcan algunos errores en la conexión. Como ejemplo de ello, podemos encontrarnos algunos errores cuando traremos de mostrar las cabeceras de respuesta. Algo similar a esto: «HTTP/1.1 417 Expectation Failed Connection: close Content-Length: 0«. Este error se produce cuando la solicitud de HTTP POST no puede procesarse. Esto, generalmente, se debe a que la sintaxis bien de PHP o bien de cURL, o incluso la sintaxis de ambas, no es correctas.

Cómo solucionar el error HTTP/1.1: 417

Una forma de solucionar este problema es enviar el campo Expect, una extensión que nos permite interactuar con diferentes procesos utilizando para ello PTY, un tipo de programación específica que permite la realización de determinadas tareas. Además, una buena utilización del campo expect favorece una interfaz más visual y sencilla que hará que la programación sea mucho más cómoda. Pero, volviendo al error HTTP/1.1., para que podamos corregirlo tendremos que enviarlo vacío dentro de las cabeceras HTTP de la petición que estamos a punto de realizar. Algo como lo que te mostramos en el siguiente ejemplo:


$ch = curl_init();

//metemos el campo expect en la cabeceras

curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers = array( "Expect:"));

En otras ocaciones, puede producirse un error HTTP/1.1 si se está intentando utilizar una cuenta IUSR como si de un dominio se tratase. Entonces, aparecerá el error ya que el controlador de dominios no puede ser capaz de autenticar la cuenta. Un error que resulta muy evidente ya que la cuenta IUSR no se trata de un dominio; sino que más bien está relacionada con el servidor web. Si este es tu caso tendrás que editar las cuentas que se muestran; así podrás leer el nombre de dominio de forma correcta.

Como siempre, no dudes en pasarte por nuestro blog para consultar las posibles dudas que te surjan en relación a cualquiera de nuestros servicios. Pero también puedes leernos para enterarte de las últimas novedades tecnológicas que van sucediéndose. En este espacio encontrarás información relacionada con el futuro de las aplicaciones móviles: Progressive Web App (PWA), todo lo referente a la tecnología cloud, nuestra especialidad como proveedores de servicios de internet, incluso la nueva versión de HTTP. Y todo lo que aún está por venir y que, a buen seguro, contribuirá a mejorar y revolucionar la informática.

Opciones para un sfWidgetFormChoice en un formulario

Publicado enDesarrollo y Programación

Los desarrolladores familiarizados con Symfony seguro que conocerán la clase sfWidgetFormChoice. Este widget se encarga de estandarizar y agrupar todas las variantes en un mismo lugar. Así, una misma selección puede mostrar diferentes formas, y también permite definitir una representación propia para la elección. La peculiaridad de sfWidgetFormChoice es que delega la responsabilidad de sus contenidos a otros widgets; pero, además, nos permite crear un campo HTML seleccionable de una forma muy cómoda. Entre las diferentes opciones que nos proporciona esta clase se encuentran las clases tipo select, radio, checkbox y list.

class ComprarForm extends sfForm{

  private $opciones = false;

  //configuramos el widget con sus opciones en la clase formulario
  public function configure()
  {

     $this>opciones = array('manzanas',
                              'peras',
                              'limones');

     $this->setWidgets(array(
                              'quiero' => new sfWidgetFormChoice(
                                              array('expanded' => true,
                                                    'choices' => $this-> opciones)),
                       ));

     $this-> setValidators( array( 'quiero' => new sfValidatorChoice(
                                              array( 'required' => true,
                                                     'choices'=>array_keys($this->opciones)
                                                   )),
                         ));
  }

}

//en la acción creamos el formulario
  $this->formulario = new ComprarForm();

//y en la vista generamos el campo tipo <select-> con las opciones configuradas
  $formulario['quiero']->render();

Otra clase de formulario con sfWidgetFormChoice

Hoy nos hemos encontrado con la necesidad de tener que crear diferentes opciones; según la petición que llegue a la acción que se muestra en el formulario. Quizá nos interese que en lugar de que la select se rellene con frutas como en el ejemplo anterior; se rellene con todo tipo de utensilios que nos permitan matar zombies, por ejemplo.

Para conseguir esto podríamos crear otra clase de formulario que contenga un widget con esas opciones y sus respectivos validadores. Pero eso rompería totalmente la regla de oro en el desarrollo web ágil: «Don’t repeat yourself«. Así que, para evitar ensuciar el código, la solución más elegante es sobreescribir el constructor de nuestra clase ComprarForm. De tal forma que se especialice con respecto al de su padre sfForm; y así admita un parámetro extra llamado «tipoDeProducto».

class ComprarForm extends sfForm{

  private $opciones = false;

  public function __construct($tipoDeProducto='frutas',
                              $defaults = array(),
                              $options = array(),
                            $CSRFSecret = null){

      switch($tipoDeProducto){
        case 'frutas':
          $this-gt;opciones = array('manzanas',
                                   'peras',
                                   'limones');
       &amp;nbsp;break;
        case 'armas':
          $this->opciones = array('sierra eléctrica',
                                   'recortada',
                                   'katana',
                                   'rifle de francotirador');
     break;
      }

      parent::__construct($defaults, $options, $CSRFSecret);

 }

 //configuramos el widget con sus opciones en la clase formulario
 public function configure()
 {

     $this->setWidgets(array(
                              'quiero' =>new sfWidgetFormChoice(
                                                   array('expanded' =>true,
                                                         'choices' => $this->opciones)),
                      ));

    $this->setValidators(array(
                              'quiero' => new sfValidatorChoice(
                                               array('required' => true,
                                                     'choices'=> array_keys($this->opciones)
                                                    )),
                         ));
 }

}

Ahora ya tenemos todo preparado para poder especificar desde la acción qué opciones queremos en el campo select del formulario ComprarForm.

   $this->formulario = new ComprarForm('armas');

Y en la vista sin modificar el código ya nos aparecerán los productos que estamos deseando comprar.