Una vez con el servidor configurado, quedaba el paso de mover los datos del servidor antiguo al nuevo. Este es un proceso delicado donde se busca que el tiempo de servicio sea el máximo posible (minimizar el downtime). Para ello, preparé el siguiente flujo de trabajo:
Servidor de origen
- En primer lugar es necesario dar acceso via SSH al servidor antiguo. Para ello se utiliza ssh-keygen y luego he añadido la clave pública generada en el ~/.ssh/authorized_keys del servidor de destino.
- Copiar los datos de la aplicación y crear un tar.gz:
sudo tar -czf ~/transfers/proyecto.tar.gz .
Nos colocamos en la carpeta que queremos comprimir para que así la estructura de directorios interna sea buena. De lo contrario incluye la ruta absoluta y al descomprimir da problemas. - Haz un dump de la base de datos y comprimirlo al máximo:
mysqldump --opt -u proyecto_usuario -p proyecto_db | gzip -9 > ~/transfers/proyecto_db.sql.gz
- Utilizo rsync para sincronizar el directorio transfers:
rsync -a ~/transfers/ ubuntu@host_nuevo:~/transfers
Servidor de destino:
- Crear un nuevo virtual host:
sudo mkdir /var/www/proyecto.com
sudo chown -R $USER:$USER /var/www/proyecto.com/
sudo chmod -R 755 /var/www/proyecto.com/
mkdir /var/www/proyecto.com/public_html
sudo nano /etc/apache2/sites-available/proyecto.com.conf
- En el archivo se introduce este contenido:
<VirtualHost *:80>
ServerName proyecto.com
ServerAlias www.proyecto.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/proyecto.com/public_html
ErrorLog ${APACHE_LOG_DIR}/error.proyecto.log
CustomLog ${APACHE_LOG_DIR}/access.proyecto.log combined
<Directory /var/www/proyecto.com/public_html>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
- Se ejecutan estos comandos para activar el sitio:
sudo apachectl configtest
sudo a2ensite opinionesjuguetes.com
sudo systemctl restart apache2
- Importar la base de datos y los datos en sí. Utilizo la herramienta pv que se puede instalar con apt-get y muestra una barra de progreso:
cd /var/www/proyecto.com
tar -zxf ~/transfers/proyecto.tar.gz
sudo chmod -R 755 /var/www/proyecto.com/
pv ~/transfers/proyecto_db.sql.gz | gunzip | mysql -u proyecto_usuario -p proyecto_db
- A continuación toca actualizar las DNS para que apunten al nuevo servidor, y después ejecutamos este comando para activar HTTPS:
sudo certbot
Debemos además asegurarnos de que el sistema de deployments apunte al nuevo servidor. Si encontramos algún error, estos archivos son útiles:
// modificar la configuración de PHP
sudo nano /etc/php/8.0/fpm/php.ini
// reiniciar PHP
sudo systemctl restart php8.0-fpm
// si hay errores al hacerlo, verlos:
sudo journalctl -xeu php8.0-fpm.service
// configuración de PHP-FPM y del pool:
sudo nano /etc/php/8.0/fpm/php-fpm.conf
sudo nano /etc/php/8.0/fpm/pool.d/www.conf
// reiniciar Apache:
sudo systemctl restart apache2
// Ubicación de los logs de Apache:
/var/log/apache2
// archivo de configuración de Apache:
/etc/apache2/apache2.conf
// Si no funcionan las URLs ni el .htaccess, es que hay que activar esto:
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
Sin comentarios todavía