Estreno del .es

Apache HTTP
Dependiendo de cómo hayas llegado a este blog, quizá hayas notado que la url ha pasado de «helloit.webege.com» a «helloit.es».

Después de unos años beneficiándome de hosting y sub-dominio gratuitos de 000webhost.com he pasado a un hosting con 1and1 (después de haberlo abandonado unos años atrás) con un dominio.es. El antiguo blog continúa existiendo, pero con una redirección 301 (movido permanentemente).

El .com y el .net ya estaban ocupados, así que me he tenido que conformar con el «.es», que tampoco está tan mal.

Generar petición CSR para HTTPS

Apache HTTPSi se quiere montar un servidor que soporte HTTPS, se deberá contar un certificado válido para el sitio web. Para ello, una opción es directamente, comprar dicho certificado, en alguno de los múltiples sitios web que ofrecen esta opción, como GoDaddy, los cuales, ya tienen las instrucciones para generar la petición del certificado aquí:

Para generar la petición para el certificado, se deberán seguir una serie de pasos:

  • Crear el certificado y la petición CSR (Solicitud para Firma del Certificado), ejecutando en el servidor web, el siguiente comando (NOTA: yourdomain puede ser cualquier texto, por ejemplo, para dominio.com podríamos usar dominio.key y dominio.csr respectivamente):

openssl req -new -newkey rsa:2048 -nodes -keyout yourdomain.key -out yourdomain.csr

Ej. openssl req -new -newkey rsa:2048 -nodes -keyout www_domain_com.key -out www_domain_com.csr

Continuar leyendo «Generar petición CSR para HTTPS»

Actualizar PHP en Red Hat 5

Para finalizar el año, veremos cómo actualizar PHP en un servidor Red Hat Enterprise 5.5.

En primer lugar miraremos qué versión de php tenemos, sin necesidad de usar phpinfo():

[root@miserver ~]# php -v
PHP 5.1.6 (cli) (built: Nov 13 2010 16:05:12)
Copyright (c) 1997-2006 The PHP Group
Zend Engine v2.1.0, Copyright (c) 1998-2006 Zend Technologies

A continuación instalaremos los repositorios de remi siguiendo los pasos descritos aquí:

[root@miserver ~]# wget http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm
[root@miserver ~]# wget http://rpms.famillecollet.com/enterprise/remi-release-5.rpm
[root@miserver ~]# rpm -Uvh remi-release-5*.rpm epel-release-5*.rpm

Continuar leyendo «Actualizar PHP en Red Hat 5»

¿Cuándo reiniciar Apache?

RAID
Dos preguntas cortas con respuestas de copy&paste sobre Apache.

¿Una modificación en el archivo php.ini requiere reiniciar apache para aplicarse?
«Si tenemos PHP como módulo del servidor, el archivo php.ini se lee cada vez que se reinicia. Por lo tanto tienes que reiniciar para que actualice los cambios. »
Fuente: http://www.ignside.net/man/servidores/phpini.php

¿Y qué pasa si no puedo reiniciar apache porqué está en producción sirviendo una aplicación crítica?
«Las señales USR1 o graceful hacen que el proceso padre indique a sus hijos que terminen después de servir la petición que estén atendiendo en ese momento (o de inmediato si no están sirviendo ninguna petición). El proceso padre lee de nuevo sus ficheros de configuración y vuelve a abrir sus ficheros log. Conforme cada hijo va terminando, el proceso padre lo va sustituyendo con un hijo de una nueva generación con la nueva configuración, que empeciezan a servir peticiones inmediatamente.»
Fuente: http://httpd.apache.org/docs/2.0/stopping.html

Actualización Noviembre 2013

Aprovecho para actualizar este post con un par de apuntes:

  • Ante cualquier cambio en la configuración de Apache, podemos verificar si hay problemas con la nueva configuración, antes de aplicar los cambios, ejecutando:
/etc/init.d/httpd configtest
  • Una vez verificada la configuración, podemos reiniciar la configuración (sin necesidad de reiniciar Apache y por tanto sin afectar al servicio) símplemente haciendo un reload:
