ITCooky Recetas

Vamos a cocinar it cositas

Creamos un sitio http2 en cloude (VPS) hosting HETZNER en Alemania!

дата octubre 9, 2020

¡Es hora de avanzar, hacia el progreso, hacia Europa! No espero que todo vaya bien allí, pero estoy seguro de que las mejores tecnologías y especialistas ya están allí; por lo tanto, ¡el alojamiento europeo es más barato, más poderoso y más avanzado tecnológicamente que el ruso! Alemania, si me equivoco correctamente, es el centro de datos más grande de Europa, donde se acumuló una enorme infraestructura digital para la Copa del Mundo.

Por qué HETZNER – no tuve mucho tiempo para elegir, confiaba en las imágenes del sitio, esas palabras ni las conocen companias rusas de hosting – AMD Epyc, NVme y realmente «precios únicos».

Primero debes registrarte, con un nombre real, dirección y tarjeta, el euro se retirará de él para su verificación (como en Netflix), y hasta haora no lo han devuelto, se podrá devolver más tarde (no se rian, un euro es nada en Rusia, pero en Alemania son 10 días de hosting!!!). Tomo la tarifa cx11 más barata: 2 gig, 1 núcleo, 20 gb y por solo 3 euros, en rublos ahora son 270RUR. Miro al antiguo hoster (RUVDS) cuánto cuesta lo mismo 770RUR …

HETZNER dice que el tráfico está dado por 20 terabytes, luego a 1,5 euros por terabyte. Los hosters rusos no cuentan el tráfico, por lo que no se sabe cuánto tráfico tengo en los proyectos (yo mismo no lo conté para ellos), pero al ver e; tráfico por día en este sitio, ¡20 terabytes son MUCHOOOOS. imposibles de gastar en un mes!

Como puede ver en otras tarifas, no hay problemas con la memoria y el espacio en Europa, solo los núcleos siguen siendo en defecit. Se puede aumentar la memoria y los núcleos en cualquier momento, pero no el disco. Es una gran sorpresa, ¡pero los alemanes dicen esto para que en cualquier momento puedas volver a la tarifa anterior!

Configuraramos al VPS
Elegí centOS8, pero también había 7, temía que 8 difiera de 7 como 6 de 7, ¡pero no, no difiere en absoluto!
Un par de segundos para instalar la imagen, se recibe una contraseña en el correo de su cuenta personal, la primera vez que la ingresas, inmediatamente se le pide que la cambie y vuelva a ingresar. ¡Uso ssh aunque mi cuenta personal en el sitio tiene una hermosa consola!

Primero que nada, reviso lo que tenemos
uname -a

Linux itcooky 4.18.0-193.14.2.el8_2.x86_64 #1 SMP Sun Jul 26 03:54:29 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

Ver de cuántos bits es el sustema operativo
uname -m

x86_64

64 bueno

mira cuantos núcleos
nproc

1

Uno según lo ordenado

A actualizar
yum update
y reiniciar
reboot

Además, la práctica habitual, cuando root no inicia sesión directamente a través de ssh, primero inicie sesión como usuario y luego obtiene superderechos.
useradd user1
passwd user1

le damos a este usuario el derecho de iniciar sesión vía ssh (aunque ya existe, es decir, prohibimos a otros)
vi /etc/ssh/sshd_config
agrega la línea

AllowUsers user1

y prohibimos ingresar al root, busque esta línea y redactamosla

PermitRootLogin no

Reiniciar ssh
service sshd restart
Y ahora puedes ingreas con ssh solo bajo user1
y luego aumentamos los derechos con el comando
su

Establecemos el mínimo requerido
yum install wget
yum install tar

para la compilación
yum group install 'Development Tools'
yum install pcre-devel
yum install gd-devel
yum install zlib-devel
yum install openssl-devel

Preparando el servidor web para http2
Primero necesitas actualizar openssl
openssl version
hay

OpenSSL 1.1.1c FIPS  28 May 2019

Esta versión funcionaría, pero necesitamos las fuentes, así que instalaré la más nueva.

Vamos a la carpeta donde necesitas en la que vamos a descargar todo
cd /usr/local/src
wget https://www.openssl.org/source/openssl-1.1.1h.tar.gz
tar -xf openssl-1.1.1h.tar.gz

Vaya a la carpeta y ejecute la compilación
cd openssl-1.1.1h
./config
make
make install

