ITCooky Recetas

Vamos a cocinar it cositas

¡Cómo migrar un sitio web con WordPress y un foro phpBB de CentOS a Ubuntu en Hetzner!

дата septiembre 4, 2022

Pasó lo imprevisto, los creadores de Linux más popular para hacer sitios web mandó todos a la mierda y lo hizo ya hace un tiempo, es que yo recién ahora lo senti en mi mismo cuando quise actualizar algo y ni repositorios funcionan. El problema de CentOS era su hermandad con Red Hat – el Linux comercial, ellos extrajeron el código de la comunidad(volviendo en CentOS), pero en algun momento vendedores dijeron «a que se jodan todos», ese fue el fin de CentOS… A y otra cosa – los precios de Hetzner suben un 10 % desde septiembre para nuevos clientes, pero para antiguos solo desde el 1 de enero… Todo, todo, todo por migrar ya, y solo queda una opcion Ubuntu!!!

(¡Ese no es el precio total t +2,26 € por 47 Gb!)

No es mi primera migracion, por supuesto, y en Hetzner es la segunda, aquí está el primero descrito por Creamos un sitio http2 en cloude (VPS) hosting HETZNER en Alemania! No escribiré en detalle sobre como crear un VPS allí, yo creé un VPS igual y migre todo en un día!

Ubuntu en Hetzner es ya 22.04.1.

Welcome to Ubuntu 22.04.1 LTS (GNU/Linux 5.15.0-46-generic x86_64)

Me mandan al email una contraseña y entro a VPS con ssh

Una práctica común cuando root no connecta directamente a través de ssh, hay que ingresar como usuario y otorgarle superderechos.
useradd user1
passwd user1

le damos derecho a este usuario a iniciar sesión vía ssh
vi /etc/ssh/sshd_config
añadir una línea
AllowUsers user1
y prohíba ir como raíz, encuentre esta línea y llévela a la forma
PermitRootLogin no
reiniciar ssh
service sshd restart
Y ahora solo puede iniciar sesión a través de ssh como user1

Tenía versiones bastante antiguas de PHP y MySQL

PHP 7.4.11 (cli) (built: Sep 29 2020 10:17:06) ( NTS )
MySQL(i) 5.7.31

Quede la versión de PHP y MySQL insrtale nueva la octava, con algunos problemas, por supuesto!

Instalacion de PHP
La versión más popular y usada de PHP no está en el repositorio estándar de paquetes de Ubuntu… bueno, ¡también tiene sus cucarachas! Entonces lo ponemos desde otro lugar, ¡todos lo hacen!

sudo apt -y install software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt -y install php7.4
sudo apt -y install php7.4-fpm php7.4-mysqlnd php7.4-xml php7.4-gd php7.4-mbstring

Necesito todos estos módulos adicionales para el foro de phpBB

Start php-fpm
sudo systemctl start php7.4-fpm

Editando su configuración
vi /etc/php/7.4/fpm/pool.d/www.conf

Es bastabte dificil enteder como configurar php-fpm… hay que sentir el load de servedor y evitar el hight load…

user = nginx
group = nginx 

listen = /run/php/php7.4-fpm.sock


listen.owner = nginx 
listen.group = nginx
listen.mode = 0660


pm = dynamic
pm.max_children = 100
pm.start_servers = 5
pm.min_spare_servers = 1
pm.max_spare_servers = 10
pm.max_requests = 1500

reiniciarlo
sudo service php7.4-fpm restart

Por cierto, Ubuntu ensista en poner la nuevo version de php, pero la elimino y lo configuro en 7.4

PHP 7.4.30 (cli) (built: Aug  1 2022 15:06:35) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.30, Copyright (c), by Zend Technologies

Instalacion de MySQL
Al diablo la versión antigua, instalaré la 8
sudo apt install mysql-server

Establecer contraseña de administrador
sudo mysql

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Instalacion de Nginx con http2
En Ubuntu http2 es más fácil de configurar que en CentOS. Obtengo la última versión de nginx según las instrucciones www.nginx.com/resources/wiki/start/topics/tutorials/install/

vi /etc/apt/sources.list.d/nginx.list
add

deb https://nginx.org/packages/ubuntu/ jammy nginx
deb-src https://nginx.org/packages/ubuntu/ jammy nginx

instalamos
sudo apt install nginx
jammy es el mote de Ubuntu version 22

Por supuesto que hay algún tipo de error con key

If a W: GPG error: https://nginx.org/packages/ubuntu focal InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY $key is encountered during the NGINX repository update, execute the following:

Hace
wget http://nginx.org/keys/nginx_signing.key
apt-key add nginx_signing.key
sudo apt update
sudo apt install nginx

En fin
nginx -v

nginx version: nginx/1.22.0