/etc/init.d/httpd reload

Flickr! Foto por US Mission Geneva

Configurando mod_wsgi

Hello worldDespués de la entrada de instalación de mod_wsgi, llega la segunda parte: «peleándome con su configuración». En esta ocasión, al igual que con la instalación, he seguido los pasos de la guía rápida de configuración oficial, que paso a detallar a continuación:

  • En primer lugar, he creado un archivo llamado «myapp.wsgi» con el siguiente código:
def application(environ, start_response):
    status = '200 OK'
    output = 'Hello World!'

    response_headers = [('Content-type', 'text/plain'),
                        ('Content-Length', str(len(output)))]
    start_response(status, response_headers)

    return [output]

Continuar leyendo «Configurando mod_wsgi»

Mod_wsgi en Apache

PythonNo sé bien bien porqué (en realidad sí lo sé, pero no viene a cuento), me he visto peleando con instalando mod_wsgi en un servidor Apache (LAMP, para más señas).

Apache, para quién no lo conozca, es uno de los servidores web más populares que existen; es de código abierto y consta de un núcleo, y de varios módulos que le añaden funcionalidades (conexiones ssl, soporte para perl, php, asp, etc.). Así pues, cuando instalamos un servidor Apache, podemos instalar, además, únicamente los módulos que necesitemos, teniendo así, un servidor más seguro (al tener únicamente lo que necesitamos) y con mejor rendimiento.

Mod_wsgi es uno de estos módulos para Apache, que en este caso «permite servir aplicaciones hechas en Python, que tengan soporte para la interfaz WSGI». (Fuente).

Continuar leyendo «Mod_wsgi en Apache»

Magento: más configuraciones

Mirando los borradores del blog, me he encontrado con este, que no sé porqué no llegué a publicar en su día (es de Septiembre del 2010). Lo recupero y publico, esperando que sea de utilidad.

A base de pelearme con Magento, he descubierto algunas opciones muy muy básicas pero que me vienen de maravilla (aviso, este es un post para los que como yo, son principiantes con Magento):

Mostrar productos fuera de stock

Si queremos que nuestros productos se muestren en nuestra web aún cuando no tenemos existencias, podemos hacerlo, asegurándonos de que no se van a poder comprar.
En la versión 1.4.1.1 esto se hace desde Sistema -> Configuración -> Catálogo -> Inventario, desde donde además de poder poner a «Si» la opción «Display Out of Stock Products», podremos gestionar la cantidad máxima de productos permitidos en un mismo carrito de la compra (que vendrá muy bien si tienes unos gastos de envío variables que has subido con un csv).

Mostrar productos por defecto en línea en lugar de en cuadrícula

La verdad, no me gusta nada la vista por defecto de Magento, que muestra los productos ordenados en cuadrícula. Queda mucho más elegante, por lo menos con mi tema y mis productos, la vista en lista. Desde Sistema -> Configuración -> Catálogo -> Catálogo -> frontend, podremos cambiar este punto en la opción «Modo de la lista».

Permitir pagos con Paypal para el producto de menor peso

Un problema que me he encontrado, es que he trabajado con «tablerates» para definir los gastos de envío en función del peso y el destino (explicado en este post, en el apartado «Gastos de envío»). Pues bien, como cada producto tiene asociado un peso, se debe definir el coste de los gastos de envío para todos y cada uno de los destinos para el producto de peso menor (o para peso cero), ya que si no podemos tener problemas en las ventas. Por ejemplo, si tengo definidos 2 gastos de envío (Barcelona y Madrid) y tengo un producto de 0,5kg, no podré vender si tengo los siguientes gastos de envío:

  • Barcelona: 0 kg = 5€, 10kg = 10€
  • Madrid: 10kg = 10€

No podré vender mi producto de 0,5kg aún cuando el destino sea Barcelona (y por tanto tenga definidos los gastos de envío correctamente). Necesitaré definir también los gastos para Madrid.

Tienda multilenguaje

Finalmente, me he decidido a hacer mi tienda en varios idiomas, aprovechando la poténcia de Magento, y siguiendo los pasos aquí descritos, y que resumo a continuación:

  1. Descargar y descomprimir los idiomas para nuestra web del sitio oficial. http://www.magentocommerce.com/langs/list/
  2. Subir a Magento los idiomas descomprimidos. Cada idioma ya viene con la estructura creada, así que únicamente deberemos subir el directorio «app» del idioma a la raíz de nuestra instalación de Magento en el servidor. Esto nos creará para cada idioma, un directorio en app\design\frontend\default\default\local y otro en app\locale.
  3. Desde la administración de Magento, desde Sistema -> Gestionar tiendas, crearemos una nueva «Vista de tienda» para cada uno de los nuevos idiomas. Cada vista de tienda, deberá tener los siguientes parámetros:
    • Store: Main Store
    • Name: Idioma
    • Code: idioma (NOTA: Existen algunas aplicaciones extra que muestran banderas en lugar del nombre del idioma. Para ello, es necesario usar como código el código del idioma. P.ej. US para inglés americano).
    • Status: Enabled
    • Sort order: 0 (Opcional. Si todos los idiomas se dejan a 0, se ordenarán por orden alfabético)
  4. Finalmente, desde Sistema > Configuración, cambiaremos el alcance de la configuración actual (el desplegable de arriba a la izquierda, justo encima del menú izquierdo) para acceder a la vista del uno de los idiomas. Desde General -> General, desmarcaremos el checkbox «usar sitio web» y posteriormente seleccionaremos el País para el idioma. Deberemos hacer esto para cada idioma.
  5. Seguramente, hará falta refrescar la caché para que funcione. Esto podremos hacerlo desde Sistema -> Gestor de la cache -> Flush Magento Caché.

Además de estas opciones, creando nuevas vistas para los diferentes idiomas podremos:

  1. Con el ámbito de la vista de idioma seleccionado en el «scope», desde Sistema -> Configuración -> General -> Diseño, especificar un diseño personalizado para cada uno de los idiomas, si por ejemplo queremos dar la sensación de tener diferentes webs según el idioma.

Lo más importante, sin embargo, es que con el cambio de idioma, no únicamente cambie el idioma de la tienda, si no que además cambien los títulos de las categorías, así como las descripciones de los diferentes productos. Esto se podrá hacer tal y como sigue:

  1. Desde Catálogo -> Gestionar las categorías, seleccionando el ámbito de la vista del idioma que queremos, en el desplegable de vistas de la esquina superior izquierda, podremos ver los valores definidos para la Categoría en la vista actual. Símplemente desmarcando el checkbox «Usar el valor por defecto», podremos dar un nuevo valor, por ejemplo, a el nombre o la descripción de la categoría, para que corresponda con el idioma de la vista.
  2. Exactamente igual, desde Catálogo -> Gestionar los productos, y usando el selector de la vista actual, podremos cambiar las textos de cada producto, así como adaptar su coste,

La información está sacada de este fantástico vídeo.

¿Qué páginas tiene mi tienda?

Desde la opción CMS -> Páginas, se tiene acceso a un listado completo de las páginas que conforman nuestra tienda. Y cuando hablo de páginas me refiero a las páginas y los templates que usa cada una de ellas. Esto es ideal para editar la información de cada página de forma sencilla, a la vez que proporciona un listado de los templates usados, por si se quieren hacer modificaciones más drásticas (como cambiar todos los pies de página de la tienda o eliminar banners).

Más información sobre Magento: https://helloit.es/?tag=magento

Magento: pago contra reembolso

Contra reembolsoUno de los métodos de pago más sencillos y seguros, es el pago contra reembolso. Prácticamente no tienes que configurar nada en tu e-commerce (puesto que no necesitas integraciones para pagos con tarjetas de crédito) y el usuario paga únicamente cuando recibe el paquete (lo que da seguridad).

Las pegas:

  1. El usuario pagará una pequeña cantidad por usar el pago contra reembolso (en torno a un 3% más, en función del transportista).
  2. Esta opción no viene de forma nativa con Magento 1.4.1

