ITCooky Recetas

Vamos a cocinar it cositas

Como mover un website en WordPress, con el foro phpBB, al nuevo server de RUVDS con todo y letsencrypt, http2!

дата abril 1, 2020

Ya me he mudado varias veces de un VPS a otro (¡la última vez en 2016 aquí Configurando, moviendo, probando un nuevo VPS en CentOS 6! ). Es re facil darse la cuenta de que ya es la hora de huiur de un hoster al otro. Primero, debe mirar las tarifas, si su hoster está muy por detrás del mercado, entonces el hoster ya eta pudrido, al menos dejo ya de desarrollarse y crecer. Segundo – website es re lento por las tardes con la misma configuración y la cantidad de visitantes que de madrugada, esto no es una escasez de recursos, solo un servidor antiguo: ¡un hoster de mierda!

Mi web estaba en hc.ru pero nic.ru lo devoró: un dia entro en mi cuenta personal, y me dicen que ya no eres nuestro cliente, vete al otro sitio … descaradamente, groseramente que demonios pasa! La tarifa seguía siendo la misma, no se suponía que hubiera sugerencias para mudarse al servidor del nuevo hoster, aparentemente nic.ru tenía una estrategia de marketing: mientras pagan pagan y luego que se vayan a la mierda.!

Bueno, asi llegue a RUVDS porque tienen su propia sección en habr.ru y no solo hay comentairos negativos por ahi. Elijo una tarifa con más núcleos, creo que para php-fpm será util, y CentOS 7 puro.

Una hora aproximadamente y el servidor está instalado, la barra de progreso está en su cuenta. Primero que nada, miramos lo quenos dieron
uname -a

Linux ruvds-z2aro 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

Miramos cuántos bit es la OS
uname -m

x86_64

64 bit que bien
cuántos núcleos
nproc

4

actualizadndo
yum update
¡Veo que openssl es demasiado viejo para mi servidor web, versión 1.0.2 para http2 no vale, los browser dan hhtp2 solo con SSL (pero el protocolo funciona y sin SSL, los browser son re guarda bosques)!

después de la actualización, por si acaso (había kernel en la lista), hago reboot
reboot

Es una práctica común cuando el root no connectss directamente a ssh, primero ingresa como un usuario y le otorga super derechos.
useradd user
passwd user

le damos el derecho a este usuario de iniciar sesión a través de ssh (aunque ya existe, es decir, prohibimos otros)
vi /etc/ssh/sshd_config

agregar línea

AllowUsers user

y prohibir entrar al root

PermitRootLogin no

Reiniciamos ssh
service sshd restart

Y ahora solo el usuario puede acceder a ssh
y luego aumentar los derechos con
su

Arreglamos el tiempo en el servidor
La zona horaria es correcta, pero la hora es porcompleto equivocada, los minutos ni siquiera coinciden. Pongo ntp
yum install ntp
Lo activo para que se inicia por simismo
systemctl start ntpd
systemctl enable ntpd

Y miro lo que dirá y qué hora es ahora en el servidor
ntpq -p
date -R

La hora es precisa ahora

Preparación de un servidor web para http2
Primero necesitas actualizar openssl es muy viejo ahora
openssl version
da

OpenSSL 1.0.2k-fips  26 Jan 2017

Para instalar desde la fuente, necesita poner esto, de todos modos, se necesita algo más, lo instalaremos luego
yum group install 'Development Tools'
yum install wget

Vamos a la carpeta donde necesitas download todo
cd /usr/local/src
wget https://www.openssl.org/source/openssl-1.1.1e.tar.gz
tar -xf openssl-1.1.1e.tar.gz

Vamos a la carpeta y comenzamos el ensamblaje; si hay errores, debes invistigarlos y corregirlos.
cd openssl-1.1.1e
./config
make
make install

Después de la compilación, debe copiar los archivos compilados.
cp /usr/local/bin/openssl /bin
cp /usr/local/lib64/libcrypto.so.1.1 /lib64
cp /usr/local/lib64/libssl.so.1.1 /lib64

La nueva versión esta instalada, ya que fue puesta a mano, existe el temor de que yum ponga alguna otra version al actualizar
openssl version

OpenSSL 1.1.1e  17 Mar 2020

Instalar nginx apto para http2
También debe estar de la última versión, y no solo, sino ensamblado con parámetros especiales
cd /usr/local/src
wget https://nginx.org/download/nginx-1.17.9.tar.gz
tar -xf nginx-1.17.9.tar.gz
cd nginx-1.17.9

Sé que para el ensamblaje requerirá instalar eso
yum install pcre-devel
yum install gd-devel
yum install zlib-devel
yum install openssl-devel

