Instalar y configurar un WordPress en nuestra instancia AWS

Para este tutorial utilizaremos una máquina gratuita de Amazon Web Services con CentOS. En nuestros tutoriales podéis ver

cómo montar una máquina gratuita con Amazon Web Services

cómo montar un servidor web

cómo alojar varios dominios en vuestro servidor Apache.

Una vez configruado el servidor, vamos por pasos a instalar nuestro WP.

 

Instalación de WordPress en nuestro servidor AWS

1) Descargamos el paquete de instalación de Worpdress en nuestro CentOS:

wget https://wordpress.org/latest.tar.gz

2) Descomprimimos el paquete de instalación:

tar -xzf latest.tar.gz

Se descomprime en un directorio llamado wordpress.

Configuración de Worpdress

3) Creamos un usuario y una base de datos para la instalación de Worpdress (si no tenéis, podéis ver cómo instalar y configurar vuestro servidor MySQL aquí). Para ello:

  • Nos logamos en nuestro servidor MySQL como root:
mysql -u root -p
  • Creamos usuario y password
CREATE USER 'wordpress-user'@'localhost' IDENTIFIED BY 'your_strong_password';
  • Creamos la base de datos
CREATE DATABASE `wordpress-db`;
  • Le damos al usuario todos los privilegios
GRANT ALL PRIVILEGES ON `wordpress-db`.* TO "wordpress-user"@"localhost";
FLUSH PRIVILEGES;
  • Salimos de mysql
exit

4) Creamos el archivo wp-config.php. Para ello:

  • Vamos al directorio de wordpress
cd wordpress
  • Creamos wp-config a partir del ejemplo
cp wp-config-sample.php wp-config.php
  • Lo editamos
nano wp-config.php
  • Definimos la base de datos, el usuario y la password con los datos anteriores
define('DB_NAME', 'wordpress-db');
define('DB_USER', 'wordpress-user');
define('DB_PASSWORD', 'your_strong_password');

5) A continuación movemos nuestra instalación de wp al lugar en que la queremos, en nuestro caso la raíz de nuestro vhost:

sudo mv * /var/www/example.com/public_html/

Si ahora (y es recomendable hacerlo) vamos a la dirección de nuestro site, encontraremos la continuación del proceso de instalación de WP, su famosa instalación en 5 minutos.

Posibles problemas con ssh

Si no hemos instalado un servidor ftp podemos trabajar con nuestra conexión ssh, pero para ello necesitamos actualizar la configuración, ya que si no no podremos hacer que WP se actualice.

Para ello tenemos dos solcuiones:

1) A nivel de configuración: la más recomendable es cambiar la configuración del Apache. En este tutotial informan muy bien de cómo cambiar la configuración del Apache para permitir que el WP cargue.

2) A nivel de pluguin: Para facilitar esta tarea, hay un útil plugin para WP: SSH SFTP Updater Support. Utilizad el Filezilla para subir este plugin a la carptea de plugins y activadlo. Ahora, al intentar hace un update o instalar un plugin, se ops presentarña la página de ftp pero con un añadido: ssh2.

Alli poned la ip o dns externas del servidor, el usuari ec2-user, sin password y la clave privada incluido:

—–BEGIN RSA PRIVATE KEY—–

—–END RSA PRIVATE KEY—–

Posibles problemas con permalinks

Podéis seguir esta guía para solucionar los problemas con pemalinks. Si surgen, esta vez se trata muy probablemente de un problema de reescritura.

 

Alojar un dominio en el vhost de Apache

Si tenemos un servidor Apache en red para mostrar nuestras webs, y tenemos más de una web para mostrar, lo mejor es configurar nuestro Apache para albergar diferentes webs. Para ello, debemos configurar el vhost.

En este pequeño tutorial trabajamos con una máquina gratuita de AWS con un CentOS.

Sigamos los siguientes pasos:

1) Creamos un directorio en nuestro /var/www para el nuevo dominio:

sudo mkdir -p /var/www/example.com/public_html

2) Si no hemos actualizado los permisos para interactuar con nuestro www, debemos hacerlo ahora. Podéis consultar nuestra guía sobre cómo crear un servidor Apache en una instancia de AWS.

3) Creamos un archivo index.html en ese directorio con relleno de prueba para efectuar el test.

sudo nano /var/www/example.com/public_html/index.html

4) Una vez guardado y creado, entramos en la configuración de Apache

sudo vi /etc/httpd/conf/httpd.conf

5) Vamos a la sección de Virtual Hosts al final de todo del documento.

6) Descometamos (le sacamos la almohadilla) la línea:

NameVirtualHost *:80

7) Descomentamos:

desde <VirtualHost *:80> hasta </VirtualHost>

8) Dentro de <VirtualHost *:80>:

  • En Document Root ponemos el directorio creado anteriormente: /var/www/example.com/public_html
  • En Server Name ponemos el nombre del dominio con www.
  • Creamos Server Alias y ponemos sin www
  • Creamos e-mails, logs, etc, recomendables aunque no necesarios

9) Abrimos de nuevo un <VirtualHost *:80> y repetimos el proceso para el resto de dominios que tengamos.

10) Guardar y salir

11) Reiniciamos el Apache

sudo service httpd restart

12) Debemos, por supuesto, cambiar las redirecciones y DNSs de nuestro parking de dominios. Siempre son diferentes, pero la esencia es la misma: aquí tenéis un buen resumen de cómo manejar los dns.

 

Configurar FileZilla para trabajar con SSH

Si trabajamos con plataformas como Amazon Web Services (ver nuestro tutorial sobre cómo configurar una máquina gratuita con AWS), se nos proporciona una conexión securizada .SSH con sus claves.

La buena noticia es que si tenemos este tipo de conexión no es necesario configurar un servidor FTP en nuestro servidor. Podemos utilizar FileZilla para subir y mantener nuestros archivos en el servidor.

Vamos por puntos:

1) Para las conexiones securizadas Filezilla utiliza PuTTY, de manera que si hemos decidido utilizar openssh tenemos que hacer algunos cambios.

2) Nos decargamos Puttygen.

3) Convertimos nuestra clave privada .pem con PuTTYgen: cargamos nuestra clave privada, el .pem que hemos bajado en PuTTYgen:

MENÚ: Conversions —> Import Key —> xxxx.pem

No seleccionamos una frase de seguridad, Filezilla no la soporta.

4) Guardamos la private key en el formato .ppk, que es el que comprende FileZilla.

5) Cargamos el archivo .ppk en FileZilla. Para ello vamos a:

MENÚ: Edit —> Settings —> Connection —> SFTP

Y allí cargamos la .ppk. Nos pedirá confirmación y seleccionamos OK.

¡Ya tenemos conexión SFTP a nuestro sistema de archivos!

Si hay problema de denegación de escritura o borrar, es un problema de permisos. Dad permisos de escritura al grupo.

 

Crear un servidor web en una instancia de AWS

Vamos a crear, para este ejemplo, un servidor Web en una instancia de Amazon Web Services con CentOS. Si todavía no tenéis ninguna instancia, podéis seguir nuestro tutorial sobre Como crear una instancia gratuita en Amazon Web Services (AWS).

Para que nuestra instancia trabaje como servidor web, tenemos que instalar el software necesario, además de asegurarnos que tenemos abiertos los puertos para HTTP y HTTPS (ver en nuestro post citado cómo abrir puertos utilizando los Grupos de Seguridad).

(Este pequeño tutorial se basa en los pasos indicados en la página de Amazon, con algunos cambios actualizados.)

Instalación y configuración del software necesario para el servidor web

El software que necesitamos es el Apache Web Server, el MySQL y el PHP. Abrimos la consola (ver post citado) y mediante la siguiente instrucción lo instalamos

sudo yum groupinstall -y "Web Server" "MySQL Database" "PHP Support"

Tras cada instalación nos aseguramos de que no hay errores y de que vemos el mensaje de la consola Complete! o similiar.

Instalamos el paquete php-mysql:

sudo yum install -y php-mysql

E iniciamos el servidor Apache

sudo service httpd start

Si vemos un [OK] verde es que todo está correcto

Utilizamos el comando chkconfig para inicializar el servidor Apache con cada reinicio de máquina:

sudo chkconfig httpd on

Para probar que definitivamente estamos en la www, ponemos nuestro dns público o nuestra ip pública en un navegador, y si vemos la página de test es que todo está correcto.

Poder empezar a poner contenido en nuestra web en /var/www/html. Esta localización por defecto es del usuario root; tenemos que modificar los permisos y las propiedades. Para ello creareemos un grupo www y le daremos permisos y propiedades para el directorio /var/www, de manera que cualquier miembros de este grupo pueda trabajar allí. Añadimos el grupo:

sudo groupadd www

Añadimos nuestro usuario en el grupo:

sudo usermod -a -G www ec2-user

Salimos y volvemos a entrar para que el grupo se actualice:

exit
ssh…

Una vez hemos vuelto a entrar confirmamos el grupo:

groups

que nos dará:

ec2-user wheel www

Cambiamos la propiedad de /var/www y su contenido al grupo www:

sudo chown -R root:www /var/www

Cambiamos los permisos de /var/www y sus subdirectorios:

sudo chmod 2775 /var/www

Nos aseguramos de que cualquier nuevo directorio tendrá los mismos permisos:

find /var/www -type d -exec sudo chmod 2775 {} +
find /var/www -type f -exec sudo chmod 0664 {} +

Probamos que todo está correcto creando un fichero .php:

echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php

Y ahora volvemos a cargar en un navegador nuestra ip o dns / phpinfo.php.

¡Si vemos la página de php es que todo está correcto!

La eliminamos por razones de seguridad:

rm /var/www/html/phpinfo.php

 

Pasos para securizar nuestra instalación de mysql en el servidor

Inicializamos el servidor mysql:

sudo service mysqld start

Inicializamos la instalación segura de mysql:

sudo mysql_secure_installation

Y seguimos los pasos:

Introducimos una contraseña para el usurio root de mysql (simplemente ENTER, puesto que no hemos puesto ninguna).

Cambiamos la password: Y e introducimos la password

Quitamos el usuario anónimo: Y

Quitamos acceso externo de root: Y

Borramos la base de datos test: Y

Volvemos a generar las tablas de privilegios: Y

¡Y ya está!