Files
captain-claude/apps/captain-mobile/deploy.sh
ARCHITECT f199daf4ba Change PIN to 1451
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-17 23:31:52 +00:00

148 lines
4.9 KiB
Bash
Executable File

#!/bin/bash
# ===========================================
# Captain Mobile - Deployment Script
# Ejecutar en ARCHITECT (69.62.126.110)
# ===========================================
set -e
echo "🚀 Captain Mobile Deployment"
echo "============================"
# Colores
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
# 1. Matar procesos colgados
echo -e "\n${YELLOW}[1/7] Limpiando procesos colgados...${NC}"
pkill -f "psql.*captain" 2>/dev/null || true
pkill -f "psql.*bypass" 2>/dev/null || true
echo -e "${GREEN}✓ Limpieza completada${NC}"
# 2. Configurar PostgreSQL
echo -e "\n${YELLOW}[2/7] Configurando PostgreSQL...${NC}"
sudo -u postgres psql <<EOF
-- Crear usuario si no existe
DO \$\$
BEGIN
IF NOT EXISTS (SELECT FROM pg_catalog.pg_roles WHERE rolname = 'captain') THEN
CREATE USER captain WITH PASSWORD 'captain';
ELSE
ALTER USER captain WITH PASSWORD 'captain';
END IF;
END
\$\$;
-- Crear base de datos si no existe
SELECT 'CREATE DATABASE captain_mobile OWNER captain'
WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = 'captain_mobile')\gexec
-- Permisos
GRANT ALL PRIVILEGES ON DATABASE captain_mobile TO captain;
EOF
echo -e "${GREEN}✓ Usuario y base de datos configurados${NC}"
# 3. Crear schema
echo -e "\n${YELLOW}[3/7] Creando schema...${NC}"
PGPASSWORD=captain psql -h localhost -U captain -d captain_mobile <<EOF
CREATE TABLE IF NOT EXISTS conversations (
id SERIAL PRIMARY KEY,
user_id VARCHAR(50) NOT NULL,
title VARCHAR(255),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS messages (
id SERIAL PRIMARY KEY,
conversation_id INTEGER REFERENCES conversations(id) ON DELETE CASCADE,
role VARCHAR(20) NOT NULL,
content TEXT NOT NULL,
attachments JSONB,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE INDEX IF NOT EXISTS idx_conversations_user ON conversations(user_id);
CREATE INDEX IF NOT EXISTS idx_messages_conversation ON messages(conversation_id);
EOF
echo -e "${GREEN}✓ Schema creado${NC}"
# 4. Instalar servicio systemd
echo -e "\n${YELLOW}[4/7] Configurando servicio systemd...${NC}"
sudo cp /home/architect/captain-claude/apps/captain-mobile/captain-api.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable captain-api
sudo systemctl restart captain-api
sleep 2
if systemctl is-active --quiet captain-api; then
echo -e "${GREEN}✓ Servicio captain-api activo${NC}"
else
echo -e "${RED}✗ Error iniciando servicio${NC}"
sudo journalctl -u captain-api -n 20 --no-pager
fi
# 5. Verificar API
echo -e "\n${YELLOW}[5/7] Verificando API...${NC}"
sleep 2
HEALTH=$(curl -s http://localhost:3030/health 2>/dev/null)
if echo "$HEALTH" | grep -q '"status":"ok"'; then
echo -e "${GREEN}✓ API funcionando correctamente${NC}"
echo "$HEALTH" | python3 -m json.tool 2>/dev/null || echo "$HEALTH"
else
echo -e "${RED}✗ API no responde${NC}"
echo "Logs:"
sudo journalctl -u captain-api -n 30 --no-pager
fi
# 6. Configurar Caddy
echo -e "\n${YELLOW}[6/7] Configurando Caddy...${NC}"
CADDY_CONFIG="
captain.tzzrarchitect.me {
reverse_proxy localhost:3030
@websocket {
header Connection *Upgrade*
header Upgrade websocket
}
reverse_proxy @websocket localhost:3030
}
"
# Verificar si ya existe la config
if grep -q "captain.tzzrarchitect.me" /etc/caddy/Caddyfile 2>/dev/null; then
echo -e "${YELLOW}⚠ Config de Caddy ya existe${NC}"
else
echo "$CADDY_CONFIG" | sudo tee -a /etc/caddy/Caddyfile > /dev/null
sudo systemctl reload caddy
echo -e "${GREEN}✓ Caddy configurado${NC}"
fi
# 7. Resumen DNS
echo -e "\n${YELLOW}[7/7] Configuración DNS requerida${NC}"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "Agregar en Cloudflare:"
echo " Tipo: A"
echo " Nombre: captain"
echo " Contenido: 69.62.126.110"
echo " Proxy: Activado (naranja)"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
# Resumen final
echo -e "\n${GREEN}═══════════════════════════════════════${NC}"
echo -e "${GREEN} DEPLOYMENT COMPLETADO ${NC}"
echo -e "${GREEN}═══════════════════════════════════════${NC}"
echo ""
echo "📡 API Local: http://localhost:3030"
echo "🌐 API Pública: https://captain.tzzrarchitect.me"
echo ""
echo "Próximos pasos:"
echo "1. Configurar DNS en Cloudflare (si no está)"
echo "2. Crear repo en Gitea: git.tzzr.net/tzzr/captain-mobile"
echo "3. Build APK con Flutter"
echo ""
echo "Test rápido:"
echo " curl -X POST http://localhost:3030/auth/login \\"
echo " -H 'Content-Type: application/json' \\"
echo " -d '{\"username\":\"captain\",\"password\":\"tzzr2025\"}'"