Creación de una plantilla VPS con Drupal 9 en Centos 8

Seguimos ampliando nuestro marketplace. Recientemente compartimos cómo creamos la imagen de Gitlab, y esta semana ha aparecido Drupal en nuestro marketplace.

Explicamos por qué lo elegimos y cómo se creó la imagen.

Creación de una plantilla VPS con Drupal 9 en Centos 8

Drupal — una plataforma conveniente y poderosa para crear cualquier tipo de sitios web: desde micrositios y blogs hasta grandes proyectos sociales, que también se utiliza como base para aplicaciones web, escrita en PHP y utilizando bases de datos relacionales como almacenamiento de datos.

Drupal 9 incluye todas las características implementadas en la versión 8.9. La principal diferencia entre la versión 9 y la 8 es que se lanzarán actualizaciones y correcciones de seguridad para la plataforma incluso después de noviembre de 2021. Además, la versión 9 ha simplificado el proceso de actualización, haciendo que la actualización desde la versión 8 sea aún más sencilla.

Requisitos del servidor

Para utilizar Drupal, se recomienda tener 2 GB de RAM y 2 núcleos de CPU.

Los archivos principales de Drupal ocupan alrededor de 100 MB, además necesitarás espacio para almacenar imágenes, bases de datos, temas, módulos adicionales y copias de seguridad, lo que dependerá del tamaño de tu sitio.

Para Drupal 9 se requiere PHP 7.4 o superior, con un límite mínimo de memoria de (memory_limit) 64 MB; si se utilizan módulos adicionales, se recomienda instalar 128 MB.

Como servidor web, Drupal puede utilizar Apache o Nginx, y como base de datos MySQL, PostgreSQL o SQLite.

Instalaremos Drupal usando Nginx y MySQL.

Instalación

Actualizaremos los paquetes instalados a la última versión:

sudo dnf update -y

Agregaremos una regla permanente para el tráfico entrante en los puertos http/80 y https/443:

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https

Aplicaremos las nuevas reglas del firewall:

sudo systemctl reload firewalld

Instalaremos Nginx:

sudo dnf install nginx -y

Iniciaremos y habilitaremos el servidor Nginx:

sudo systemctl start nginx
sudo systemctl enable nginx

Dado que actualmente en el repositorio principal de CentOS se utiliza PHP 7.2, agregaremos el repositorio REMI con PHP 7.4 (la versión mínima para Drupal 9).
Para esto, agregaremos el repositorio EPEL (requerido por el repositorio REMI):

rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm

Agregaremos el repositorio REMI:

sudo dnf install -y https://rpms.remirepo.net/enterprise/remi-release-8.rpm

Habilitaremos el módulo php:remi-7.4 para instalar php 7.4:

sudo dnf module enable php:remi-7.4 -y

Instalaremos php-fpm y php-cli:

sudo dnf install -y php-fpm php-cli

Instalaremos los módulos de PHP requeridos para el funcionamiento de Drupal:

sudo dnf install -y php-mysqlnd php-date php-dom php-filter php-gd php-hash php-json php-pcre php-pdo php-session php-simplexml php-spl php-tokenizer php-xml

También instalaremos los módulos recomendados de PHP mbstring opcache:

sudo dnf install -y php-mbstring php-opcache

Instalaremos el servidor MySQL:

sudo dnf install mysql-server -y

Activaremos e iniciaremos el servidor MySQL:

sudo systemctl start mysqld
sudo systemctl enable mysqld

Dado que estamos creando una plantilla para VDS, que pueden ser lentos, agregaremos un retraso de 30 segundos al inicio de mysqld, de lo contrario, podría haber problemas al iniciar el servidor en el arranque inicial del sistema:

sudo sed -i 's/Group=mysql/a \nExecStartPre=/bin/sleep 30\n/' /usr/lib/systemd/system/mysqld.service

Cambiaremos el grupo y el usuario bajo el cual funcionará nginx haciendo cambios en /etc/php-fpm.d/www.conf:

sudo sed -i --follow-symlinks 's/user = apache/user = nginx/g' /etc/php-fpm.d/www.conf
sudo sed -i --follow-symlinks 's/group = apache/group = nginx/g' /etc/php-fpm.d/www.conf

Cambiaremos el propietario del directorio de sesiones PHP también a nginx:

sudo chown -R nginx. /var/lib/php/session

Eliminaremos las líneas con comentarios del archivo de configuración /etc/nginx/nginx.conf (para evitar que se activen dobles para sed):

sudo sed -i -e '/^[ t]*#/d' /etc/nginx/nginx.conf

Agregaremos configuraciones de compresión gzip en /etc/nginx/nginx.conf

sudo sed -i '/types_hash_max_size 2048;/a \n    gzip on;\n    gzip_static on;\n    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript image/x-icon image/svg+xml application/x-font-ttf;\n    gzip_comp_level 9;\n    gzip_proxied any;\n    gzip_min_length 1000;\n    gzip_disable "msie6";\n    gzip_vary on; \n' /etc/nginx/nginx.conf

Agregaremos configuraciones para el archivo índice index.php en /etc/nginx/nginx.conf:

sudo sed -i '/        root         /usr/share/nginx/html;/a \n        index index.php index.html index.htm;\n' /etc/nginx/nginx.conf

Agregaremos configuraciones para el servidor predeterminado, procesando php a través del socket php-fpm, deshabilitaremos el registro para archivos estáticos, aumentaremos el tiempo de caducidad, deshabilitaremos el registro de accesos y errores para favicon.ico y robots.txt y prohibiremos el acceso a los archivos .ht para todos:

sudo sed -i '/        location / {/a \n		try_files $uri $uri/ /index.php?q=$uri&$args;\n        }\n    \n        location ~* ^.+\.(js|css|png|jpg|jpeg|gif|ico|woff)$ {\n        access_log off;\n        expires max;\n        }\n    \n        location ~ .php$ {\n        try_files  $uri =404;\n        fastcgi_pass   unix:/run/php-fpm/www.sock;\n        fastcgi_index index.php;\n        include fastcgi_params;\n        fastcgi_intercept_errors on;\n        fastcgi_ignore_client_abort off;\n        fastcgi_connect_timeout 60;\n        fastcgi_send_timeout 180;\n        fastcgi_read_timeout 180;\n        fastcgi_buffer_size 128k;\n        fastcgi_buffers 4 256k;\n        fastcgi_busy_buffers_size 256k;\n        fastcgi_temp_file_write_size 256k;\n        }\n    \n        location = /favicon.ico {\n        log_not_found off;\n        access_log off;\n        }\n    \n        location = /robots.txt {\n        allow all;\n        log_not_found off;\n        access_log off;\n        }\n    \n        location ~ /.ht {\n        deny all;\n' /etc/nginx/nginx.conf

Instalaremos wget, necesario para instalar certbot:

sudo dnf install wget -y

Descargaremos el archivo ejecutable certbot desde el sitio oficial:

cd ~
wget https://dl.eff.org/certbot-auto

Movemos certbot a /usr/local/bin/:

mv certbot-auto /usr/local/bin/certbot-auto

Y asignaremos derechos y propietario root:

chown root /usr/local/bin/certbot-auto
chmod 0755 /usr/local/bin/certbot-auto

Instalaremos las dependencias de certbot y en este punto detendremos su ejecución (Respuestas: Y, c):

certbot-auto

Descargaremos del sitio oficial el archivo comprimido con la última versión de Drupal 9:

cd ~
wget https://www.drupal.org/download-latest/tar.gz

Instalaremos tar para descomprimir el archivo:

sudo dnf install tar -y

Eliminaremos los archivos por defecto en el directorio /usr/share/nginx/html/:

