11 KiB
DevBench Manager - Project Structure
Directory Tree
ASF_devbench/
├── docs/ # Documentation
│ ├── ARCHITECTURE.md # System architecture
│ ├── STRUCTURE.md # This file
│ ├── DEPLOYMENT.md # Deployment guide
│ └── API.md # API documentation
│
├── public/ # Static assets
│ ├── css/
│ │ └── style.css # Custom styles + dark theme
│ ├── images/
│ │ ├── nabd-logo.svg # Company logo (light)
│ │ ├── nabd-logo-white.svg # Company logo (dark)
│ │ └── tbm-icon.png # TBM branding icon
│ └── downloads/
│ └── db_vm_ssh_config_manager.exe # SSH config tool
│
├── views/ # EJS templates
│ ├── layout.ejs # Base layout with navbar
│ ├── login.ejs # Login page
│ ├── dashboard.ejs # User dashboard
│ ├── admin.ejs # Admin panel
│ └── help.ejs # Help/documentation page
│
├── data/ # Database storage (created on deploy)
│ └── devbench.db # SQLite database
│
├── logs/ # Application logs (created on deploy)
│ └── *.log # Log files
│
├── server.js # Main application server
├── config.js # Configuration settings
├── package.json # Node.js dependencies
├── provision_vm.sh # VM provisioning script
│
├── Dockerfile # Docker image definition
├── docker-compose.yml # Container orchestration
├── .dockerignore # Docker build exclusions
│
├── deploy.sh # Deployment script
├── install.sh # Local installation script
├── start.sh # Start script (Docker/Node)
├── cleanup.sh # Cleanup script
│
├── .env.example # Environment variables template
├── .gitignore # Git exclusions
├── README.md # Main documentation
└── CHANGELOG.md # Change history
File Descriptions
Core Application Files
server.js
Purpose: Main Express.js application server
Key Components:
- Express app initialization
- Database setup and schema
- Route definitions
- WebSocket server
- Authentication middleware
- DevBench management logic
- Provision script executor
- Status monitoring (60-second interval)
Dependencies:
- express
- express-session
- sqlite3
- bcryptjs
- ws (WebSocket)
- child_process (for script execution)
Key Functions:
- requireAuth() // Authentication middleware
- requireAdmin() // Admin authorization middleware
- executeProvisionScript() // Execute VM provisioning
- broadcastToUser() // WebSocket messaging
config.js
Purpose: Centralized configuration
Settings:
- Server port
- Database path
- Session configuration
- Default admin credentials
- Validation patterns
- Provision script settings
provision_vm.sh
Purpose: VM provisioning and management
Commands:
create <vm_name>: Create new VMstatus <vm_name>: Check VM statusdelete <vm_name>: Delete VMactivate <vm_name>: Activate VMstart <vm_name>: Start VMstop <vm_name>: Stop VM
Features:
- SSH connection to remote host
- Output logging
- Connection info extraction
- Error handling
- Timeout management (30 minutes)
Frontend Files
views/layout.ejs
Purpose: Base template for all pages
Features:
- Navigation bar with logo
- Help link
- Theme toggle button
- WebSocket initialization
- Bootstrap and Font Awesome imports
- Dark theme JavaScript
views/dashboard.ejs
Purpose: User dashboard
Features:
- DevBench list with cards
- Create DevBench modal
- Connection info display (SSH/VNC ports)
- Real-time log output
- Status indicators
- Copy-to-clipboard functionality
views/admin.ejs
Purpose: Admin panel
Features:
- User management table
- Add user modal
- DevBench overview table
- Password reset
- User deletion
- DevBench deletion
views/help.ejs
Purpose: Help and documentation
Features:
- SSH Config Manager guide
- Step-by-step instructions
- Download link for tool
- Connection information
- Important notes
views/login.ejs
Purpose: Authentication page
Features:
- Login form
- Error messages
- Branding
Static Assets
public/css/style.css
Purpose: Custom styling
Features:
- NABD brand colors
- Dark theme styles
- Component styling
- Responsive design
- Smooth transitions
public/images/
Purpose: Image assets
Files:
nabd-logo.svg: Light theme logonabd-logo-white.svg: Dark theme logotbm-icon.png: Branding icon and favicon
public/downloads/
Purpose: Downloadable files
Files:
db_vm_ssh_config_manager.exe: SSH configuration tool
Deployment Files
Dockerfile
Purpose: Docker image definition
Base Image: node:18-alpine
Steps:
- Set working directory
- Copy package files
- Install dependencies
- Copy application files
- Create data/logs directories
- Expose port 3001
- Set start command
docker-compose.yml
Purpose: Container orchestration
Configuration:
- Service: devbench-manager
- Port mapping: 9090:3001
- Volumes: data, logs, provision script
- Networks: app-network, caddy_network
- Health check: /health endpoint
- Restart policy: unless-stopped
deploy.sh
Purpose: Automated deployment
Steps:
- Create directories
- Set permissions
- Clean up old containers
- Create Docker network
- Build and start container
- Wait for startup
- Verify health
- Display access information
Configuration Files
package.json
Purpose: Node.js project configuration
Scripts:
start: Run production serverdev: Run with nodemon (auto-reload)
Dependencies:
- express: Web framework
- express-session: Session management
- bcryptjs: Password hashing
- sqlite3: Database
- body-parser: Request parsing
- ejs: Template engine
- ws: WebSocket
- child_process: Script execution
.env.example
Purpose: Environment variables template
Variables:
- NODE_ENV
- PORT
- SECRET_KEY
- ADMIN_EMAIL
- ADMIN_PASSWORD
.gitignore
Purpose: Git exclusions
Excluded:
- node_modules/
- data/
- logs/
- .env
- *.log
- .DS_Store
Utility Scripts
install.sh
Purpose: Local installation
Actions:
- Check Node.js version
- Install npm dependencies
- Display start instructions
start.sh
Purpose: Start application
Logic:
- Check for Docker
- Start with Docker Compose if available
- Fall back to Node.js
- Install dependencies if needed
cleanup.sh
Purpose: Clean up containers
Actions:
- Stop containers
- Remove containers
- Prune dangling containers
- List volumes
Documentation Files
README.md
Purpose: Main project documentation
Sections:
- Features overview
- Installation instructions
- Configuration guide
- Usage instructions
- API endpoints
- Troubleshooting
CHANGELOG.md
Purpose: Change history
Content:
- Recent updates
- SSH configuration changes
- Output format changes
- New features
- Migration notes
docs/ARCHITECTURE.md
Purpose: System architecture
Content:
- Architecture diagrams
- Component descriptions
- Data flow
- Security architecture
- Technology stack
docs/DEPLOYMENT.md
Purpose: Deployment guide
Content:
- Prerequisites
- Deployment steps
- Configuration
- Troubleshooting
- Maintenance
Data Flow Through Files
DevBench Creation
1. views/dashboard.ejs
↓ (User clicks Create)
2. server.js (POST /create-devbench)
↓ (Validates and creates DB record)
3. server.js (executeProvisionScript)
↓ (Spawns child process)
4. provision_vm.sh
↓ (SSH to remote host)
5. Remote VM Host
↓ (Creates VM, returns info)
6. provision_vm.sh
↓ (Parses output)
7. server.js
↓ (Updates database)
8. WebSocket
↓ (Broadcasts to user)
9. views/dashboard.ejs
↓ (Updates UI)
Authentication
1. views/login.ejs
↓ (User submits form)
2. server.js (POST /login)
↓ (Validates credentials)
3. config.js (validation patterns)
↓
4. server.js (bcrypt compare)
↓ (Creates session)
5. express-session
↓ (Stores session)
6. server.js (redirect)
↓
7. views/dashboard.ejs or views/admin.ejs
Theme Toggle
1. views/layout.ejs (Theme toggle button)
↓ (User clicks)
2. JavaScript (theme toggle handler)
↓ (Toggles class)
3. public/css/style.css (dark-theme styles)
↓ (Applies styles)
4. localStorage
↓ (Saves preference)
Key Directories
/data
- Created: On first deployment
- Purpose: SQLite database storage
- Persistence: Docker volume
- Backup: Copy devbench.db file
/logs
- Created: On first deployment
- Purpose: Application logs
- Persistence: Docker volume
- Rotation: Manual
/public
- Purpose: Static assets served by Express
- Access: Direct URL paths
- Caching: Browser caching enabled
/views
- Purpose: EJS templates
- Rendering: Server-side
- Access: Via routes only
/docs
- Purpose: Project documentation
- Format: Markdown
- Access: File system only
Configuration Hierarchy
1. Environment Variables (.env)
↓
2. config.js (defaults)
↓
3. docker-compose.yml (container env)
↓
4. Application runtime
Port Mapping
External → Container → Application
9090 → 3001 → Express Server
Network Architecture
Internet
↓
Caddy (caddy_network)
↓
DevBench Manager (caddy_network + app-network)
↓
SQLite (local file)
↓
SSH (external)
↓
Remote VM Host
File Permissions
Scripts
provision_vm.sh: 755 (executable)deploy.sh: 755 (executable)install.sh: 755 (executable)start.sh: 755 (executable)cleanup.sh: 755 (executable)
Directories
data/: 755logs/: 755public/: 755
Database
devbench.db: 644 (read/write for owner)
Build Process
Docker Build
1. Read Dockerfile
2. Pull node:18-alpine
3. Copy package.json
4. npm install
5. Copy application files
6. Set permissions
7. Create image
Docker Compose
1. Read docker-compose.yml
2. Create networks
3. Build image (if needed)
4. Create container
5. Mount volumes
6. Start container
7. Run health checks
Runtime Process
Container Startup
1. Docker starts container
2. Node.js starts
3. server.js executes
4. Database initialized
5. Express server starts
6. WebSocket server starts
7. Health check passes
8. Ready for connections
Request Handling
1. Request arrives at Caddy
2. Proxied to container
3. Express routes request
4. Middleware checks auth
5. Controller handles logic
6. Database query (if needed)
7. Template rendered
8. Response sent