Migrando sitio Wordpress a EC2 AWS
Tags: aws, wordpress, webdev, php
Published: 2020-06-28 02:07:24

Me he encontrado con la necesidad de migrar un sitio en Wordpress previamente creado en un PC, para moverlo completamente a un EC2 con Ubuntu.  A continuación los pasos para crear un EC2 con Wordpress, y migrar un sitio hacia este nuevo servidor.

#1. Crear EC2.
Bueno lo primero es crear una cuenta en AWS, un servidor Micro EC2 en Ubuntu esta cubierto en el Free Tier por lo que no tendrías que pagar mensual, este Free Tier te da gratis un servidor (720 horas) de un servidor, si tienes dos servidores contaran como 1440 horas, y por ese segundo si te cobraran.
También dentro del Free Tier encontrarás la posibilidad de hast 30GB para este servidor.

[Ver como crear un EC2]()

#2. Acceder al Servidor
En mi caso use la consola, siempre uso la consola; así que el acceso mediante el comando:

```linux
ssh -i NombreKey.pem usuario@ec2-xxxxxxx.com
```
Ya en el servidor procedemos a instalar, en el caso en particular fue realizado para Ubunto 18

#3 Instalando Wordpress
Antes que nada hay que instalar todas las dependencias para Wordpress, en mi caso me gusta usar aptitude en lugar de apt-get, por lo que lo primero es instalar aptitude.

```linux
sudo apt-get install aptitude
```
hacemos la actualización respectiva para preparar nuestro linux, y creamos las dependencias o sources para los paquetes a instalar; e instalamos Apache2, PHP, y MySQL.
```linux
sudo add-apt-repository ppa:ondrej/apache2
sudo add-apt-repository ppa:ondrej/php
sudo aptitude update
sudo aptitude install apache2 -y
sudo aptitude install -y php7.2
sudo aptitude install mysql-server -y
```
Ahora existen una serie de librerías necesarias para que Php, Apache, y MySQL se integren correctamente

```shell
sudo aptitude install -y libapache2-mod-php7.2 php7.2-common php7.2-mbstring php7.2-xmlrpc php7.2-gd php7.2-xml php7.2-mysql php7.2-cli php7.2-zip php7.2-curl php-imagick
``` 
Realizamos unos cambios en el archivo ini de PHP:
sudo nano /etc/php/7.2/apache2/php.ini
```ini
file_uploads = On
allow_url_fopen = On
memory_limit = 256M
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 360
```

#4. Copiamos el Site.
Copiamos el .sql con el dump de la base de datos en MySQL, y la carpeta comprimida la pasamos también al servidor con el contenido de nuestro sitio.
```
scp -i LaLllave.pem Archivos*.* ubuntu@ec2-xxxxx.com:/home/ubuntu
```
Ingresamos de nuevo al servidor, descomprimimos la carpeta en /var/www
Ademas de configurarla para que Apache tenga acceso total y demas parametros de acceso a las carpetas.
```
sudo unzip ArchivoComprimido.zip Carpeta
sudo mv Carpeta /var/www/Carpeta
sudo chown -R www-data:ubuntu /var/www/Carpeta
sudo find /var/www/Carpeta/ -type d -exec chmod 755 {} \;
sudo find /var/www/Carpeta/ -type f -exec chmod 644 {} \;
sudo chmod 600 /var/www/Carpeta/wp-config.php
sudo chmod 600 /var/www/Carpeta/.htaccess
```
Confirmamos que el archivo .htaccess esta en la ruta correspondiente donde esta la carpeta
```
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
```

#5. Copiamos la Base de datos.
Con nuestro archivo sql ya en el servidor, debemos primero crear la base de datos, posteriormente hacer el volcado del archivo en dicha base de datos; pero para dedicar un usuario únicamente a esto creo un usuario que denominare: wpuser con un password wppassword:
Para ingresar a mysql no necesitare clave de root, debemos asegurar a root, pero por el momento creare el usuario.
```mysql
CREATE DATABASE BaseDatosWP;
CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'wppassword';
GRANT ALL PRIVILEGES ON BaseDatosWP.* TO 'wpuser'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
exit;
```
De nuevo en el prompt del OS, antes de hacer el dump debo asegurarme que en el archivo SQL las rutas deben tener inicialmente los valores del dominio o ruta en la que estoy instalando el servidor, por lo menos inicialmente deberá apuntar a la dirección del dns-server de aws al que estamos conectado:  
ec2-xxxxxxxxxx.com/

En mi caso estaba siteUrl en la tabla wp_options con el valor de localhost; por lo que para iniciar bien enrutamos todo lo de Localhost hacia el dominio de aws.

Ahora si vamos a hacer el dump.
```
mysql -u wpuser -p BaseDatosWP < ArchivoSQL.sql
```
Listo ya tendriamos nuestra base de datos.  Editamos el archivo wp_config.php en /var/www/Carpeta en el que pondremos los datos de la base de datos.

5. Configuramos el Site en Apache.
Creamos el site mediante las siguientes instrucciones:
```
cd /etc/apache2/sites-available
sudo a2dissite 000-default.conf
sudo nano site-wordpress.conf
```
Editamos el archivo similar al siguiente:
```
<VirtualHost *:80>
     ServerAdmin webmaster@dominio.com
     DocumentRoot /var/www/Carpeta
     ServerName dominio.com
     ServerAlias www.dominio.com

     <Directory /var/www/Carpeta/>
        Options +FollowSymlinks
        AllowOverride All
        Require all granted
     </Directory>

     ErrorLog ${APACHE_LOG_DIR}/Carpeta/error.log
     CustomLog ${APACHE_LOG_DIR}/Carpeta/access.log combined
</VirtualHost>
```
Posteriormente creamos entonces y finalizamos la configuración de Apache.
```
sudo a2ensite siteWordpress.conf
sudo a2enmod rewrite
sudo apache2ctl configtest
sudo service apache2 restart
```
Listo.  cuando ingresamos al dominio desde cualquier navegador debe funcionar perfectamente.

http://ec2-xxxxxx.com

Deja tus comentarios y observaciones en el proceso; espero pueda servirte de ayuda.