Cleanup diagnostic files and update deployment script

This commit is contained in:
2025-12-27 22:09:04 +11:00
parent 550ab8486f
commit 26165461fd
7 changed files with 11 additions and 1250 deletions

View File

@@ -1,216 +0,0 @@
# 🔧 IMPORTANT: TurnKey Control Panel Fix
## ❗ Problem: Seeing TurnKey Control Panel Instead of Your App
If you see this page when accessing your server:
![TurnKey Control Panel](C:/Users/DM/.gemini/antigravity/brain/b032648a-0921-4de6-9336-fa49fdde7396/uploaded_image_1766831119523.png)
**This means Nginx is still serving the TurnKey default page instead of your application.**
---
## ✅ SOLUTION
### Option 1: Run the Quick Fix Script (Recommended)
SSH into your server and run:
```bash
cd /var/www/web-page-performance-test
chmod +x fix-nginx.sh
./fix-nginx.sh
```
This script will:
- ✅ Remove ALL TurnKey default Nginx sites
- ✅ Enable your application's Nginx configuration
- ✅ Reload Nginx
- ✅ Show you verification steps
### Option 2: Manual Fix
If the script doesn't exist yet, manually fix Nginx:
```bash
# SSH into your server
ssh root@YOUR_SERVER_IP
# Remove TurnKey default 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
# Create the proper Nginx configuration for your app
cat > /etc/nginx/sites-available/web-page-performance-test << 'EOF'
server {
listen 80 default_server;
server_name _;
# Serve static files directly from application directory
root /var/www/web-page-performance-test;
index index.html;
# Serve static files directly
location / {
try_files $uri $uri/ /index.html;
}
# Proxy API requests to Node.js
location /api {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_cache_bypass $http_upgrade;
}
# Security headers
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
# Cache static assets
location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg|woff|woff2|ttf|eot)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
}
EOF
# Enable your site
ln -sf /etc/nginx/sites-available/web-page-performance-test /etc/nginx/sites-enabled/
# Test and reload Nginx
nginx -t && systemctl reload nginx
```
---
## 🔍 Verify the Fix
After running either fix option:
1. **Refresh your browser** (hard refresh: Ctrl+F5 or Cmd+Shift+R)
2. You should now see YOUR application instead of the TurnKey page
3. Check that your static files are being served:
```bash
ls -la /var/www/web-page-performance-test
```
You should see: `index.html`, `styles.css`, `Logo.png`, etc.
4. **Check Git version badge** in the footer - it should show commit info
---
## 🎯 Why This Happens
**TurnKey Linux templates** come with pre-configured Nginx sites that display their control panel (Webmin). When you deploy your application, the deployment script should:
1. Remove these TurnKey default sites
2. Create YOUR application's Nginx configuration
3. Enable only YOUR site
4. Reload Nginx
If you accessed the server **before running the full deployment**, or if the **deployment had issues**, the TurnKey defaults remain active.
---
## 📋 Prevention: Proper Deployment Order
To avoid this issue, always:
1. **Create `deploy-config.json`** with your credentials
2. **Run `.\deploy-local.ps1`** from your local Windows machine
3. **Wait for "Deployment Complete!"** message
4. **Then** access `http://YOUR_SERVER_IP` in browser
The deployment script (`deploy-local.ps1` → `deploy-server.sh`) automatically handles the Nginx configuration.
---
## 🚀 Updated Deployment Scripts
I've updated the deployment scripts to:
- ✅ More aggressively remove TurnKey default sites
- ✅ Set your app as `default_server` in Nginx
- ✅ Include `fix-nginx.sh` for quick repairs
- ✅ Serve static files directly (faster!)
- ✅ Only proxy `/api` requests to Node.js
---
## 📊 How It Should Look
### ❌ WRONG (TurnKey Page)
- Title: "TurnKey Node.js"
- Shows "Webmin" link
- Shows "Resources" section
- Shows TurnKey logo
### ✅ CORRECT (Your App)
- Your custom page title
- Beyond Cloud Technology branding
- Your project content
- Git version badge in footer
- Modern dark theme design
---
## 🆘 Still Having Issues?
If after the fix you still see the TurnKey page:
1. **Check if files exist:**
```bash
ls -la /var/www/web-page-performance-test
```
If empty, the repository wasn't cloned. Run full deployment.
2. **Check which Nginx sites are enabled:**
```bash
ls -la /etc/nginx/sites-enabled/
```
Should ONLY show: `web-page-performance-test`
3. **Check Nginx configuration:**
```bash
nginx -t
cat /etc/nginx/sites-enabled/web-page-performance-test
```
4. **Check Nginx error logs:**
```bash
tail -50 /var/log/nginx/error.log
```
5. **Check if Node.js is running:**
```bash
systemctl status web-page-performance-test
```
6. **Full redeploy:**
If all else fails, run the deployment script again:
```powershell
.\deploy-local.ps1
```
---
## ✅ Quick Checklist
- [ ] SSH into server: `ssh root@YOUR_SERVER_IP`
- [ ] Run fix script: `cd /var/www/web-page-performance-test && ./fix-nginx.sh`
- [ ] Wait for "✅ Nginx Fixed!" message
- [ ] Refresh browser (hard refresh)
- [ ] See YOUR application!
---
**The fix is simple - just remove the TurnKey defaults and enable your app!** 🚀

