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
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
Y si no: En Centos 7 lo arregle con 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
Pero in Centos 8 eso mato porcomleto la autentification y tuve que reinstalar Centos
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; }
[…] también será el administrador del sistema! Cómo se configura VPS desde cero, ya escribí aquí Como mover un website en WordPress, con el foro phpBB, al nuevo server de RUVDS con todo y letsencry…. En este artículo asumiré que el VPS ya está configurado (nginx (con http2), php-fpm, MySQL, […]