Servidor web en CentOS 8 con php7, node.js y redis

prefacio

Han pasado 2 días desde el lanzamiento de una nueva versión del sistema operativo CentOS, a saber, CentOS 8. Y hasta ahora hay bastantes artículos en Internet sobre cómo se hacen las cosas en él, así que decidí llenar este vacío. Además, les contaré no solo cómo instalar este par de programas, sino también cómo veo en general la instalación de Linux en un entorno virtual en el mundo moderno para tareas típicas, incluida la partición de discos, etc.

Pero al principio quiero hablar brevemente sobre por qué vale la pena cambiar a esta versión de todas las anteriores, y hay dos razones para ello:

  1. php7! En la versión anterior de CentOS, se instaló el php5.4 “Ortodoxo”...

    Bien, para ser un poco más serio, muchos paquetes pasaron por varias versiones en masa. Nosotros (los fanáticos de los sistemas operativos tipo Redhat) finalmente hemos entrado, si no en el futuro, al menos en el presente. Y los seguidores de Ubuntu ya no se reirán de nosotros ni nos señalarán con el dedo, bueno... al menos por un tiempo ;).

  2. Transición de yum a dnf. La principal diferencia es que ahora se admite oficialmente trabajar con varias versiones de paquetes a la vez. Justo en el octavo, nunca encontré esto útil, pero suena prometedor.

Crear una máquina virtual

Hay diferentes hipervisores y no tengo como objetivo adaptar al lector a uno específico, les contaré los principios generales.

Память

Primero... Para instalar un sistema CentOS a partir de 7 con seguridad, y en mi opinión este también fue el caso en 6 ("pero esto no es seguro"), necesita mínimo 2 GB de RAM. Por lo tanto, te aconsejo que des esa cantidad primero.

Pero en todo caso, después de la instalación se puede reducir el tamaño de la memoria. Lo comprobé con 1 GB, el sistema básico funciona bastante bien.

disco

Para una instalación normal, debe crear un disco virtual con una capacidad de 20 a 30 GB. Esto es suficiente para el sistema. Y un segundo disco para datos. Se puede agregar tanto en la etapa de creación de una máquina virtual como después. Normalmente lo agrego más tarde.

procesador

En un núcleo, el sistema básico no se ralentiza. Y dado que los recursos son libremente escalables, no veo ningún sentido en dar más en la etapa de instalación (a menos que conozcas perfectamente los requisitos y seas demasiado vago para volver al configurador)

El resto normalmente se puede dejar como predeterminado.

La instalación real

Entonces... Iniciemos el instalador... Personalmente, he estado instalando dichos servicios durante mucho tiempo solo en forma de máquinas virtuales, por lo que no describiré todo tipo de registros de distribución en una unidad flash, solo monte la ISO como un CD en mi hipervisor favorito, descárguela y listo.

La instalación básica es bastante típica, me detendré sólo en algunos puntos.

Selección de fuente

Desde el lanzamiento de la octava versión, el espejo de Yandex ha estado tirado durante días. Bueno, es decir, aumenta periódicamente y luego comienza a mostrar un error nuevamente. Estoy seguro de que se debe a una carga excesiva en el servicio. Por lo tanto, para indicar la fuente, yo personalmente tuve que, en lugar de ingresar la dirección habitual, ir aquí, seleccione el espejo que me gusta allí e ingrese manualmente la dirección en la ventana del instalador. Es importante recordar aquí que debe especificar la ruta a la carpeta donde se encuentra el directorio. repodar. Por ejemplo, mirror.corbina.net/pub/Linux/centos/8/BaseOS/x86_64/os.

partición de disco

Esta pregunta es bastante religiosa en mi opinión. Cada administrador tiene su propia posición al respecto. Pero seguiré compartiendo mi punto de vista sobre el tema.

Sí, en principio, puedes asignar todo el espacio a la raíz y funcionará, la mayoría de las veces incluso bastante bien. ¿Por qué entonces cercar un jardín con diferentes secciones? — En mi opinión, hay dos razones principales para ello: las cuotas y la portabilidad.

Por ejemplo, si algo sale mal y se producen errores en la partición de datos principal, aún querrá poder iniciar el sistema y llevar a cabo medidas de reanimación. Por lo tanto, yo personalmente asigno una partición separada para /boot. Hay un kernel y un gestor de arranque. Normalmente 500 megabytes son suficientes, pero en casos raros es posible que se necesiten más, y dado que ya estamos acostumbrados a medir el espacio en terabytes, dedico 2 GB a este apartado. Y lo importante aquí es que no se puede hacer lvm.