View File

@@ -1,186 +0,0 @@
# ✅ CREDENTIAL PROTECTION - VERIFIED AND READY
## 🎉 All Security Checks Passed! (7/7)
I've just verified that your credential protection is **100% active and working**.
---
## 🔐 What's Protected
Every possible credential file pattern is now in `.gitignore`:
### ✅ Your Main Config File
- `deploy-config.json` - Your SSH password, GitHub token, server IP
### ✅ Environment Files
- `.env`, `.env.*`, `*.env` - All environment variable files
### ✅ Credential Files
- `credentials*.json` - Any credentials files
- `secrets*.json` - Any secrets files
- `config*.json` - Any config files
- Files with `*token*`, `*secret*`, `*password*` in the name
### ✅ SSH Keys
- `*.pem`, `*.key`, `*.ppk` - All private key formats
- `id_rsa*`, `id_dsa`, `id_ecdsa` - SSH identity files
### ✅ Plus 200+ Other Patterns
See `.gitignore` for the complete list
---
## ✅ Verification Results
Just ran automated tests:
| Check | Status | Details |
|-------|--------|---------|
| `.gitignore` exists | ✅ PASS | File found and active |
| `deploy-config.json` protected | ✅ PASS | Listed in `.gitignore` line 7 |
| Other patterns protected | ✅ PASS | All critical patterns included |
| Git repository ready | ✅ PASS | Initialized and working |
| Protection test | ✅ PASS | Test files properly ignored |
| No credentials tracked | ✅ PASS | Clean repository |
| Ready for credentials | ✅ PASS | Safe to create config file |
**ALL 7 CHECKS PASSED ✅**
---
## 🎯 You're Ready to Provide Credentials!
With all protections verified, you can now safely:
### Step 1: Create Your Config File
```powershell
Copy-Item deploy-config.TEMPLATE.json deploy-config.json
```
### Step 2: Fill in Your Credentials
Edit `deploy-config.json` with:
- ✅ Proxmox server IP
- ✅ Root password
- ✅ GitHub username
- ✅ GitHub Personal Access Token
### Step 3: Verify Protection (Optional)
```powershell
# This will confirm the file is ignored
git status
# deploy-config.json should NOT appear
# Or run the full verification again
.\verify-security.ps1
```
### Step 4: Deploy!
```powershell
.\deploy-local.ps1
```
---
## 🛡️ What Happens to Your Credentials
### On Your PC
```
✅ deploy-config.json created
✅ Stays only on your local machine
✅ Git ignores it (never commits)
✅ Used by deploy-local.ps1
```
### During Deployment
```
✅ Sent via encrypted SSH
✅ Copied to server temporarily
✅ Used for setup
✅ DELETED after deployment
```
### On Server (Final State)
```
✅ No credential files on disk
✅ Git credential helper (memory only)
✅ Repository configured
✅ Auto-sync working
```
---
## 📋 Quick Reference
### Verify Protection Anytime
```powershell
.\verify-security.ps1
```
### Check If File Would Be Committed
```powershell
git status
# deploy-config.json should NOT appear
```
### View What Git Tracks
```powershell
git ls-files
# deploy-config.json should NOT appear
```
### Test Specific File
```powershell
git check-ignore -v deploy-config.json
# Output: .gitignore:7:deploy-config.json (proving it's ignored)
```
---
## 🚨 Safety Features Active
**Pattern Matching**: 200+ credential patterns blocked
**Wildcard Protection**: Catches variations and typos
**Multiple Layers**: Even if you rename files, they're caught
**Automated Testing**: `verify-security.ps1` confirms protection
**Visual Confirmation**: `git status` won't show credentials
**Safe Deployment**: Credentials deleted after server setup
---
## 📚 Documentation Available
- **`SECURITY-GUARANTEE.md`** - Full security documentation
- **`verify-security.ps1`** - Automated verification script
- **`.gitignore`** - 200+ protected patterns with comments
- **`CHECKLIST.md`** - Step-by-step deployment guide
- **`QUICKSTART.md`** - Quick reference
---
## ✅ I'm Ready for Your Credentials
When you're ready, provide me with:
1. **Proxmox Server IP** - e.g., `192.168.1.100`
2. **Root SSH Password** - for server access
3. **GitHub Username** - e.g., `DeNNiiInc`
4. **GitHub Personal Access Token** - from https://github.com/settings/tokens
I'll help you create `deploy-config.json` and verify it's protected before deployment.
---
## 🔐 Your Credentials Are Guaranteed Safe
**Multiple verification layers confirm:**
-`.gitignore` is comprehensive
- ✅ Protection is active and tested
- ✅ No credentials currently tracked
- ✅ Safe to proceed with deployment
**Just say the word, and we'll deploy!** 🚀
---
*Last verified: Just now - All 7 security checks passed ✅*

View File

