Servidor WEB NGINX + PHP 8.2 + MariaDB + phpMyAdmin + Let’s Encrypt Debian 12 Bookworm (LNMP)

Neste tutorial vamos configurar um servidor web com NGINX (lê-se “engine x”), o concorrente do Apache. NGINX é um servidor web (HTTP e IMAP/POP3/Proxy) rápido, leve e com inúmeras possibilidades de configuração para melhor performance. O Apache, sem dúvidas, é o servidor web mais popular. No entanto, o NGINX a cada ano ganha mais popularidade e está sendo a preferência dos novos projetos.

Distribuição utilizada: Debian 12 Stretch / Instalação Limpa

NGINX

https://www.nginx.com
Vamos instalar-lo e remover a assinatura para que não vejam a versão do mesmo (Boas praticas)

# apt install nginx
# sed -i 's/# server_tokens/server_tokens/' /etc/nginx/nginx.conf
# systemctl restart nginx

Acesse agora em seu navegador http://IP-SERVIDOR/

Pronto nosso NGINX está rodando!

MARIADB

MariaDB para quem ainda não sabe é um fork do MySQL, criado pelo próprio fundador do projeto MySQL após sua aquisição pela Oracle.

# apt install mariadb-server mariadb-client

Ao final do tutorial iremos colocar uma senha para o usuario root do mariadb. Não iremos fazer isso agora para não dar problema na instalação do phpmyadmin.

PHP 8.2

Incluirei algumas extensões do PHP que são normalmente utilizada também na instalação.

# apt install --no-install-recommends \
 php php-{fpm,cli,mysql,pear,gd,gmp,bcmath,mbstring,curl,xml,zip,json,pgsql}

Agora vamos fazer a “integração” do PHP com o NGINX. Moveremos o arquivo defaul.

# mv /etc/nginx/sites-available/default /etc/nginx/sites-available/default.original

Crie um novo:

# vim /etc/nginx/sites-available/default

Ajuste:

server {
    listen 80;
    listen [::]:80;

    root /var/www/html;
    index index.php index.html index.htm;

    server_name _;

    location / {
        try_files $uri $uri/ =404;
    }

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

Teste a configuração se não tem nada errado e restart os serviços:

# nginx -t
# systemctl restart nginx php8.2-fpm

Vamos criar um arquivo em PHP para testa se nosso NGINX está interpretando o PHP.

# echo '<?php phpinfo();' >> /var/www/html/teste.php

Acesse em seu navegador http://IP-SERVIDOR/teste.php

Servidor WEB com PHP está funcionando!

Exemplo para múltiplos domínios/subdomínios

# vim /etc/nginx/sites-available/sub1.conf

Neste ex: vou representar o sub1.remontti.com.br

server {
    listen 80;
    listen [::]:80;

    root /var/www/sub1;
    index index.php index.html index.htm;

    server_name sub1.remontti.com.br;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
    }
}
# vim /etc/nginx/sites-available/sub2e3.conf

Neste ex: vou representar o sub2.remontti.com.br e sub3.remontti.com.br

server {
    listen 80;
    listen [::]:80;

    root /var/www/sub2e3;
    index index.php index.html index.htm;

    server_name sub2.remontti.com.br sub3.remontti.com.br;

    location / {
        try_files $uri $uri/ =404;
    }

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

Link os arquivos no diretório “/etc/nginx/sites-available” que será carregado as novas configurações

# ln -s /etc/nginx/sites-available/sub1.conf /etc/nginx/sites-enabled/
# ln -s /etc/nginx/sites-available/sub2e3.conf /etc/nginx/sites-enabled/

Crie os diretórios referente a cada server_name.

# mkdir /var/www/sub1
# mkdir /var/www/sub2e3
# echo '<?php echo "Olá mundo do sub1!"; ?>' >> /var/www/sub1/index.php
# echo '<?php echo "Olá mundo do sub2e3!"; ?>' >> /var/www/sub2e3/index.php

Verifique se não tem nenhum erro e restart:

# nginx -t
# systemctl restart nginx

phpMyAdmin

# apt install phpmyadmin -y 

Não selecione nenhum, apenas OK

Responda Sim

Irá solicitar a senha para a base de dados phpmyadmin, informe sua senha e repita.

# vim /etc/nginx/sites-available/default

Adicione as linhas destacadas:

server {
    listen 80;
    listen [::]:80;

    root /var/www/html;
    index index.php index.html index.htm;

    server_name _;

    location / {
        try_files $uri $uri/ =404;
    }

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

    location ^~ /phpmyadmin {
        root /usr/share;
        try_files $uri $uri/ =404;
        #allow  192.168.87.0/24;
        #allow  2001:0db8::/32;
        #deny   all;
        #error_page  403   http://www.remontti.com.br;
        location ~ .php$ {
            include snippets/fastcgi-php.conf;
            fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
        }
    }

}

Se deseja tonar o phpmyadmin acessivel apenas de alguns endereços IPs basta descomentar as linhas, e incluir seus prefixos. O error_page é para que quando a o acessante levar um proibido seja direcionado para um site.

allow  192.168.87.0/24;
allow  2001:0db8::/32;
deny   all;
error_page  403   http://www.remontti.com.br;

Verifique se não tem nenhum erro e restart:

# nginx -t
# systemctl restart nginx

Acesse agora http://SERVIDOR/phpmyadmin

Definindo senha para o root do mariaDB

Por segurança vamos setar uma senha do usuario root do MariaDB

# mariadb -u root

Para aumentar a seguraçã vamos definir uma senha para o usuário root do MariDB, não esqueça de alterar ALTERE_3ST4_SENHA pela sua senha. Dica acesse https://senhasegura.remontti.com.br/ e gere uma!

USE mysql;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'ALTERE_3ST4_SENHA';
FLUSH PRIVILEGES;
EXIT;

Apague seus rastros, em /root/.mysql_history temos um histórico com todos os comandos dado no terminal do MariaDB, então não é legal deixar lá em texto puro a senha que setamos!

# > /root/.mysql_history

Agora quando for acessar o mariadb será necessário informar a senha juntamente da opção -p.

# mariadb -u root -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 46
Server version: 10.11.3-MariaDB-1 Debian 12

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> exit;
Bye

Let’s Encrypt

Criando certificado grátis para seus sub/domínios.

# apt install certbot python3-certbot-nginx

Para gerar o certificado use o comando:

# certbot

Não esqueça de colocar no seu cron para ele renovar o certificado, pois a cada 90 ele expira. Neste exemplo todo dia primeiro tento renovar.

# certbot -q renew

Para testar acesse: https://www.cdn77.com/tls-test/

Gostou?

Gostou?

Se quiser fazer uma doação para o café ficarei muito feliz pelo seu reconhecimento!

Se não puder doar pode deixar seu agradecimento nos comentário também ficarei feliz em saber que ajudei. Se tiver qualquer pergunta deixe-a também. Se preferir entrar em Contato clique aqui.

Fontes: https://docs.nginx.com/
https://docs.nginx.com/nginx/admin-guide/web-server/web-server/

Rudimar Remontti

Trabalho atualmente como Gerente de Redes em um Provedor de Internet no Rio Grande do Sul.

Você pode gostar...

1 Resultado

  1. 14 de junho de 2023

    […] Debian 12 Bookworm (recomendado): 1 – Debian 12 Bookworm / Instalação Limpa 2.a – Servidor WEB NGINX + PHP 8.2 + MariaDB + phpMyAdmin 2.b – Servidor WEB Apache2 + PHP 8.2 + MariaDB + phpMyAdmin phpMyAdmin é […]

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *