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!!!
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