hay que
reboot

Mira
openssl version

OpenSSL 1.1.1h  22 Sep 2020 (Library: OpenSSL 1.1.1c FIPS  28 May 2019

nueva version instalada

Instalar nginx con http2
También debe estar la version mas actual, compilada con parámetros
cd /usr/local/src
wget https://nginx.org/download/nginx-1.19.3.tar.gz
tar -xf nginx-1.19.3.tar.gz
cd nginx-1.19.3

Y el propio comando de compilación, y al final se indica donde esta nuestro openssl /usr/local/src/openssl-1.1.1h/
./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.1h/
make
make install

Ver versión
nginx -v

nginx version: nginx/1.19.3

Agregue un usuario (puede que ya este) y otorgue derechos a la carpeta nginx
useradd nginx
chown -R nginx:nginx /etc/nginx/

También debo haber creado un archivo que ayudará a iniciar y detener nginx
vi /usr/lib/systemd/system/nginx.service
inserta el 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

Iniciamos
systemctl start nginx
systemctl enable nginx

No tuve que editar el firewall, pero si a caso
firewall-cmd --zone=public --permanent --add-service=http
firewall-cmd --zone=public --permanent --add-service=https
firewall-cmd --reload

En el navegador, escribimos la IP y miramos: lo mínimo funciona

Instalamos Mysql
Instalamos lo que hay en el repositorio de CentOS
yum install mysql-server
Iniciamos
systemctl start mysqld
systemctl enable mysqld

A continuación, cambiamos la contraseña de root a la nuestra, debe ser compleja con caracteres especiales y cambiar otras configuraciones
mysql_secure_installation

Instalamos PHP
Necesito 7.4, ya que el sitio se está funcionando actualmente en 7.4, ¡Wordpress no querrá funcionar en una version mas baja!
Obtenemos la versión 7.4
dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm
dnf module reset php
dnf module enable php:remi-7.4

Instalamos
yum install php php-fpm php-mysqlnd php-xml php-gd php-mbstring

php-xml: necesario para phpBB
php-gd: para un complemento con imágenes en la lista de temas
php-mbstring: phpBB funciona mejor con este módulo, también lo hace la búsqueda Sphinx
Y para que funcionen los nuevos módulos instalados, debe volver a cargar php-fpm

Redactamos php-fpm
vi /etc/php-fpm.d/www.conf
cambiar a nginx, habia apache ja

user = nginx
group = nginx

y cambio

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

y cambiar (para compatibilidad con mis configuraciones de nginx)

listen = /var/run/php.sock

Si no puede iniciar php-fpm haz
mkdir /var/lib/php/session
chown -R nginx:nginx /var/lib/php/session

pero puede que no sea necesario

Para comenzar solo necesitas
systemctl start php-fpm.service
systemctl enable php-fpm.service

Primero lanzamiento del sitio web
Hacer una carpeta para sitios futuros
mkdir /usr/local/www
copi ejemplo de nginx
cp -r /etc/nginx/html /usr/local/www
hacer un archivo allí
vi /usr/local/www/html/info.php
con texto

<?php
phpinfo();
?>

Y cambiar las configuraciones de nginx
aquí mismo
vi /etc/nginx/conf/nginx.conf
asi

#user nobody;
worker_processes 1;

error_log /dev/null crit;

events {
worker_connections 1024;
}

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

sendfile on;
#tcp_nopush on;

#keepalive_timeout 0;
keepalive_timeout 65;

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

Cree una carpeta donde pondremoslas configuraciones del sitio
mkdir /etc/nginx/conf/conf.d
creamos archivo
vi /etc/nginx/conf/conf.d/default.conf
con texto

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

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;
}


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;
 }
}

Iniciar
service nginx restart
service php-fpm restart

Y de acuerdo con la idea, debería funcionar, pero nunca funciona, pero funcionó para mí: escribí todos los pasos aquí para mí, en su mayor parte, ¡por supuesto!

Transferencia del sitio web
En el servidor anterior, archive la carpeta con el sitio y la base de datos
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 se puede descomprimir inmediatamente en la carpeta /usr/local/www/
tar -xvf itc.tar
Y para la base, primero debes crearla y hacer un usuario para ella

