Change PIN to 1451
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
147
apps/captain-mobile/deploy.sh
Executable file
147
apps/captain-mobile/deploy.sh
Executable file
@@ -0,0 +1,147 @@
|
||||
#!/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\"}'"
|
||||
Reference in New Issue
Block a user