Como es lógico, la segunda pega es la que más me preocupa.

Sin embargo, según he visto aquí, existe una utilidad llamada Cash on Delivery que permite introducir este método de pago en Magento.

Voy a explicar los pasos que he seguido para introducir esta funcionalidad:

  1. Realizamos una copia de seguridad TOTAL de nuestro e-commerce.
  2. Preparamos la instalación para el uso de Magento Connect (cambiando los permisos de la estructura de ficheros de Magento a 777).
  3. Vamos a la página de la extensión «Cash on Delivery» y pulsa sobre «Get Extensio Key» (solo podrás verlo si estás logueado en la página. El registro es gratuito).
  4. Seleccionamos la versión de Magento Connect apropiada (la 1 si usas la versión de Magento de la Comunidad 1.4.1.1 o inferior).
  5. Copiamos la Key.
  6. Entramos al panel de administració de Magento de tu e-commerce.
  7. Vamos a Sistema -> Magento Connect -> Magento Connect Manager.
  8. Introducimos de nuevo las credenciales de administración de Magento.
  9. Pegamos la Key que hemos copiado en el punto 5, y pulsar sobre «Instalar».
  10. Al finalizar, veremos el mensaje «Procedure completed. Please check the output frame for useful information and refresh the page to see changes.» justo debajo de la ventana negra que simula un shell de linux.
  11. Pulsamos sobre «refresh» para ver como efectivamente aparece listada la extensión instalada.
  12. Si lo queremos, mediante el enlace «Return to admin» podremos volver al panel de administración de Magento para gestionar la nueva extensión.
  13. Si lo queremos, podemos descargar el archivo csv con la traducción, tal y como comentan los amigos de elblogdemagento.
  14. Descomprimimos el archivo csv y lo subimos a app/locale/es_ES
  15. Refrescamos la caché para ver la extensión en español, desde Sistema > Gestor de la cache > Control de la cache > Seleccionamos «Seleccionar Todo» > Refrescar.
  16. Ahora ya tendremos la extensión de pago contra reembolso instalada, y en español.
  17. Desde Sistema > Configuración > Ventas > Métodos de pago, podremos ver el nuevo pago «Contrareembolso».
  18. Desde aquí, cambiaremos el nombre del método para adecuarlo a nuestro idioma, y nos aseguraremos de que únicamente se acepten pagos desde «Todos los países permitidos».
  19. Al pulsar sobre «Guardar la configuración» aplicaremos los cambios y tendremos listo el pago contra reembolso, a falta de aplicar los gastos del servicio.
  20. Desde Ventas > Reglas de pago contrareembolso > Envíos nacionales, añadiremos una nueva regla donde especificaremos, por ejemplo, que «aplique desde» 0 (entiendo que es el coste del pedido), y el coste (se deberá usar el punto como separador decimal).
  21. Con esto quedará finalmente, configurado el pago contra reembolso en nuestra web.
  22. Una vez acabado el proceso de instalación y configuración de la extensión, deberemos volver a cambiar los servicios de nuestro sistema de ficheros, a su estado anterior, tal y como se explica aquí.

Flickr! Foto por borman818

Magento Connect: permisos

Magento tiene una utilidad llamada «Magento Connect» que nos permite instalar extensiones de forma automática. Ahora bien, esta utilidad tiene el inconveniente de que requiere cambiar todos los permisos de nuestra estructura de directorios de nuestra instalación Magento, a «todos los permisos», es decir, +777 (permisos totales, también de escritura, para el grupo «todos»).

Esto es un problema de seguridad, puesto que se está dando acceso tanto de lectura, como de escritura y ejecución de todos los archivos y carpetas de nuestro e-commerce a cualquier persona.

Para remediarlo, he encontrado esta entrada que explica de forma muy clara cómo proceder cuando se usa Magento Connect.

