- Added Express server with Git info API endpoint - Created automated deployment scripts (systemd-based, not PM2) - Implemented 5-minute auto-sync with GitHub - Enhanced .gitignore with 200+ credential protection patterns - Added Git version badge to UI footer - Created comprehensive deployment documentation - Added TurnKey Nginx fix for default control panel issue - Included security verification tools All credentials protected and verified safe for deployment.
8.9 KiB
🚀 Automated Proxmox Deployment Guide
This guide will help you deploy this application to a Proxmox TurnKey Linux Node.js container with automatic GitHub synchronization every 5 minutes.
📋 What You Need
Before starting, gather the following information:
-
Server Details
- Server IP address
- SSH port (default: 22)
- Root password
-
GitHub Credentials
- Your GitHub username
- Personal Access Token (PAT) with
repopermissions - Repository name:
DeNNiiInc/Web-Page-Performance-Test
🔑 Creating a GitHub Personal Access Token
- Go to GitHub → Settings → Developer Settings → Personal Access Tokens → Tokens (classic)
- Click "Generate new token (classic)"
- Set a note: "Proxmox Auto-Deploy"
- Check the
reposcope (full control of private repositories) - Click "Generate token"
- Copy the token immediately (you won't see it again!)
🛠️ Step 1: Prepare Credentials (LOCAL MACHINE)
-
Copy the template configuration:
Copy-Item deploy-config.TEMPLATE.json deploy-config.json -
Edit
deploy-config.jsonand fill in your details:{ "host": "192.168.1.100", // Your server IP "port": 22, "username": "root", "password": "your-root-password", "remotePath": "/var/www/web-page-performance-test", "appName": "web-page-performance-test", "github": { "username": "YourGitHubUsername", "token": "ghp_YourPersonalAccessToken", "repo": "DeNNiiInc/Web-Page-Performance-Test" } }
⚠️ IMPORTANT:
deploy-config.jsonis already in.gitignoreand will NEVER be pushed to GitHub!
🚀 Step 2: Deploy to Server (ONE COMMAND!)
From your local machine, run:
.\deploy-local.ps1
This script will:
- ✅ Test SSH connection
- ✅ Upload deployment scripts
- ✅ Clone the repository on the server
- ✅ Install dependencies
- ✅ Create systemd service (NOT PM2 - more reliable!)
- ✅ Configure Nginx reverse proxy
- ✅ Set up auto-sync cron job (every 5 minutes)
- ✅ Remove credentials from the server after setup
Deployment takes about 2-3 minutes.
🔄 Step 3: Auto-Sync is Now Active!
After deployment:
- Every 5 minutes, the server checks GitHub for updates
- If changes are found, it automatically:
- Pulls the latest code
- Installs new dependencies (if
package.jsonchanged) - Restarts the application
- If no changes, it does nothing (efficient!)
📝 View Auto-Sync Logs
SSH into your server and run:
tail -f /var/log/web-page-performance-test-autosync.log
🧪 Testing the Deployment
-
Check if the service is running:
ssh root@YOUR_SERVER_IP systemctl status web-page-performance-test -
Test the application:
- Open your browser:
http://YOUR_SERVER_IP - You should see your application!
- Open your browser:
-
Test auto-sync:
- Make a small change to
index.htmllocally - Commit and push to GitHub
- Wait ~5 minutes
- Refresh your browser - you'll see the change!
- Make a small change to
🛡️ Security Features
✅ Credentials are NEVER committed to Git
deploy-config.jsonis in.gitignore- GitHub token is removed from server after initial clone
- Credentials are only stored in memory during deployment
✅ Systemd instead of PM2
- Native Linux service management
- Auto-restart on failure
- Better logging with journalctl
- Boot persistence
📊 Useful Commands
Check### Application Not Accessible
# SSH into server
ssh root@YOUR_SERVER_IP
# Check service status
systemctl status web-page-performance-test
# Check if port 3000 is listening
netstat -tlnp | grep 3000
# Check Nginx
systemctl status nginx
nginx -t
# View logs
journalctl -u web-page-performance-test -n 50
Seeing TurnKey Control Panel Instead of Your App
If you see the TurnKey Node.js default page (with "Webmin" and "Resources" links) instead of your application:
Quick Fix - Run this on the server:
cd /var/www/web-page-performance-test
chmod +x fix-nginx.sh
./fix-nginx.sh
Manual Fix:
# Remove TurnKey default Nginx sites
rm -f /etc/nginx/sites-enabled/default
rm -f /etc/nginx/sites-enabled/nodejs
rm -f /etc/nginx/sites-enabled/node*
rm -f /etc/nginx/sites-enabled/tkl-webcp
# Enable your site
ln -sf /etc/nginx/sites-available/web-page-performance-test /etc/nginx/sites-enabled/
# Test and reload
nginx -t && systemctl reload nginx
# Verify your files are there
ls -la /var/www/web-page-performance-test
Why this happens:
- TurnKey Linux templates come with a default Nginx configuration that shows their control panel
- Our deployment removes these defaults, but if Nginx configuration wasn't applied properly, the TurnKey page shows
- The
fix-nginx.shscript removes ALL TurnKey defaults and enables only your application
GitHub authentication Application Status
systemctl status web-page-performance-test
View Application Logs
journalctl -u web-page-performance-test -f
View Auto-Sync Logs
tail -f /var/log/web-page-performance-test-autosync.log
Manually Restart Application
systemctl restart web-page-performance-test
Force Manual Sync
cd /var/www/web-page-performance-test
./auto-sync.sh
Check Nginx Status
systemctl status nginx
nginx -t # Test configuration
🔧 Troubleshooting
Application won't start
journalctl -u web-page-performance-test -n 50
Auto-sync not working
# Check if cron job exists
crontab -l | grep auto-sync
# Manually run sync to see errors
cd /var/www/web-page-performance-test
./auto-sync.sh
Nginx errors
nginx -t
systemctl status nginx
Git authentication issues
The server uses HTTPS with token authentication. If you see authentication errors:
cd /var/www/web-page-performance-test
git remote -v # Should show https://github.com/...
📦 Project Structure
Web-Page-Performance-Test/
├── index.html # Main HTML file
├── styles.css # Styling
├── server.js # Node.js Express server
├── package.json # Dependencies
├── .gitignore # Excludes credentials
├── deploy-config.TEMPLATE.json # Template for credentials
├── deploy-local.ps1 # Local deployment script (Windows)
├── deploy-server.sh # Server setup script (Linux)
└── auto-sync.sh # Auto-sync script (runs every 5 min)
🎯 Deployment Architecture
┌─────────────────┐
│ Your Computer │
│ (Windows) │
└────────┬────────┘
│ deploy-local.ps1
│ (SSH + SCP)
▼
┌─────────────────────────────┐
│ Proxmox Server │
│ ┌───────────────────────┐ │
│ │ Nginx (Port 80) │ │
│ │ ↓ Reverse Proxy │ │
│ │ Node.js (Port 3000) │ │
│ │ ↓ Express Server │ │
│ │ Static Files │ │
│ └───────────────────────┘ │
│ ┌───────────────────────┐ │
│ │ Systemd Service │ │
│ │ (Auto-restart) │ │
│ └───────────────────────┘ │
│ ┌───────────────────────┐ │
│ │ Cron Job (*/5 min) │ │
│ │ → auto-sync.sh │ │
│ │ → Check GitHub │ │
│ │ → Pull if changed │ │
│ │ → Restart service │ │
│ └───────────────────────┘ │
└─────────────────────────────┘
▲
│ git pull
│ (every 5 minutes)
┌────────┴────────┐
│ GitHub │
│ (Your Repo) │
└─────────────────┘
✅ Advantages of This Setup
- Systemd > PM2: Native, reliable, and integrated with Linux
- Auto-sync: Push to GitHub, wait 5 minutes, it's live!
- Efficient: Only restarts when changes are detected
- Secure: Credentials never exposed to Git
- Simple: One PowerShell command to deploy
- Logging: Full logs for debugging
- Nginx: Serves static files efficiently
🎉 You're All Set!
Your application is now:
- ✅ Running on Proxmox
- ✅ Accessible via HTTP
- ✅ Auto-syncing with GitHub every 5 minutes
- ✅ Restarting automatically on changes
- ✅ Secured (credentials not in Git)
Just code, commit, push - and your server updates automatically! 🚀