Inicie nginx y haga que comience en el arranque del servidor
sudo systemctl start nginx
sudo systemctl enable nginx

http2 necesita OpenSSL versión 1.0.2
openssl version
ya tenemos una mayor

OpenSSL 3.0.2 15 Mar 2022 (Library: OpenSSL 3.0.2 15 Mar 2022

Eso es todo, luego, en las configuraciones de nginx, ¡solo necesitará escribir una palabra en dos lugares!


Transferir y inicar un sitio en WordPress

En el antiguo host, archivamos toda la carpeta con el sitio
tar -cvf itc.tar ./itcooky.com
Hacemos dump de la base MySQL
mysqldump -user root -p wpit > ./wpit.sql

Hay que descargarlo de manera conveniente al nuevo host con wget o scp

Descomprimir en una carpeta /usr/local/www/
tar -xvf it.tar.gz

Entramos al MySQL
mysql -u root -p
Creamos un usuario, una base de datos, establecemos una contraseña: tengo un nombre para todos wpit

CREATE DATABASE wpit;
CREATE USER 'wpit'@'localhost' IDENTIFIED BY 'QWErty123!';
GRANT ALL PRIVILEGES ON wpit.* TO 'wpit'@'localhost';
ALTER USER 'wpit'@'localhost' IDENTIFIED WITH mysql_native_password BY 'QWErty123!';
exit

Llenamos la base
mysql -u root -p wpit < wpit.sql

En ./wp-config.php escibimos una nueva contraseña de la base de datos si es que es nueva

Crear una configuración para este sitio
vi /etc/nginx/conf.d/it.conf

Code

server {
listen        80;
listen [::]:80;
    server_name www.itcooky.com itcooky.com;
    resolver 8.8.8.8;
  

access_log  off;

root   /usr/local/www/itcooky.com;


location / {
        index  index.php;
}

error_page 404 /404.html;
error_page 500 /500.html;
error_page 502 /502.html;
error_page 503 /503.html;
error_page 504 /504.html; 

location ~ \.php$ {
        fastcgi_pass   unix:/run/php/php7.4-fpm.sock; 
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include        fastcgi_params;
}

location ~ .(gif|png|jpeg|jpg|svg)$ {
     valid_referers none blocked ~.google. ~.bing. ~.yahoo. ~.yandex. itcooky.com *.itcooky.com;
     if ($invalid_referer) {
        return   403;
    }
}

location ~ /\.ht {
        deny  all;
    }
}

Aquí debe escribir en fastcgi_pass lo que escribimos en la configuración php-fpm

Y aquí es demasiado pronto sin ssl sin http2

Reload nginx
service nginx reload

¡Cambiamos en nuestro registrador DNS los IP4 e IP6 a ynos nuevos para este sitio y esperamos hasta que se actualicen!

El sitio apareció en http, pero en https da error, todo es correcto, necesita actualizar los certificados de Lets Encrypt

Instalamos
sudo apt install certbot python3-certbot-nginx

Y hacemos los certificados
sudo certbot --nginx -d itcooky.com -d www.itcooky.com

El bigote funcionó y Lets Encrypt ingresó lo que se necesitaba en el config de nginx para este sitio, pero solo al final, ¡lo arrastré a la parte superior!

server {
  listen [::]:443 ssl http2; # managed by Certbot
  listen 443 ssl http2; # managed by Certbot
	server_name www.itcooky.com itcooky.com;
    resolver 8.8.8.8;
    ssl_certificate /etc/letsencrypt/live/itcooky.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/itcooky.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
access_log  off;
root   /usr/local/www/artmundo.ru;

location / {
    index index.php;
}

error_page 404 /404.html;
error_page 500 /500.html;
error_page 502 /502.html;
error_page 503 /503.html;
error_page 504 /504.html; 

location ~ \.php$ {
        fastcgi_pass   unix:/run/php/php7.4-fpm.sock; 
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include        fastcgi_params;
}

location ~ .(gif|png|jpeg|jpg|svg)$ {
     valid_referers none blocked ~.google. ~.bing. ~.yahoo. ~.yandex. itcooky.com *.itcooky.com;
     if ($invalid_referer) {
        return   403;
    }
}

location ~ /\.ht {
        deny  all;
    }

}

En las líneas de listen, hay que poner http2 y cambiar 80 a 443.

También agrego un config más para que todo se tire desde el puerto 80 al 443

server {
    if ($host = www.itcooky.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    if ($host = itcooky.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    listen 80;
    listen [::]:80;
    server_name itcooky.com www.itcooky.com;
    return 301 https://itcooky.com$request_uri;

access_log  off;
}

Aquí, por cierto, el sertbot también irrumpe y escribe su propia cosa

¡Reinicio nginx y veo que funciona y pasa la prueba en http2!

Migracion de phpBB
El foro resultó ser demasiado grande para archivarlo y descargarlo, así que lo descargué directamente a través de scp
sudo scp -r root@123.123.123.123:/usr/local/www/itcooky.com/forum ./
- para esto abrí el acceso root'y a través de ssh
- todo se descarga incluso lo que está en enlaces simbólicos
- después de la descarga, todo lo que necesita hacer es chow a nginx:nginx

Repetimos los pasos de crear y llenar la bas de MySQL, el passqrod va a ./forum/config.php

Estoy tratando de arrancar pero no arranca, maldice GROUP BY DSC LIMITS

Resulta que esta es una joda muy conocida, uno de mis php addons es muy antiguo (Anvar actualiza "Images from posts", oh, revisé su sitio y ya no existe)
Las versiones de MySQL superior a 5.7. no les gusta la palabra GROUP ella quiere ORDER

Hay consejos de agregar en my.cnf

sql_mode = NO_ENGINE_SUBSTITUTIO

MySQL reiniciado sin efecto

Luego cambié GROUP a ORDER en esos dos lugares donde dice le error y funcionó! ¡Ahora funciona tan bien que ya no puedo reproducir el error!

Por cierto, MySQL mismo dice cómo solucionar este problema...
WL#8693: Remove the syntax for GROUP BY ASC and DESC
... o sea que ELLOS han creado ese error, ELLOS explican como solucionarlo y NOSOTROS tenemos que hacer todo el trabajo de cambiar las palabras asi a lo tonto porque ya no le gusta!

Instalacion de Sphinx para busqueda eficaz en phpBB
Es simple y se instala la misma version vieja 2.2
sudo apt-get install sphinxsearch

Creamos y chown'amos los directorios necesarios.
mkdir {/usr/local/www/sphinx2/,/usr/www/local/sphinx2/log}
chown -R sphinx:sphinx /usr/www/local/sphinx2

Tomamos la configuración del foro desde el panel de administración donde está la búsqueda de sphinx, la ponemos aca /usr/local/www/sphinx2/

Y empieza a indexar por primera vez
indexer --config /usr/local/www/sphinx2/sphinx2.conf index_phpbb_87ye287ye823ye82_main
indexer --config /usr/local/www/sphinx2/sphinx2.conf index_phpbb_phpbb_87ye287ye823ye82_delta
indexer --rotate --config /usr/local/www/sphinx2/sphinx2.conf index_phpbb_87ye287ye823ye82_delta

esa frase la crea el foro 87ye287ye823ye82

Iniciamos
searchd --config /usr/local/www/sphinx2/sphinx2.conf

Y parece que esta escuchando
netstat -tunlp;

tcp        0      0 127.0.0.1:9313          0.0.0.0:*               LISTEN      4961/searchd

Para que se inicie solo después de un reinicio, debe agregar a
crontab -e

@reboot /usr/bin/sleep 10;/usr/bin/searchd --config  /usr/local/www/sphinx2/sphinx2.conf

no se inicia sin sleep, probablemente por demasiado temprano

En el mismo lugar, añadimos un indexador una vez por la noche, uno grande y uno pequeño cada cinco minutos.

*/5 * * * * indexer --rotate --config /usr/local/www/sphinx2/sphinx2.conf index_phpbb_87ye287ye823ye82_delta >> /usr/local/www/sphinx2/log/indexer.log 2>&1 &
13 3 * * * indexer --rotate --config /usr/local/www/sphinx12/sphinx2.conf index_phpbb_87ye287ye823ye82_main >> /usr/local/www/sphinx2/log/indexer.log 2>&1 &

Ya todo listo para phpBB

Copia de seguridad de la base de datos
También añadimos a
crontab -e

5 1 * * * /usr/bin/mysqldump -u backupuser -pf34f\%34f34fKGG wpit > /usr/local/www/archive/wpit_dayly.sql

nota aquí que % comentado \% a lo natural % un comando con ese simbolo no funcionara aca

backupuser lo creamos asi

GRANT SELECT, PROCESS, LOCK TABLES ON *.* TO 'backupuser'@'%' IDENTIFIED BY 'f34f\%34f34fKGG';

antes no habia que agregar PROCESS

y una mas al cron

35 1 7 * * /bin/cp /usr/local/www/archive/wpit.sql  /usr/local/www/archive/wpit.sql

Se guardará una copia de cada 7-mo día del mes hasta el siguiente día 7

Aumento de espacio en VPS
En Hertzner es fácil, hay Volúmenes, puede agregarlo en cualquier momento y luego aumentarlo si es necesario

Allí tiro la carpeta con las fotos, y les pongo un enlace simbólico. En la carpeta donde había una carpeta con imágenes, ejecuto
ln -s /mnt/HC_Volume_123123123/foto1 ./foto1


Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *