Criando um modelo VPS com Drupal 9 no Centos 8

Continuamos a expandir nosso mercado. Recentemente, conversamos sobre como fez uma imagem do Gitlab, e esta semana o Drupal apareceu em nosso marketplace.

Contamos porque a escolhemos e como a imagem foi criada.

Criando um modelo VPS com Drupal 9 no Centos 8

Drupal é uma plataforma conveniente e poderosa para criar qualquer tipo de site: de microsites e blogs a grandes projetos sociais, que também é usado como base para aplicativos da web, escritos em PHP e usando bancos de dados relacionais como armazenamento de dados.

O Drupal 9 inclui todos os recursos introduzidos na versão 8.9. A principal diferença entre a versão 9 e a versão 8 é que a plataforma continuará recebendo atualizações e correções de segurança após novembro de 2021. Também na versão 9, o processo de atualização foi simplificado, tornando o processo de atualização da versão 8 ainda mais fácil.

Requisitos do servidor

Para usar o Drupal, é recomendável usar 2 GB de RAM e 2 núcleos de CPU.

Os arquivos principais do Drupal tem cerca de 100 MB, além disso você vai precisar de espaço para armazenar imagens, banco de dados, temas, add-ons e backups, que vai depender do tamanho do seu site.

Drupal 9 requer PHP 7.4 ou superior com um limite mínimo (memory_limit) para 64 MB de memória, no caso de usar módulos adicionais, é recomendável instalar 128 MB.

Drupal pode usar Apache ou Nginx como servidor web e MySQL, PostgreSQL ou SQLite como banco de dados.

Vamos instalar o Drupal usando Nginx e MySQL.

Instalação

Atualize os pacotes instalados para a versão mais recente:

sudo dnf update -y

Vamos adicionar uma permissão permanente para o tráfego de entrada nas portas http/80 e https/443:

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

Aplique as novas regras de firewall:

sudo systemctl reload firewalld

Instale o Nginx:

sudo dnf install nginx -y

Vamos iniciar e habilitar o servidor Nginx:

sudo systemctl start nginx
sudo systemctl enable nginx

Como o PHP 7.2 é usado atualmente no repositório principal do Centos, vamos adicionar o repositório REMI com PHP 7.4 (a versão mínima para Drupal 9).
Para fazer isso, adicione o repositório EPEL (exigido pelo repositório REMI):

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

Vamos adicionar o repositório REMI:

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

Habilite o módulo php:remi-7.4 para instalar o php 7.4:

sudo dnf module enable php:remi-7.4 -y

Instale o php-fpm e o php-cli:

sudo dnf install -y php-fpm php-cli

Instale os módulos PHP necessários para o funcionamento do 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

Também instalaremos os módulos PHP recomendados mbstring opcache:

sudo dnf install -y php-mbstring php-opcache

Instale o servidor MySQL:

sudo dnf install mysql-server -y

Habilite e inicie o servidor MySQL:

sudo systemctl start mysqld
sudo systemctl enable mysqld

Como estamos fazendo um modelo para VDS, e eles podem ser lentos, vamos adicionar um atraso de início do mysqld de 30 segundos, caso contrário, pode haver problemas ao iniciar o servidor durante a inicialização do sistema:

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

Vamos alterar o grupo e o usuário sob os quais o nginx será executado fazendo alterações em /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

Altere o proprietário do diretório de sessão do PHP para nginx de acordo:

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

Vamos remover as linhas de comentário do arquivo de configuração /etc/nginx/nginx.conf (para que não haja ocorrências duplas para sed):

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

Adicione configurações de compactação 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

Vamos adicionar as configurações do arquivo de índice index.php em /etc/nginx/nginx.conf:

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

Vamos adicionar configurações para o servidor padrão que processa php por meio do soquete php-fpm, desabilitar o log para arquivos estáticos, aumentar o tempo de expiração, desabilitar o log de acesso e erro para favicon.ico e robots.txt e negar acesso a arquivos .ht 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 o wget necessário para instalar o certbot:

sudo dnf install wget -y

Baixe o arquivo executável certbot de fora do site:

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

Mova certbot para /usr/local/bin/:

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

E atribua direitos e propriedade ao root:

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

Instale as dependências do certbot e interrompa-o neste estágio (Respostas: Y, c):

certbot-auto

Baixe o arquivo com a versão mais recente do Drupal 9 de fora do site:

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

Instale o tar para descompactar o arquivo:

sudo dnf install tar -y

Exclua os arquivos padrão no diretório /usr/share/nginx/html/:

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

Descompacte os arquivos no diretório do servidor web:

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

Mova os arquivos do subdiretório para o diretório raiz do servidor web:

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

Excluir subdiretório:

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

Exclua o arquivo com os arquivos de instalação:

rm -f ./tar.gz

Defina o proprietário dos arquivos nginx:

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

Nesta fase, desligaremos o servidor e tiraremos um instantâneo:

shutdown -h now

Após iniciar o VDS a partir do snapshot, realizaremos a configuração inicial do servidor MySQL executando o script:

mysql_secure_installation

Habilite o validador de senha:

Would you like to setup VALIDATE PASSWORD component? : y

