mirror of
https://github.com/DeNNiiInc/Web-Page-Performance-Test.git
synced 2026-04-22 05:46:00 +00:00
Cleanup diagnostic files and update deployment script
This commit is contained in:
@@ -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:
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
**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!** 🚀
|
|
||||||
@@ -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 ✅*
|
|
||||||
@@ -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.
|
|
||||||
@@ -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!** 🔐
|
|
||||||
@@ -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 ""
|
||||||
|
|||||||
100
fix-nginx.sh
100
fix-nginx.sh
@@ -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
|
|
||||||
@@ -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
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user