Vamos a mysql
mysql -u root -p
Hacemos un usuario con el nombre
CREATE DATABASE wpit;
CREATE USER 'wpita'@'localhost' IDENTIFIED BY 'QWErty123!';
GRANT ALL PRIVILEGES ON wpit.* 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 #, Sphinx no podrá leerla, por lo que es mejor no escribir # en la contraseña.

Después de eso, puedes anadir la base.
mysql -u root -p wpita < wpita.sql
Para Letsencrypt, debe transferir certificados del servidor anterior, pero primero instálelo en el nuevo
wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto
./certbot-auto --nginx

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

en servedor 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 por ahora esto es suficiente, luego será necesario configurar la renovación de certificados
Si la carpeta del sitio en sevrere ha cambiado, esto debería reflejarse en los archivos letsencrypt en la carpeta /etc/letsencrypt/renewal; de lo contrario, los certificadores se negarán a actualizar
Para actualizar los certificados en sí, agrego
crontab -e
texto

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
Agrego texto: todo lo que solicita http a través de ip4 e ip6 se coloca en https

server {
    listen 80;
    listen [::]:80;
    server_name itcooky.com www.itcooky.com es.itcooky.com en.itcooky.com;
    return 301 https://$host$request_uri;
access_log  off;
}

mas
vi /etc/nginx/conf/conf.d/itSSL.conf
grego el texto: aquí apareció http2 en la segunda línea si todo se hizo correctamente antes, entonces el sitio comenzará a servir contenido a los navegadores en h2

server {
listen       443 ssl http2;
listen [::]:443 ssl http2;
    server_name es.itcooky.com en.itcooky.com 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";


access_log  off;
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 /500.html;
location = /500.html {
        root   /usr/local/www/itcooky.com;
    }
error_page 502 /502.html;
location = /502.html {
        root   /usr/local/www/itcooky.com;
    }
error_page 503 /503.html;
location = /503.html {
        root   /usr/local/www/itcooky.com;
    }
error_page 504 /504.html;  
location = /504.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 ~ .(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;
    }
}
    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    location ~ /\.ht {
        deny  all;
    }
}

También agrego para que no se vea nada por IP
vi /etc/nginx/conf/conf.d/ipnull.conf
texto

server {
    listen      80 default_server;
    listen [::]:80 default_server; 
    server_name 195.201.94.20;
    return      444;
}

en 443 ya habrá un error de certificado, no sé cómo hacerlo más hermoso ...

Restart nginx
service nginx restart

Ahora vaya a la cuenta personal de su registrador de dominio y cambie los registros A a IP4 del nuevo servidor, ¡así como los registros AAAA a IP6! Para la zona RU, los cambios se activan instantáneamente, para COM en una hora.

PRECAUCIÓN: Antes de agregar registros AAAA, debe asegurarse de que el servidor NS de su dominio admita IP6. Si el no es compatible y has agregado registros AAAA, eso puede causar un mal funcionamiento de algunos servicios de Internet que tienen IP6 en prioridad, por ejemplo, FeedBurner o la renovación de los certificados LestEncrypt. Este es mi caso, el registrador R01 (RU-CENTER Group) permiti agregar registros AAAA en su servidor NS, ¡pero no funciona con IP6!

Bueno, igual quiero IP6, Hertzner da su DNS en mi cuenta personal, vamos.
El proceso de agregar su dominio es más o menos claro, todos los registros se copiarán automáticamente, solo necesita agregar registros AAAA, y me confundí aquí

La cuenta personal indica
IPv6 2a01:4f8:c2c:96ca::/64
Este es un rango, DNS no aceptará este registro

Especificar
2a01:4f8:c2c:96ca::
también estará mal

Miro en el servidor qué IP6 hay en la interfaz
ifconfig
tengo
2a01:4f8:c2c:96ca::1

Lo indico en DNS Hertzner. Aquí se encontró una diferencia más, para hacer referencia a un dominio sin todo (sin www) es necesario escribir en lugar del espacio vacío @, ¡el registrador ruso tenía un espacio vacío!

En total, esa es la cantidad de registros que tengo

Después de eso, debe añadir en su cuenta del registrador de dominios, el servidor NS de Hetzner y después de 12 horas, el sitio comenzará a ser aprobado para IP6
Verificamos si todo funcionó, sí, por supuesto, funcionó, ¡ya lo hice cien veces!

La verificación IP6 fue más rápida en este sitio ipv6-test.com

Así es como puede verificar que http2 funciona en el sitiohttp2.pro


Deja una respuesta

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