Y el comando mismo para la asamblea, el mínimo argumentos necesarios, y al final se indica dónde esta nuestro openssl /usr/local/src/openssl-1.1.1e/

./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --error-log-path=/var/log/nginx/error.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-openssl=/usr/local/src/openssl-1.1.1e/
make
make install

Esta instalación es más completa, arroja archivos inmediatamente donde sea necesario y puede ver la version ya
nginx -v

nginx version: nginx/1.17.9

Agregar usuario y carpeta de nginx
useradd nginx
chown -R nginx:nginx /etc/nginx/

También es necesario crear un archivo que ayude a iniciar y detener nginx
vi /usr/lib/systemd/system/nginx.service
insertar texto

[Unit]
Description=nginx - high performance web server
Documentation=https://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/conf/nginx.conf
ExecStart=/usr/sbin/nginx -c /etc/nginx/conf/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID

[Install]
WantedBy=multi-user.target

Lanzamos
systemctl start nginx
systemctl enable nginx

Como se trata de centOC, aún debe abrir el puerto
firewall-cmd --zone=public --permanent --add-service=http
firewall-cmd --zone=public --permanent --add-service=https
firewall-cmd --reload

funciona

Instalar Mysql
CentOS, no se que le pada, no lo entiendo, no hay nada essemcial en los repositorios y ¡¡¡también tienes que poner todo con tus manos aquí para MySQL !!!

Entramos en la carpeta, descargamos e instalamos el paquete
cd /usr/local/src
wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
md5sum mysql80-community-release-el7-3.noarch.rpm
rpm -ivh mysql80-community-release-el7-3.noarch.rpm

instale eso y configure la versión mysql
yum install yum-utils
yum-config-manager --disable mysql80-community
yum-config-manager --enable mysql57-community

instalamos
yum install mysql-community-server mysql-devel

lanzamos
systemctl start mysqld
systemctl enable mysqld

encuentra una contraseña temporal
grep "password" /var/log/mysqld.log
Luego, lanzar eso y cambiar otras configuraciones
mysql_secure_installation

Instalamos php 7.2
Otra vez todo yo con sus propias manos, phpBB solo funciona en php 7.2, por lo que debe instalarlo
yum install epel-release
yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
yum --enablerepo=remi-php72 install php php-fpm php-mysql php-xml php-gd php-mbstring

php-xml – se necesita para phpBB
php-gd – eso para images para un addon de phpBB
php-mbstring – y con eso phpBB funciona mejor al igual que la busqueda Sphinx

Y para que los nuevos módulos instalados funcionen, debe reiniciarphp-fpm

editamos php-fpm
vi /etc/php-fpm.d/www.conf
cambiar aaaaa, jaja esta apache

user = nginx
group = nginx

y tmbn

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

y eso

listen = /var/run/php.sock

En la carpeta predeterminada en centOS7, el proceso no arranco, cambié la carpeta en la configuración

y eso

pm = static
pm.max_children = 10 

también haz eso
mkdir /var/lib/php/session
chown -R nginx:nginx /var/lib/php/session

Para iniciarse es necesario
systemctl start php-fpm.service
systemctl enable php-fpm.service

Lanzamiento de prueba de sitio web
Hago una carpeta para sitios futuros
mkdir /usr/local/www
muevo ahi los archivos de nginx
cp /etc/nginx/html /usr/local/www
Hago un archivo allí
vi /usr/local/www/html/info.php
con texto

<?php
phpinfo();
?>

Y cambiamos las configuraciones de nginx
aqui
vi /etc/nginx/conf/nginx.conf
pongo

#user  nobody;
worker_processes  4;

error_log  /dev/null crit;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;



   include /etc/nginx/conf/conf.d/*.conf;

}

Cree una carpeta donde subiremos las configuraciones del sitio
mkdir /etc/nginx/conf/conf.d
crear
vi /etc/nginx/conf/conf.d/default.conf
con tal texto

#
# The default server
#
server {
    listen       80;
  server_name localhost;

    #charset koi8-r;

    #access_log  logs/host.access.log  main;


    location / {
        root   /usr/local/www/html;
        index  index.php index.html index.htm;
    }

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/local/www/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}
    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

    location ~ \.php$ {
        root           /usr/local/www/html;
        fastcgi_pass   unix:/var/run/php.sock;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    location ~ /\.ht {
        deny  all;
    }
}

Reiniciar
service nginx restart
service php-fpm restart

E idealmente debería funcionar, pero nunca funciona, pero funcionó para mí: ¡escribí todos los pasos para mí aquí, en su mayor parte, por supuesto!

Migración y lanzamiento de sitios web
En el servidor anterior, archivo la carpeta con el sitio y hago un dump de base
tar -cvf itc.tar ./itcooky.com
mysqldump --user=root --password --host=localhost wpita > ./wpita.sql

Descargo estos archivos en el nuevo servidor
scp user@123.123.123.123:/home/user/itc.tar ./
scp user@123.123.123.123:/home/user/wpita.sql ./

El archivo puede descomprimirse inmediatamente en una carpeta /usr/local/www/
tar -xvf itc.tar
Y para la base, primero debe crearla y hacer un usuario para ella

Vamos a la consola de MySQL
mysql -u root -p
Creamos un usuario con el nombre y la contraseña anteriores, la base con el nombre anterior (eso solo para no cambier lso config anterioers, pero simepre es bueno cambiar la contraseña)
CREATE DATABASE wpit;
CREATE USER 'wpita'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON wordp.* TO 'wpita'@'localhost';
ALTER USER 'wpita'@'localhost' IDENTIFIED WITH mysql_native_password BY 'QWErty123!';
exit

Si la contraseña de la base de datos MySQL contiene #, entonces Sphinx no podrá leerla, por lo que es mejor no escribir # en la contraseña

Después de eso, puedes llenar en la base
mysql -u root -p wpita < wpita.sql

Para Letsencrypt, debe transferir certificados desde el servidor anterior, pero primero instalarlo en uno nuevo
wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto
./certbot-auto --nginx

Y ahora los certificados en el antiguo servidor
cd /home/user
tar -cvf lc.tar /etc/letsencrypt

en nuevo
cd /usr/local/src
scp user@123.123.123.123:/home/user/lc.tar ./
tar -xvf lc.tar

Y transferiremos todo a la carpeta /etc/letsencrypt , luego deberá configurar la renovación del certificado

Si la carpeta del sitio en el servidor ha cambiado, esto debería reflejarse en los archivos de letencrypt en la carpeta /etc/letsencrypt/renewal, de lo contrario se negará a renpvar los certificados

Para renovar los certificados yo mismo, agregue
crontab -e
texto (se está comprobando, demasiado pronto para actualizar)

19 6 9,18,27 * * /usr/local/src/certbot-auto renew -q&&/usr/sbin/service nginx reload

En el nuevo servidor, hago configuraciones para el sitio
vi /etc/nginx/conf/conf.d/it.conf
Agregue texto: aquí todo lo que pide http simplemente se pasa a https

server {
    listen 80;
    server_name itcooky.com www.itcooky.com;
    return 301 https://www.itcooky.com$request_uri;
}

mas
vi /etc/nginx/conf/conf.d/itSSL.conf
Agregue texto: aquí en la segunda línea apareció http2 si todo se hizo correctamente – el sitio comience a entregar contenido a h2 a los navegadores

server {
    listen      443 ssl http2;
    server_name www.itcooky.com itcooky.com;
    ssl_certificate /etc/letsencrypt/live/itcooky.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/itcooky.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/itcooky.com/chain.pem;
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8;
    add_header Strict-Transport-Security "max-age=31536000";
    add_header Content-Security-Policy "img-src https: data:; upgrade-insecure-requests";
 #charset koi8-r;
 #access_log  logs/host.access.log  main;
location / {
        root   /usr/local/www/itcooky.com;
        index  index.php index.html index.htm;
    }
    error_page  404              /404.html;
    location = /404.html {
        root   /usr/local/www/itcooky.com;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/local/www/itcooky.com;
    }
    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    location ~ \.php$ {
        root           /usr/local/www/itcooky.com;
        fastcgi_pass   unix:/var/run/php.sock;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
 location ~ /(config\.php|common\.php|cache|files|images/avatars/upload|includes|phpbb|store|vendor) {
            deny all;
        }
    location ~ /\.ht {
        deny  all;
    }
}

Reiniciar nginx
service nginx restart

Ahora ingresamos a la cuenta personal de su registrador de dominios y cambiamos los registros A a la IP del nuevo servidor. También quería cambiar los registros AAA, ¡pero RUVDS solo tiene IP4 – IP6 no hmm!

Estamos esperando un par de horas cuando se actualiza el DNS, y el sitio debería funcionar, o no

Compruebe que funciona http2. Debe abrir el sitio en Chrome con el botón derecho del mouse Inspeccionar y allí Red actualizar la página y debería haber h2 en las solicitudes del sitio

¡Portar el foro phpBB a un nuevo servidor!
La situación habitual es cuando el foro phpBB muestra una pantalla en blanco en el nuevo servidor: no hay solución o explicación, pero puede reducir el riesgo de que ocurra.

Antes de copiar la base de datos y los archivos del foro
– Apague el foro en el panel de administración Board settings > Disable board
– Desactiva todos los complementos Custumize > Manage extensions > Disable para cada uno
– LImpia cashe Genneral > Purge the cache

Después de eso, debe archivar los archivos del foro, cargar las bases de datos y cargarlos en un nuevo sitio: repita todo lo que se describió anteriormente sobre mover datos y crear una base de datos MySQL

Asegúrese de que la contraseña correcta de la base de usuarios esté en config.php

Es necesario deshabilitar la seguridad SELINUX en CentOS, con ella phpBB no funciona en absoluto
tenporariamente
setenforce 0
para siempre
vi /etc/selinux/config
agregar texto

SELINUX=disabled

Qué hacer si la pantalla sigue en blanco al ingresar al foro phpBB
– Hay varios grados de blancura, por ejemplo, aún puede ir a la sección de administración ./adm a veces, allí puede borrar el caché y deshabilitar los addons y borrar el caché nuevamente; tal vez esto ayude
– Debe asegurarse de que ./cache esté con permisos 777, generalmente lo es si se trata de una transferencia de un servidor a otro
– Es necesario eliminar la carpeta ./cache/production, el foro que normalmente funciona debe volver a crearla
– Una vez que me ayudó a poner una versión limpia del foro con la carpeta /install y ejecutar la actualización de la base de datos allí, el foro cobró vida, pero no todos los temas estaban vivos
– A veces hay un deseo de entrar en la base de datos y limpiar algo allí, así es como puedes limpiar sesiones – en la consola MySQL
SHOW DATABASES;
USE myforumbase;
show tables;
TRUNCATE TABLE phpbb_sessions;
TRUNCATE TABLE phpbb_sessions_keys;

– Bueno, repite todo desde el principio

Después de que el foro empezo a funcionar, es necesario activar gradualmente los addons y borrar el caché. ¡Vaya al foro y observe si funcionó o no!
Tuve un error con el complemento Images from post con NO_ENGINE_SUBSTITUTION tuve que agregar la configuración de MySQL
vi /etc/my.cnf
eso

[mysqld]
sql_mode="NO_ENGINE_SUBSTITUTION"

Un addon maravilloso, pero solo funciona con la versión anterior de phpBB en 3.3.0, ¡ya no funciona!

Es hora de volver al foro la búsqueda.
Hago asi Ставим на форум phpBB3 супер быстрый поиск Sphinx!

Si la contraseña de la base de datos MySQL contiene #, entonces Sphinx no podrá leerla, por lo que es mejor no escribir # en la contraseña

Hago eso
wget https://sphinxsearch.com/files/sphinx-2.2.11-release.tar.gz
tar -zxf sphinx-2.2.11-release.tar.gz
cd sphinx-2.2.11-release
mkdir /etc/sphinx
./configure --prefix=/etc/sphinx
make
make install

Lo único es que todos los archivos se colocan en /etc/sphinx, esto se configura en la configuración y desde allí los archivos de la carpeta bin se deben colocar en la bin de OS

Rendimiento
Evalúo usando top, generalmente se acepta que debería haber 1 por núcleo. En hc.ru (nic.ru) había dos veces menos núcleos 2 y dos veces menos procesos php-fpm, cargaban mucho la CPU, y obtuvimos 3 loros por núcleo. En RUVDS bajo la misma carga, se obtienen 0.7 loros por núcleo, ¡lo cual ya es mucho mejor de lo que era! ¡Y siempre puedes comprar núcleos y memoria, que en un hosteado anticuado no se puede hacer tan fácilmente!

UPD: Tuning nginx
Hay un par de cosas que hay que hacer con nginx

1. Debe deshabilitar el log todos dicen que solo escriba en nginx.conf esto

error_log  /dev/null crit;

y ya – pue sno

Los tamaños monstruosos de los registros se siguen escribiendo aquí /etc/nginx/conf
Y para que realmente no existieran, en la configuración con la configuración del sitio necesitas agregar esto

access_log  off;

Ahora, el log no tarta de consumir todo el espacio en el servidor

2. Es útil prohibir la descarga de archivos de su sitio a través de enlaces directos. Aquí también encontré muchos ejemplos, pero realmente solo funciono ese.
en la configuración con la configuración del sitio necesitas agregar esto,

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

Si alguien en un sitio ajeno intenta insertar una imagen nuestra a través de un enlace directo a jpg, nada funcionará y no tendremos una carga adicional

3. En phpBB, para la instalación, y algunos addon usan un redirect, que por sí solo no funcionará sin configuraciones nginx como estas
En la configuración del sitio necesitas agregar esto, para la instalación de phpBB comienze

location /forum/php/install/app.php {
              try_files $uri $uri/ /forum/php/install/app.php?$query_string;
    }

Deja una respuesta

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