Guia completo para implantar o cutuCÃO em uma instância gratuita permanente do Oracle Cloud Infrastructure (OCI).
O Oracle Cloud Free Tier oferece instâncias de computação permanentemente gratuitas (não é trial). Para o cutuCÃO, uma instância AMD Micro com 1 OCPU e 1 GB de RAM é suficiente. O bot consome menos de 30 MB de memória em operação normal.
Outras vantagens: 200 GB de disco, 10 TB/mês de banda de saída, e sem restrição contra bots.
- Conta no Oracle Cloud (https://www.oracle.com/cloud/free/)
- Cartão de crédito para verificação (não é cobrado no Free Tier)
- Token do bot Discord e IDs do servidor (mesmos do
.env) - Repositório do cutuCÃO (https://github.com/assertlab/cutucao-bot)
- Acesse https://www.oracle.com/cloud/free/ → "Start for free"
- Preencha com dados reais (a Oracle valida identidade)
- O cartão de crédito sofre uma autorização temporária (~$1) que é estornada
- Região: escolha a mais próxima. Para o Nordeste do Brasil, Brazil East (São Paulo) é a melhor opção. A região não pode ser alterada depois.
- Aguarde aprovação (pode levar de minutos a dias)
- Após aprovação, habilite 2FA na conta (Identity → Security → MFA)
A Oracle pode rejeitar contas na primeira tentativa. Se acontecer, tente novamente após alguns dias com outro e-mail.
- Faça login em https://cloud.oracle.com
- Menu ☰ → Compute → Instances → "Create Instance"
| Campo | Valor |
|---|---|
| Name | cutucao-bot |
| Image | Ubuntu 24.04 (Canonical) |
| Shape | VM.Standard.E2.1.Micro (1 OCPU, 1 GB RAM) |
| Networking | Create new VCN + Create new public subnet |
| Public IP | Ativar "Automatically assign public IPv4 address" |
| SSH Key | "Generate a key pair for me" |
Sobre o shape: A instância ARM (VM.Standard.A1.Flex) oferece mais recursos (até 4 OCPUs e 24 GB RAM), mas frequentemente está sem capacidade. A AMD Micro (E2.1.Micro) tem mais disponibilidade e é suficiente para o cutuCÃO.
Sobre o IP público: Se o toggle de IP público não ativar durante a criação, prossiga sem ele e atribua depois:
- Após a instância estar Running, vá em Attached VNICs → clique na VNIC
- IPv4 Addresses → três pontinhos (⋮) → Edit
- Selecione "Ephemeral public IP" → Salve
Ao clicar "Create", o Oracle pedirá para baixar a chave privada (.key). Salve esse arquivo em local seguro. Não tem como recuperar depois.
Após a instância atingir o estado "Running", anote o IP público e conecte:
# Ajustar permissões da chave (obrigatório)
chmod 400 ~/Downloads/ssh-key-cutucao.key
# Conectar
ssh -i ~/Downloads/ssh-key-cutucao.key ubuntu@SEU_IP_PUBLICOSe a imagem for Oracle Linux em vez de Ubuntu, use opc no lugar de ubuntu.
Execute os comandos abaixo na instância:
sudo apt update && sudo apt upgrade -ycurl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs
# Verificar
node --version
npm --versionsudo apt install -y git build-essential python3Com 1 GB de RAM, o swap é importante para evitar que o npm install falhe:
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstabcd ~
git clone https://github.com/assertlab/cutucao-bot.git
cd cutucao-botnpm installnano .envConteúdo:
DISCORD_TOKEN=seu_token_aqui
GUILD_ID=seu_guild_id_aqui
ORIENTADOR_ID=seu_orientador_id_aqui
DATABASE_PATH=./data/cutucao.db
TZ=America/RecifeSalve com Ctrl+O, Enter, Ctrl+X.
cp config.example.json config.json
nano config.jsonAjuste categorias, prefixos e horários conforme seu servidor. Consulte o Guia Operacional para detalhes de cada campo.
mkdir -p data
npm run build
npm startVerifique no Discord se o bot aparece online e teste com /ajuda. Depois pare com Ctrl+C.
O systemd garante que o bot rode permanentemente e reinicie após crashes ou reboots.
sudo nano /etc/systemd/system/cutucao.serviceConteúdo:
[Unit]
Description=cutuCÃO Discord Bot
After=network.target
[Service]
Type=simple
User=ubuntu
WorkingDirectory=/home/ubuntu/cutucao-bot
ExecStart=/usr/bin/node dist/index.js
Restart=always
RestartSec=10
Environment=NODE_ENV=production
EnvironmentFile=/home/ubuntu/cutucao-bot/.env
NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=read-only
ReadWritePaths=/home/ubuntu/cutucao-bot/data
[Install]
WantedBy=multi-user.targetSalve com Ctrl+O, Enter, Ctrl+X.
As diretivas de segurança no serviço (NoNewPrivileges, ProtectSystem, ReadWritePaths) garantem que o bot não consiga escrever fora da pasta data/.
sudo systemctl daemon-reload
sudo systemctl enable cutucao
sudo systemctl start cutucaosudo systemctl status cutucaoDeve mostrar active (running). Confirme nos logs:
sudo journalctl -u cutucao -n 20Deve aparecer 🐕 Logado como cutuCÃO#XXXX.
Para atualizar o cutuCÃO quando houver novas versões:
nano ~/update-cutucao.shConteúdo:
#!/bin/bash
cd /home/ubuntu/cutucao-bot
git pull
npm install
npm run build
sudo systemctl restart cutucao
echo "🐕 cutuCÃO atualizado e reiniciado!"chmod +x ~/update-cutucao.shPara atualizar, conecte via SSH e rode:
~/update-cutucao.sh# Status do bot
sudo systemctl status cutucao
# Logs em tempo real
sudo journalctl -u cutucao -f
# Últimas 50 linhas de log
sudo journalctl -u cutucao -n 50
# Logs de erro da última hora
sudo journalctl -u cutucao --since "1 hour ago" --priority err
# Reiniciar o bot
sudo systemctl restart cutucao
# Parar o bot
sudo systemctl stop cutucao
# Uso de disco
df -h
du -sh ~/cutucao-bot/data/Faça pelo menos uma vez por mês:
sudo apt update && sudo apt upgrade -ySe o kernel for atualizado, reinicie a instância:
sudo rebootO systemd reinicia o cutuCÃO automaticamente após o reboot.
A Oracle pode desligar instâncias Always Free que considerar ociosas. O cutuCÃO mantém atividade constante (conexão WebSocket com o Discord), mas para garantia extra:
- Monitore e-mails da Oracle (eles avisam antes de reclamar)
- Mantenha o sistema atualizado (acessar a instância periodicamente já demonstra uso)
sudo journalctl -u cutucao -n 30"Falha no login. Verifique DISCORD_TOKEN"→ Token inválido no.env. Verifique ou gere um novo no Discord Developer Portal."Connect Timeout Error"→ Problema de rede. Verifique a Security List da VCN (Egress deve permitir All Protocols para 0.0.0.0/0).
- Verifique se o IP público está atribuído (Compute → Instance → Attached VNICs)
- Verifique a Security List: deve ter regra de Ingress para porta 22 TCP
- Verifique o firewall do OS:
sudo iptables -L -n(Ubuntu 24.04 geralmente não tem regras restritivas por padrão)
Se o processo for morto por falta de memória durante a instalação:
# Verificar se o swap está ativo
free -h
# Se não estiver, criar
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfileVerifique se a instância ainda está rodando no console Oracle Cloud. Se foi reclamada por ociosidade, recrie-a seguindo este guia novamente.
# Verificar se o serviço crashou
sudo systemctl status cutucao
# Ver motivo do crash
sudo journalctl -u cutucao --since "24 hours ago"| Item | Valor |
|---|---|
| Shape | VM.Standard.E2.1.Micro |
| CPU / RAM | 1 OCPU / 1 GB |
| OS | Ubuntu 24.04 LTS |
| Node.js | 20+ (guia instala 20.x) |
| Custo | Gratuito permanente |
| Usuário SSH | ubuntu |
| Diretório do bot | /home/ubuntu/cutucao-bot |
| Banco de dados | /home/ubuntu/cutucao-bot/data/cutucao.db |
| Serviço systemd | cutucao.service |
| Logs | sudo journalctl -u cutucao |
| Atualizar | ~/update-cutucao.sh |