This guide explains how to deploy the Nostr Auth Middleware in both development and production environments.
- Environment Overview
- Development Deployment
- Production Deployment
- Directory Structure
- Configuration Management
- Script Reference
- Troubleshooting
The middleware supports two deployment environments:
- Local directory structure
- Auto-generated test keys
- In-memory data storage option
- Hot-reloading enabled
- Detailed logging
- No root permissions required
- System-level directory structure
- Secure key management via Supabase
- Proper file permissions
- Log rotation and compression
- Automatic backups
- Rate limiting
- IP whitelisting
-
Initial Setup
# Clone the repository git clone https://github.com/your-org/nostr-auth-middleware.git cd nostr-auth-middleware # Install dependencies npm install # Copy environment file cp .env.example .env
-
Configure Environment
# Edit .env file NODE_ENV=development DOMAIN=nostr-platform.app SERVICE_NAME=auth TEST_MODE=true
-
Start the Service
# Make scripts executable chmod +x scripts/*.sh # Start in development mode ./scripts/startup.sh
-
System Requirements
- Node.js 16 or higher
- PM2 process manager
- System user and group for the service
# Create service user and group sudo useradd -r -s /bin/false nostr sudo groupadd nostr
-
Directory Setup
# Create system directories sudo mkdir -p /opt/nostr-platform/auth sudo mkdir -p /var/log/nostr-platform/auth sudo mkdir -p /opt/backups/nostr-platform/auth # Set permissions sudo chown -R nostr:nostr /opt/nostr-platform/auth sudo chown -R nostr:nostr /var/log/nostr-platform/auth sudo chown -R nostr:nostr /opt/backups/nostr-platform/auth
-
Production Configuration
# Edit .env file NODE_ENV=production DOMAIN=your-domain.com SERVICE_NAME=auth TEST_MODE=false # Supabase Configuration SUPABASE_PROJECT=your-project SUPABASE_URL=https://your-project.supabase.co SUPABASE_KEY=your-key # Service Configuration SERVICE_USER=nostr SERVICE_GROUP=nostr
-
Start Production Service
sudo NODE_ENV=production ./scripts/startup.sh
./
├── logs/ # Local logs
├── backups/ # Local backups
└── dist/ # Compiled code
/opt/nostr-platform/auth/ # Service files
├── dist/ # Compiled code
└── node_modules/ # Dependencies
/var/log/nostr-platform/auth/ # System logs
└── [service-name].log # Log files
/opt/backups/nostr-platform/auth/ # Backups
└── backup_[timestamp]/ # Dated backups
-
Core Configuration
NODE_ENV=development|production DOMAIN=your-domain.com SERVICE_NAME=auth
-
Service URLs
AUTH_SERVICE_URL=http://localhost:3002 IPFS_SERVICE_URL=http://localhost:3001 RELAY_SERVICE_URL=http://localhost:3000
-
Security
SERVER_PRIVATE_KEY= # Auto-generated SERVER_PUBLIC_KEY= # Auto-generated JWT_SECRET= # Required in production
config.sh
: Central configuration managementecosystem.config.cjs
: PM2 process configuration.env
: Environment-specific variables
- Checks environment and requirements
- Creates necessary directories
- Manages permissions
- Starts the service with PM2
# Development
./scripts/startup.sh
# Production
sudo NODE_ENV=production ./scripts/startup.sh
- Graceful shutdown
- Log rotation
- Cleanup operations
# Development
./scripts/shutdown.sh
# Production
sudo ./scripts/shutdown.sh
- Environment detection
- Directory structure
- Permissions handling
- Logging utilities
-
Permission Errors
Error: EACCES: permission denied
- Check if running as correct user
- Verify directory permissions
- Use sudo in production mode
-
Directory Creation Failed
Failed to create directory
- Verify parent directory permissions
- Check disk space
- Ensure correct service user
-
PM2 Process Issues
Error: Process already running
- Clean up existing process:
pm2 delete nostr-auth-middleware
- Check PM2 logs:
pm2 logs
- Verify process status:
pm2 list
- Clean up existing process:
- Hot reload not working
- Local directories not created
- Test mode configuration
- System directory permissions
- Service user access
- Log rotation
- Backup management
-
Access Logs
# Development tail -f logs/nostr-auth.log # Production sudo tail -f /var/log/nostr-platform/auth/nostr-auth.log
-
PM2 Logs
pm2 logs nostr-auth-middleware
-
Compressed Logs
# List compressed logs ls -l /var/log/nostr-platform/auth/*.gz # View compressed log zcat /var/log/nostr-platform/auth/nostr-auth.log.1.gz