Servidor WEB NGINX + PHP 8.2 + PostgreSQL +Let’s Encrypt Debian 12 Bookworm (LNP)

há 2 anos 13

por · Published 14 de junho de 2023 · Updated 14 de junho de 2023

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. Também estarei instalando o banco de dados PostgreSQL e phpPgAdmin como gerenciador web.

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

NGINX 1.22

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!

PostgreSQL

# apt install postgresql postgresql-contrib

Torne-se o usuário postgres, para poder criar o banco de dados.

# su - postgres

Execute para entrar no terminal de comandos do banco.

$ psql

Para definir a senha do usuário postgres e instalar o adminpack.

postgres=# \password postgres Digite nova senha para postgres: Digite-a novamente: postgres=# CREATE EXTENSION adminpack; CREATE EXTENSION postgres=# \q $ exit

Ajustes no pg_hba.conf, assim toda alteração será necessaria validação do postgres com a senha que acabou de definir.

# vim /etc/postgresql/15/main/pg_hba.conf

Altere as seguintes linhas:

local all postgres peer local all all peer

Para:

local all postgres md5 local all all md5


Reinicie o postgres

# systemctl restart postgresql

Volte para o postgres

# su - postgres

Agora para toda ação será necessário autenticar.

$ psql Senha para usuário postgres: !!SUA_SENHA!! psql (15.3 (Debian 15.3-0+deb12u1)) Type "help" for help. postgres-# \q

Para demonstração irei criar um banco/usuário teste, não esqueça de alterar a senha.

$ createuser --pwprompt teste Digite a senha para a nova role: << NOVA SENHA PARA O USUÁRIO TESTE Digite-a novamente: << REPITA Senha: << SENHA DO QUE SETOU ANTES NO COMANDO "\password postgres"

Agora crie o banco e vincule ao usuário.

$ createdb -O teste meubd Senha: <<< SENHA DO POSTGRES

Verifique se o mesmo foi criado.

$ psql -l Senha para usuário postgres: Lista dos bancos de dados Nome | Dono | Codificação | Collate | Ctype | Privilégios de acesso -----------+----------+-------------+-------------+-------------+----------------------- meubd | teste | UTF8 | pt_BR.UTF-8 | pt_BR.UTF-8 | .... ....

Acessamos agora o bd teste.

$ psql -U teste -d meubd Senha do usuário teste: psql (15.3 (Debian 15.3-0+deb12u1)) Digite "help" para ajuda. meubd=>

Vamos fazer uma "brincadeira" só para testar, criaremos uma tabela e inseriremos dados nela.

meubd=> CREATE TABLE doacao ( id int,nome text, valor text ); meubd=> INSERT INTO doacao (id,nome,valor) values (1,'Rudimar Remontti','R$ 5,00'); meubd=> SELECT * FROM doacao; id | nome | valor ----+------------------+--------- 1 | Rudimar Remontti | R$ 5,00 meubd=> \q

Se deseja remover o banco/usuário teste.

$ dropdb meubd Senha: << SENHA DO POSTGRES $ dropuser teste Senha: << SENHA DO POSTGRES

Volte para root

$ exit

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 multiplos 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; add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; 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; add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; 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 reinicie o serviço:

# nginx -t # systemctl restart nginx

:: 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?

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/

Ler artigo completo

users online free counter