Básicamente, lo que propone es lo siguiente:

  1. Queremos instalar una extensión mediante Magento Connect
  2. Para ello, cambiamos todos los permisos de nuestra estructura de ficheros a 777 (puedes usar tu cliente FTP favorito, como FileZilla). Esto suele durar un buen rato si lo haces así.
  3. Una vez cambiado, instalamos la aplicación con Magento Connect
  4. Finalmente, y ya acabada la instalación, reseteamos los permisos, ya sea de forma manual, o mediante la aplicación Magento Cleanup Tool. Con esta última aplicación, haríamos lo siguiente:
    • Descomprimir la aplicación en la raíz de nuestro e-commerce (por ejemplo, justo en el directorio «magento» si nuestro e-commerce está ahí).
    • Navegar a http://yourdomain.com/magento/magento-cleanup.php (si como antes, nuestro e-commerce se encuentra dentro del directorio magento), para restablecer los permisos iniciales.

Magento: copias de seguridad

MagentoEn este post intentaré explicar cómo realizar copias de seguridad con Magento. Existen varias utilidades que realizan estas funciones de copia de seguridad, pero antes de instalarlas se recomienda (precisamente) realizar una copia de seguridad, por si la instalación fallase o provocase algún tipo de problema.

Así pues, explicaré cómo realizar una copia de seguridad manual, o por lo menos, como la haría yo.

Backup nativo de Magento

  1. Nos logueamos al panel de administración de Magento.
  2. Hacemos click en Sistema -> Herramientas -> Copias de seguridad.
  3. Pulsamos sobre «Crear copia de seguridad» en la esquina superior derecha.
  4. Al cabo de unos segundos, no aparecerá el mensaje «The backup has been created» y podremos ver listada la copia de seguridad recién creada.
  5. Pulsaremos sobre el link «gz» de la columna «Descargar» de la fila correspondiente al backup que hemos creado, y procederemos a descargar el archivo en local.

Backup con phpMyAdmin

Además del backup de la base de datos realizado en el apartado anterior, en mi caso he realizado un backup manual con la utilidad phpMyAdmin que me proporciona mi hosting (y que proporcionan de forma gratuita la mayoría de hostings). Se han seguido los pasos de aquí, y han sido los siguientes:

  1. Vamos a nuestra página de administración del hosting y nos logueamos.
  2. Entre las diferentes utilidades, seguramente en la sección de «gestión de las bases de datos», veremos la utilidad phpMyAdmin.
  3. Con phpMyAdmin podremos ver las diferentes tablas que conforman la base de datos de Magento (más de 300 en mi caso).
  4. Desde el menú de la izquierda, pulsaremos sobre la base de datos de magento (la que incluye todas las tablas, que tiene un número entre paréntesis al lado).
  5. Posteriormente, pulsaremos sobre la pestaña «Exportar».
  6. Pincharemos en el enlace «seleccionar todo», lo que seleccionará todas las tablas y pulsamos (o dejamos seleccionada) la opción «SQL».
  7. Bajo la opción «Estructura», marcaremos las casillas ««, «Añadir IF NOT EXISTS», «Añadir el valor AUTO_INCREMENT», así como «Usar «backquotes» con tablas y nombres de campo».
  8. Bajo la opción «Datos», marcaremos las casillas «Completar los INSERTS», «INSERTs extendidos» y «Usar hexadecimal para campos binarios».
  9. Finalmente marcaremos el checkbox «Enviar» y sin utilizar compresión (compresión «ninguna») pulsaremos sobre «Continuar».
  10. Nos aparecerá el fichero SQL listo para descargar, con la copia de la base de datos.

Backup de los ficheros

Este último paso (al igual que el anterior), no es estrictamente necesario, pero para mayor seguridad, he preferido hacer un backup del sistema de ficheros en producción de mi e-commerce.

  1. Para ello he abierto mi cliente FTP favorito y me he conectado a mi hosting.
  2. Después únicamente he arrastrado toda la carpeta «magento» con sus directorios, sub-directorios y ficheros a mi disco duro (esto ha llevado un rato largo).

Con todo esto, ya me he quedado más tranquilo de cara a cualquier fallo en mi e-commerce.