(51) 2160.9170
  • Blog SOULinux

    Acompanhe Artigos, Notícias e nossos Casos de Sucesso.

Mostrando itens por marcador: NGINX

O WordPress é um sistema de código aberto para gestão de conteúdo para internet, baseado em PHP com banco de dados MariaDB/MySQL, executado em um servidor interpretador, voltado principalmente para a criação de portais de internet, e blogs online.

Este artigo irá guiá-lo como instalar o WordPress no Ubuntu 20.04 com o servidor web Nginx, MariaDB, PHP 8.1 e certificado SSL da Let’s encrypt.

 

1. PRé-requisitos

- Um servidor Ubuntu 20.04 instalado com IP estático (ex: 172.16.15.3) e devidamente atualizado.

- Acesso SSH e logado como usuário root.

- Um nome de domínio apontado para seu servidor: Para garantir conexões do WordPress com protocolos TLS/SSL. O WordPress pode configurar e gerenciar um certificado SSL gratuito e confiável da Let’s Encrypt se seu servidor tiver um nome de domínio (ex: soulinux.com). Se não tiver um nome de domínio, é possível definir um certificado SSL autoassinado que possa criptografar conexões. porém, ele não será confiável por padrão em navegadores Web.

 

2. CONFIGURAÇÕES IMPORTANTES

 

2.1. Habilitar o acesso SSH no Ubuntu:
vim /etc/ssh/sshd_config


A fim de melhorar a segurança de seu servidor, altere a porta de acesso SSH (ex: 2222 ou outra disponível):

Port 2222

Coloque a parte de autenticação como o mostrado abaixo:

Authentication:
LoginGraceTime 2m
PermitRootLogin yes
StrictModes yes

 

Para concluir, reinicie o serviço SSH:

systemctl restart sshd

 

2.2. Definir a região de fuso horário:

dpkg-reconfigure tzdata

 

2.3. Atualize o servidor e limpe itens não mais necessários:
apt update && apt upgrade

apt autoremove

apt autoclean

apt clean

 

 

3. CONFIGURAÇÕES de Firewall

Supondo que você esteja usando o UFW para gerenciar seu firewall, será necessário abrir as portas HTTP ( 80 ) e HTTPS ( 443 ) e SSH (2222).

 

ufw allow 80

ufw allow 443

ufw allow 2222

enable

 

4. iNSTALAÇÃO DO sERVIDOR web (lEmp)

 

4.1. Instalação do NGINX

No momento em que este tutorial está sendo escrito, a versão padrão do NGINX no Ubuntu 20.04 é a 1.18.0 é totalmente suportado e recomendado para o WordPress. por ser padrão, não é necessário indicar a versão na instalação:
apt install nginx

 

Habilite o NGINX para iniciar no boot:
systemctl enable nginx

 

Confira se o serviço NGINX está em execução:

systemctl status nginx

A saída deve ser:

● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2022-01-27 23:20:39 -03; 35s ago
Docs: man:nginx(8)
Main PID: 40106 (nginx)
Tasks: 9 (limit: 9315)
Memory: 8.4M
CGroup: /system.slice/nginx.service
├─40106 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
├─40107 nginx: worker process
├─40108 nginx: worker process
├─40109 nginx: worker process
├─40110 nginx: worker process
├─40111 nginx: worker process
├─40112 nginx: worker process
├─40113 nginx: worker process
└─40114 nginx: worker process

jan 27 23:20:39 marcelo-cce systemd[1]: Starting A high performance web server and a reverse proxy server...
jan 27 23:20:39 marcelo-cce systemd[1]: Started A high performance web server and a reverse proxy server.

 

 

4.2. Instalação do PHP 8.1

No momento em que este tutorial está sendo escrito, a versão padrão do PHP no Ubuntu 20.04 é a 7.4.3 e é totalmente suportado e recomendado para o WordPress, mas por ser uma versão com recursos siginificativos, optamos pora instalar o PHP 8.1.

Para instalar o PHP 8.1 é necessário importar o conhecido PPA de Ondřej Surý, o desenvolvedor líder em PHP e Debian e que mantém os pacotes pata Ubuntu e Debian:
apt install software-properties-common && sudo add-apt-repository ppa:ondrej/php -y

 

Após instaldo, atualize os repositorios apt e os pacotes que exigirem atualização:
apt update && apt upgrade

  

O NGINX não contém processamento PHP nativo como alguns outros servidores web como o Apache. É necessário então a instalação do PHP-FPM “Gerenciador de processo fastCGI” para poder interpretar a linguagem PHP. 

No terminal, use o seguinte comando para instalar o PHP 8.1 e PHP 8.1-FPM:
apt install php8.1 php8.1-fpm php8.1-cli

 

Depois de instalado, o serviço PHP-FPM é iniciado automaticamente e é possível verificar o status o serviço:

systemctl status php8.1-fpm

A saída deve ser:

● php8.1-fpm.service - The PHP 8.1 FastCGI Process Manager
Loaded: loaded (/lib/systemd/system/php8.1-fpm.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2022-01-28 00:57:29 -03; 59s ago
Docs: man:php-fpm8.1(8)
Process: 65920 ExecStartPost=/usr/lib/php/php-fpm-socket-helper install /run/php/php-fpm.sock /etc/php/8.1/fpm/pool.d/www.conf >
Main PID: 65917 (php-fpm8.1)
Status: "Processes active: 0, idle: 3, Requests: 0, slow: 0, Traffic: 0req/sec"
Tasks: 4 (limit: 9315)
Memory: 7.7M
CGroup: /system.slice/php8.1-fpm.service
├─65917 php-fpm: master process (/etc/php/8.1/fpm/php-fpm.conf)
├─65957 php-fpm: pool www
├─65959 php-fpm: pool www
└─65980 php-fpm: pool www
jan 28 00:57:29 marcelo-cce systemd[1]: Starting The PHP 8.1 FastCGI Process Manager...
jan 28 00:57:29 marcelo-cce systemd[1]: Started The PHP 8.1 FastCGI Process Manager.

 

Instale as extensões php mais comuns necessárias para o WordPress com o seguinte comando:
apt install php8.1-common php8.1-mysql php8.1-xml php8.1-xmlrpc php8.1-curl php8.1-gd php8.1-imagick php8.1-cli php8.1-dev php8.1-imap php8.1-mbstring php8.1-opcache php8.1-soap php8.1-zip php8.1-redis php8.1-intl php8.1-ldap -y

 

Confira a versão do PHP:
php --version

 A saída do comando deve ser:

PHP 8.1.2 (cli) (built: Jan 24 2022 10:42:33) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.2, Copyright (c) Zend Technologies
with Zend OPcache v8.1.2, Copyright (c), by Zend Technologies

 

4.3. Configurar o PHP no NGINX

Por padrão, o servidor NGINX não é capaz de interpretar código PHP, por isso, vamos fazer alguns ajustes em seu arquivo padrão de configuração:
nano /etc/nginx/sites-available/default

Neste arquivo, procure a linha que contém todos os arquivos que são executados por padrão. Essa linha deve estar abaixo da linha de configuração de root (root /var/www/html;).

Adicione "index.php" nessa linha, como mostrado a seguir:

root /var/www/html;

# Add index.php to the list if you are using PHP
index index.php index.html index.htm index.nginx-debian.html;

Precisamos também definir que o NGINX irá utilizar a versão correta do PHP e ativar a diretiva location ~ \.php$. Desça um pouco mais, até próximo da linha 56 e retire o # para descomentar a linha "location ~ \.php$ {", descomente também as linhas "include snippets/fastcgi-php.conf;", "fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; e a chave (}) de fechamento do bloco". Caso a linha esteja diferente de "php8.1-fpm.sock", coloque assim, pois é a versão do PHP que estamos utilizando.

A diretiva deve ficar como o mostrado a seguir:location ~ \.php$ {
include snippets/fastcgi-php.conf;
# With php-fpm (or other unix sockets):
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
# With php-cgi (or other tcp sockets):
# fastcgi_pass 127.0.0.1:9000;
}

 

Teste o NGINX para conferir se não houve algum erro na edição desse arquivo:
nginx -t

A saída deve ser:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

 

Reinicie os serviços NGINX e o PHP:

systemctl restart nginx && systemctl restart php8.1-fpm

 

4.4. Configurar o tamanho de arquivos para upload no NGINX e PHP

Quando se deseja fazer upload de arquivos (plugins, temas, etc.) via interface do WordPress, é necessário definir o limite máximo permitido pelas diretivas padrões do NGINX e do PHP. No caso, as diretivas são "client_max_body_size" e "upload_max_filesize", respectivamente. Edite o arquivo de configuração do servidor web (nginx.conf)
nano /etc/nginx/nginx.conf

Neste arquivo, adicione a diretiva abaixo dentro de http:

#Aumentar o limite de upload do usuário para 256 MB ou o tamanho que desejar.
#Deve ser o mesmo valor da diretiva "upload_max_filesize", do arquivo "/etc/php/8.1/fpm/php.ini"

client_max_body_size 256M;

 

4.5. Ajustar configurações do PHP para permitir upload de arquivos maiores maior tempo de processamento

Antes da criação do banco de dados, pode-se definir os parâmetros recomendados no arquivo php.ini:
nano /etc/php/8.1/fpm/php.ini


Ajuste os seguintes campos para os valores abaixo ou de acordo com suuas necessidades:

max_execution_time = 600
max_input_time = 1000
memory_limit = 2048M
post_max_size = 128M

#Coloque o mesmo valor colocado na diretiva "client_max_body_size", do arquivo /etc/nginx/nginx.conf
upload_max_filesize = 256M

date.timezone = America/Sao_Paulo

 

Reinicie os serviços NGINX e o PHP:
systemctl restart nginx && systemctl restart php8.1-fpm

 

 

4.6. Criar o arquivo phpinfo.php

A criação do arquivo phpinfo.php permite mostrar no navegador de internet, todas as informações sobre a versão do PHP, seus módulos e parâmetros utilizados. Para isso, criaremos um arquivo na pasta padrão do NGINX (/var/www/html).
nano /var/www/html/phpinfo.php


Coloque o seguinte conteúdo nesse arquivo e salve-o:

<?php
phpinfo();
?>

 

O usuário "www-data" é o padrão para operação normal em servidores Web como o NGINX. Deve-se então definir esse usuário como proprietário da pasta onde está localizado o seu arquivo:chown -R www-data:www-data /var/www/html/

Defina as permissões corretas para a pasta:

chmod -R 755 /var/www/html/

 

Após, vá até o seu navegador web (Chrome, Firefox, Brave, etc.) e digite o seu respectivo endereço: http://<EndereçoIP>/phpinfo.php ou  http://localhost/phpinfo.php e a seguinte janela deve aparecer:

 

 

4.7. Instalar e configurar a base de dados MySQL (MariaDB):

O MariaDB é um sistema de gerenciamento de banco de dados de código aberto, usado com frequência como uma alternativa ao MySQL. No momento em que este tutorial está sendo escrito, os repositórios APT padrão do Ubuntu 20.04 incluem a versão 10.3.32 do MariaDB.

Proceda a instalação do MariaDB:
apt install mariadb-server mariadb-client

 

Após concluída a instalação, verifique se o habilite para iniciar no boot e reinicie o MariaDB:

systemctl enable mariadb

systemctl restart mariadb

 

Confira a versão do MariaDB:
mariadb --version

 

Antes de criar a base de dados, vamos tornar o MariaDB mais seguro. Execute o comando a seguir e, quando solicitado, defina a "senha do usuário root do MariaDB", remova o "usuário anônimo", "mantenha o login remoto pelo usuário root do banco de dados" e exclua a base de dados "test":

/usr/bin/mysql_secure_installation

Quando solicitado, responda às perguntas abaixo:

Enter current password for root (enter for none): Pressione Enter
Change the root password? [Y/n]: Digite Y
New password: Digite a senha do SGBD
Re-enter new password: Digite a senha novamente
Remove anonymous users? [Y/n]: Digite Y
Disallow root login remotely? [Y/n] : Digite Y
Remove test database and access to it? [Y/n]: Digite Y
Reload privilege tables now? [Y/n]: Digite Y
 

Faça login ao servidor do banco de dados MariaDB com o respectivo usuário root e entre com a respectiva senha definida acima:
mysql -u root -p

 

Estando na interface de administração do MariaDB, crie a base de dados do seu site WordPress (ex: meuSiteDB):

create database MeuSiteDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

 

Se você desejar que um outro usuário diferente do "root", tenha acesso a base de dados recém criada, é necessário criar e depois associar um usuário para essa base de dados:

create user '[usuarioDB]'@'localhost' IDENTIFIED BY '[senhaUsuarioDB]';

 

Neste ponto, o usuário recém criado, não possui permissões para fazer nada com as base de dados, portanto, deve-se fornecer ao usuário o acesso às informações que eles irão precisar. No caso, vamos garantir todos os privilégios do banco de dados para o respectivo usuário:

grant all privileges on MeuSiteDB.* to 'UsuarioDB'@'localhost' identified by 'SENHA_UsuarioDB';

 

Atribua os respectivos privilégios:

flush privileges;

 

Saia da interface de administração do MariaDB:

exit

 

 

5. INSTALAÇÃO e Configuração DO Wordpress

 

5.1. Faça o download da última versão do WordPress na pasta padrão do NGINX:

 

Acesse a pasta "/var/www/html":

cd /var/www/html

 

Faça o download da última versão do WordPress:
wget https://br.wordpress.org/latest-pt_BR.zip

 

Descompacte o arquivo recém baixado:

unzip latest-pt_BR.zip

 

Descompacte o arquivo recém baixado:

unzip latest.zip

 

Após descomapctado, mova a pasta recém criada (wordpress) para o nome do seu site (ex: meuSite)
mv wordpress <meuSite>

 

Apague o arquivo compactado recém baixado:

rm latest-pt_BR.zip

 

O usuário "www-data" é o padrão para operação normal para servidores Web como o NGINX. Defina esse usuário como proprietário da pasta do seu site WordPress:chown -R www-data:www-data /var/www/html/<meuSite>

 

Defina as permissões corretas para o diretório raiz do seu site WordPress: 

chmod -R 755 /var/www/html/<meuSite>


 

5.2. Crie um site na configuração do NGINX:

Com as etapas realizadas até aqui, já é possível acessar o seu site WordPress via navegador web e iniciar o procedimento de instalação inicial, mas para uma melhor organização, para definir o domínio público de seu website (ex: www.meusite.com.br) e também ter a possibilidade de colocar múltiplos websites no mesmo servidor usando a mesma pilha LEMP, deve-se criar o respectivo arquivo de configuração.

Crie o arquivo "<meuSite>" na pasta "/etc/nginx/sites-available":

nano /etc/nginx/sites-available/<meuSite>

Coloque o seguinte conteúdo, ajustando os campos relacionaos ao seu site, de acordo com suas configurações:

server {
listen 80;
listen [::]:80;
root /var/www/html/<meuSite>;
index.php index index.html index.htm index.nginx-debian.html;
server_name <meuSite.com.br> www.<meuSite.com.br>;
client_max_body_size 100M;

location / {
try_files $uri $uri/ /index.php?$args;
}

location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
}

 

Teste o NGINX para conferir se não houve algum erro na edição desse arquivo:
nginx -t

A saída deve ser:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

 

Para finalizar esta etapa, deve-se definir o Host Virtual (Virtualhost) do site recém configurado. Para isso, basta criar uma ligação simbólica (comando "ln -s") do respectivo arquivo de configuração para a subpasta "sites-enabled":

ln -s /etc/nginx/sites-available/<meuSite> /etc/nginx/sites-enabled/

 

Teste o NGINX para conferir se não houve algum erro na edição desse arquivo:
nginx -t

A saída deve ser:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

 

Reinicie os serviços NGINX e o PHP:
systemctl restart nginx && systemctl restart php8.1-fpm

  

Se você estiver em um ambiente de desenvolvimento ou se ainda não tem o seu domínio, já é possível iniciar o procedimento de instalação do WordPress. No seu navegador web, digite o seu respectivo endereço: http://<EndereçoIP>/<meuSite> ou  http://localhost/<meuSite>.

Se desejar seguir com a instalação, defina na próxima tela, os dados do sua base de dados, definidos no item 4.5 deste documento.

 

 

6. Instalação do Certificado Digital

Para esta etapa, é fortemente recomendado um nome de domínio registrado, usaremos como referência o domínio <meuSite.com.br>. Você pode comprar um nome de domínio no registrador de domínios de sua escolha (ex: Registro.br, Namecheap, etc.) ou obter um gratuitamente no site Freenom.

Instalaremos o Certbot do Let’s encrypt e seu plug-in do Nginx:

apt install certbot python3-certbot-nginx

 

O Certbot precisa conseguir encontrar o bloco de servidor correto na sua configuração NGINX para que ele seja capaz de configurar automaticamente o SSL. Mais especificamente, ele faz isso procurando uma diretiva "server_name" que corresponda ao domínio do qual você solicita um certificado. Na etapa 5.2, foi mostrada a criação do arquivo de configuração, onde temos o respectivo bloco e a respectiva diretiva já devidamente configurados.

Para verificar, abra o arquivo de configuração do seu domínio usando o nano ou seu editor de texto preferido:
nano /etc/nginx/sites-available/<meuSite>

Localize a linha existente server_name e deve se parecer com isto:

...
server_name <meuSite.com.br> www.<meuSite.com.br>;
...

Se estiver correto, saia do seu editor e siga para o próxima etapa:

 

O Certbot oferecer várias maneiras de obter certificados SSL através de plug-ins. O plug-in NGINX cuidará da reconfiguração do servidor web e recarregará a configuração sempre que necessário. Para usar este plug-in, digite o seguinte:

certbot --nginx -d <meuSite.com.br> -d www.<meuSite.com.br>

O comando acima executa o certbot com o plug-in nginx e usa o -d para especificar os nomes de domínio para os quais desejamos um certificado válido.

Se essa é a primeira vez que você executa o certbot, você será solicitado a informar um endereço de e-mail e concordar com os termos de serviço. Após fazer isso, o certbot se comunicará com o servidor da Let’s Encrypt, executando posteriormente um desafio para verificar se você controla o domínio para o qual está solicitando um certificado.

 

Se tudo estiver correto, o certbot perguntará como definir suas configurações de HTTPS. Escolha a opção 2 e pessione [Enter].

Output Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access.
Choose this for new sites, or if you're confident your site works on HTTPS. You can undo this change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel)> 2

 

A configuração será atualizada e o Nginx recarregará para aplicar as novas configurações. O certbot será encerrado com uma mensagem informando que o processo foi concluído e onde os certificados estão armazenados:

IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/<meuSite.com.br>/fullchain.pem
Your key file has been saved at: /etc/letsencrypt/live/<meuSite.com.br>/privkey.pem Your cert will expire on 2022-04-28.
To obtain a new or tweaked version of this certificate in the future, simply run certbot again with the "certonly" option.
To non-interactively renew *all* of your certificates, run "certbot renew" - If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le

 

Os certificados foram baixados, instalados e carregados. Tente recarregar o seu site usando https://<meuSite.com.br> e verifique o indicador de segurança do seu navegador. Ele deve indicar que o site está devidamente protegido, normalmente com um ícone de cadeado.

Faça também um teste no site SSL Labs Server Test​​​​, e você deverá receber uma classificação A.

 

Os certificados da Let’s Encrypt possuem validade de apenas 90 dias. O pacote certbot que instalamos cuida disso adicionando um temporizador systemd que será executado duas vezes por dia e renovará automaticamente qualquer certificado que esteja dentro de trinta dias da expiração.

Para consultar o status do temporizador com o systemctl:

sudo systemctl status certbot.timer

A saída deve ser semelhante a:

● certbot.timer - Run certbot twice daily
Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled)
Active: active (waiting) since Mon 2022-01-28 20:04:36 UTC; 1 days ago
Trigger: Thu 2022-01-28 05:22:32 UTC; 1h left
Triggers: ● certbot.service

 

Quando necessário, o Certbot renovará seus certificados e recarregará o NGINX para aplicar as alterações. Se o processo de renovação automatizada alguma vez falhar, a Let’s Encrypt enviará uma mensagem para o e-mail que você especificou, informando quando o certificado vai expirar.

  

Marcado sob