Joel's Blog

Videojuegos, Linux, Programación, Anime, Música… y uno que otro delirio personal

Instalar Magento en Ubuntu Linux

magento-ubuntu.gifInstalar este sistema para eCommerce no fue tan sencillo como esperaba, requirió instalar varias librerías, configurar el servidor Apache para que acepte conexiones seguras (https) y otra serie de movimientos que probablemente más de uno se atore con la instalación, con este pequeño tutorial espero ayudar un poco a la comunidad OpenSource latina, quizá en una segunda etapa haga una traducción en inglés, que creo tampoco hay mucha documentación.

Lo primero es tener el servidor Apache, el sistema de base de datos MySQL y PHP5 instalados en tu sistema, eso ya debes tenerlo instalado por tu cuenta, pero si no es asi:

Abre Synaptic (Sistema/Administración/Gestor de paquetes Synaptic) y en el menú Editar selecciona la opción Marcar paquetes por tarea.

synapticlamp.jpg

Tal como muestra la imagen deberás marcar la opción LAMP Server, también recomiendo que instales phpMyAdmin, este último lo puedes instalar usando el buscador de Synaptic, porque no se instala con el conjunto de paquetes LAMP.

Después de instalar los paquetes LAMP MySQL de pedirá una contraseña de administrador, no la olvides porque es necesaria para crear, borrar o modificar las bases de datos de tu sistema.

Una vez que tenemos instalado nuestro servidor LAMP (Linux, Apache, MySQL, PHP) debemos instalar la libreria CURL que nos solicita Magento:

sudo apt-get install curl libcurl3 libcurl3-dev php5-curl php5-mcrypt

Algo importante que noté si vas a trabajar en grupo es que el servidor tenga un nombre, porque localhost suele dar problemas si más gente accede a tu computadora por red, esto se hace fácil si especificas un nombre a tu computadora en Sistema/Administración/Red y en la pestaña General especificas un nombre para tu computadora, al que después podrán referirse tus compañeros para acceder al servidor de tu computadora:

red.jpg

Ahora viene la parte divertida: crear un certificado SSL para Apache, el cual simulará que estamos bajo una conexión segura, este tipo de certificados los emiten empresas dedicadas a la seguridad informatica, no se que tan aceptables sean los generados por uno mismo.

Por algún extraño motivo Ubuntu (y Debian) no incluye el script para generar estos certificados, pero puedes descargar los scripts de aquí, descomprime el archivo y mueve ssleay.cnf a la carpeta /usr/share/apache2 y el archivo apache2-ssl-certificate a la carpeta /usr/sbin, deberás crear también la carpeta ssl en /etc/apache2 (de modo que quede /etc/apache2/ssl).

Ahora, ejecuta el comando:

sudo apache2-ssl-certificate -days 365

Nota: El parámetro -days 365 es para crear un certificado por un año, porque por default sólo dura un mes, pero si te da problemas omitelo.

El comando anterior ejecutará un script que te pedirá algunas cosas:

Country Name (2 letter code) [GB]: (pon algo aquí, MX=mexico…)
State or Province Name (full name) [Some-State]: (tu estado aquí)
Locality Name (eg, city) []: (tu ciudad acá)
Organization Name (eg, company; recommended) []: (el nombre de tu compañía, o inventa uno)
Organizational Unit Name (eg, section) []: (pon algo acá)
server name (eg. ssl.domain.tld; required!!!) []: (Importante!! leer más abajo)
Email Address []: (tu correo electrónico)

En Common Name debe ir especificado el nombre de tu computadora (recomendado), bien puede ser localhost, pero recuerda que si trabajas en grupo debe llevar el nombre del servidor, habrá que modificar un archivo más delante con el nombre que especifiques aquí.

Ahora, activar el modo SSL:

sudo a2enmod ssl

Copiemos la configuración que ya está definida en las webs que se ven en el puerto 80 con las que se verán en el puerto 443 (conexiones seguras con SSL):

sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/ssl

Y su link simbólico (esto está explicado con detalle en /etc/apache2/README):

sudo ln -s /etc/apache2/sites-available/ssl /etc/apache2/sites-enabled/ssl

A mi me gusta tener separadas las webs que no requieren conexión segura de las que si, así que te recomiendo tener separados en carpetas diferentes:

cd /var/www
mkdir html
cd ..
sudo mkdir www-ssl
cd www-ssl
sudo mkdir html

Ahora, tenemos que configurar unos archivos para preparar los puertos 80 y 443:

sudo gedit /etc/apache2/sites-available/default

Aquí es donde debemos separar las webs inseguras en el puerto 80 y las seguras en el 443, modifica el archivo para que se vea algo como esto:

