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
Instalando o NGINX 1.22
Vamos instala-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/
Se tudo der certo vera uma tela como a abaixo:
Instalando o PostgreSQL
No terminal digite agora o comando abaixo:
# 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
Instalando o 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;
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 tiverem algumas sugestões, dica ou se ficou com alguma dúvida sobre este post, não tem problema! Basta comentar no que iremos responder suas dúvidas assim que for possível.
Fonte: blogremontti