Docs / Raw

Admin Panel Deployment

Sourced from docs/ADMIN_PANEL_DEPLOYMENT.md

Edit on GitHub

Admin Panel Deployment Summary

Date: 2025-11-22 Server: asimo.io (Ubuntu 24.04.3 LTS) Domain: https://admin.asimo.io Status: ✅ DEPLOYED & OPERATIONAL


Deployment Overview

The VoiceAssist Admin Panel has been successfully deployed to production on asimo.io. The admin panel is a React-based SPA (Single Page Application) served via Apache with SSL/TLS encryption.


Deployment Details

1. Build Process

cd ~/VoiceAssist/apps/admin-panel npm run build

Build Output:

  • Location: dist/
  • Size: 202.23 KB (gzipped: 63.62 KB)
  • Files: 3 (index.html, CSS, JS bundle)
  • Status: ✅ Success

2. File Deployment

# Create web directory sudo mkdir -p /var/www/admin.asimo.io # Copy built files sudo cp -r ~/VoiceAssist/apps/admin-panel/dist/* /var/www/admin.asimo.io/ # Set ownership sudo chown -R www-data:www-data /var/www/admin.asimo.io

Deployed Files:

  • /var/www/admin.asimo.io/index.html (403 bytes)
  • /var/www/admin.asimo.io/assets/index-C3epBpcL.js (202 KB)
  • /var/www/admin.asimo.io/assets/index-D8qvZpew.css (0.12 KB)

3. Apache Configuration

Config File: /etc/apache2/sites-available/admin.asimo.io.conf

Key Features:

  • HTTP to HTTPS redirect
  • SPA routing (all requests → index.html)
  • Security headers (X-Content-Type-Options, X-Frame-Options, CSP)
  • CORS headers for API access
  • SSL/TLS via Let's Encrypt
  • Access and error logging

Certificate:

  • Provider: Let's Encrypt
  • Certificate: /etc/letsencrypt/live/assist.asimo.io/fullchain.pem
  • Private Key: /etc/letsencrypt/live/assist.asimo.io/privkey.pem

4. Apache Activation

# Enable site sudo a2ensite admin.asimo.io.conf # Test configuration sudo apache2ctl configtest # Reload Apache sudo systemctl reload apache2

Status: ✅ Configuration valid, site enabled, Apache reloaded


Access & Testing

Public URL

URL: https://admin.asimo.io

Status: ✅ Responding with HTTP 200 OK

HTTP Headers

HTTP/1.1 200 OK
Date: Sun, 23 Nov 2025 01:05:50 GMT
Server: Apache/2.4.58 (Ubuntu)
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
Referrer-Policy: strict-origin-when-cross-origin
Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self' data:; connect-src 'self' http://localhost:8000 https://api.asimo.io;
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS, PATCH
Access-Control-Allow-Headers: Content-Type, Authorization
Content-Type: text/html

Test Results

HTTPS Access: Working ✅ SSL Certificate: Valid (Let's Encrypt) ✅ Security Headers: All present ✅ CORS Headers: Configured ✅ SPA Routing: Configured (rewrite rules active) ✅ HTTP → HTTPS Redirect: Active


Architecture

Frontend (Static SPA)

Browser
   ↓ HTTPS
Apache (admin.asimo.io:443)
   ↓ Serves static files
/var/www/admin.asimo.io/
   ├── index.html
   └── assets/
       ├── index-C3epBpcL.js
       └── index-D8qvZpew.css

API Communication

Admin Panel (Browser)
   ↓ HTTP/HTTPS
API Backend (localhost:8000 or api.asimo.io)
   ↓ REST/WebSocket
Services (PostgreSQL, Redis, Qdrant)

API Endpoints Used:

  • POST /api/auth/login - Authentication
  • GET /api/auth/me - Session validation
  • GET /api/admin/panel/summary - Dashboard metrics
  • GET /api/users - User listing
  • PATCH /api/users/:id - User updates
  • GET /api/admin/kb/documents - KB documents
  • POST /api/admin/kb/documents - Upload documents

Security Configuration

SSL/TLS

  • Protocol: TLS 1.2+
  • Certificate: Let's Encrypt (trusted CA)
  • Auto-renewal: Configured via certbot
  • HSTS: Not currently enabled (recommended for future)

Security Headers

  1. X-Content-Type-Options: nosniff

    • Prevents MIME type sniffing
  2. X-Frame-Options: SAMEORIGIN

    • Prevents clickjacking
  3. X-XSS-Protection: 1; mode=block

    • Enables XSS filtering
  4. Referrer-Policy: strict-origin-when-cross-origin

    • Controls referrer information
  5. Content-Security-Policy: Restrictive policy

    • default-src 'self'
    • script-src 'self' 'unsafe-inline' 'unsafe-eval'
    • connect-src 'self' http://localhost:8000 https://api.asimo.io

CORS Configuration

  • Access-Control-Allow-Origin: *
  • Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS, PATCH
  • Access-Control-Allow-Headers: Content-Type, Authorization

Note: In production, consider restricting CORS to specific origins.

Authentication

  • Method: JWT tokens
  • Storage: localStorage (client-side)
  • Validation: Server-side on every request
  • Admin-only: All routes require admin role

Maintenance

Updating the Admin Panel

  1. Make changes in ~/VoiceAssist/apps/admin-panel/src/

  2. Build:

    cd ~/VoiceAssist/apps/admin-panel npm run build
  3. Deploy:

    sudo cp -r dist/* /var/www/admin.asimo.io/ sudo chown -R www-data:www-data /var/www/admin.asimo.io
  4. Clear browser cache (Ctrl+Shift+R)

Monitoring

Apache Logs:

# Error log sudo tail -f /var/log/apache2/admin-voiceassist-error.log # Access log sudo tail -f /var/log/apache2/admin-voiceassist-access.log

Service Status:

# Apache status sudo systemctl status apache2 # Test configuration sudo apache2ctl configtest # List virtual hosts sudo apache2ctl -S | grep admin

Troubleshooting

Problem: 404 errors on page refresh Solution: Verify SPA rewrite rules in Apache config

Problem: API calls failing (CORS errors) Solution: Check CSP connect-src includes API URL

Problem: Login not working Solution: Verify backend API is running on localhost:8000

Problem: SSL certificate expired Solution: Renew via certbot: sudo certbot renew


Performance

Load Time

  • HTML: < 1 KB (instant)
  • CSS: 0.12 KB (instant)
  • JS Bundle: 202 KB (gzipped: 63.62 KB)
  • Total First Load: ~64 KB transferred

Optimization

  • ✅ Gzip compression enabled
  • ✅ Static assets cached by browser
  • ✅ Minified JS/CSS
  • ⚠️ Consider CDN for static assets (future)
  • ⚠️ Consider code splitting (future)

Backup & Rollback

Current Deployment

Source: ~/VoiceAssist/apps/admin-panel/dist/ Deployed: /var/www/admin.asimo.io/ Git Branch: main Git Commit: 9fa5127

Rollback Procedure

If issues occur, rollback to previous version:

# 1. Checkout previous commit cd ~/VoiceAssist git log --oneline | head -10 # Find previous commit git checkout <previous-commit> # 2. Rebuild cd apps/admin-panel npm run build # 3. Redeploy sudo cp -r dist/* /var/www/admin.asimo.io/ sudo chown -R www-data:www-data /var/www/admin.asimo.io # 4. Return to main git checkout main

Future Enhancements

  1. HSTS Header

    Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
  2. Restrict CORS

    Header always set Access-Control-Allow-Origin "https://admin.asimo.io"
  3. Rate Limiting

    • Install mod_evasive or mod_security
    • Protect against brute force attacks
  4. CDN Integration

    • CloudFlare for static asset caching
    • DDoS protection
  5. HTTP/2

    • Enable HTTP/2 protocol for faster loading
    sudo a2enmod http2
  6. Monitoring

    • Uptime monitoring (UptimeRobot, Pingdom)
    • Error tracking (Sentry)
    • Analytics (Plausible)

Checklist

Deployment Checklist

  • Code merged to main branch
  • Production build successful
  • Files copied to /var/www/admin.asimo.io/
  • Ownership set to www-data
  • Apache config updated
  • Apache config tested
  • Site enabled in Apache
  • Apache reloaded
  • HTTPS access verified
  • SSL certificate valid
  • Security headers present
  • SPA routing working
  • Logs configured
  • Admin user created in database (TODO)
  • Documentation updated (✅ This file)
  • Team notified

Post-Deployment Checklist

  • Test login with admin credentials
  • Verify dashboard loads data
  • Test user management
  • Test KB upload
  • Test system configuration
  • Monitor logs for errors
  • Check performance metrics
  • Verify mobile responsiveness

Support

Contact

For issues or questions:

  1. Check logs: /var/log/apache2/admin-voiceassist-*
  2. Review documentation: ~/VoiceAssist/apps/admin-panel/ADMIN_PANEL_GUIDE.md
  3. Check GitHub issues
  4. Contact development team

Resources

  • Admin Panel Guide: /home/asimo/VoiceAssist/apps/admin-panel/ADMIN_PANEL_GUIDE.md
  • Implementation Summary: /home/asimo/VoiceAssist/docs/ADMIN_PANEL_IMPLEMENTATION_SUMMARY.md
  • Apache Config: /etc/apache2/sites-available/admin.asimo.io.conf
  • Deployed Files: /var/www/admin.asimo.io/

Summary

Admin Panel Deployed Successfully

  • URL: https://admin.asimo.io
  • Status: Operational
  • Response: HTTP 200 OK
  • SSL: Valid (Let's Encrypt)
  • Security: Headers configured
  • Performance: 64 KB gzipped

Next Steps:

  1. Create admin user in database
  2. Test all functionality
  3. Monitor logs for issues
  4. Consider security enhancements

Deployed By: Claude (AI Assistant) Date: 2025-11-22 Version: 2.0 Status: ✅ PRODUCTION READY

🤖 Generated with Claude Code

Co-Authored-By: Claude noreply@anthropic.com

Beginning of guide
End of guide