VPS Overview — cajutech.dev

Snapshot do estado da VPS em 2026-05-15. Atualizar sempre que houver mudança em domínio, processo ou stack.


1. Servidor

Item Valor
Hostname vps-15225449.vpsbr-15225449.vpshostgator.com.br
Provedor HostGator (VPS BR)
OS Ubuntu 22.04.5 LTS (Jammy)
Kernel 6.8.0-110-generic
Arquitetura x86_64
Disco (/) 98 GB total — 25 GB usados (27%)
RAM 3.8 GiB total — 2.2 GiB em uso, sem swap
SSH porta 22022
Webroot principal /var/www

⚠️ Sem swap configurado. Com 3.8 GiB de RAM e ~2.2 GiB já em uso, vale considerar criar um swapfile de 2-4 GiB para evitar OOM kills sob picos.


2. Domínios e DNS

Dois domínios principais apontam para esta VPS:

Subdomínios ativos

Domínio Tipo Servido por
cajutech.dev, www.cajutech.dev site estático nginx → /var/www/html/site
portainer.cajutech.dev proxy nginx → 127.0.0.1:9000 (Portainer)
crons.cajutech.dev proxy nginx → 127.0.0.1:3012 (Cronicle)
vscode.cajutech.dev proxy nginx → 127.0.0.1:8443 (code-server)
staging.cajutech.dev estático + PHP-FPM nginx + /var/www/staging
storage.cajutech.dev PHP app nginx + PHP-FPM, /var/www/storage
socket.cajutech.dev proxy nginx → 127.0.0.1:3010 (container socket)
factory.cajutech.dev proxy nginx → 127.0.0.1:3001 (factory-app-1)
ponto.cajutech.dev SPA Angular nginx → /var/www/html/ponto
pontopesquisa.cajutech.dev SPA Angular nginx → /var/www/html/ponto-pesquisa
pontoapi.cajutech.dev proxy nginx → 127.0.0.1:3333 (ponto-backend)
pontopesquisaapi.cajutech.dev proxy nginx → 127.0.0.1:3099 (pontopesquisa-backend)
segin.cajutech.dev placeholder retorna 503 (não configurado)
pontodomestico.com, www. SPA Angular nginx → /var/www/html/ponto
api.pontodomestico.com proxy nginx → 127.0.0.1:3333 (ponto-backend)
pesquisa.pontodomestico.com SPA + proxy parcial nginx → /var/www/html/ponto-pesquisa + 127.0.0.1:3099
blog.pontodomestico.com site estático (Astro) nginx → /var/www/html/blog
blog-admin.pontodomestico.com SPA Angular nginx → /var/www/html/blog-admin
blog-api.pontodomestico.com proxy nginx → 127.0.0.1:3002 (container blog-api)

⚠️ Conflito detectado em pesquisa.pontodomestico.com: existe um arquivo separado em /etc/nginx/sites-enabled/pesquisa.pontodomestico.com que define root /var/www/ponto-pesquisa (sem o /html) e usa o cert de cajutech.dev (não de pontodomestico.com). Isso colide com o bloco já definido em /etc/nginx/sites-enabled/default (linhas 129-155). Decidir qual remover.


3. Nginx

Comandos úteis

sudo nginx -t                      # validar conf
sudo systemctl reload nginx        # aplicar mudanças sem downtime
sudo tail -f /var/log/nginx/error.log
sudo certbot renew --dry-run       # testar renovação de certs

4. Processos rodando

Daemons systemd

Apps gerenciados pelo PM2 (root)

Identificados via ps auxf — confirmar nomes com sudo pm2 list:

PID Comando Porta Provável serviço
1399 node server.js 8443 code-server (vscode.cajutech.dev)
1423 node index.js (verificar)
2359909 node index.js (verificar)
2401690 node index.js (verificar)
2515699 node index.js 3333? possivelmente ponto-backend

TODO: rodar sudo pm2 list e mapear cada PID ao seu app/repo.

Containers Docker

Estão escutando nas portas 3001, 3002, 3010, 3012, 9000 (todas em 0.0.0.0, mas só acessíveis via nginx proxy). Pelo nginx:

Porta Container provável Subdomínio
9000 portainer portainer.cajutech.dev
3012 cronicle crons.cajutech.dev
3010 socket socket.cajutech.dev
3001 factory-app-1 factory.cajutech.dev
3002 blog-api blog-api.pontodomestico.com

TODO: rodar sudo docker ps e listar imagens, volumes e redes.


5. Estrutura de /var/www

/var/www/
├── html/                      # webroot estático (servido por nginx)
│   ├── site/                  # cajutech.dev
│   ├── ponto/                 # SPA Angular (ponto.cajutech.dev + pontodomestico.com)
│   ├── ponto-pesquisa/        # SPA Angular (pontopesquisa, pesquisa.pontodomestico.com)
│   ├── blog/                  # Astro estático (blog.pontodomestico.com)
│   ├── blog.bak.1778027941/   # backup antigo do blog
│   ├── blog-admin/            # SPA Angular (blog-admin.pontodomestico.com)
│   ├── segin/                 # placeholder (vhost retorna 503)
│   └── index.nginx-debian.html
├── blog-vault/                # ⚠️ verificar uso
├── blog-admin/                # ⚠️ provável fonte; build vai pra html/blog-admin
├── claude-agent/              # agente
├── seomachine/                # ⚠️ verificar
├── src/                       # ⚠️ verificar (mexido em 2026-05-15)
├── staging/                   # raiz de staging.cajutech.dev (PHP habilitado)
├── storage/                   # raiz de storage.cajutech.dev (PHP app)
├── .claude/
└── vault/                     # este vault

TODO: documentar o propósito de blog-vault, seomachine, src, claude-agent.


6. Stack instalado

Ferramenta Versão Uso
nginx (verificar com nginx -v) web server / reverse proxy
Node.js v22.22.2 apps PM2 (backends Express, code-server)
PHP 8.1.2 (FPM) apps em /var/www/staging e /var/www/storage
PM2 v6.0.14 gerência de processos Node em produção
Docker (verificar) containers (portainer, cronicle, factory, blog-api, socket)
Portainer UI de containers em portainer.cajutech.dev
Cronicle scheduler em crons.cajutech.dev
code-server VS Code remoto em vscode.cajutech.dev
certbot renovação automática de certs (cron)
fail2ban proteção SSH

7. Operação — runbook rápido

Subir/restartar um app PM2

sudo pm2 restart <nome>           # restart graceful
sudo pm2 reload <nome>            # zero-downtime
sudo pm2 logs <nome> --lines 100  # ver logs
sudo pm2 save                     # persistir lista atual

Subir um novo subdomínio

  1. Criar bloco server { listen 443 ssl; ... } em /etc/nginx/sites-enabled/default
  2. Adicionar server_name novo.cajutech.dev no bloco de redirect HTTP→HTTPS (linhas 35-41)
  3. sudo nginx -t && sudo systemctl reload nginx
  4. Se for novo domínio raiz, gerar cert: sudo certbot --nginx -d novo.cajutech.dev

Deploy de SPA Angular

Renovação de certs


8. Pendências / dívidas técnicas