Vamos a realizar una práctica de implementación de la aplicación IDURAR ERP/CRM en nuestro stack MERN que hemos creado previamente en la anterior guía, usaré Idurar porque:
Contiene una estructura profesional como la vista antes (backend/, frontend/)
Contiene .env.example completo para Mongo
Documentación extensa de despliegue
Muchas features (CRUD, auth, charts)
Se trata de un Frontend moderno (AntD + React)
IDURAR es un ERP/CRM open source completo (facturación, CRM, inventario, contabilidad) construido con MERN stack. Esta guía combina la guía de configuración anterior con los requisitos específicos de IDURAR.
Tal y como hemos visto, no es fácil implementar una aplicación moderna en un entorno como MERN en servidor linux pero tampoco es imposible, los pasos básicos para implementar cualquier tipo de aplicación son los siguientes:
# 1. Clonar
git clone [URL] /var/www/mi-app
cd /var/www/mi-app
# 2. Backend PM2
cd backend && npm i && cp .env.example .env
pm2 start server.js --name mi-backend
# 3. Frontend build
cd ../frontend && npm i && npm run build
sudo chown -R www-data:www-data dist/
# 4. Nginx ya configurado = listo, sino configura
curl http://localhost
Vamos a ver esto mismo aplicado a esta aplicación:
MongoDB con usuario app_user / Passw0rdApp en base mi_aplicacion
Estructura /var/www/mi-app-mern/ lista
1. Clonar y Preparar IDURAR
Estructura esperada:
2. MongoDB: Base de datos específica para IDURAR
Verificar:
3. Backend: Instalación y Configuración
Antes de empezar a tocar configuraciones, hacer backup del .env actual:
El archivo .env para IDURAR modifícalo tal que así:
RESEND_API y OPENAI_API_KEY son funcionalidades Avanzadas de IDURAR opcionales.
RESEND_API: Es para envío de Emails Transaccionales automáticos, confirmaciones de registro, recuperación de contraseña, invitaciones... para obtenerlo gratis puedes ir a resend.com y registrarte gratis por 250emails/dia.
OPENAI_API_KEY: Es para Inteligencia Artificial, para resumenes automáticos de clientes, generación de descripciones de productos, asistente de facturación y analisis de datos. Para obtenerlo puedes acceder a platform.openai.com
Ejecutar setup de IDURAR (IMPORTANTE):
Esto crea las colecciones iniciales, índices y datos de prueba en MongoDB.
Probar backend:
En otra terminal:
Arrancar con PM2:
4. Frontend: Build de Producción
Archivo .env del frontend:
Build de producción:
Permisos para Nginx:
5. Nginx: Configuración Específica IDURAR
Contenido completo:
Activar sitio:
6. Pruebas Completas
7. Acceso y Primera Configuración
Abrir navegador:http://IP_DE_TU_VM
Registro inicial: Crea cuenta admin@idurar.com / admin123
cd /var/www
sudo git clone https://github.com/idurar/idurar-erp-crm.git idurar-erp
sudo chown -R $USER:$USER idurar-erp
cd idurar-erp
/var/www/mi-app-mern/
├── backend/ # Node/Express/Mongo
├── frontend/ # React + Ant Design
├── setup/ # Scripts de inicialización
└── README.md
# Conectar como admin
mongosh -u admindb -p Passw0rd --authenticationDatabase admin
# Crear base y usuario específico para IDURAR
use idurar_erp
db.createUser({
user: "idurar_user",
pwd: "Idurar2026",
roles: [{ role: "readWrite", db: "idurar_erp" }]
})
exit
mongosh "mongodb://idurar_user:Idurar2026@localhost:27017/idurar_erp?authSource=idurar_erp"
show collections # Debe estar vacía inicialmente
exit
cd /var/www/idurar-erp/backend
# Instalar dependencias
npm install
# Copiar y configurar .env
nano .env
cp .env .env.backup
# MongoDB (¡DESCOMENTA Y CONFIGURA!)
DATABASE="mongodb://idurar_user:Idurar2026@localhost:27017/idurar_erp?authSource=idurar_erp"
# JWT (genera uno más largo y seguro)
JWT_SECRET="IDURAR_ERP_2026_SuperSecureJWTKey_abc123XYZ789_miClaveSecreta123456"
# Entorno
NODE_ENV="production"
# OpenSSL (mantiene como está)
OPENSSL_CONF='/dev/null'
# URL pública del servidor (¡CAMBIA por tu IP!)
PUBLIC_SERVER_FILE="http://192.168.1.137"
# Puerto del backend (por defecto 3000)
PORT=3000
# Opcionales (descomenta si los necesitas)
#RESEND_API="re_1234567890abcdef"
#OPENAI_API_KEY="sk-1234567890abcdef..."
# CORS (para frontend, la ip otra vez)
FRONTEND_URL="http://192.168.1.137"
# Email SMTP (opcional, para notificaciones)
#SMTP_HOST=smtp.gmail.com
#SMTP_PORT=587
#SMTP_USER=tu-email@gmail.com
#SMTP_PASS=tu-app-password
npm run setup
npm run dev # Desarrollo (Ctrl+C después)
curl http://localhost:3000/api/health
# Debe responder: {"success":true,"message":"IDURAR Backend is running"} o algo asi como:
# {"success":false,"result":null,"message":"No authentication token, authorization denied.","jwtExpired":true}ub
pm2 stop backend-api # Si existe de antes
pm2 start server.js --name "idurar-backend"
pm2 save
pm2 status