Defina a senha do usuário root do MySQL:

New password:
Re-enter new password:

Remover usuários anônimos:

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

Vamos evitar que o root se conecte remotamente:

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

Vamos remover o banco de dados de teste:

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

Recarregue as tabelas de privilégios:

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

Depois disso, para concluir a instalação, podemos ir para vps_ip_address
Neste endereço veremos uma página com a instalação do Drupal.

Selecione o idioma a ser usado. Por exemplo: russo. Clique em "Salvar e continuar"

Vamos escolher um perfil de instalação (o demo é usado apenas para familiarização com o sistema). No nosso caso, que seja "padrão".

Na próxima página, dê um nome ao banco de dados, como "drupal". Especifique o nome de usuário root do banco de dados e a senha fornecida a ele ao iniciar mysql_secure_installation. Clique em "Salvar e continuar".

Vamos aguardar a conclusão da instalação e atualização das traduções (o processo pode levar alguns minutos).

Especifique o nome do site, defina o e-mail do site (em nome do qual as notificações do site virão), login, senha e e-mail da conta de administrador do Drupal. Também definiremos o país e o fuso horário nas configurações regionais. E conclua a instalação clicando em "Salvar e continuar".

Depois disso, você pode ir para o painel de controle com o login e a senha de administrador do Drupal criados.

Configuração HTTPS (opcional)

Para configurar HTTPS, o VDS deve ter um nome DNS válido, especifique em

/etc/nginx/nginx.conf

na seção do servidor o nome do servidor (por exemplo):

server_name  domainname.ru;

Reinicie o nginx:

service nginx restart

Vamos iniciar o certbot:

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

Digite seu e-mail, concorde com os termos de serviço (A), Assine a newsletter (opcional) (N), selecione os nomes de domínio para os quais deseja emitir um certificado (Enter para todos).

Se tudo ocorreu sem erros, veremos uma mensagem sobre a emissão bem-sucedida de certificados e configuração do servidor:

Congratulations! You have successfully enabled ...

Depois disso, as conexões na porta 80 serão redirecionadas para 443 (https).

Adicione a /etc/crontab para renovar automaticamente os certificados:

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

Configurando a segurança de host confiável (recomendado)

Essa configuração é uma solução para o problema de detecção dinâmica de base_url e tem como objetivo evitar ataques de cabeçalho HTTP HOST (quando seu site pensa que é outra pessoa).

Para fazer isso, você precisa especificar os nomes de domínio confiáveis ​​do site no arquivo de configurações.

No arquivo

/usr/share/nginx/html/sites/default/settings.php descomente ou adicione uma configuração com padrões de nomes de sites reais, por exemplo:

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

Instalando o PHP APCu (RECOMENDADO)

Drupal suporta APCu - Alternative PHP User Cache, as versões 8 e 9 usam APCu mais intensamente como um cache local de curto prazo do que as versões anteriores. O tamanho padrão do cache (32 MB) é adequado para a maioria dos sites e não pode exceder 512 MB.

Para ativar, instale o módulo PHP APCu:

dnf -y install php-pecl-apcu

Reinicie o nginx e o php-fpm:

service nginx restart
service php-fpm restart

No caso de usar o idioma russo e APCu com o tamanho de memória cache recomendado, você pode ver um aviso no painel de controle de que o tamanho da memória cache alocada é diferente do recomendado, mas na verdade tudo funciona corretamente e o incorreto aviso provavelmente será corrigido nas próximas atualizações.

Ou se o aviso machucar o olho, você pode usar patch correspondente de fora do local.

Queremos lembrar que você também pode fazer uma imagem para nós

São três opções de como participar.

Prepare você mesmo a imagem e obtenha 3000 rublos em seu saldo

Se você está pronto para correr imediatamente para a batalha e criar a imagem que lhe falta, creditaremos 3000 rublos em seu saldo interno - você pode gastá-lo em servidores.

Como criar sua imagem:

  1. Crie uma conta conosco On-line
  2. Diga ao suporte que você vai criar e testar imagens
  3. Nós creditaremos a você 3000 rublos e habilitaremos a capacidade de criar instantâneos
  4. Solicite um servidor virtual com um sistema operacional limpo
  5. Instale o software neste VPS e configure-o
  6. Escrever instruções ou script para implantação de software
  7. Crie um instantâneo para o servidor configurado
  8. Solicite um novo servidor virtual selecionando o instantâneo criado anteriormente na lista suspensa "Modelo de servidor"
  9. Em caso de criação bem-sucedida do servidor, transfira os materiais recebidos na etapa 6 para o suporte técnico
  10. Em caso de erro, você pode verificar com o suporte o motivo e repetir a configuração

Para proprietários de empresas: ofereça seu software

Se você é um desenvolvedor de software implantado e usado em um VPS, podemos incluí-lo no mercado. É assim que podemos ajudá-lo a atrair novos clientes, tráfego e visibilidade. Escreva para nós

Deixe-nos saber nos comentários que imagem você sente falta?

E vamos prepará-lo nós mesmos

Criando um modelo VPS com Drupal 9 no Centos 8

Criando um modelo VPS com Drupal 9 no Centos 8

Fonte: habr.com