Files
hotel-hacienda/docs/DEPLOYMENT.md
Consultoria AS 411d517ba4 docs: documentación extensiva del proyecto
- README.md con guía completa de instalación y arquitectura
- docs/BACKEND.md — guía detallada del API
- docs/FRONTEND.md — guía del SPA React
- docs/DATABASE.md — funciones SQL y patrones de datos
- docs/API.md — referencia completa de endpoints REST
- docs/DEPLOYMENT.md — guía de despliegue en producción
- docs/TROUBLESHOOTING.md — solución de problemas comunes
- CHANGELOG.md — historial de cambios
- CONTRIBUTING.md — guía de contribución
2026-06-09 16:26:09 -07:00

263 lines
5.0 KiB
Markdown

# 🚀 Guía de Despliegue
## Índice
1. [Requisitos del Servidor](#requisitos-del-servidor)
2. [Despliegue de Base de Datos](#despliegue-de-base-de-datos)
3. [Despliegue del Backend](#despliegue-del-backend)
4. [Despliegue del Frontend](#despliegue-del-frontend)
5. [Configuración de Proxy Inverso (Nginx)](#configuración-de-proxy-inverso-nginx)
6. [Configuración de PM2](#configuración-de-pm2)
7. [SSL con Certbot](#ssl-con-certbot)
8. [Verificación Post-Despliegue](#verificación-post-despliegue)
9. [Rollback](#rollback)
---
## Requisitos del Servidor
- Ubuntu 22.04 LTS (recomendado)
- 2GB RAM mínimo
- Node.js 18+
- PostgreSQL 13+
- Nginx
- PM2 (opcional pero recomendado)
- Git
---
## Despliegue de Base de Datos
### 1. Instalar PostgreSQL
```bash
sudo apt update
sudo apt install postgresql postgresql-contrib
sudo systemctl enable postgresql
```
### 2. Crear Base de Datos y Usuario
```bash
sudo -u postgres psql
```
```sql
CREATE DATABASE hotel_hacienda;
CREATE USER hoteluser WITH ENCRYPTED PASSWORD 'password_seguro';
GRANT ALL PRIVILEGES ON DATABASE hotel_hacienda TO hoteluser;
\q
```
### 3. Restaurar Backup
```bash
scp backupcondatos22122025.sql usuario@servidor:/tmp/
ssh usuario@servidor
sudo -u postgres psql -d hotel_hacienda -f /tmp/backupcondatos22122025.sql
```
### 4. Verificar Funciones
```bash
sudo -u postgres psql -d hotel_hacienda -c "\df"
```
---
## Despliegue del Backend
### 1. Clonar Repositorio
```bash
cd /var/www
git clone https://git.consultoria-as.com/consultoria-as/hotel-hacienda.git
cd hotel-hacienda/backend/hotel_hacienda
```
### 2. Instalar Dependencias
```bash
npm install --production
```
### 3. Configurar Variables de Entorno
```bash
cp .env.example .env
nano .env
```
```env
PORT=3000
URL_CORS=https://hotel.consultoria-as.com
DB_HOST=localhost
DB_PORT=5432
DB_USER=hoteluser
DB_PASSWORD=password_seguro
DB_NAME=hotel_hacienda
EMAIL_HOST=smtp.gmail.com
EMAIL_PORT=587
EMAIL_USER=soporte@horuxfin.com
EMAIL_PASS=app_password
STRIPE_SECRET_KEY=sk_live_...
FACTURAS_API_URL=https://api.facturas.com/v1/
FACTURAS_ISSUER_RFC=RFC_DEL_HOTEL
FACTURAS_TYPE=I
FACTURAS_API_TOKEN=token_aqui
BANXICO_TOKEN=token_banxico
```
### 4. Iniciar con PM2
```bash
npm install -g pm2
pm2 start src/server.js --name hotel-api
pm2 save
pm2 startup
```
---
## Despliegue del Frontend
### 1. Compilar para Producción
```bash
cd /var/www/hotel-hacienda/frontend/Frontend-Hotel
npm install
```
### 2. Configurar Environment de Producción
```bash
echo "VITE_API_BASE_URL=https://hotel.consultoria-as.com/api" > .env
```
### 3. Build
```bash
npm run build
```
Esto genera la carpeta `dist/` con los archivos estáticos.
---
## Configuración de Proxy Inverso (Nginx)
### 1. Instalar Nginx
```bash
sudo apt install nginx
```
### 2. Configuración del Sitio
```bash
sudo nano /etc/nginx/sites-available/hotel-hacienda
```
```nginx
server {
listen 80;
server_name hotel.consultoria-as.com;
# Frontend estático
location / {
root /var/www/hotel-hacienda/frontend/Frontend-Hotel/dist;
index index.html;
try_files $uri $uri/ /index.html;
}
# Backend API
location /api/ {
proxy_pass http://localhost:3000/api/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_cache_bypass $http_upgrade;
}
# Logs
access_log /var/log/nginx/hotel-access.log;
error_log /var/log/nginx/hotel-error.log;
}
```
### 3. Activar Sitio
```bash
sudo ln -s /etc/nginx/sites-available/hotel-hacienda /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx
```
---
## SSL con Certbot
```bash
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d hotel.consultoria-as.com
sudo systemctl enable certbot.timer
```
---
## Verificación Post-Despliegue
### Checklist
- [ ] Backend responde: `curl https://hotel.consultoria-as.com/api/employees`
- [ ] Frontend carga sin errores en navegador
- [ ] Login funciona correctamente
- [ ] Base de datos tiene datos correctos
- [ ] Emails se envían (probar recuperación de contraseña)
- [ ] CORS permite el dominio correcto
- [ ] PM2 muestra el proceso activo: `pm2 list`
- [ ] Nginx no muestra errores: `sudo tail -f /var/log/nginx/hotel-error.log`
---
## Rollback
### Backend
```bash
pm2 stop hotel-api
# Restaurar código anterior con git
git checkout <commit-anterior>
npm install
pm2 restart hotel-api
```
### Base de Datos
```bash
# Restaurar backup previo
sudo -u postgres pg_dump hotel_hacienda > backup_antes_del_cambio.sql
sudo -u postgres psql -d hotel_hacienda -f backup_seguro.sql
```
### Frontend
```bash
# Recompilar versión anterior
git checkout <commit-anterior>
cd frontend/Frontend-Hotel
npm run build
```
---
> **Nota:** Mantener siempre un backup reciente de la base de datos antes de cualquier despliegue que modifique funciones SQL.