WHAT WAS DONE: - Built browser dashboard (dashboard.html) showing installed vs latest version for all Pterodactyl game servers - Built PHP proxy (proxy.php + config.php) for Billing VPS deployment - Created isolated Nginx server block (version-proxy.conf) - Created full deployment guide (DEPLOYMENT-GUIDE.md) ARCHITECTURE: - PHP proxy at /var/www/version-proxy on Billing VPS (38.68.14.188) - Isolated from Paymenter/Laravel routing — separate directory + port - API keys (Pterodactyl ptlc_, CurseForge) live server-side only - FTB packs: fully automatic via .manifest.json + FTB public API - CurseForge packs: reads manifest.json, needs CF Project ID + API key - config.php blocked from direct web access via Nginx PENDING AT DEPLOYMENT: - Verify port 8080 is free (ss -tlnp) before enabling Nginx block - Fill real API keys into config.php on server - Enter CurseForge Project IDs for CF packs (saved in localStorage) COLLABORATION: - PHP proxy architecture designed by Gemini (consultation session 2026-03-29) - Dashboard HTML and detection logic by Chronicler #47 - Gemini identified Laravel routing conflict and content-type gotcha WHY: - Interim solution before full Blueprint extension (post-launch) - Hands-off modpack update monitoring for staff - Zero manual checking required after initial CF Project ID setup Signed-off-by: claude@firefrostgaming.com
127 lines
3.9 KiB
Markdown
127 lines
3.9 KiB
Markdown
# Modpack Version Checker — Deployment Guide
|
|
|
|
**Status:** READY TO DEPLOY
|
|
**Created:** 2026-03-29
|
|
**Created By:** Chronicler #47 + Gemini (architecture consultation)
|
|
**Prerequisite:** PHP proxy must be deployed before the dashboard will work
|
|
|
|
---
|
|
|
|
## Overview
|
|
|
|
A browser-based dashboard that automatically checks all Pterodactyl game servers for modpack version status (up to date vs update available). Uses a PHP proxy on the Billing VPS to handle API calls securely — no API keys in the browser.
|
|
|
|
**Platforms supported:**
|
|
- FTB — fully automatic (reads `.manifest.json`, compares against FTB public API)
|
|
- CurseForge — reads installed version from `manifest.json`; needs CF Project ID entered once per pack + CurseForge API key in `config.php`
|
|
- Modrinth — detects installed version; latest version lookup TBD
|
|
|
|
---
|
|
|
|
## Files
|
|
|
|
| File | Purpose |
|
|
|------|---------|
|
|
| `dashboard.html` | The browser dashboard — can be hosted anywhere |
|
|
| `proxy/proxy.php` | PHP proxy — deploy to Billing VPS |
|
|
| `proxy/config.php` | API keys config — deploy to Billing VPS, fill in real keys |
|
|
| `proxy/version-proxy.conf` | Nginx server block — deploy to Billing VPS |
|
|
|
|
---
|
|
|
|
## Deployment Steps
|
|
|
|
### Step 1: Verify Port 8080 is Free
|
|
|
|
SSH to Billing VPS and run:
|
|
|
|
```bash
|
|
ss -tlnp | grep 8080
|
|
```
|
|
|
|
If 8080 is taken, pick 8081 or 8090. Update the port in:
|
|
- `version-proxy.conf` (`listen 8080;`)
|
|
- `dashboard.html` (`const PROXY_URL = ...`)
|
|
|
|
### Step 2: Create Proxy Directory
|
|
|
|
```bash
|
|
sudo mkdir -p /var/www/version-proxy
|
|
sudo chown -R www-data:www-data /var/www/version-proxy
|
|
```
|
|
|
|
### Step 3: Upload Proxy Files
|
|
|
|
Copy `proxy.php` and `config.php` to `/var/www/version-proxy/` on the Billing VPS.
|
|
|
|
### Step 4: Fill In Real Keys
|
|
|
|
Edit `/var/www/version-proxy/config.php` with real values:
|
|
- `panel_key` — Pterodactyl client API key (`ptlc_NDkYX6yPPBHZacPmViFWtl4AvopzgxNcnHoQTOOtQEl`)
|
|
- `cf_key` — CurseForge API key (get from https://console.curseforge.com)
|
|
|
|
### Step 5: Enable Nginx Config
|
|
|
|
```bash
|
|
sudo cp version-proxy.conf /etc/nginx/sites-available/version-proxy.conf
|
|
sudo ln -s /etc/nginx/sites-available/version-proxy.conf /etc/nginx/sites-enabled/
|
|
sudo nginx -t
|
|
sudo systemctl reload nginx
|
|
```
|
|
|
|
### Step 6: Open Firewall Port
|
|
|
|
```bash
|
|
sudo ufw allow 8080/tcp
|
|
```
|
|
|
|
(Change 8080 to whichever port you confirmed is free.)
|
|
|
|
### Step 7: Test the Proxy
|
|
|
|
Open in browser:
|
|
```
|
|
http://38.68.14.188:8080/proxy.php?action=servers
|
|
```
|
|
|
|
Should return JSON list of your Pterodactyl servers.
|
|
|
|
### Step 8: Open the Dashboard
|
|
|
|
Open `dashboard.html` in any browser and click **Check All**.
|
|
|
|
---
|
|
|
|
## CurseForge Pack IDs
|
|
|
|
For packs without automatic version detection, enter the CurseForge Project ID in the card's input field. The dashboard saves these in browser localStorage so you only enter them once.
|
|
|
|
Known packs on your servers:
|
|
|
|
| Server | Pack | CF Project ID |
|
|
|--------|------|---------------|
|
|
| Mythcraft 5 - NC | MYTHCRAFT 5 | (find on CurseForge) |
|
|
| Ars Eclectica - TX | Ars Eclectica | (find on CurseForge) |
|
|
| Create Plus - TX | Create V0.9.0 | (find on CurseForge) |
|
|
| Society: Sunlit Valley - TX | Society: Sunlit Valley | (find on CurseForge) |
|
|
|
|
ATM10, ATM Sky, All The Mons — no version manifest detected on disk. Version will show "Not detected" until a manifest file exists.
|
|
|
|
---
|
|
|
|
## Architecture Notes
|
|
|
|
- PHP proxy lives at `/var/www/version-proxy/` — **isolated from Paymenter's Laravel routing**
|
|
- `config.php` is blocked from direct web access via Nginx (`location = /config.php { deny all; }`)
|
|
- FTB API calls are made directly from the browser (public API, no CORS issues)
|
|
- All Pterodactyl and CurseForge calls go through the proxy (API keys never reach the browser)
|
|
- CurseForge Project IDs stored in browser localStorage (persist between sessions)
|
|
|
|
---
|
|
|
|
## Revision History
|
|
|
|
| Version | Date | Author | Notes |
|
|
|---------|------|--------|-------|
|
|
| 1.0 | 2026-03-29 | Chronicler #47 + Gemini | Initial build. PHP proxy architecture by Gemini. Dashboard HTML by Chronicler #47. |
|