Luego viene la raíz del sistema. Para una instalación normal, nunca he necesitado más de 4 GB por sistema, pero durante los eventos programados suelo utilizar el directorio /tmp para descomprimir distribuciones y no veo ningún sentido en dedicarlo a una partición separada, en los sistemas modernos. se limpia automáticamente, por lo que no se llena. Entonces asigno 8 GB para la raíz.

Intercambiar... En general, tiene poca utilidad práctica. Si comienzas a usar swap en tu servidor, hoy en día en el mundo real esto sólo significa que el servidor necesita agregar más RAM. De lo contrario, se garantizan problemas de rendimiento (o algún programa "pierde" memoria). Por lo tanto, esta sección es necesaria únicamente con fines de diagnóstico. Por tanto, 2 GB es una cifra excelente. Sí, independientemente de cuánta memoria haya en el servidor. Sí, leí todos esos artículos donde se escribe sobre la relación entre el volumen de memoria y el volumen de intercambio... En mi humilde opinión, están desactualizados. En 10 años de práctica nunca he necesitado esto. Hace 15 años los usé, sí.

En mi humilde opinión, todos pueden decidir por sí mismos si asignar /home en una partición separada. Si alguien en el servidor va a utilizar activamente este directorio, es mejor asignarlo. Si no hay nadie, no hace falta.

A continuación, /var. En mi opinión, definitivamente hay que destacarlo. Para empezar, puedes limitarte a 4 GB y ver cómo te va. Y sí, por "cómo va" me refiero a que

  1. En primer lugar, siempre puedes montar otro disco en el subdirectorio /var (que mostraré más adelante con un ejemplo).
  2. En segundo lugar, tenemos lvm; siempre puedes agregarlo. Y normalmente hay que añadirlo cuando empiezan a llegar demasiados troncos. Pero nunca he podido predecir esta cifra de antemano, así que empiezo con 2 GB y luego miro.

El espacio no asignado permanecerá libre en el grupo de volúmenes y siempre podrá utilizarse más adelante.

LVM

todos Tiene sentido crear particiones distintas a /boot en LVM. Sí, incluido el intercambio. Sí, según todos los consejos, el intercambio debe estar al principio del disco, pero en el caso de LVM, en principio no se puede determinar su ubicación. Pero como escribí arriba, su sistema no debería utilizar el intercambio en absoluto. Por tanto, no importa dónde esté. Bueno, ¡no vivimos en el 95, sinceramente!

Además, en LVM hay varias entidades básicas con las que debes poder vivir:

  • volumen fisico
  • grupo de volumen
  • volumen lógico

Los volúmenes físicos se combinan en grupos, y cada volumen físico puede estar en un solo grupo, y un grupo puede ubicarse en varios volúmenes físicos a la vez.
Y los volúmenes lógicos están cada uno en un grupo.

Pero... Maldita sea, estamos otra vez en el siglo XXI. Y los servidores son virtuales. No tiene sentido aplicarles los mismos mecanismos que se aplicaron a los físicos. ¡Y para los virtuales es importante tener datos separados del sistema! Esto es muy importante, en particular para la capacidad de cambiar rápidamente datos a otra máquina virtual (por ejemplo, al cambiar a un nuevo sistema operativo) y, en general, para todo tipo de beneficios útiles (copias de seguridad separadas por particiones utilizando herramientas de hipervisor, por ejemplo). . Por lo tanto, se utiliza un grupo de volúmenes para el sistema y necesariamente otro para los datos. ¡Esta división lógica ayuda mucho en la vida!

Si creó solo un disco duro virtual al crear una máquina virtual, aquí es donde termina la configuración. Y si hay dos, no marques el segundo todavía.

Comencemos la instalación.

Posterior a la instalación

Entonces, el sistema recién instalado finalmente arrancó. Lo primero que debes comprobar es Internet.

ping ya.ru

¿Hay una respuesta? - Genial, presiona Ctrl-C.
Si no, monta una red, no hay vida sin esto, pero de eso no trata mi artículo.

Ahora si aún no estamos en root, vaya a root, porque al escribir es la cantidad de comandos con sudo personalmente me rompió (y que los administradores paranoicos me perdonen):

sudo -i

Ahora lo primero que hacemos es escribir

dnf -y update

Y si estás leyendo este artículo en 2019, lo más probable es que no pase nada, pero valió la pena intentarlo.

Ahora configuremos el disco restante.

Digamos que la partición con el sistema era xvda, entonces el disco de datos será xvdb. DE ACUERDO.

La mayoría de los consejos comenzarán con "Ejecute fdisk y cree una partición..."

Entonces esto es incorrectamente!

¡Lo diré de nuevo porque es muy importante! En este caso, trabajar con LVM, que ocupa un disco virtual completo, ¡crear particiones en él es perjudicial! Cada palabra de esta frase es importante. Si trabajamos sin LVM, es necesario. Si tenemos un sistema y datos en el disco, los necesitamos. Si por algún motivo necesitamos dejar la mitad del disco vacía, también deberíamos hacerlo. Pero normalmente todos estos supuestos son puramente teóricos. Porque si decidimos agregar espacio a una partición existente, entonces la forma más sencilla de hacerlo es con esta configuración. Y la facilidad de administración pesa tanto más que muchas otras cosas que estamos avanzando intencionadamente hacia esta configuración.

Y la conveniencia es que si desea expandir la partición de datos, simplemente agrega espacios a la partición virtual, luego expande el grupo usando vgextend y ¡listo! En casos raros, es posible que se requiera algo más, pero al menos no tendrás que expandir el volumen lógico al principio, lo cual ya es bueno. De lo contrario, para expandir este mismo volumen, recomiendan primero eliminar el existente y luego crear uno nuevo encima... Lo cual no se ve muy bien y no se puede hacer en vivo, pero la expansión según el escenario que indiqué se puede hacer. realizado “sobre la marcha” sin siquiera desmontar la partición.

Entonces, creamos un volumen físico, luego un grupo de volúmenes que lo incluye y luego una partición para nuestro servidor:

pvcreate /dev/xvdb
vgcreate data /dev/xvdb
lvcreate -n www -L40G data
mke2fs -t ext4 /dev/mapper/data-www

Aquí, en lugar de una letra mayúscula “L” (y el tamaño en GB), puede especificar una pequeña y luego, en lugar de un tamaño absoluto, especificar uno relativo, por ejemplo, para usar la mitad del espacio libre actualmente en un grupo de volúmenes, debe especificar "-l +50%FREE"

Y el último comando formatea la partición en el sistema de archivos ext4 (que hasta ahora, según mi experiencia, muestra la mayor estabilidad en caso de que todo se rompa, así que lo prefiero).

Ahora montamos la partición en el lugar correcto. Para hacer esto, agregue la línea correcta a /etc/fstab:

/dev/mapper/data-www    /var/www                ext4    defaults        1 2

y marcamos

mount /var/www

Si ocurre un error, ¡haga sonar la alarma! Porque esto significa que tenemos un error en /etc/fstab. Y que en el próximo reinicio tendremos problemas muy grandes. Es posible que el sistema no arranque en absoluto, lo que suele ser muy triste para los servicios en la nube. Por lo tanto, es necesario corregir urgentemente la última línea agregada o eliminarla por completo. Es por eso que no escribimos el comando de montaje manualmente; entonces no hubiéramos tenido una oportunidad tan excelente de verificar la configuración de inmediato.

Ahora instalamos todo lo que queríamos y abrimos los puertos para la web:

dnf groupinstall "Development Tools"
dnf -y install httpd @nodejs @redis php
firewall-cmd --add-service http --permanent
firewall-cmd --add-service https --permanent

Si lo deseas, también puedes poner una base de datos aquí, pero personalmente trato de mantenerla separada del servidor web. Aunque mantenerla cerca es más rápido, eso sí. La velocidad de los adaptadores de red virtuales suele rondar los gigabits y, cuando se trabaja en la misma máquina, las llamadas se producen casi instantáneamente. Pero es menos seguro. ¿Qué es más importante para quién?

Ahora agregamos el parámetro al archivo de configuración (creamos uno nuevo, la ideología moderna de CentOS es así)

echo "vm.overcommit_memory = 1"> /etc/sysctl.d/98-sysctl.conf

Reinicie el servidor.
En los comentarios me regañaron por aconsejarme que apagara SeLinux, así que me corregiré y escribiré que después de esto debes recordar configurar SeLinux.
En realidad, ¡beneficio! 🙂

Fuente: habr.com

Añadir un comentario