NameVirtualHost *:80
<VirtualHost *:80>
DocumentRoot /var/www/html

Ahora hacemos lo mismo pero para SSL:

sudo gedit /etc/apache2/sites-available/ssl

y definimos que escuche el puerto 443:

NameVirtualHost *:443
<VirtualHost *:443>
DocumentRoot /var/www-ssl/html

Nota: usa tu IP asignada o DNS seguido de :443 si tienes alguno para ServerName.

En ese mismo archivo, más o menos a la mitad (en mi caso fue la linea 33 y 34) dice algo como:

# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.

Después de ese comentario debemos agregar:

SSLEngine On
SSLCertificateFile /etc/apache2/ssl/apache.pem

Guardamos los cambios y seguimos con el archivo /etc/apache2/ports.conf para que escuche también el puerto 443:

sugo gedit /etc/apache2/ports.conf

Y debe tener la linea:

Listen 443

Si no la tiene, agrégala.

Puede ser que tambien requieras editar el archivo /etc/hosts para definir el nombre de tu servidor:

sudo gedit /etc/hosts

y verifica que este comience con algo parecido a esto:

127.0.0.1 localhost
127.0.1.1 joel-laptop

Ahora, reiniciemos el servidor Apache:

sudo /etc/init.d/apache2 restart

Si no da problemas entonces vamos bien, ya tenemos instalado el modulo SSL para conexiones seguras, necesarias para el correcto funcionamiento de Magento, procedemos a descargar Magento, descomprimimos el archivo ZIP y ponemos la carpeta magento en /var/www

Abrimos una ventana de terminal y damos permisos de escritura a algunas carpetas de magento:

cd /var/www/magento
chmod 777 app/etc
chmod 777 var
chmod 777 media

Magento requiere una base de datos ya creada, asi que hagamos una usando phpMySQLAdmin, en nuestro navegador web ponemos la direccion: http://localhost/phpmyadmin/ para entrar requerimos usar el login root y el password que definimos al momento de instalar MySQL cuando instalamos los paquetes LAMP, espero no se te haya olvidado.

magentodb.jpg

En la pantalla anterior podemos crear rápidamente la base de datos con solo poner el nombre y presionar el botón Create (existen muchos otros métodos pero creo este es lo mas sencillo), después de eso procedemos al asistente de instalación de magento con la dirección http://localhost/magento

La primera pantalla es aceptar la licencia de uso, no creo necesites ayuda en esta parte.

La siguiente es para saber donde estas ubicado, selecciona tu lenguaje, zona horaria y moneda y presiona Continue.

step2.jpg

El siguiente paso puede tener o no problemas… debe descargar/configurar algunos archivos/librerías, pero aveces no funciona, prueba presionando el boton Proceed with automatic download (beta), si todo sale bien veras un recuadro negro de letras verdes haciendo su respectiva magia y al final del texto el mensaje que todo salio bien, o un mensaje de error si no, si ocurre esto ultimo (PEAR ERROR: install failed) entonces mejor procedemos a hacer la instalación manualmente, abre una ventana de terminal y ejecuta lo siguiente:

cd /var/www/magento

./pear mage-setup

./pear install mage-core/Mage_Pear_Helpers mage-core/Lib_ZF mage-core/Lib_Varien

./pear install mage-core/Mage_All mage-core/Interface_Install_Default

./pear install mage-core/Interface_Frontend_Default mage-core/Interface_Adminhtml_Default

Y esperemos eso salga bien, igual si te marca algun error puedes continuar tranquilamente, no parecen ser vitales para el sistema jeje…

Después de haber logrado (o no)  instalar automática o manualmente procedemos presionando el botón Continue after manual download

Lo siguiente es la base de datos de magento, en teoría solo es necesario poner el password de root, asi que procedemos a ponerlo y presionar el botón Continue.

step3.jpg

Después de unos segundos tendremos lista la estructura de tablas de la base de datos para Magento, la siguiente pantalla es para definir password para el sistema de administración de Magento, osea la cuenta de administrador, rellena los campos pero asegurate de no olvidar tu password, también deberás definir una llave de encriptación, aquí puedes poner lo que se te antoje, lo que hara esta llave es aplicar un algoritmo basado en lo que definas aquí para no dejar al descubierto números de tarjetas de crédito, passwords y demás cosas, si la dejas en blanco el sistema generara una por ti que te mostrara en la siguiente pantalla.

Felicidades! eso es todo, ya debes tener listo tu sistema ecommerce Magento.

Si, se que parece un mal tutorial por los errores que pueden o no salir siguiendo este método, pero eso también depende mucho de la versión de Magento que estés probando, que hasta no salir la versión 1.0 no puede considerarse estable.