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/
1 Resultado
[…] 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 é […]