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

Seguimos ampliando nuestro mercado. Hace poco te contamos cómo hizo una imagen de Gitlab, y esta semana Drupal apareció en nuestro mercado.

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

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

Drupal — una plataforma cómoda y potente para crear cualquier tipo de sitio web: desde micrositios y blogs hasta grandes proyectos sociales, también utilizada como base para aplicaciones web, escrita en PHP y que utiliza bases de datos relacionales como almacenamiento de datos.

Drupal 9 incluye todas las funciones introducidas en la versión 8.9. La diferencia clave entre la versión 9 y la versión 8 es que la plataforma seguirá recibiendo actualizaciones y correcciones de seguridad después de noviembre de 2021. La versión 9 también simplifica el proceso de actualización, lo que facilita aún más el proceso de actualización desde la versión 8.

Requisitos del servidor

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

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

Drupal 9 requiere PHP 7.4 o superior con una limitación mínima (memory_limit) para 64 MB de memoria; si se utilizan módulos adicionales, se recomienda instalar 128 MB.

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

Instalaremos Drupal usando Nginx y MySQL.

Instalación

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

sudo dnf update -y

Agreguemos permiso permanente para el tráfico entrante a los puertos http/80 y https/443:

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

Apliquemos las nuevas reglas del firewall:

sudo systemctl reload firewalld

Instalemos Nginx:

sudo dnf install nginx -y

Comencemos y habilitemos el servidor Nginx:

sudo systemctl start nginx
sudo systemctl enable nginx

Dado que el repositorio principal de Centos actualmente usa PHP 7.2, agreguemos un repositorio REMI con PHP 7.4 (versión mínima para Drupal 9).
Para hacer esto, agregue el repositorio EPEL (requerido por el repositorio REMI):

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

Agreguemos el repositorio REMI:

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

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

sudo dnf module enable php:remi-7.4 -y

Instale php-fpm y php-cli:

sudo dnf install -y php-fpm php-cli

Instalemos los módulos PHP necesarios para que Drupal funcione:

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 PHP mbstring opcache recomendados:

sudo dnf install -y php-mbstring php-opcache

Instalemos el servidor MySQL:

sudo dnf install mysql-server -y

Encendamos e iniciemos el servidor MySQL:

sudo systemctl start mysqld
sudo systemctl enable mysqld

Dado que estamos creando una plantilla para VDS y pueden ser lentos, agregaremos un retraso de inicio de mysqld de 30 segundos; de lo contrario, puede haber problemas con el servidor al iniciarse durante el inicio inicial del sistema:

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

Cambiemos el grupo y el usuario bajo el cual se ejecutará 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

Cambiemos el propietario del directorio de sesiones de PHP a nginx en consecuencia:

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

Eliminemos las líneas con comentarios del archivo de configuración /etc/nginx/nginx.conf (para que no haya activadores dobles para sed):

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

Agregue la configuración de compresión gzip a /etc/nginx/nginx.conf

sudo sed -i '/types_hash_max_size 2048;/a 

    gzip on;
    gzip_static on;
    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;
    gzip_comp_level 9;
    gzip_proxied any;
    gzip_min_length 1000;
    gzip_disable "msie6";
    gzip_vary on; 
' /etc/nginx/nginx.conf

Agreguemos la configuración del archivo de índice index.php a /etc/nginx/nginx.conf:

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

Agreguemos configuraciones para el servidor predeterminado: procesamiento PHP a través del socket php-fpm, deshabilite el registro para archivos estáticos, aumente el tiempo de caducidad, deshabilite el registro de acceso y errores para favicon.ico y robots.txt, y deniegue el acceso a .ht archivos para todos:

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

Instale wget necesario para instalar certbot:

sudo dnf install wget -y

Descargue el archivo ejecutable de certbot desde fuera del sitio:

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

Mueva certbot a /usr/local/bin/:

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

Y asignemos los derechos como propietario a root:

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

Instalemos las dependencias de certbot y en esta etapa interrumpamos su trabajo (Respuestas: Y, c):

certbot-auto

Descarguemos el archivo con la última versión de Drupal 9 desde fuera del sitio:

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

Instale tar para descomprimir el archivo:

sudo dnf install tar -y

Eliminemos los archivos predeterminados en el directorio /usr/share/nginx/html/:

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

Descomprimamos los archivos en el directorio del servidor web:

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

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

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

Eliminemos el subdirectorio:

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

Eliminemos el archivo con los archivos de instalación:

rm -f ./tar.gz

Asignemos el propietario de los archivos nginx:

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

En esta etapa apagaremos el servidor y tomaremos una instantánea:

shutdown -h now

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

mysql_secure_installation

Habilitemos el validador de contraseñas:

Would you like to setup VALIDATE PASSWORD component? : y

Configuremos la contraseña para el usuario root de MySQL:

New password:
Re-enter new password:

Eliminemos usuarios anónimos:

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y

Evitemos que root se conecte de forma remota:

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y

Eliminemos la base de datos de prueba:

Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y

Recarguemos las tablas de privilegios:

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y

Luego de esto, para completar la instalación, podemos ir a dirección_ip_vps
En esta dirección veremos la página de instalación de Drupal.

Seleccionemos el idioma a utilizar. Por ejemplo: ruso. Haga clic en "Guardar y continuar"

Seleccionemos un perfil de instalación (la demostración se usa únicamente para familiarizarse con el sistema). En nuestro caso, que sea "estándar".

En la página siguiente le daremos un nombre a la base de datos, por ejemplo “drupal”. Indiquemos el nombre de usuario de la base de datos root y la contraseña que se le proporcionó al ejecutar mysql_secure_installation. Haga clic en "Guardar y continuar".

Esperemos a que se complete la instalación y actualización de las traducciones (el proceso puede tardar varios minutos).

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

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

Configurar HTTPS (opcional)

Para configurar HTTPS, el VDS debe tener un nombre DNS válido, especificar en

/etc/nginx/nginx.conf

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

server_name  domainname.ru;

Reiniciemos nginx:

service nginx restart

Lancemos certbot:

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

Ingrese su correo electrónico, acepte los términos de servicio (A), Suscríbase al boletín (opcional) (N), seleccione los nombres de dominio para los cuales desea emitir un certificado (Ingrese para todos).

Si todo salió sin errores, veremos un mensaje sobre la emisión exitosa de certificados y la configuración del servidor:

Congratulations! You have successfully enabled ...

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

Agregue a /etc/crontab para actualizar automáticamente los certificados:

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

Configurar la seguridad del host confiable (recomendado)

Esta configuración pretende ser una solución al problema asociado con la determinación dinámica de base_url y está diseñada para evitar ataques de encabezado HTTP HOST (cuando su sitio piensa que es otra persona).

Para hacer esto, debe especificar nombres de dominio confiables para el sitio en el archivo de configuración.

En archivo

/usr/share/nginx/html/sites/default/settings.php Descomentemos o agreguemos una configuración con patrones de nombres de sitios reales, por ejemplo:

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

Instalación de PHP APCu (RECOMENDADO)

Drupal admite APCu: caché de usuario PHP alternativa; las versiones 8 y 9 hacen un mayor uso de APCu como caché local a corto plazo que las versiones anteriores. El tamaño de caché predeterminado (32 MB) es adecuado para la mayoría de los sitios y no puede exceder los 512 MB.

Para activarlo, instale el módulo PHP APCu:

dnf -y install php-pecl-apcu

Reinicie nginx y php-fpm:

service nginx restart
service php-fpm restart

Si utiliza el idioma ruso y APCu con el tamaño de memoria recomendado para el caché, es posible que vea una advertencia en el panel de control de que el tamaño de la memoria asignada para el caché es diferente al recomendado, pero en realidad todo funciona correctamente. y lo más probable es que la advertencia incorrecta se corrija en las próximas actualizaciones.

O si la advertencia te duele los ojos, puedes usar parche correspondiente desde fuera del sitio.

Te recordamos que también puedes hacernos una imagen.

Hay tres opciones sobre cómo participar.

Prepare la imagen usted mismo y obtenga 3000 rublos en su saldo

Si estás listo para lanzarte inmediatamente a la batalla y crear la imagen que te falta, te acreditaremos 3000 rublos en tu saldo interno, que podrás gastar en los servidores.

Cómo crear tu propia imagen:

  1. Crea una cuenta con nosotros en sitio web
  2. Informe al soporte técnico que va a crear y probar imágenes.
  3. Le acreditaremos 3000 rublos y le habilitaremos la posibilidad de crear instantáneas.
  4. Solicite un servidor virtual con un sistema operativo limpio
  5. Instale el software en este VPS y configúrelo
  6. Escribir instrucciones o scripts para la implementación de software.
  7. Crear una instantánea para el servidor configurado
  8. Solicite un nuevo servidor virtual seleccionando la instantánea creada previamente en la lista desplegable "Plantilla de servidor"
  9. Si el servidor se crea correctamente, transfiera los materiales recibidos en la etapa 6 al soporte técnico.
  10. Si hay un error, puede consultar con soporte técnico el motivo y repetir la configuración.

Para propietarios de empresas: ofrezca su software

Si es un desarrollador de software que se implementa y utiliza en VPS, podemos incluirlo en el mercado. Así es como podemos ayudarle a atraer nuevos clientes, tráfico y conciencia. Escribenos

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

Y lo prepararemos nosotros mismos.

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

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

Fuente: habr.com