Production Commands
Essential commands for building, deploying, and managing Mifty applications in production.
Build Commands
Standard Build
npm run build
Build TypeScript to JavaScript for production
This command:
- Compiles TypeScript to JavaScript
- Resolves path aliases with tsc-alias
- Copies UI assets to dist folder
- Prepares application for production deployment
Watch Build
npm run build:watch
Build in watch mode - rebuilds on file changes
Use during development when you need to test the built version.
Production Server
Start Production Server
npm start
Start production server (requires build first)
Ensure you have run npm run build before starting the production server.
Production Workflow
# Complete production deployment workflow
npm run build
npm run prisma:migrate:deploy
npm start
Database Production Commands
Migration Deployment
npm run prisma:migrate:deploy
Apply all pending migrations in production
npm run prisma:migrate:status
Check migration status before deployment
Prisma Client Generation
npm run prisma:generate
Generate Prisma Client for production
Advanced Build Commands
Secure Build (Enterprise)
npm run secure-build
Build with security features: bundling, obfuscation, and byte-compilation
This command performs:
- Standard TypeScript build
- Code bundling with esbuild
- Byte compilation for security
- Code obfuscation
- Loader creation
- JavaScript cleanup
Individual Bundle Commands
npm run bundle
Bundle all CLI executables
npm run bundle:mifty
Bundle main Mifty CLI executable
npm run bundle:generate
Bundle code generation executable
npm run bundle:dbdesigner
Bundle database designer executable
npm run bundle:monitor
Bundle error monitor executable
npm run bundle:adapter
Bundle adapter management executable
Security Commands
npm run obfuscate
Obfuscate JavaScript code for security
npm run byte-compile
Compile JavaScript to bytecode
Packaging Commands
NPM Package
npm run pack
Create NPM package (.tgz file)
Platform-Specific Executables
npm run pkg:all
Create executables for all platforms (Linux, Windows, macOS)
npm run pkg:test:linux
Create Linux executable for testing
Production Environment Setup
Environment Variables
Create a production .env file with these essential variables:
# Server Configuration
NODE_ENV=production
PORT=3000
# Database (use your production database URL)
DATABASE_URL="postgresql://user:password@localhost:5432/production_db"
# Security
JWT_SECRET=your-super-secure-jwt-secret-here
# Optional: External Services
EMAIL_PROVIDER=gmail
GMAIL_USER=your-production-email@gmail.com
GMAIL_APP_PASSWORD=your-app-password
# Storage (if using S3)
AWS_ACCESS_KEY_ID=your-access-key
AWS_SECRET_ACCESS_KEY=your-secret-key
AWS_REGION=us-east-1
AWS_S3_BUCKET=your-production-bucket
# Redis (if using)
REDIS_URL=redis://localhost:6379
Database Configuration
npm run services:config
View current production configuration
Deployment Workflows
Standard Deployment
Step-by-Step Deployment
- Quality Assurance
npm run lint && npm test
Ensure code quality and all tests pass
2. **Build Application**
```bash
npm run build
Build for production
- Database Migration
npm run prisma:migrate:deploy
Apply database migrations
4. **Start Production Server**
```bash
npm start
Start production server
- Health Check
curl http://localhost:3000/health
Secure Deployment (Enterprise)
For enhanced security in enterprise environments:
- Secure Build
npm run secure-build
Build with security features
2. **Create Executables**
```bash
npm run pkg:all
Create platform-specific executables
- Deploy Executables
- Copy executables to production servers
- Set appropriate permissions
- Configure systemd/PM2 services
Process Management
Using PM2 (Recommended)
-
Install PM2
npm install -g pm2 -
Create PM2 Configuration
// ecosystem.config.js
module.exports = {
apps: [{
name: 'mifty-app',
script: 'dist/app.js',
instances: 'max',
exec_mode: 'cluster',
env: {
NODE_ENV: 'production',
PORT: 3000
}
}]
}; -
Start with PM2
pm2 start ecosystem.config.js
Start application with PM2
4. **PM2 Management Commands**
```bash
pm2 status # Check status
pm2 restart all # Restart all processes
pm2 stop all # Stop all processes
pm2 logs # View logs
pm2 monit # Monitor processes
Using Systemd
-
Create Service File
# /etc/systemd/system/mifty-app.service
[Unit]
Description=Mifty Application
After=network.target
[Service]
Type=simple
User=www-data
WorkingDirectory=/path/to/your/app
ExecStart=/usr/bin/node dist/app.js
Restart=on-failure
Environment=NODE_ENV=production
[Install]
WantedBy=multi-user.target -
Enable and Start Service
sudo systemctl enable mifty-app && sudo systemctl start mifty-app
Enable and start systemd service
## Monitoring and Logging
### Application Monitoring
```bash
npm run monitor
Start production error monitoring
Log Management
Production logs are automatically managed by Winston. Configure log levels in production:
// src/config/logger.ts
const logger = winston.createLogger({
level: process.env.LOG_LEVEL || 'info',
format: winston.format.combine(
winston.format.timestamp(),
winston.format.json()
),
transports: [
new winston.transports.File({ filename: 'logs/error.log', level: 'error' }),
new winston.transports.File({ filename: 'logs/combined.log' }),
new winston.transports.DailyRotateFile({
filename: 'logs/application-%DATE%.log',
datePattern: 'YYYY-MM-DD',
maxSize: '20m',
maxFiles: '14d'
})
]
});
Performance Optimization
Build Optimization
-
Enable Production Mode
NODE_ENV=production npm run build -
Use Secure Build for Better Performance
npm run secure-build
Optimized build with bundling and compression
### Runtime Optimization
1. **Enable Compression**
- Compression middleware is automatically enabled in production
- Gzip compression reduces response sizes
2. **Database Connection Pooling**
- Prisma automatically manages connection pooling
- Configure pool size based on your needs
3. **Caching**
- Implement Redis caching for frequently accessed data
- Use HTTP caching headers
## Security Considerations
### Production Security Checklist
1. **Environment Variables**
- Use strong JWT secrets
- Secure database credentials
- Enable HTTPS in production
2. **Code Security**
```bash
npm run secure-build
Use obfuscated build for enhanced security
-
Database Security
- Use production database with proper access controls
- Enable SSL connections
- Regular security updates
-
Server Security
- Keep Node.js updated
- Use reverse proxy (nginx/Apache)
- Implement rate limiting
Troubleshooting Production Issues
Common Production Problems
Build Failures
Problem: TypeScript compilation errors
Solution:
npm run lint:fix && npm run build
Fix linting issues and rebuild
Database Connection Issues
Problem: Cannot connect to production database
Solutions:
- Check DATABASE_URL in production environment
- Verify database server is running
- Check network connectivity and firewall rules
Memory Issues
Problem: Application running out of memory
Solutions:
- Monitor with PM2:
pm2 monit - Increase Node.js memory limit:
node --max-old-space-size=4096 dist/app.js - Implement proper garbage collection
Performance Issues
Problem: Slow response times
Solutions:
- Enable application monitoring
- Check database query performance
- Implement caching strategies
- Use clustering with PM2
Health Checks
Implement health check endpoints:
// Health check endpoint
app.get('/health', (req, res) => {
res.status(200).json({
status: 'healthy',
timestamp: new Date().toISOString(),
uptime: process.uptime()
});
});
Test health check:
curl http://localhost:3000/health
Check application health
Backup and Recovery
Database Backup
pg_dump production_db > backup-$(date +%Y%m%d).sql
Create database backup (PostgreSQL)
Application Backup
-
Code Backup
- Use Git for version control
- Tag releases:
git tag v1.0.0
-
Configuration Backup
- Backup environment files
- Document configuration changes
Recovery Procedures
-
Database Recovery
# Restore from backup
psql production_db < backup-20231201.sql -
Application Recovery
# Rollback to previous version
git checkout v1.0.0
npm run build
pm2 restart all
Scaling Considerations
Horizontal Scaling
-
Load Balancer Configuration
- Use nginx or AWS ALB
- Configure health checks
- Implement session affinity if needed
-
Database Scaling
- Read replicas for read-heavy workloads
- Connection pooling
- Query optimization
Vertical Scaling
-
Resource Monitoring
- Monitor CPU and memory usage
- Scale server resources as needed
-
Performance Tuning
- Optimize database queries
- Implement caching
- Use CDN for static assets