# 📤 Guía de despliegue con FileZilla — Perfumados v2.0

## 🎯 Objetivo
Subir el sistema Perfumados a `www.desbloqueo.cl/perfumados` usando FileZilla

---

## 1️⃣ Configuración inicial en FileZilla

### Conectarse al servidor

1. **Abrir FileZilla**
2. **Ir a:** File → Site Manager → Nueva carpeta
3. **Llenar datos:**
   - **Protocolo:** SFTP (SSH File Transfer Protocol)
   - **Host:** desbloqueo.cl
   - **Puerto:** 22 (o el que proporcione tu proveedor)
   - **Usuario:** Tu usuario FTP
   - **Contraseña:** Tu contraseña FTP
   - **Tipo de conexión:** Normal

4. **Click en "Conectar"**

---

## 2️⃣ Estructura de carpetas en el servidor

Una vez conectado, deberías estar en `/` o `/home/usuario/`. Necesitas crear esta estructura:

```
/public_html/
└── perfumados/          ← Carpeta del proyecto
    ├── app.py
    ├── models.py
    ├── utils.py
    ├── requirements.txt
    ├── .env              ← NO SUBIR (crear en servidor)
    ├── .htaccess
    ├── passenger_wsgi.py
    ├── restart.txt
    ├── venv/             ← NO SUBIR (se crea en servidor)
    ├── templates/
    ├── static/
    ├── instance/         ← Se crea automáticamente
    └── logs/             ← Se crea automáticamente
```

---

## 3️⃣ Pasos de despliegue

### Paso 1: Navegar a la carpeta correcta en el servidor

En FileZilla (lado derecho - Sitio remoto):
1. Ir a `/public_html/` (o donde esté tu dominio)
2. Si no existe carpeta `perfumados`, **crear una nueva:**
   - Click derecho → Create directory → Nombre: `perfumados`

### Paso 2: Subir archivos principales

En FileZilla (lado izquierdo - Sitio local):
1. Navegar a `C:\Users\Ingeniería\Documents\Proyectos Claude\perfumados_mejorado\`

2. **Seleccionar y subir estos archivos/carpetas:**
   ```
   ✅ app.py
   ✅ models.py
   ✅ utils.py
   ✅ requirements.txt
   ✅ passenger_wsgi.py
   ✅ .htaccess
   ✅ README.md
   ✅ QUICK_START.md
   ✅ templates/           (carpeta completa)
   ✅ static/              (carpeta completa)
   ✅ .gitignore
   ```

3. **NO subir:**
   ```
   ❌ venv/                (se crea en servidor)
   ❌ .env                 (crear en servidor)
   ❌ instance/            (se crea automáticamente)
   ❌ logs/                (se crea automáticamente)
   ❌ tmp/                 (se crea automáticamente)
   ❌ __pycache__/         (se crea automáticamente)
   ```

### Paso 3: Crear archivo .env en el servidor

1. **En FileZilla, lado remoto (servidor):**
   - Click derecho → Create new file
   - Nombre: `.env`

2. **Abrir con editor:**
   - Click derecho sobre `.env` → View/Edit

3. **Agregar contenido:**
```
FLASK_ENV=production
SECRET_KEY=tu-clave-super-secreta-min-32-caracteres-aleatoria
DEBUG=False
DATABASE_URL=sqlite:///instance/perfumados.db
MAIL_SERVER=smtp.gmail.com
MAIL_PORT=587
MAIL_USE_TLS=True
```

⚠️ **IMPORTANTE:** Cambiar `SECRET_KEY` por algo único y seguro

---

## 4️⃣ Configuración en el servidor (SSH)

Necesitas conectarte por SSH para ejecutar comandos. Usa **PuTTY**, **Terminal** o el propio FileZilla si tiene terminal integrada.

### Conectarse por SSH

```bash
ssh usuario@desbloqueo.cl
# Ingresar contraseña
```

### Crear entorno virtual y instalar dependencias

```bash
cd public_html/perfumados

# 1. Crear entorno virtual
python3 -m venv venv

# 2. Activar entorno
source venv/bin/activate

# 3. Instalar dependencias
pip install -r requirements.txt

