Criando um modelo VPS com Drupal 9 no CentOS 8

Continuamos a expandir nosso marketplace. Recentemente, falamos sobre como criamos a imagem do Gitlab, e nesta semana, nosso marketplace recebeu o Drupal.

Vamos explicar por que escolhemos ele e como a imagem foi criada.

Criando um modelo VPS com Drupal 9 no CentOS 8

Drupal — uma plataforma conveniente e poderosa para criar todos os tipos de sites, desde microsites e blogs até grandes projetos sociais, sendo também usada como base para aplicações web, escrita em PHP e utilizando bancos de dados relacionais como armazenamento.

O Drupal 9 inclui todas as funcionalidades que foram implementadas na versão 8.9. A principal diferença da versão 9 em relação à versão 8 é que atualizações e correções de segurança continuarão a ser lançadas para a plataforma mesmo após novembro de 2021. Além disso, na versão 9, o processo de atualização foi simplificado, tornando a 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 ocupam cerca de 100 MB; adicionalmente, você precisará de espaço para armazenar imagens, banco de dados, temas, módulos extras e backups, o que dependerá do tamanho do seu site.

O Drupal 9 requer PHP 7.4 ou superior, com um limite mínimo de memória (memory_limit) de 64 MB; caso utilize módulos adicionais, é recomendado configurar para 128 MB.

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

Instalaremos o Drupal utilizando Nginx e MySQL.

Instalação

Vamos atualizar os pacotes instalados para a versão mais recente:

sudo dnf update -y

Adicionaremos a permissão permanente para 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

Aplicaremos as novas regras do firewall:

sudo systemctl reload firewalld

Instalaremos o Nginx:

sudo dnf install nginx -y

Iniciaremos e habilitaremos o servidor Nginx:

sudo systemctl start nginx
sudo systemctl enable nginx

Como atualmente o repositório principal do CentOS utiliza a versão PHP 7.2, adicionaremos o repositório REMI com PHP 7.4 (versão mínima para o Drupal 9).
Para isso, adicionaremos o repositório EPEL (necessário pelo repositório REMI):

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

Adicionaremos o repositório REMI:

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

Habilitaremos o módulo php:remi-7.4 para a instalação do PHP 7.4:

sudo dnf module enable php:remi-7.4 -y

Instalaremos php-fpm e php-cli:

sudo dnf install -y php-fpm php-cli

Instalaremos 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 vamos instalar os módulos PHP recomendados mbstring opcache:

sudo dnf install -y php-mbstring php-opcache

Instalaremos o servidor MySQL:

sudo dnf install mysql-server -y

Ativaremos e iniciaremos o servidor MySQL:

sudo systemctl start mysqld
sudo systemctl enable mysqld

Como estamos criando um template para VDS, que podem ser lentos, adicionaremos um atraso de 30 segundos para o início do mysqld, caso contrário, pode haver problemas ao iniciar o servidor durante a inicialização do sistema:

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

Mudaremos o grupo e o usuário sob os quais o nginx funcionará, 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

Mudaremos o proprietário do diretório de sessões PHP para o nginx:

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

Removeremos as linhas de comentários do arquivo de configuração /etc/nginx/nginx.conf (para evitar acionamentos duplos para sed):

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

Adicionaremos as configurações de compressão gzip em /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

Adicionaremos configurações para o 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

Adicionaremos configurações para o servidor padrão, processando PHP através do socket php-fpm, desabilitando logs para arquivos estáticos, aumentando o tempo de expiração, desabilitando logs de acesso e erros para favicon.ico e robots.txt e negando 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

Instalaremos wget necessário para a instalação do certbot:

sudo dnf install wget -y

Baixaremos o arquivo executável certbot do site oficial:

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

Moveremos o certbot para /usr/local/bin/:

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

E definiremos as permissões e o proprietário como root:

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

Instalaremos as dependências do certbot e neste ponto encerraremos sua execução (Respostas: Y, c):

certbot-auto

Baixaremos do site oficial o arquivo com a última versão do Drupal 9:

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

Instalaremos o tar para descompactar o arquivo:

sudo dnf install tar -y

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

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

Descompactaremos os arquivos no diretório do servidor web:

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

Moveremos 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/

Removeremos o subdiretório:

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

Removeremos o arquivo do instalador:

rm -f ./tar.gz

Definiremos o proprietário dos arquivos como nginx:

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

Neste ponto, desligaremos o servidor e faremos um snapshot:

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

Ativaremos o validador de senhas:

Would you like to setup VALIDATE PASSWORD component? : y

Definiremos a senha do usuário root do MySQL:

Nova senha:
Reinsira a nova senha:

Removeremos usuários anônimos:

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

Proibiremos o login remoto do root:

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

Removeremos o banco de dados de teste:

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

Recuperaremos 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 acessar o endereço vps_ip_address
Por esse endereço veremos a página de instalação do Drupal.

Escolheremos o idioma a ser utilizado. Por exemplo: português. Clicaremos em 'Salvar e continuar'

Escolheremos o perfil de instalação (demo é usado apenas para familiarização com o sistema). No nosso caso, será 'padrão'.

Na próxima página, definiremos o nome do banco de dados, por exemplo, 'drupal'. Indicaremos o nome do usuário do BD como root e a senha definida anteriormente, ao executar mysql_secure_installation. Clicaremos em 'Salvar e continuar'.

Aguardaremos o término da instalação e a atualização das traduções (o processo pode levar alguns minutos).

Vamos indicar o nome do site, definir o e-mail do site (de onde as notificações do site serão enviadas), login, senha e e-mail da conta de administrador do Drupal. Também vamos definir o país e o fuso horário nas configurações regionais. E concluiremos a instalação clicando em "Salvar e continuar".

Após isso, podemos acessar o painel de controle com o login e a senha do administrador do Drupal criados.

Configuração de HTTPS (opcional)

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

/etc/nginx/nginx.conf

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

server_name  domainname.ru;

Vamos reiniciar o nginx:

service nginx restart

Vamos iniciar o certbot:

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

Vamos inserir nosso e-mail, aceitar os termos de serviço (A), Assinatura na newsletter (opcional) (N), escolher os nomes de domínio para os quais precisa emitir o certificado (Enter para todos).

Se tudo decorrer sem erros, veremos uma mensagem confirmando a emissão bem-sucedida dos certificados e a configuração do servidor:

Congratulations! You have successfully enabled ...

Após essa conexão, as requisições na porta 80 serão redirecionadas para 443 (https).

Adicionaremos em /etc/crontab para a atualização automática dos certificados:

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

Configuração de Segurança do Anfitrião Confiável (recomendado)

Esta configuração visa resolver um problema relacionado à definição dinâmica de base_url e tem como objetivo prevenir ataques de cabeçalho HOST HTTP (quando seu site acha que é outro).

Para isso, é necessário indicar os nomes de domínio confiáveis do site no arquivo de configurações.

No arquivo

/usr/share/nginx/html/sites/default/settings.php descomentar ou adicionar a configuração com os padrões dos nomes atuais do site, por exemplo:

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

Instalação do PHP APCu (RECOMENDADO)

O Drupal suporta APCu — Alternative PHP User Cache, as versões 8 e 9 utilizam APCu como cache local de curto prazo com mais intensidade que as versões anteriores. O tamanho do cache por padrão (32 MB) deve ser suficiente para a maioria dos sites, e não pode exceder 512 MB.

Para ativar, vamos instalar o módulo PHP APCu:

dnf -y install php-pecl-apcu

Vamos reiniciar o nginx e o php-fpm:

service nginx restart
service php-fpm restart

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

Ou, se o aviso for muito incômodo, pode-se utilizar o patch correspondente do site externo.

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

Há três maneiras de participar.

Prepare a imagem você mesmo e receba 3000 reais na conta

Se você está pronto para mergulhar de cabeça e criar a imagem que falta, nós creditaremos 3000 reais na sua conta interna — você poderá gastar com servidores.

Como criar sua própria imagem:

  1. Crie uma conta conosco em site
  2. Informe o suporte que você pretende criar e testar imagens
  3. Nós creditaremos 3000 reais e habilitaremos a possibilidade de criar snapshots
  4. Solicite um servidor virtual com um sistema operacional limpo
  5. Instale o software neste VPS e configure-o
  6. Crie uma instrução ou script para a implantação do software
  7. Crie um snapshot do servidor configurado
  8. Solicite um novo servidor virtual, escolhendo no menu suspenso 'Modelo de servidor' o snapshot criado anteriormente
  9. Caso a criação do servidor seja bem-sucedida, envie os materiais obtidos na etapa 6 para o suporte técnico
  10. Em caso de erro, você pode consultar o suporte sobre a razão e repetir a configuração

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

Se você é um desenvolvedor de software que é implantado e utilizado em VPS, podemos incluí-lo no marketplace. Assim, podemos ajudá-lo a trazer novos clientes, tráfego e visibilidade. Fale conosco

Conte nos comentários qual imagem está faltando para você?

E nós a prepararemos

Criando um modelo VPS com Drupal 9 no CentOS 8

Criando um modelo VPS com Drupal 9 no CentOS 8

Fonte: habr.com

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster