Files
firefrost-operations-manual/docs/tasks/modpack-version-checker/DEPLOYMENT-GUIDE.md
Claude (Chronicler #47) cfa838e86a feat: modpack version checker dashboard + PHP proxy (v1.0)
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
2026-03-29 14:10:47 +00:00

3.9 KiB

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:

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

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

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

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.