# 4. Inicializar base de datos
python3 app.py
# Ctrl+C para detener (solo queremos que cree la BD)
```

---

## 5️⃣ Configuración de Phusion Passenger

Si tu servidor usa **Phusion Passenger** (lo más probable):

### A. Editar passenger_wsgi.py

En FileZilla, editar `passenger_wsgi.py` y actualizar **las rutas absolutas:**

```python
# Cambiar estas líneas con tus rutas
PROJECT_ROOT = '/home/tu_usuario/public_html/perfumados'
VENV_PATH = '/home/tu_usuario/public_html/perfumados/venv'
```

Para saber tu ruta:
```bash
# Desde SSH
pwd  # Muestra tu ruta actual
```

### B. Editar .htaccess

En FileZilla, editar `.htaccess` y cambiar:

```apache
PassengerAppRoot /home/tu_usuario/public_html/perfumados
PassengerBaseURI /perfumados
PassengerPython /home/tu_usuario/public_html/perfumados/venv/bin/python3.10
```

### C. Crear archivo restart.txt

1. En FileZilla, side remoto
2. Click derecho → Create new file
3. Nombre: `restart.txt`
4. Dejar vacío (solo con este archivo Passenger reinicia la app)

---

## 6️⃣ Probar la aplicación

### En el navegador

```
http://www.desbloqueo.cl/perfumados/login
```

**Credenciales iniciales:**
- Email: `admin@perfumados.cl`
- Contraseña: `admin123`

⚠️ **Cambiar inmediatamente después de primer login**

---

## 7️⃣ Troubleshooting

### Error 500 - Internal Server Error

1. **Revisar logs:**
   ```bash
   ssh usuario@desbloqueo.cl
   tail -f /home/usuario/public_html/perfumados/logs/error.log
   ```

2. **Verificar permisos:**
   ```bash
   chmod 755 /home/usuario/public_html/perfumados
   chmod 755 /home/usuario/public_html/perfumados/venv
   ```

3. **Reiniciar Passenger:**
   ```bash
   touch /home/usuario/public_html/perfumados/restart.txt
   ```

### Error "Database is locked"

Eliminar BD e inicializar de nuevo:
```bash
rm /home/usuario/public_html/perfumados/instance/perfumados.db
python3 /home/usuario/public_html/perfumados/app.py
```

### Error "Module not found"

Asegurar que pip instaló todo:
```bash
source /home/usuario/public_html/perfumados/venv/bin/activate
pip install -r /home/usuario/public_html/perfumados/requirements.txt
```

### GPS no valida

Editar coordenadas en `models.py` (línea ~180):
```python
LOCALES_CONFIG = {
    'perfumados': {
        'lat': -36.XXXX,  # Coordenadas reales
        'lng': -73.XXXX,
    },
    ...
}
```

Luego tocar `restart.txt` para recargar.

---

## 8️⃣ Cambios de configuración posteriores

### Cambiar contraseña admin

```bash
ssh usuario@desbloqueo.cl
cd /home/usuario/public_html/perfumados
source venv/bin/activate
python3

>>> from app import app, db
>>> from models import Usuario
>>> with app.app_context():
>>>     admin = Usuario.query.filter_by(email='admin@perfumados.cl').first()
>>>     admin.set_password('nueva_contraseña')
>>>     db.session.commit()
>>>     print("Contraseña actualizada")
>>> exit()
```

### Crear nuevo usuario supervisor

```python
>>> from app import app, db
>>> from models import Usuario
>>> with app.app_context():
>>>     user = Usuario(
>>>         nombre='Juan Supervisor',
>>>         email='juan@desbloqueo.cl',
>>>         rol='supervisor',
>>>         local=None,
>>>         activo=True
>>>     )
>>>     user.set_password('temporal123')
>>>     db.session.add(user)
>>>     db.session.commit()
>>>     print("Usuario creado")
```

### Actualizar dependencias

```bash
ssh usuario@desbloqueo.cl
cd /home/usuario/public_html/perfumados
source venv/bin/activate
pip install --upgrade -r requirements.txt
touch restart.txt
```

---

## 9️⃣ Checklist de despliegue

- [ ] Conectar FileZilla al servidor
- [ ] Crear carpeta `/public_html/perfumados`
- [ ] Subir archivos principales (NO venv, NO .env)
- [ ] Crear `.env` en servidor con configuración
- [ ] Conectar por SSH
- [ ] Crear venv e instalar dependencias
- [ ] Editar `passenger_wsgi.py` con rutas reales
- [ ] Editar `.htaccess` con rutas reales
- [ ] Crear `restart.txt`
- [ ] Probar en `www.desbloqueo.cl/perfumados`
- [ ] Cambiar contraseña admin
- [ ] Configurar coordenadas GPS
- [ ] Crear usuarios supervisores
- [ ] Hacer backup de BD

---

## 🔟 Información importante

### Base de datos
- **Ubicación:** `/public_html/perfumados/instance/perfumados.db`
- **Backup:** Descargar regularmente por FileZilla
- **Permisos:** `644` (rw-r--r--)

### Logs
- **Ubicación:** `/public_html/perfumados/logs/`
- **Revisar regularmente** para errores

### Seguridad
- Cambiar `SECRET_KEY` en `.env`
- Cambiar contraseña admin
- Usar HTTPS (SSL/TLS)
- Hacer backups diarios de BD
- Actualizar pip y dependencias regularmente

---

## 📞 Soporte rápido

**Si algo no funciona:**
1. Revisar logs en `logs/`
2. Tocar `restart.txt`
3. Verificar permisos de carpetas
4. Verificar `.env` tiene datos correctos
5. Verificar `passenger_wsgi.py` tiene rutas correctas

---

**Éxito en el despliegue! 🚀**

Para más info: Revisar [README.md](README.md)

Última actualización: Mayo 2026
