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