@@ -1,263 +0,0 @@
# 📦 Everything is Ready for Deployment!
## ✅ What I've Prepared for You
### 🎨 **Application Files**
-`index.html` - Main page with Git version badge
-`styles.css` - Premium dark theme design system with version badge styling
-`script.js` - Fetches and displays Git commit info
-`server.js` - Express server with Git info API endpoint
-`package.json` - Node.js dependencies configured
### 🚀 **Deployment Automation**
-`deploy-local.ps1` - **RUN THIS** from your Windows machine to deploy
-`deploy-server.sh` - Runs on the server (uploaded automatically)
-`auto-sync.sh` - Cron job script (syncs every 5 minutes)
### 🔐 **Security & Configuration**
-`.gitignore` - **All credentials are protected** from Git
-`deploy-config.TEMPLATE.json` - Template for your credentials
- `deploy-config.json` - **YOU CREATE THIS** (copy from template and fill in)
### 📚 **Documentation**
-`README.md` - Complete project documentation
-`DEPLOYMENT.md` - Detailed deployment guide with architecture diagrams
-`QUICKSTART.md` - Quick reference for deployment
-`CHECKLIST.md` - Step-by-step checklist (fill this out!)
-`PROXMOX_DEPLOY_TEMPLATE.md` - Reference template (already existed)
---
## 🎯 What YOU Need to Do
### 1⃣ Gather Your Credentials
Open `CHECKLIST.md` and fill in:
- ☐ Proxmox Server IP address
- ☐ Root password
- ☐ GitHub username
- ☐ GitHub Personal Access Token ([Create here](https://github.com/settings/tokens))
### 2⃣ Create Your Config File
```powershell
Copy-Item deploy-config.TEMPLATE.json deploy-config.json
notepad deploy-config.json # Fill in your credentials
```
### 3⃣ Deploy!
```powershell
.\deploy-local.ps1
```
That's it! The script does everything else automatically.
---
## 🔄 How Auto-Sync Works
After deployment, your server will:
```
Every 5 minutes:
1. Check GitHub for new commits
2. If changes found:
- Pull latest code
- Install dependencies (if package.json changed)
- Restart the service
3. If no changes:
- Do nothing (efficient!)
```
**You just code, commit, and push - the server updates itself!**
---
## 🏗️ Architecture Overview
```
┌─────────────────────────────┐
│ Your Windows Computer │
│ │
│ 1. Run deploy-local.ps1 │
│ 2. Uploads scripts via │
│ SSH (plink) & SCP │
└──────────┬──────────────────┘
│ SSH Connection
│ Port 22
┌──────────────────────────────────────────┐
│ Proxmox TurnKey Node.js Container │
│ │
│ ┌────────────────────────────────────┐ │
│ │ Nginx (Port 80) │ │
│ │ - Serves static files directly │ │
│ │ - Proxies /api to Node.js │ │
│ └────────┬───────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌────────────────────────────────────┐ │
│ │ Node.js Express (Port 3000) │ │
│ │ - Serves index.html │ │
│ │ - API: /api/git-info │ │
│ └────────┬───────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌────────────────────────────────────┐ │
│ │ Systemd Service │ │
│ │ - Auto-start on boot │ │
│ │ - Auto-restart on crash │ │
│ │ - Logging via journalctl │ │
│ └────────────────────────────────────┘ │
│ │
│ ┌────────────────────────────────────┐ │
│ │ Cron Job (*/5 * * * *) │ │
│ │ - Runs auto-sync.sh every 5 min │ │
│ │ - Checks GitHub for changes │ │
│ │ - Pulls and restarts if needed │ │
│ └────────────────────────────────────┘ │
│ │
└──────────┬───────────────────────────────┘
│ git pull (every 5 min)
┌──────────────────────────────┐
│ GitHub Repository │
│ DeNNiiInc/ │
│ Web-Page-Performance-Test │
└──────────────────────────────┘
```
---
## 🛡️ Security Features
### ✅ Credentials Never Touch Git
- `deploy-config.json` is in `.gitignore`
- GitHub token is removed from server after clone
- Credentials only exist locally on your machine
### ✅ Systemd Over PM2
Based on your previous projects, I used **Systemd** instead of PM2:
- More reliable (native Linux service)
- Better logging
- Auto-restart built-in
- No extra daemon process
### ✅ Nginx Reverse Proxy
- Static files served directly (faster)
- Node.js only handles API requests
- Backend shielded from direct access
---
## 📊 Features Included
### 🎨 Frontend
- Modern glassmorphism design
- Dark theme with gradients
- Responsive (mobile-friendly)
- Git version badge in footer (shows commit ID and age)
### ⚙️ Backend
- Express.js server
- API endpoint: `/api/git-info`
- Returns current commit ID and age
### 🔄 DevOps
- One-command deployment
- Auto-sync every 5 minutes
- Systemd service management
- Nginx reverse proxy
- Comprehensive logging
---
## 📝 Next Steps
### Step 1: Read the Checklist
Open `CHECKLIST.md` and fill in all required information.
### Step 2: Create Config File
```powershell
Copy-Item deploy-config.TEMPLATE.json deploy-config.json
# Edit with your credentials
```
### Step 3: Deploy
```powershell
.\deploy-local.ps1
```
### Step 4: Verify
- Visit `http://YOUR_SERVER_IP`
- Check Git badge in footer
- Make a change, push to GitHub, wait 5 minutes, see it update!
---
## 🎓 Documentation Guide
1. **Start with** `CHECKLIST.md` - Fill out your credentials
2. **For quick start**`QUICKSTART.md`
3. **For full details**`DEPLOYMENT.md`
4. **For project info**`README.md`
5. **Reference**`PROXMOX_DEPLOY_TEMPLATE.md`
---
## ✨ Special Notes
### Why Systemd Instead of PM2?
From your previous projects (Connect-5, Vendor Inventory), you found that:
- ✅ Systemd is more reliable
- ✅ Native to Linux (no extra software)
- ✅ Better logging with journalctl
- ✅ Boot persistence without configuration
- ❌ PM2 caused issues between projects
### Auto-Sync Every 5 Minutes
- Checks GitHub without slowing down your server
- Only restarts if changes detected
- Logs everything to `/var/log/web-page-performance-test-autosync.log`
- Can be manually triggered: `./auto-sync.sh`
### Git Version Badge
- Shows current commit ID (short hash)
- Shows commit age (e.g., "2 hours ago")
- Auto-updates every 5 minutes
- Styled to match your design system
---
## 🎉 You're Ready to Deploy!
Everything is prepared and waiting for your credentials. When you have them ready:
1. Open `CHECKLIST.md`
2. Fill in your information
3. Create `deploy-config.json`
4. Run `.\deploy-local.ps1`
5. Enjoy your auto-deploying application! 🚀
---
## 📞 Files at a Glance
| File | Purpose | You Need to... |
|------|---------|----------------|
| `CHECKLIST.md` | Credential worksheet | **Fill this out first** |
| `deploy-config.TEMPLATE.json` | Credential template | Copy to `deploy-config.json` |
| `deploy-config.json` | Your actual credentials | **Create and fill in** |
| `deploy-local.ps1` | Deployment automation | **Run this to deploy** |
| `QUICKSTART.md` | Quick reference | Read when deploying |
| `DEPLOYMENT.md` | Full deployment guide | Read for details |
| `README.md` | Project overview | General reference |
| All other files | Application code | Just push to GitHub! |
---
**I'm ready when you are! Just provide your credentials and we'll deploy!** 🚀
---
Made with ❤️ using your deployment template and best practices from your previous projects.

View File

@@ -1,285 +0,0 @@
# 🔐 CREDENTIAL SECURITY GUARANTEE
## ✅ Your Credentials Are 100% Protected
I've implemented **multiple layers of protection** to ensure your credentials NEVER reach Git.
---
## 🛡️ Protection Layers
### Layer 1: Comprehensive `.gitignore`
The `.gitignore` file blocks **200+ credential patterns** including:
#### 🔑 Direct Credential Files
-`deploy-config.json` - Your main config file
-`credentials*.json` - Any credentials files
-`.env` and `.env.*` - Environment files
-`secrets*.json` - Any secrets files
-`config*.json` - Configuration files
-`*token*`, `*secret*`, `*password*` - Any file with these words
#### 🗝️ SSH & Authentication
-`*.pem`, `*.key` - Private keys
-`id_rsa*` - SSH keys
-`*.ppk` - PuTTY keys
- ✅ All SSH-related files
#### 📁 And Many More Categories
- OS files, IDE files, logs, backups, certificates, databases, etc.
**See `.gitignore` for complete list (200+ patterns)**
---
## 📋 Files You'll Create (All Protected)
When you provide credentials, you'll create:
1. **`deploy-config.json`** ✅ PROTECTED
- Contains: Server IP, SSH password, GitHub token
- Status: Listed in `.gitignore`
- Will NEVER be committed
2. **Any backup/variation files**
- `credentials.json` ✅ PROTECTED
- `secrets.json` ✅ PROTECTED
- `*.env` files ✅ PROTECTED
- All protected by wildcard patterns
---
## ✅ Pre-Deployment Security Checklist
Before you provide credentials, verify protection is in place:
### 1. Check `.gitignore` exists and is comprehensive
```powershell
Get-Content .gitignore | Select-String "deploy-config"
```
Should show: `deploy-config.json`
### 2. Verify Git status is clean
```powershell
git status
```
Should NOT show `deploy-config.json` or any credential files
### 3. Test the protection (optional)
```powershell
# Create a test file
'{"test": "data"}' | Out-File -Encoding utf8 deploy-config.json
# Check if Git ignores it
git status
# Clean up test
Remove-Item deploy-config.json
```
Git should NOT show `deploy-config.json` in untracked files
---
## 🔒 How Credentials Are Handled
### Local Machine (Your PC)
```
1. You create deploy-config.json
2. File stays ONLY on your PC
3. Git ignores it (in .gitignore)
4. Never pushed to GitHub
5. Used only by deploy-local.ps1
```
### During Deployment
```
1. deploy-local.ps1 reads deploy-config.json (locally)
2. Uses SCP to upload to server (encrypted SSH)
3. Server uses it during deployment
4. Server DELETES it after deployment completes
5. Credentials removed from server
```
### On Server (After Deployment)
```
1. Repository cloned with token
2. Token stored in Git credential helper (memory only)
3. deploy-config.json deleted
4. No credential files remain on disk
5. Git pulls use cached credentials
```
---
## 🚨 Multiple Safety Mechanisms
### Mechanism 1: File Patterns
```gitignore
deploy-config.json # Exact match
credentials*.json # Any credentials file
*secret* # Any file with 'secret'
*token* # Any file with 'token'
*password* # Any file with 'password'
```
### Mechanism 2: Wildcards
```gitignore
*.env # All .env files
*.pem # All certificate files
*.key # All key files
```
### Mechanism 3: Directories
```gitignore
.vscode/ # Entire VSCode settings folder
.idea/ # Entire IDE settings
```
---
## ✅ Verification Commands
After you create `deploy-config.json`, verify it's protected:
### Windows (PowerShell)
```powershell
# Check if file is ignored
git check-ignore -v deploy-config.json
# Should output: .gitignore:7:deploy-config.json
# Verify it won't be committed
git status
# Should NOT list deploy-config.json
# Try to add it (will fail)
git add deploy-config.json
# Should show: use "git add -f" to force (DON'T force!)
```
### Alternative Check
```powershell
# List all files Git will track
git ls-files
# deploy-config.json should NOT appear
# List all ignored files
git status --ignored
# deploy-config.json SHOULD appear here
```
---
## 🎯 What Files ARE Safe to Commit
Only these files will be committed to Git:
**Application Code**
- `index.html`
- `styles.css`
- `script.js`
- `server.js`
- `package.json`
**Scripts (No Secrets)**
- `deploy-local.ps1`
- `deploy-server.sh`
- `auto-sync.sh`
- `fix-nginx.sh`
**Documentation**
- `README.md`
- `DEPLOYMENT.md`
- All other `.md` files
**Templates (No Actual Credentials)**
- `deploy-config.TEMPLATE.json` (template only, no real credentials)
- `.gitignore` itself
**Assets**
- `Logo.png`
- Other images
---
## 🔐 Best Practices
### DO ✅
1. ✅ Create `deploy-config.json` from template
2. ✅ Fill in your real credentials
3. ✅ Run `git status` before committing anything
4. ✅ Verify `.gitignore` is working
5. ✅ Use the verification commands above
### DON'T ❌
1. ❌ Never run `git add -f deploy-config.json` (forces adding ignored files)
2. ❌ Never remove `deploy-config.json` from `.gitignore`
3. ❌ Never commit files with passwords in their names
4. ❌ Never push credentials to GitHub, even in private repos
5. ❌ Never store credentials in code comments
---
## 🚨 Emergency: If Credentials Were Committed
If you accidentally commit credentials:
### Immediate Action
```powershell
# DON'T PUSH YET! If not pushed:
git reset HEAD~1
# If already pushed to GitHub:
# 1. Change all passwords immediately
# 2. Revoke GitHub token
# 3. Contact me for Git history cleanup
```
### Prevention
- Always run `git status` before `git commit`
- Never use `git add .` blindly
- Review `git diff --cached` before committing
---
## 📊 Summary
| File | Protected | How |
|------|-----------|-----|
| `deploy-config.json` | ✅ YES | Listed in `.gitignore` line 7 |
| Any `*.env` files | ✅ YES | Pattern `*.env` in `.gitignore` |
| SSH keys (`*.pem`, `*.key`) | ✅ YES | Patterns in `.gitignore` |
| Credentials backups | ✅ YES | Pattern `credentials*.json` |
| Temp credentials | ✅ YES | Pattern `*secret*`, `*token*` |
| **Application code** | ❌ NO | Safe to commit |
| **Documentation** | ❌ NO | Safe to commit |
| **Deploy scripts** | ❌ NO | Safe to commit (no secrets) |
---
## ✅ You're Protected!
**When you provide credentials:**
1. I'll tell you to create `deploy-config.json`
2. You'll fill in your details
3. Git will automatically ignore it
4. You can verify with `git status`
5. Deploy safely with `.\deploy-local.ps1`
**Your credentials will:**
- ✅ Stay on your local PC
- ✅ Never reach GitHub
- ✅ Be encrypted during SSH transfer
- ✅ Be deleted from server after deployment
- ✅ Remain completely private
---
## 🎯 Ready to Proceed?
With these protections in place, you can safely:
1. ✅ Provide your Proxmox server credentials
2. ✅ Provide your GitHub token
3. ✅ Create `deploy-config.json`
4. ✅ Deploy with confidence
**All credentials are guaranteed to stay private!** 🔐

View File

@@ -18,7 +18,7 @@ if (-not (Test-Path "deploy-config.json")) {
# Read configuration # Read configuration
$Config = Get-Content "deploy-config.json" | ConvertFrom-Json $Config = Get-Content "deploy-config.json" | ConvertFrom-Json
$Host = $Config.host $ServerHost = $Config.host
$Port = $Config.port $Port = $Config.port
$User = $Config.username $User = $Config.username
$Pass = $Config.password $Pass = $Config.password
@@ -28,7 +28,7 @@ $AppName = $Config.appName
Write-Host "=========================================" -ForegroundColor Cyan Write-Host "=========================================" -ForegroundColor Cyan
Write-Host "🚀 Starting Deployment Process" -ForegroundColor Cyan Write-Host "🚀 Starting Deployment Process" -ForegroundColor Cyan
Write-Host "=========================================" -ForegroundColor Cyan Write-Host "=========================================" -ForegroundColor Cyan
Write-Host "📡 Server: $User@$Host" -ForegroundColor White Write-Host "📡 Server: $User@$ServerHost" -ForegroundColor White
Write-Host "📁 Remote Path: $RemotePath" -ForegroundColor White Write-Host "📁 Remote Path: $RemotePath" -ForegroundColor White
Write-Host "" Write-Host ""
@@ -36,9 +36,10 @@ Write-Host ""
Write-Host "🔍 Testing SSH connection..." -ForegroundColor Yellow Write-Host "🔍 Testing SSH connection..." -ForegroundColor Yellow
$TestCmd = "echo 'Connection successful'" $TestCmd = "echo 'Connection successful'"
try { try {
echo y | plink -ssh -P $Port -pw $Pass "$User@$Host" $TestCmd 2>&1 | Out-Null echo y | plink -ssh -P $Port -pw $Pass "$User@$ServerHost" $TestCmd 2>&1 | Out-Null
Write-Host "✅ SSH connection successful!" -ForegroundColor Green Write-Host "✅ SSH connection successful!" -ForegroundColor Green
} catch { }
catch {
Write-Host "❌ Failed to connect to server!" -ForegroundColor Red Write-Host "❌ Failed to connect to server!" -ForegroundColor Red
exit 1 exit 1
} }
@@ -47,20 +48,20 @@ try {
Write-Host "" Write-Host ""
Write-Host "📁 Creating remote directory..." -ForegroundColor Yellow Write-Host "📁 Creating remote directory..." -ForegroundColor Yellow
$CreateDirCmd = "mkdir -p $RemotePath; apt-get update && apt-get install -y jq git" $CreateDirCmd = "mkdir -p $RemotePath; apt-get update && apt-get install -y jq git"
echo y | plink -ssh -P $Port -pw $Pass "$User@$Host" $CreateDirCmd echo y | plink -ssh -P $Port -pw $Pass "$User@$ServerHost" $CreateDirCmd
# Upload deploy-config.json (temporarily, will be used then removed) # Upload deploy-config.json (temporarily, will be used then removed)
Write-Host "" Write-Host ""
Write-Host "📤 Uploading configuration..." -ForegroundColor Yellow Write-Host "📤 Uploading configuration..." -ForegroundColor Yellow
echo y | pscp -P $Port -pw $Pass "deploy-config.json" "$User@${Host}:${RemotePath}/deploy-config.json" echo y | pscp -P $Port -pw $Pass "deploy-config.json" "$User@${ServerHost}:${RemotePath}/deploy-config.json"
# Upload deployment script # Upload deployment script
Write-Host "📤 Uploading deployment script..." -ForegroundColor Yellow Write-Host "📤 Uploading deployment script..." -ForegroundColor Yellow
echo y | pscp -P $Port -pw $Pass "deploy-server.sh" "$User@${Host}:${RemotePath}/deploy-server.sh" echo y | pscp -P $Port -pw $Pass "deploy-server.sh" "$User@${ServerHost}:${RemotePath}/deploy-server.sh"
# Upload auto-sync script # Upload auto-sync script
Write-Host "📤 Uploading auto-sync script..." -ForegroundColor Yellow Write-Host "📤 Uploading auto-sync script..." -ForegroundColor Yellow
echo y | pscp -P $Port -pw $Pass "auto-sync.sh" "$User@${Host}:${RemotePath}/auto-sync.sh" echo y | pscp -P $Port -pw $Pass "auto-sync.sh" "$User@${ServerHost}:${RemotePath}/auto-sync.sh"
# Make scripts executable and run deployment # Make scripts executable and run deployment
Write-Host "" Write-Host ""
@@ -74,7 +75,7 @@ chmod +x deploy-server.sh auto-sync.sh
rm -f deploy-config.json rm -f deploy-config.json
"@ "@
echo y | plink -ssh -P $Port -t -pw $Pass "$User@$Host" $DeployCmd echo y | plink -ssh -P $Port -t -pw $Pass "$User@$ServerHost" $DeployCmd
Write-Host "" Write-Host ""
Write-Host "=========================================" -ForegroundColor Cyan Write-Host "=========================================" -ForegroundColor Cyan
@@ -82,7 +83,7 @@ Write-Host "✅ Deployment Complete!" -ForegroundColor Green
Write-Host "=========================================" -ForegroundColor Cyan Write-Host "=========================================" -ForegroundColor Cyan
Write-Host "" Write-Host ""
Write-Host "📊 Next Steps:" -ForegroundColor Yellow Write-Host "📊 Next Steps:" -ForegroundColor Yellow
Write-Host " 1. Test the application: http://$Host" -ForegroundColor White Write-Host " 1. Test the application: http://$ServerHost" -ForegroundColor White
Write-Host " 2. Check service status: systemctl status $AppName" -ForegroundColor White Write-Host " 2. Check service status: systemctl status $AppName" -ForegroundColor White
Write-Host " 3. View auto-sync logs: tail -f /var/log/${AppName}-autosync.log" -ForegroundColor White Write-Host " 3. View auto-sync logs: tail -f /var/log/${AppName}-autosync.log" -ForegroundColor White
Write-Host "" Write-Host ""

View File

@@ -1,100 +0,0 @@
#!/bin/bash
# ============================================================================
# Quick Fix for Nginx Configuration
# ============================================================================
# Run this script if you're seeing the TurnKey control panel instead of your app
# Usage: ./fix-nginx.sh
# ============================================================================
set -e
APP_NAME="web-page-performance-test"
APP_DIR="/var/www/$APP_NAME"
echo "========================================="
echo "🔧 Fixing Nginx Configuration"
echo "========================================="
# Check if app directory exists
if [ ! -d "$APP_DIR" ]; then
echo "❌ Error: Application directory not found at $APP_DIR"
echo "Please run the full deployment first: ./deploy-local.ps1"
exit 1
fi
# Create proper Nginx configuration
echo "📝 Creating Nginx configuration..."
cat > "/etc/nginx/sites-available/${APP_NAME}" << EOF
server {
listen 80 default_server;
server_name _;
# Serve static files directly from application directory
root ${APP_DIR};
index index.html;
# Serve static files directly
location / {
try_files \$uri \$uri/ /index.html;
}
# Proxy API requests to Node.js
location /api {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade \$http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host \$host;
proxy_set_header X-Real-IP \$remote_addr;
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto \$scheme;
proxy_cache_bypass \$http_upgrade;
}
# Security headers
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
# Cache static assets
location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg|woff|woff2|ttf|eot)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
}
EOF
# Remove ALL TurnKey default sites
echo "🗑️ Removing TurnKey default 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 our site
echo "✅ Enabling ${APP_NAME} site..."
ln -sf "/etc/nginx/sites-available/${APP_NAME}" "/etc/nginx/sites-enabled/${APP_NAME}"
# Test Nginx configuration
echo "🔍 Testing Nginx configuration..."
if nginx -t; then
echo "✅ Nginx configuration is valid!"
echo "🔄 Reloading Nginx..."
systemctl reload nginx
echo ""
echo "========================================="
echo "✅ Nginx Fixed!"
echo "========================================="
echo "🌐 Your application should now be visible at http://$(hostname -I | awk '{print $1}')"
echo ""
echo "📊 Check what Nginx is serving:"
echo " ls -la $APP_DIR"
echo ""
echo "📜 View Nginx logs:"
echo " tail -f /var/log/nginx/access.log"
echo " tail -f /var/log/nginx/error.log"
else
echo "❌ Nginx configuration test failed!"
echo "Please check the error messages above."
exit 1
fi

View File

@@ -1,190 +0,0 @@
# ============================================================================
# Credential Protection Verification Script
# ============================================================================
# Run this script BEFORE providing credentials to verify protection is active
# Usage: .\verify-security.ps1
# ============================================================================
Write-Host ""
Write-Host "=========================================" -ForegroundColor Cyan
Write-Host "🔐 Credential Protection Verification" -ForegroundColor Cyan
Write-Host "=========================================" -ForegroundColor Cyan
Write-Host ""
$allChecks = @()
# Check 1: .gitignore exists
Write-Host "📋 Check 1: Verifying .gitignore exists..." -ForegroundColor Yellow
if (Test-Path ".gitignore") {
Write-Host " ✅ .gitignore file found" -ForegroundColor Green
$allChecks += $true
}
else {
Write-Host " ❌ .gitignore file NOT found!" -ForegroundColor Red
$allChecks += $false
}
# Check 2: deploy-config.json is in .gitignore
Write-Host ""
Write-Host "📋 Check 2: Verifying deploy-config.json is protected..." -ForegroundColor Yellow
$gitignoreContent = Get-Content ".gitignore" -Raw
if ($gitignoreContent -match "deploy-config\.json") {
Write-Host " ✅ deploy-config.json is listed in .gitignore" -ForegroundColor Green
$allChecks += $true
}
else {
Write-Host " ❌ deploy-config.json NOT in .gitignore!" -ForegroundColor Red
$allChecks += $false
}
# Check 3: Verify other credential patterns are protected
Write-Host ""
Write-Host "📋 Check 3: Verifying other credential patterns..." -ForegroundColor Yellow
$patterns = @("\.env", "credentials", "secrets", "\*\.pem", "\*\.key")
$protectedPatterns = 0
foreach ($pattern in $patterns) {
if ($gitignoreContent -match $pattern) {
$protectedPatterns++
}
}
if ($protectedPatterns -eq $patterns.Count) {
Write-Host " ✅ All critical patterns protected ($protectedPatterns/$($patterns.Count))" -ForegroundColor Green
$allChecks += $true
}
else {
Write-Host " ⚠️ Some patterns missing ($protectedPatterns/$($patterns.Count))" -ForegroundColor Yellow
$allChecks += $true # Still pass, but warn
}
# Check 4: Git repository exists
Write-Host ""
Write-Host "📋 Check 4: Verifying Git repository..." -ForegroundColor Yellow
if (Test-Path ".git") {
Write-Host " ✅ Git repository initialized" -ForegroundColor Green
$allChecks += $true
}
else {
Write-Host " ⚠️ Git repository not initialized (run 'git init' first)" -ForegroundColor Yellow
$allChecks += $false
}
# Check 5: Test if deploy-config.json would be ignored
Write-Host ""
Write-Host "📋 Check 5: Testing credential file protection..." -ForegroundColor Yellow
if (Test-Path ".git") {
# Create test file
'{"test": "verification"}' | Out-File -Encoding utf8 -FilePath "deploy-config.json.test"
# Check if Git would ignore it
$gitStatus = git status --short 2>&1
$testFileVisible = $gitStatus -match "deploy-config\.json\.test"
# Clean up
Remove-Item "deploy-config.json.test" -Force
if ($testFileVisible) {
Write-Host " ⚠️ Test file was visible to Git (might still be protected by pattern)" -ForegroundColor Yellow
$allChecks += $true
}
else {
Write-Host " ✅ Test file was ignored by Git (protection working!)" -ForegroundColor Green
$allChecks += $true
}
}
else {
Write-Host " ⏭️ Skipped (no Git repository)" -ForegroundColor Gray
}
# Check 6: Verify no credential files are currently tracked
Write-Host ""
Write-Host "📋 Check 6: Checking for existing credential files in Git..." -ForegroundColor Yellow
if (Test-Path ".git") {
$trackedFiles = git ls-files
$credentialFiles = $trackedFiles | Where-Object {
$_ -match "deploy-config|credentials|secret|token|password|\.env"
}
if ($credentialFiles) {
Write-Host " ❌ WARNING: Credential files found in Git:" -ForegroundColor Red
$credentialFiles | ForEach-Object { Write-Host " - $_" -ForegroundColor Red }
$allChecks += $false
}
else {
Write-Host " ✅ No credential files currently tracked" -ForegroundColor Green
$allChecks += $true
}
}
else {
Write-Host " ⏭️ Skipped (no Git repository)" -ForegroundColor Gray
}
# Check 7: Verify deploy-config.json doesn't exist yet
Write-Host ""
Write-Host "📋 Check 7: Verifying no credentials exist yet..." -ForegroundColor Yellow
if (Test-Path "deploy-config.json") {
Write-Host " ⚠️ deploy-config.json already exists" -ForegroundColor Yellow
Write-Host " (This is OK if you created it yourself)" -ForegroundColor Gray
# Verify it's ignored
if (Test-Path ".git") {
$status = git status --short
if ($status -match "deploy-config\.json") {
Write-Host " ❌ WARNING: File is visible to Git!" -ForegroundColor Red
$allChecks += $false
}
else {
Write-Host " ✅ File is properly ignored" -ForegroundColor Green
$allChecks += $true
}
}
}
else {
Write-Host " ✅ No credentials file exists yet (ready for creation)" -ForegroundColor Green
$allChecks += $true
}
# Summary
Write-Host ""
Write-Host "=========================================" -ForegroundColor Cyan
Write-Host "📊 Verification Summary" -ForegroundColor Cyan
Write-Host "=========================================" -ForegroundColor Cyan
Write-Host ""
$passedChecks = ($allChecks | Where-Object { $_ -eq $true }).Count
$totalChecks = $allChecks.Count
Write-Host "Checks Passed: $passedChecks / $totalChecks" -ForegroundColor $(if ($passedChecks -eq $totalChecks) { "Green" } else { "Yellow" })
Write-Host ""
if ($passedChecks -eq $totalChecks) {
Write-Host "✅ ALL CHECKS PASSED!" -ForegroundColor Green
Write-Host ""
Write-Host "🔐 Your credentials are fully protected!" -ForegroundColor Green
Write-Host ""
Write-Host "Next Steps:" -ForegroundColor Cyan
Write-Host " 1. Create deploy-config.json from template" -ForegroundColor White
Write-Host " 2. Fill in your credentials" -ForegroundColor White
Write-Host " 3. Run .\deploy-local.ps1" -ForegroundColor White
Write-Host ""
Write-Host "Your credentials will NEVER be committed to Git! ✅" -ForegroundColor Green
}
else {
Write-Host "⚠️ SOME CHECKS FAILED" -ForegroundColor Yellow
Write-Host ""
Write-Host "Please review the warnings above." -ForegroundColor Yellow
Write-Host "Most warnings are informational and don't affect security." -ForegroundColor Gray
Write-Host ""
Write-Host "Critical issues (❌) should be fixed before proceeding." -ForegroundColor Yellow
}
Write-Host ""
Write-Host "=========================================" -ForegroundColor Cyan
Write-Host ""
# Return exit code
if ($passedChecks -lt $totalChecks - 1) {
exit 1
}
else {
exit 0
}