Guia de Deploy Intuitivo e Detalhado
Este documento fornece um passo a passo completo para realizar o deploy de aplicações em uma VPS Hetzner rodando Ubuntu 20.04. Abordaremos desde a edição de código até a publicação inicial e atualizações futuras.
Público-alvo: iniciantes.
1 Preparação do Ambiente
Você precisará das seguintes ferramentas e recursos:
-
VPS Hetzner: servidor remoto com acesso via SSH.
-
Ubuntu 20.04: sistema operacional.
-
PostgreSQL: banco de dados local.
-
Nginx: proxy reverso para rotear requisições.
-
Let's Encrypt: emissão de certificados SSL gratuitos.
-
Cloudflare DNS: gerenciamento de DNS.
-
GitHub: versionamento de código.
-
Cursor: editor de código.
2 Configuração de DNS (Cloudflare)
Aponte seu domínio para a VPS através de um registro A no Cloudflare:
- Acesse o painel do Cloudflare e selecione seu domínio.
- Navegue até DNS → Add record.
- Configure o registro com os seguintes valores:
- Type: A
- Name: @ (para o domínio raiz)
- IPv4 address: 142.132.234.105
- TTL: Auto
- Clique em Save e aguarde a propagação (5-30 minutos).
3 Criação do Repositório no GitHub
Crie um novo repositório no GitHub para armazenar o código do projeto:
- Acesse github.com e faça login na sua conta.
- Clique no botão New repository (ou "+" no canto superior direito).
- Configure o repositório:
- Nome: controlveiculo
- Visibilidade: Privada (recomendado para projetos comerciais)
- Clique em Create repository.
4 Envio Inicial ao GitHub
Para enviar seu código local ao repositório pela primeira vez:
.gitignore para evitar enviar arquivos desnecessários ao repositório.
5 Acesso e Preparação da VPS
Conecte-se ao servidor e atualize o sistema operacional:
6 Verificação de Versões
Verifique se as ferramentas necessárias estão instaladas e suas versões:
7 Instalação de Pacotes Essenciais
Instale as ferramentas necessárias para o deploy:
8 Configuração do PostgreSQL
Configure o banco de dados PostgreSQL para sua aplicação:
Para configurar acesso remoto ao PostgreSQL (opcional):
9 Configuração do Firewall (UFW)
Configure o firewall para permitir apenas as portas necessárias:
10 Preparar Diretório e Clonar Repositório
Crie o diretório para o projeto e clone o repositório:
10.1 Definindo a Porta via .env
É recomendado usar uma variável de ambiente para definir a porta de cada aplicação, mantendo o código flexível entre ambientes.
pm2 start npm --name app2 -- start
11 Configurar Variáveis de Ambiente
Configure as variáveis de ambiente para a aplicação:
12 Instalar Dependências e Build
Instale as dependências e gere o build da aplicação:
13 Gerenciar Processo com PM2
Configure o PM2 para gerenciar o processo da aplicação:
14 Configurar Nginx (Proxy Reverso)
Configure o Nginx como proxy reverso para a aplicação:
15 Emitir Certificado SSL com Let's Encrypt
Obtenha um certificado SSL gratuito para seu domínio:
A1 Edição e Commit no GitHub
Para atualizar uma aplicação já implantada, comece editando o código:
- Abra o projeto no Cursor e faça suas alterações de código.
- Abra o terminal integrado (fundo preto, texto verde) usando o atalho Ctrl + ` (tecla crase).
- Execute os comandos Git:
A2 Conexão à VPS
Conecte-se ao servidor usando SSH:
A3 Atualizar Código e Reiniciar Serviço
Atualize o código na VPS e reinicie o serviço:
pm2 logs para isso.
Glossário de Comandos Essenciais
Esta seção apresenta os comandos mais úteis para cada tecnologia utilizada no processo de deploy.
Git
| Comando | Descrição |
|---|---|
| git clone [url] | Clona um repositório remoto para sua máquina local |
| git pull | Atualiza seu repositório local com as alterações do repositório remoto |
| git add . | Adiciona todas as alterações para o próximo commit |
| git commit -m "mensagem" | Cria um novo commit com as alterações adicionadas |
| git push | Envia os commits locais para o repositório remoto |
| git status | Mostra o estado atual do repositório (arquivos modificados, etc.) |
| git branch | Lista todas as branches locais |
Prisma
| Comando | Descrição |
|---|---|
| npx prisma generate | Gera o cliente Prisma baseado no schema |
| npx prisma migrate dev | Cria e aplica migrações durante o desenvolvimento |
| npx prisma migrate deploy | Aplica migrações em ambiente de produção |
| npx prisma studio | Abre a interface visual para gerenciar dados |
| npx prisma db pull | Gera um schema a partir de um banco existente |
| npx prisma format | Formata o arquivo schema.prisma |
Linux
| Comando | Descrição |
|---|---|
| ls -la | Lista todos os arquivos (incluindo ocultos) com detalhes |
| cd [diretório] | Navega para o diretório especificado |
| mkdir [nome] | Cria um novo diretório |
| touch [arquivo] | Cria um arquivo vazio |
| rm [arquivo] | Remove um arquivo |
| rm -rf [diretório] | Remove um diretório recursivamente (cuidado!) |
| cp [origem] [destino] | Copia arquivos/diretórios |
| mv [origem] [destino] | Move ou renomeia arquivos/diretórios |
| cat [arquivo] | Exibe o conteúdo de um arquivo |
| nano [arquivo] | Edita um arquivo com o editor Nano |
PostgreSQL
| Comando | Descrição |
|---|---|
| sudo -u postgres psql | Acessa o terminal PostgreSQL como usuário postgres |
| \l | Lista todos os bancos de dados |
| \c [banco] | Conecta a um banco de dados específico |
| \dt | Lista todas as tabelas no banco conectado |
| \du | Lista todos os usuários |
| CREATE DATABASE [nome]; | Cria um novo banco de dados |
| CREATE USER [nome] WITH PASSWORD 'senha'; | Cria um novo usuário com senha |
| GRANT ALL PRIVILEGES ON DATABASE [banco] TO [usuário]; | Concede todas as permissões em um banco para um usuário |
| \q | Sai do terminal PostgreSQL |
PM2
| Comando | Descrição |
|---|---|
| pm2 start [script] | Inicia uma aplicação |
| pm2 start npm --name [nome] -- start | Inicia uma aplicação Node.js usando npm start |
| pm2 list | Lista todas as aplicações gerenciadas |
| pm2 stop [id|nome] | Para uma aplicação específica |
| pm2 restart [id|nome] | Reinicia uma aplicação específica |
| pm2 delete [id|nome] | Remove uma aplicação da gestão do PM2 |
| pm2 logs | Exibe logs de todas as aplicações |
| pm2 logs [id|nome] | Exibe logs de uma aplicação específica |
| pm2 monit | Abre um monitor em tempo real de todas as aplicações |
| pm2 save | Salva a lista atual de processos |
| pm2 startup | Gera e configura script para inicialização automática |
Nginx
| Comando | Descrição |
|---|---|
| systemctl start nginx | Inicia o serviço Nginx |
| systemctl stop nginx | Para o serviço Nginx |
| systemctl restart nginx | Reinicia o serviço Nginx |
| systemctl reload nginx | Recarrega a configuração sem interromper conexões |
| systemctl status nginx | Verifica o status do serviço Nginx |
| nginx -t | Testa a sintaxe da configuração |
| ls -la /etc/nginx/sites-available/ | Lista arquivos de configuração disponíveis |
| ls -la /etc/nginx/sites-enabled/ | Lista arquivos de configuração habilitados |
| ln -s /etc/nginx/sites-available/[arquivo] /etc/nginx/sites-enabled/ | Habilita um arquivo de configuração |
| cat /var/log/nginx/error.log | Exibe o log de erros do Nginx |