rm -rf /usr/share/nginx/html/*

Descomprimiremos los archivos en el directorio del servidor web:

tar xf tar.gz -C /usr/share/nginx/html/

Moveremos los archivos del subdirectorio al directorio raíz del servidor web:

mv /usr/share/nginx/html/drupal-9.0.7/* /usr/share/nginx/html/

Eliminaremos el subdirectorio:

rm -rf /usr/share/nginx/html/drupal-9.0.7

Eliminaremos el archivo comprimido con los archivos de instalación:

rm -f ./tar.gz

Asignaremos como propietario de los archivos a nginx:

chown -R nginx. /usr/share/nginx/html

En este punto, apagaremos el servidor y haremos un snapshot:

shutdown -h now

Después de iniciar el VDS desde el snapshot, realizaremos la configuración inicial del servidor MySQL ejecutando el script:

mysql_secure_installation

Activaremos el validador de contraseñas:

¿Le gustaría configurar el componente VALIDATE PASSWORD? : y

Estableceremos la contraseña del usuario root de MySQL:

Nueva contraseña:
Reingrese la nueva contraseña:

Eliminaremos a los usuarios anónimos:

¿Eliminar usuarios anónimos? (Presione y|Y para Sí, cualquier otra tecla para No) : y

Prohibiremos el acceso remoto al root:

¿Prohibir el acceso remoto al root? (Presione y|Y para Sí, cualquier otra tecla para No) : y

Eliminaremos la base de datos de prueba:

¿Eliminar la base de datos de prueba y el acceso a ella? (Presione y|Y para Sí, cualquier otra tecla para No) : y

Reiniciaremos las tablas de privilegios:

¿Recargar ahora las tablas de privilegios? (Presione y|Y para Sí, cualquier otra tecla para No) : y

Después de esto, para completar la instalación, podemos ir a la dirección vps_ip_address
En esta dirección veremos la página de instalación de Drupal.

Seleccionaremos el idioma a utilizar. Por ejemplo: español. Haremos clic en 'Guardar y continuar'

Seleccionaremos el perfil de instalación (la demostración se utiliza exclusivamente para familiarizarse con el sistema). En nuestro caso elegiremos 'estándar'.

En la siguiente página, asignaremos un nombre a la base de datos, por ejemplo 'drupal'. Indicaremos el nombre de usuario de la base de datos root y la contraseña que se le asignó al ejecutar mysql_secure_installation. Haremos clic en 'Guardar y continuar'.

Esperaremos a que finalice la instalación y la actualización de traducciones (el proceso puede tardar unos minutos).

Indiquemos el nombre del sitio, establezcamos el correo electrónico del sitio (desde el cual se enviarán las notificaciones del sitio), el nombre de usuario, la contraseña y el correo electrónico de la cuenta del administrador de Drupal. También configuraremos el país y la zona horaria en la configuración regional. Y finalizaremos la instalación haciendo clic en «Guardar y continuar».

Después de esto, podemos acceder al panel de control con el nombre de usuario y la contraseña del administrador de Drupal creados.

Configuración de HTTPS (opcional)

Para configurar HTTPS, el VDS debe tener un nombre DNS válido, indíquelo en

/etc/nginx/nginx.conf

en la sección server el nombre del servidor (por ejemplo):

server_name  domainname.es;

Reiniciaremos nginx:

service nginx restart

Iniciaremos certbot:

sudo /usr/local/bin/certbot-auto --nginx

Introducimos nuestro e-mail, aceptamos los términos del servicio (A), suscripción a la lista de correo (opcional) (N), seleccionamos los nombres de dominio para los cuales se debe emitir el certificado (Enter para todos).

En caso de que todo haya salido sin errores, veremos un mensaje de emisión exitosa de certificados y configuración del servidor:

¡Felicidades! Has habilitado exitosamente ...

Después de esto, las conexiones al puerto 80 se redirigirán al 443 (https).

Agregaremos en /etc/crontab para la actualización automática de certificados:

# Cert Renewal
30 2 * * * root /usr/local/bin/certbot-auto renew --post-hook "nginx -s reload"

Configuración de Seguridad de Host de Confianza (recomendado)

Esta configuración está destinada a resolver problemas relacionados con la determinación dinámica de base_url, y está diseñada para prevenir ataques de encabezado HTTP HOST (cuando tu sitio piensa que es alguien más).

Para ello, debes indicar los nombres de dominio de confianza del sitio en el archivo de configuración.

En el archivo

/usr/share/nginx/html/sites/default/settings.php descomentaremos o agregaremos la configuración con patrones de nombres de dominio actuales, por ejemplo:

$settings['trusted_host_patterns'] = [
  '^www.mydomain.es$',
];

Instalación de PHP APCu (SE RECOMIENDA)

Drupal soporta APCu — Alternative PHP User Cache, las versiones 8 y 9 utilizan APCu de manera más intensiva como caché local a corto plazo que las versiones anteriores. El tamaño de la caché por defecto (32 Mb) es adecuado para la mayoría de los sitios y no puede exceder 512 Mb.

Para activarlo, instalaremos el módulo PHP APCu:

dnf -y install php-pecl-apcu

Reiniciaremos nginx y php-fpm:

service nginx restart
service php-fpm restart

En caso de utilizar el idioma ruso y APCu con el tamaño de memoria recomendado para la caché, en el panel de control puedes ver una advertencia de que el tamaño de memoria asignado para la caché difiere del recomendado, pero de hecho todo funciona correctamente y la advertencia incorrecta probablemente se corregirá en futuras actualizaciones.

O si la advertencia es irritante, se puede usar el parche correspondiente del sitio oficial.

Queremos recordarles que ustedes también pueden crear una imagen para nosotros

Hay tres maneras de participar.

Prepárenos la imagen ustedes mismos y reciban 3000 rublos en su saldo

Si están listos para lanzarse a la acción y crear la imagen que les falta, les acreditaremos 3000 rublos en su saldo interno — que podrán gastar en servidores.

Cómo crear su propia imagen:

  1. Crea una cuenta con nosotros en el sitio web
  2. Informa al soporte que planeas crear y probar imágenes
  3. Te acreditaremos 3000 rublos y habilitaremos la posibilidad de crear instantáneas
  4. Solicita un servidor virtual con un sistema operativo limpio
  5. Instala el software en este VPS y configúralo
  6. Elabora una guía o script para desplegar el software
  7. Crea una instantánea del servidor configurado
  8. Solicita un nuevo servidor virtual, eligiendo en la lista desplegable el 'Plantilla del servidor' según la instantánea creada anteriormente
  9. En caso de que la creación del servidor sea exitosa, entrega el material obtenido en la etapa 6 al soporte técnico
  10. Si hay un error, puedes aclarar con el soporte la razón y repetir la configuración

Para propietarios de negocios: ofrezcan su software

Si eres un desarrollador de software que se despliega y utiliza en VPS, podemos incluirte en nuestro mercado. Así, podemos ayudarte a atraer nuevos clientes, tráfico y visibilidad. Contáctenos

¿Qué imagen te falta? Cuéntanos en los comentarios

Y nosotros la prepararemos

Creación de una plantilla VPS con Drupal 9 en Centos 8

Creación de una plantilla VPS con Drupal 9 en Centos 8

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster