Voltar

Configuração de um servidor web na vps da hostinger com Rocky Linux, nginx, iptables e certbot (certificado ssl)

Um passo a passo sobre como instalar e configurar um servidor web

24 de November de 2024


Introdução

Nesse exemplo irei utilizar o rockyLinux mas você pode usar qualquer outra distro, irei utilizar o rockyLinux fornecido pela hostinger

Instalação

primeiro Conecte-se à sua VPS via SSH

ssh root@IP_DA_SUA_VPS

Atualize os pacotes:

dnf update -y

Instale e start o nginx:

dnf install nginx -y

Inicie e habilite o serviço:

systemctl start nginx
systemctl enable nginx

Verifique se está rodando:

systemctl status nginx

depois configure o seu site:

vim /etc/nginx/conf.d/site.conf
server {
    listen 80;
    server_name seusite.com www.seusite.com;

    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}
systemctl restart nginx
systemctl status nginx.service

configuração do iptables (firewall)

dnf install iptables-services -y

Crie regras:

iptables -F

se estiver conectado via ssh:

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -i lo -j ACCEPT

deixar as portas http e https abertas:

iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

deixar a porta do squid (proxy) aberta caso vá configurar futuramente:

iptables -A INPUT -p tcp --dport 3128 -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

remover duplicidade:

iptables -D INPUT -p all -m state --state RELATED,ESTABLISHED -j ACCEPT

Salve e ative:

service iptables save
systemctl restart iptables
systemctl enable iptables

ver as regras:

iptables -L -v -n

Configurar o site

instalar o git:

dnf install git -y

instalar o node:

curl -fsSL https://rpm.nodesource.com/setup_20.x | bash -

instalar a versão (eu vou usar a versão 20.17.0):

dnf install nodejs-20.17.0 -y

se a pasta www não existir crie ela:

mkdir -p /var/www

da permissão:

chown -R $USER:$USER /var/www
chmod -R 755 /var/www

entrar na pasta:

cd /var/www

clonar o repositorio:

git clone https://github.com/SEU_USUARIO/SEU_REPOSITORIO.git

entrar na pasta

cd seu-site

instalar as dependecias:

npm install

se tiver configuração na variavel de ambiente adicione ela:

vim .env #cole as configurações

faça build da aplicação:

npm run build

rode a aplicação pra ver se está tudo funcionando e depois pare apertando ctrl + c:

npm run start

crie um serviço systemd para o Next.js:

vim /etc/systemd/system/nextapp.service

adicione:

[Unit]
Description=Next.js Application
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/var/www/seu-site
ExecStart=npm start
Restart=on-failure

[Install]
WantedBy=multi-user.target

Ative e inicie o serviço:

systemctl daemon-reload
systemctl start nextapp
systemctl enable nextapp
systemctl status nextapp

verifique se o nginx está rodando e restart:

nginx -t
systemctl restart nginx

configuração do certbot

Instale Certbot::

dnf install epel-release -y
dnf install certbot python3-certbot-nginx -y

obtenha o certificado SSL:

certbot --nginx -d seusite.com -d www.seusite.com

Renovação automática:

echo "0 0 * * * root certbot renew --quiet" >> /etc/crontab

Reinicie o Nginx:

systemctl restart nginx

vá em /etc/nginx/conf.d/site.conf novamente e adicione:

# Redirecionamento HTTP para HTTPS
server {
    listen 80;
    server_name seusite.com www.seusite.com;

    location /.well-known/acme-challenge/ {
        root /var/www/seusite;
    }

    location / {
        return 301 https://$host$request_uri;
    }
}

# Bloco HTTPS
server {
    listen 443 ssl;
    server_name seusite.com www.seusite.com;

    ssl_certificate /etc/letsencrypt/live/seusite.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/seusite.com/privkey.pem;

    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

se estiver com algum problema na parte do ssl verifique o apontamento do dns:

dig A meusite.com +short
dig A www.meusite.com +short

o apontamento tem que está apontando para o seu ip da sua vps