Complete reference for configuring and managing ProxyStack.
The main configuration file is proxystack.json in the ProxyStack root folder.
{
"settings": {
"httpPort": 80,
"httpsPort": 443,
"serverAdmin": "admin@localhost",
"environment": "development"
},
"sites": [...],
"apps": [...],
"security": {...},
"sentinel": {...}
}
GUI-specific settings are stored separately in proxystack.settings.json:
{
"autoStartApache": true,
"alertsEnabled": true,
"slackWebhook": "https://hooks.slack.com/services/...",
"alertEmail": "alerts@example.com"
}
Store profiles in profiles/ folder:
profiles/proxystack.development.jsonprofiles/proxystack.staging.jsonprofiles/proxystack.production.jsonSwitch profiles from the Security tab using the Environment dropdown.
{
"domain": "app.example.com",
"proxy": {
"target": "http://localhost:3000",
"timeout": 60,
"websocket": true
},
"ssl": {
"enabled": true,
"cert": "certs/app.example.com-crt.pem",
"key": "certs/app.example.com-key.pem"
},
"redirectHttpToHttps": true
}
{
"domain": "static.example.com",
"documentRoot": "sites/my-react-app/build",
"spaFallback": true,
"ssl": { "enabled": true, "cert": "...", "key": "..." }
}
{
"domain": "hybrid.example.com",
"documentRoot": "sites/frontend",
"spaFallback": true,
"proxyRoutes": [
{ "path": "/api", "target": "http://localhost:8000" },
{ "path": "/ws", "target": "ws://localhost:8001", "websocket": true }
],
"ssl": { "enabled": true, "cert": "...", "key": "..." }
}
proxystack.json are relative to the ProxyStack root folder. Use forward slashes: certs/cert.pem, not C:\ProxyStack\certs\cert.pem.| Field | Type | Description |
|---|---|---|
domain | string | Primary domain name |
aliases | string[] | Additional domain aliases |
proxy | object | Main reverse proxy target |
documentRoot | string | Static file directory |
proxyRoutes | array | Per-path proxy routes |
ssl | object | SSL certificate configuration |
redirectHttpToHttps | bool | Auto-redirect HTTP to HTTPS |
spaFallback | bool | Serve index.html for non-file routes |
{
"apps": [
{
"name": "My API",
"command": "npm run dev",
"workingDirectory": "apps/my-api",
"port": 3000,
"autoStart": true,
"autoRestart": true,
"subProcesses": [
{
"name": "Supabase",
"command": "npx supabase start",
"workingDirectory": null,
"port": 54321,
"autoStart": true
}
]
}
]
}
| Field | Type | Description |
|---|---|---|
name | string | Display name |
command | string | Command to run |
workingDirectory | string? | Working directory (inherits from parent if null) |
port | int | Port the sub-process listens on (0 if N/A) |
autoStart | bool | Start automatically with parent app |
All commands are launched with echo y | piped to stdin and npm_config_yes=true set in the environment to auto-accept prompts. Sub-processes start before the main command and are killed together when the app is stopped.
certs/Use the "Generate Self-Signed" option in the Certs tab. ProxyStack uses the bundled OpenSSL to create a certificate and key pair. Useful for local development.
When a site has SSL enabled but empty cert/key paths, ProxyStack automatically scans certs/ for matching files based on the domain name. Supported naming patterns:
{domain}-crt.pem, {domain}-cert.pem, {domain}.crt, {domain}-fullchain.pem{domain}-key.pem, {domain}.key, {domain}-privkey.pem{domain}-chain.pem, {domain}-chain-only.pemThe Docker tab provides comprehensive container management (requires Docker Desktop).
docker-compose.yml file.zip/.7z archives onto the Dashboard or Apps viewOne-click deploy for common services: NGINX, Apache, Caddy, PostgreSQL, MySQL, MongoDB, Redis, Node.js, Python, Go, Adminer, pgAdmin.
Real-time CPU usage, memory consumption, network I/O, and disk usage per container.
ProxyStack can manage a portable PostgreSQL instance without Docker.
postgres/ automatically| Path | Description |
|---|---|
postgres/pgsql/bin/ | PostgreSQL binaries |
postgres/data/ | Database data directory |
postgres/data/log/ | PostgreSQL logs |
Go to Advanced tab → Database Console. Enter connection details and execute SQL queries directly from the GUI.
{
"security": {
"enableHSTS": true,
"enableXFrameOptions": true,
"enableXContentTypeOptions": true,
"enableXXSSProtection": true,
"ipWhitelist": ["192.168.1.0/24"],
"ipBlacklist": ["10.0.0.5"]
}
}
ProxyStack automatically adds security headers to all HTTPS responses: X-Content-Type-Options, X-Frame-Options, and Referrer-Policy. Additional headers (HSTS, XSS Protection) can be enabled in the Security tab.
Configure IP whitelists and blacklists to restrict access to your sites.
The Secrets & Tools tab provides an encrypted vault for storing sensitive values like API keys, database passwords, and tokens.
Enable "Start ProxyStack with Windows" and "Auto-start Apache" in the Security tab to run ProxyStack as a background service.
The Compliance sidebar view provides automated checks against the OWASP Top 10 2025 standard.
| ID | Category | What ProxyStack Checks |
|---|---|---|
| A01 | Broken Access Control | IP whitelist/blacklist configuration |
| A02 | Cryptographic Failures | TLS enabled on all sites, valid cert paths |
| A03 | Injection | WAF rules for SQLi, XSS, command injection |
| A04 | Insecure Design | Security headers (HSTS, X-Frame-Options, etc.) |
| A05 | Security Misconfiguration | Default ports, directory listing, server tokens |
| A06 | Vulnerable Components | Apache version, module inventory |
| A07 | Auth Failures | API key auth enabled, team roles configured |
| A08 | Data Integrity | Update verification (SHA256), backup configuration |
| A09 | Logging Failures | Access/error logging enabled, log rotation |
| A10 | SSRF | Proxy target validation, internal network restrictions |
Click "Export Report" to save results as CSV or TXT. Reports include the score, each category's pass/fail status, and remediation suggestions.
The WAF sidebar view provides request filtering with 14 built-in rules and a custom rule editor. Rules set to Block are compiled into real inline firewall conditions and reject matching requests with a 403 before your site ever sees them — on both Nginx and Apache. A rule only falls back to detection-only if its specific pattern can't be safely compiled into that engine's config (see below); the WAF view's "Enforcement" column always shows the real, current status per rule.
| Rule | Pattern | Severity |
|---|---|---|
| SQL Injection | UNION SELECT, OR 1=1, DROP TABLE, etc. | Critical |
| XSS (Cross-Site Scripting) | <script>, javascript:, onerror=, etc. | High |
| Path Traversal | ../, ..\, /etc/passwd, etc. | High |
| Command Injection | ; ls, | cat, && rm, backticks, $(...), etc. | Critical |
| File Inclusion | php://, file://, data://, etc. | High |
| User-Agent Anomaly | Known scanner/attack tool user agents (sqlmap, nikto, nmap, etc.) | Medium |
| Rate Limit | Marker only — not pattern-based; use per-site Rate Limiting settings | Low |
| HTTP Header/Request Splitting | \r\n, %0d%0a in the request | High |
| XML External Entity (XXE) | <!ENTITY, SYSTEM, etc. (URI/headers only, not POST bodies) | High |
| SSRF | 169.254.169.254, localhost in params, etc. | High |
| Sensitive File Access | .env, .git, wp-config, .htpasswd, etc. | Medium |
| Scanner/Prober Path | /phpmyadmin, /wp-admin, /wp-login, etc. (logged, not blocked, by default) | Low |
| Log Injection | \n, \r in User-Agent/Referer aimed at forging log entries | Medium |
| Protocol Enforcement | Disallowed HTTP methods (TRACE, TRACK, CONNECT, DEBUG) | Medium |
Whichever mode is selected, each rule's own Enforcement status — shown live in the WAF view — tells you exactly whether that specific rule is inline enforced, detection-only, export-only (Rate Limit), or disabled/invalid. A rule can only be inline-enforced when its pattern compiles as a regex and doesn't hit an engine-specific limit: on Nginx, containing a "$" that Nginx would try to read as a variable; on Apache, mixing literal whitespace with a literal double-quote, which Apache's RewriteCond has no way to escape.
Click "+ Add Rule" to create rules with a name, category, regex pattern, match target (URI, query string, user agent, HTTP method, header, or remote IP), action, and severity. Custom rules are evaluated by the same engine as built-in rules, and get the same live Enforcement status.
Click "Test WAF Rule" to type in a sample method, path, query string, and user agent and see exactly what the real rule engine decides — allowed, detected, or blocked, and which rule(s) matched. This runs the same code path as live enforcement, so a passing test means the rule will actually behave that way in production.
Click "Export Rules" and choose the .conf format to generate a ModSecurity-compatible configuration file. This is an export only — ProxyStack does not load or run ModSecurity itself. The WAF view reports whether a ModSecurity module is actually detected on your Nginx/Apache installation, so you know upfront whether the exported file has anything to attach to.
The bottom panel reads real events from logs/waf-threats.jsonl — timestamp, source IP, site, matched rule(s), severity, and whether the request was blocked or only detected. Requests Nginx blocks inline appear here immediately (the block already happened; this is the record of it). Everything else is picked up by a background scan that tails your access logs every 60 seconds and re-checks them against the same rules. Rate-limit-category rules are not pattern-evaluated by this engine at all — use per-site Rate Limiting settings for real request-rate enforcement.
The Scanner sidebar view performs automated security assessments of your ProxyStack configuration.
| Type | Checks | Description |
|---|---|---|
| Quick Scan | 11 | Essential security checks: TLS, headers, permissions, secrets |
| Full Scan | 18 | Quick Scan + network ports, containers, database, advanced config |
Each finding is classified as Critical (red), High (orange), Medium (yellow), or Low/Info (blue). The overall security score (0–100) is weighted by severity.
Scan results are persisted to logs/security-scan.json and displayed in a scrollable list with severity icons and remediation guidance.
The Secrets Vault sidebar view provides DPAPI-encrypted storage for sensitive values.
All secrets are encrypted using Windows DPAPI (Data Protection API) with the CurrentUser scope. This means secrets can only be decrypted by the same Windows user account on the same machine. No master password is needed.
| Category | Use Case |
|---|---|
| General | Miscellaneous secrets |
| Database | Connection strings, passwords |
| API Key | Third-party API keys |
| OAuth | Client IDs, client secrets, tokens |
| SSL/TLS | Certificate passphrases, PFX passwords |
| Cloud | AWS, Azure, GCP credentials |
| Service | Service account credentials |
| Internal | Internal system secrets |
.env file for use in applicationsSecrets are stored in config/secrets.json as DPAPI-encrypted base64 strings. The file is safe to back up but cannot be decrypted on a different machine or user account.
The Reports sidebar view generates evidence-based compliance reports against 4 major frameworks.
| Framework | Controls | Description |
|---|---|---|
| SOC2 Type II | 9 | Security, availability, processing integrity controls |
| GDPR | 6 | Data protection articles (encryption, access control, logging) |
| PCI-DSS v4.0 | 8 | Payment card industry requirements (firewall, encryption, access) |
| HIPAA | 5 | Health data safeguards (access, audit, integrity, transmission) |
| All Frameworks | 28 | Runs all checks from all frameworks at once |
The Zero Trust sidebar view configures mutual TLS (mTLS), certificate-based authentication policies, and network segmentation.
As of v14.6.1, mTLS is actually enforced on both Nginx and Apache installs — checking "Enable mTLS" + "Require client certificate" with a valid CA cert path emits real client-cert-verification directives (ssl_client_certificate/ssl_verify_client on Nginx, SSLCACertificateFile/SSLVerifyClient require on Apache) into every HTTPS site's generated config. It applies globally to all HTTPS sites (the config has no per-site scoping). Certificate Auth Policies and Network Segmentation, described below, are also enforced as of v14.6.1 — both apply site-wide rather than honoring the policy's Target path or a zone's allowed-ports field, since neither maps cleanly onto the generated config structure. The "Export Apache Config" button still exists for producing a standalone reference file, but Apache installs no longer need it to get real enforcement.
Define certificate-based authentication rules. Each policy specifies a match type and value:
| Match Type | Description | Example |
|---|---|---|
| CN (Common Name) | Match the certificate's Common Name | api-client-01 |
| OU (Org Unit) | Match the certificate's Organizational Unit | Engineering |
| Issuer | Match the certificate's issuer CN | ProxyStack CA |
| Fingerprint | Match the certificate's SHA256 fingerprint | AB:CD:EF:... |
| SAN (Subject Alt Name) | Match a Subject Alternative Name | client.example.com |
Enforced on both engines once mTLS is enabled, except SAN Match, which is Apache-only — stock Nginx has no variable exposing a client cert's SAN entries. OU Match has no dedicated Nginx variable either, so it falls back to a substring check against the full subject DN there. Policies apply site-wide; the Target field isn't used to scope enforcement to a specific path.
Define network zones with CIDR ranges, allowed ports, and traffic direction (inbound/outbound/both). Inbound and Both zones are enforced as an IP allow-list on both engines, merged with the Security tab's IP whitelist. Outbound zones are not enforced — they describe traffic the server itself initiates, which no request-time access-control directive can restrict. The allowed-ports field is stored but not yet used to scope enforcement to specific ports.
A dynamic trust score (0–100) is calculated based on: mTLS enabled (+30), CA cert configured (+15), server cert configured (+15), client verification set to "require" (+15), auth policies defined (+15), segmentation zones defined (+10). As of v14.6.1 every factor corresponds to something actually enforced.
Click "Export Apache Config" to generate a .conf file with SSLVerifyClient, SSLRequire directives, and IP-based <Location> blocks for network segmentation.
All Zero Trust settings are persisted to config/zero-trust.json:
{
"mTLS": {
"enabled": true,
"caCertPath": "certs/zero-trust-ca.pem",
"serverCertPath": "certs/zero-trust-server.pem",
"serverKeyPath": "certs/zero-trust-server-key.pem",
"clientVerification": "require",
"verifyDepth": 2
},
"authPolicies": [...],
"segmentationZones": [...]
}
Security Center (Enterprise tier) is a single view aggregating every security signal ProxyStack has: WAF, SentinelAI, Cluster node health, Microsoft Defender, ClamAV, Headscale VPN, Process Reputation, Local Network Exposure, and the AI Runtime Manager, into one set of status cards and one unified threat timeline. It doesn't replace the individual views (WAF, SentinelAI, Cluster, AI Runtime) - it reads the same real data they already produce and shows it in one place. Every card maps to a real provider call; an unreachable or not-installed provider is shown honestly as such, never hidden.
Monitors every ProxyStack-managed app (Apps view) and its actual child/grandchild processes via a live Windows process-tree walk - not a simulation, and not a general "scan any file" tool. Built in 5 phases, all real as of v14.11.0-14.12.0:
Process Reputation is not a cloud-based instant-verdict service like some antivirus "unknown file" features - everything runs locally and in real time (a scan/detonation completes in seconds, not hours), and it doesn't require IAMVC to operate cloud sandbox infrastructure.
Local LLM hosting as a first-class managed deployment - not a separate tool bolted on, and not a fake UI. ProxyStack scans your hardware, recommends models that will actually run well on it, detects or installs a runtime, downloads a hash-verified model, and starts a real local OpenAI-compatible endpoint you manage the same way as a Site or App: Start/Stop/Restart, live health checks, logs, and a per-deployment API key. Available in the GUI's "AI Runtime" sidebar view and via proxystack ai ... in the CLI, on Windows and Linux.
nvidia-smi, AMD/Intel via Windows device enumeration), plus Docker/WSL2/Vulkan availability.A small, hand-curated list rather than open Hugging Face browsing - every entry's SHA256, file size, license, and context length is verified against the real source before it's added. Covers every practical tier: a tiny/fastest option for constrained hardware, small 1.5-3B general models, 7B-class general models (two different ones, for comparison), a dedicated code-generation model at two sizes, and 9B/14B-class larger models for when you have the RAM/VRAM to spare.
Security Center's AI Runtime provider watches every deployment for real misconfiguration: a server bound to all network interfaces instead of just localhost (and separately, whether it's actually reachable on the network right now, not just configured that way); an API key that's configured but not actually being enforced by the running server (checked with a genuine test request, not just "is a key present in the vault"); a deployment marked "running" whose process has actually died; an unusually large log file; orphaned duplicate server processes; and a few other real, checked conditions - each finding comes with a plain-language explanation and a concrete fix, the same as every other Security Center finding.
If you already run Ollama, ProxyStack detects it (installed-but-not-running vs. actually running, not just "found or not") and can list, pull, and unload its models directly from the same view - no separate tool needed.
Enable the API from Security tab → "Enable REST API (port 9090)". 20 endpoints with CORS support, rate limiting (60 req/min), and API key authentication.
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/status | Apache status, version, uptime |
| GET | /api/config | Configuration summary (settings, site count, app count) |
| GET | /api/health | Health check for all services |
| GET | /api/version | ProxyStack version and API version |
| GET | /api/sites | List all configured sites |
| GET | /api/apps | List all configured apps |
| POST | /api/apache/start | Start Apache |
| POST | /api/apache/stop | Stop Apache |
| POST | /api/apache/restart | Restart Apache |
| GET | /api/monitoring/system | CPU, memory, disk usage |
| GET | /api/monitoring/services | Apache, PostgreSQL, License API status |
| GET | /api/plugins | List installed plugins |
| GET | /api/plugins/marketplace | List available marketplace plugins |
| GET | /api/docker/status | Docker container listing |
| GET | /api/cluster/info | Cluster ID, node count, primary node |
| GET | /api/cluster/nodes | List all cluster nodes with health status |
| POST | /api/cluster/promote | Persist a role change during cluster failover |
| POST | /api/cluster/mesh/invite | Generate a real Headscale preauth key on the inviting node |
| POST | /api/cluster/mesh/join | Install the ProxyStackVPN client (Full edition; Lite falls back to the official Tailscale client) if needed, and join the VPN mesh using the invite's key. Cross-platform as of v14.17.0 (Windows GUI and Linux/macOS via proxystack serve) - live-verified on Linux via a real WSL2 node join. |
| POST | /api/config/sync | Receive config push from primary node (with backup) |
For production use, enable API key authentication in the Production tab. Include the header X-API-Key: your-key with all requests.
# PowerShell
Invoke-RestMethod -Uri "http://localhost:9090/api/status"
Invoke-RestMethod -Uri "http://localhost:9090/api/apache/restart" -Method POST
# curl
curl http://localhost:9090/api/health
curl -X POST http://localhost:9090/api/apache/restart
# Node.js
const res = await fetch('http://localhost:9090/api/status');
const status = await res.json();
All endpoints return JSON. Errors include an error field. HTTP status codes: 200 (success), 401 (unauthorized), 404 (not found), 500 (internal error).
Built-in alerts monitor the ProxyStack web server (Nginx/Apache) itself — no plugin required. For broader monitoring (individual sites, certificate expiry, daily summaries), see the Plugin Marketplace starter plugins below.
| Channel | Setup |
|---|---|
| Slack | Enter your Slack Incoming Webhook URL in Settings → Alerts & Notifications |
| Discord | Enter your Discord webhook URL in the same section — posts a rich embed card, not just plain text |
Default 5-minute cooldown prevents alert spam for flapping services. Settings changes take effect on the next check without restarting the app.
Click "Test Alert" in Settings to send a sample message to whichever channels you've configured, without waiting for a real event.
ProxyStack plugins are real scripts that run on lifecycle hooks — not just manifest entries. Browse and one-click install from the hosted marketplace, or install your own .zip package, in the Advanced tab. Requires Pro license to install.
A plugin is a folder containing a plugin.json manifest and an entry script (.ps1, .py, .cmd/.bat, or .exe). The manifest declares which lifecycle events it runs on:
| Hook | Fires when… |
|---|---|
server.started | Nginx/Apache successfully starts |
server.stopped | Nginx/Apache stops |
config.changed | A site or app is added, edited, or removed |
schedule.tick | Every 5 minutes, regardless of other activity |
Each run gets a 20-second timeout and its output is appended to plugins/<slug>/plugin.log. One plugin failing or hanging never blocks another plugin or the app itself.
| Plugin | Hooks | Description |
|---|---|---|
| Uptime Pinger | schedule.tick | Pings every configured site over HTTP/HTTPS every 5 minutes and logs status + response time |
| Cert Expiry Notifier | schedule.tick | Scans certs/ and warns when any certificate is within 14 days of expiring |
| Deploy Webhook Notifier | server.started, config.changed | Posts to a Slack or Discord webhook (configured in the plugin's own config.json) when the server restarts or config changes |
| Brute-Force IP Blocker | schedule.tick | Scans the access log for IPs racking up errors or probing scanner paths and blocks them via Windows Firewall. Ships in dry-run (log-only) mode. |
| Config Version History | config.changed | Auto-commits proxystack.json to a local git repo on every change — free diffable rollback history |
| Daily Ops Digest | schedule.tick | Once every 24 hours, posts a Slack/Discord summary of site count, soonest cert expiry, disk space, and recent error rate |
Release verification uses scripts\test-plugin-marketplace.ps1 to confirm every catalog ZIP exists and matches its advertised size and SHA256 hash before publishing.
.zip is the real plugin format: it must contain plugin.json at its root, referencing an entry file that ProxyStack can execute. A standalone .dll can be imported too, but since it has no manifest and nothing to invoke it, it's stored under plugins/ for reference only and won't run automatically.
Each installed plugin lives in its own directory under plugins/, containing plugin.json, the entry script, and (once it has run at least once) plugin.log.
The Cluster sidebar view enables multi-server management from a single dashboard. Requires Enterprise license.
Manage multiple ProxyStack instances (nodes) from one primary node. Each node runs its own REST API on port 9090, and the primary node pings remote nodes for health status.
http://192.168.1.100:9090), and role (secondary/standby/worker)| Role | Description |
|---|---|
| Primary | The current machine — always shown first, cannot be removed |
| Secondary | Active replica receiving config syncs |
| Standby | Passive replica for failover |
| Worker | Load-balanced worker node |
Click "Health Check All" to ping every node's /api/status endpoint. Results show Online/Offline status, web server state (Nginx/Apache), and version. Auto-refresh runs every 30 seconds.
proxystack.json is pushed to the remote node via POST /api/config/syncEnable "Auto-Failover" to monitor nodes every 15 seconds. After 3 consecutive failures on a primary node, ProxyStack automatically promotes a standby node and notifies it via POST /api/cluster/promote.
Zero-downtime config deployment in 4 steps:
Select any remote node and click "Promote" to make it the new primary. All current primaries are demoted to secondary. The promoted node is notified via its API.
Cluster nodes are stored in config/cluster-nodes.json:
{
"clusterId": "MY-PC",
"updatedAt": "2026-02-12T...",
"nodes": [
{ "Id": "a1b2c3d4", "Name": "web-server-2", "Url": "http://192.168.1.100:9090", "Role": "secondary" }
]
}
Deploy ProxyStack CLI to cloud servers (AWS EC2, DigitalOcean, etc.) and manage them from the GUI Cluster view.
Use the cloud-init script as EC2 User Data for fully automated provisioning:
#!/bin/bash
curl -sL https://proxystack.iamvcholdings.com/cloud/setup.sh | sudo bash
This installs Nginx, ProxyStack CLI, configures UFW firewall (ports 22/80/443/9090), and sets up systemd services.
curl -sL https://proxystack.iamvcholdings.com/downloads/proxystack-cli-v14.19.0-linux-x64.tar.gz -o proxystack.tar.gz
sudo mkdir -p /opt/proxystack
sudo tar xzf proxystack.tar.gz -C /opt/proxystack
sudo chmod +x /opt/proxystack/proxystack
sudo ln -sf /opt/proxystack/proxystack /usr/local/bin/proxystack
sudo proxystack serve --port 9090
sudo tee /etc/systemd/system/proxystack-api.service <<EOF
[Unit]
Description=ProxyStack API Server
After=network.target nginx.service
[Service]
Type=simple
ExecStart=/opt/proxystack/proxystack serve --port 9090
WorkingDirectory=/opt/proxystack
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable proxystack-api
sudo systemctl start proxystack-api
http://YOUR_IP:9090serve CommandThe proxystack serve command starts a lightweight HTTP API server that responds to cluster health checks from the GUI:
| Endpoint | Method | Description |
|---|---|---|
/api/status | GET | Node status (version, web server, hostname, uptime) |
/api/health | GET | Simple health check |
/api/config | GET | Current proxystack.json config |
/api/sites | GET | Configured sites list |
/api/cluster/info | GET | Cluster role, version, node count |
/api/cluster/promote | POST | Receive promotion notification |
/api/config/sync | POST | Receive config sync from primary |
| Command | Description |
|---|---|
proxystack cloud deploy <host> | Deploy ProxyStack to a remote server via SSH |
proxystack cloud status <host> | Check remote node health and version |
proxystack cloud setup-script | Print the cloud-init setup script for Ubuntu |
To update a remote node to the latest version:
# SSH into the node
ssh ubuntu@YOUR_IP
# Download the latest version
curl -sL https://proxystack.iamvcholdings.com/downloads/proxystack-cli-v14.19.0-linux-x64.tar.gz -o /tmp/proxystack-update.tar.gz
# Stop the API service, extract, restart
sudo systemctl stop proxystack-api
sudo tar xzf /tmp/proxystack-update.tar.gz -C /opt/proxystack --overwrite
sudo chmod +x /opt/proxystack/proxystack
sudo systemctl start proxystack-api
# Verify
proxystack --version
curl -s http://localhost:9090/api/health
The update preserves your proxystack.json config. The API server restarts automatically via systemd.
The Team tab manages a list of named users, each with a free-text role (typically Administrator, User, or ReadOnly), stored in team.json.
An "Acting as" dropdown selects which team member the app is currently acting on behalf of. Once a team is configured and an "Acting as" user is selected, destructive/admin actions require the Administrator role (case-insensitive): removing sites/apps, revealing secrets, deactivating a license, Docker lifecycle/removal/prune actions, managed import rollback, plugin install/enable/disable/remove, certificate generation/import/ACME requests, Zero Trust policy/zone removal, and automatic Process Reputation enforcement changes.
This is opt-in and backward-compatible: if no team is configured, or no "Acting as" user is selected, nothing is restricted — a single-user install is never locked out. Enforcement only begins once you explicitly set up team members and pick a non-admin "Acting as" user. No other actions in the app are currently role-gated.
Service start/stop and config-related actions taken through the Team tab itself are recorded with timestamp, user, and action. This is a local activity log, not a comprehensive audit trail of every action across the app.
ProxyStack v14.11.0 has 22 sidebar views in the modern dark-themed GUI. Launch with --classic flag for the legacy tabbed interface.
| # | View | Tier | Purpose |
|---|---|---|---|
| 1 | Dashboard | Free | Start/Stop Apache, status cards, quick actions, update checker with SHA256 verification |
| 2 | Sites | Free | Add/edit/remove domains, proxy targets, SSL settings, SPA fallback, per-path proxy routes |
| 3 | Apps | Free | Backend process manager with sub-processes, auto-restart, health checks |
| 4 | PostgreSQL | Free | Start/stop/restart PostgreSQL, database list, create/drop, SQL query runner |
| 5 | Docker | Free | Container management, Compose, image pull, container templates, resource monitoring |
| 6 | Certificates | Free | SSL certificate management, Let's Encrypt via win-acme, self-signed generation via OpenSSL |
| 7 | Monitor | Free | Real-time CPU/RAM/Disk metrics, service health checks, alert thresholds |
| 8 | Security | Free | Security headers, IP whitelist/blacklist, REST API toggle, auto-start, environment profiles |
| 9 | Compliance | Free | OWASP Top 10 2025 dashboard, 10 automated checks, security score 0–100, CSV/TXT export |
| 10 | WAF | Free | Web Application Firewall, 14 built-in rules, custom rules, 3 modes, ModSecurity export, threat log |
| 11 | Scanner | Free | Security Scanner, Quick (11) + Full (18) checks, severity breakdown, async with progress |
| 12 | Secrets Vault | Free | DPAPI-encrypted vault, 8 categories, auto-hide reveal, clipboard clear, rotation, .env export |
| 13 | Reports | Pro | Compliance Reporting: SOC2 (9), GDPR (6), PCI-DSS (8), HIPAA (5) = 28 checks, CSV/TXT export |
| 14 | Zero Trust | Enterprise | mTLS (enforced on Nginx and Apache as of v14.6.1), CA/server cert generation, cert auth policies (enforced, site-wide), network segmentation (enforced, site-wide), trust score |
| 15 | SentinelAI | Pro | Connect to SentinelAI dashboard, view agents, threats, launch Windows agent |
| 16 | Team | Pro | Team roster + roles, opt-in RBAC enforcement on destructive actions (v14.6.0+), .psxt template sharing |
| 17 | Observability | Pro | Real request rate/error rate parsed from live Nginx access logs; latency percentiles shown when computable, honestly "n/a" otherwise (see Proof Status) |
| 18 | Advanced | Free | Request rewriting, HTTP caching, API gateway, plugin marketplace (Pro to install), database console |
| 19 | Cluster | Enterprise | Multi-server node management, health checks, config sync, auto-refresh |
| 20 | Security Center | Enterprise | Unified provider status + threat timeline across WAF, SentinelAI, Cluster, Microsoft Defender, ClamAV, Headscale VPN, and Process Reputation (real process monitoring, reputation lookup, sandbox detonation, and policy enforcement as of v14.11.0) |
| 21 | Logs | Free | Apache access/error logs, per-site logs, log file viewer |
| 22 | Settings | Free | Application settings, theme toggle, auto-start configuration |
ProxyStack includes a built-in update system that checks for new versions and applies updates while preserving your data.
https://proxystack.iamvcholdings.com/api/updates/latest_update_backup/The following files and folders are never overwritten:
proxystack.json, proxystack.settings.json, team.json, plugins.jsoncerts/, logs/, backups/, profiles/, sites/config/ (secrets, zero-trust settings, WAF rules)postgres/data/ (database data)If the update fails, the updater automatically restores from _update_backup/. You can also manually restore by copying the backup files back.
The update checker accepts self-signed SSL certificates and falls back to HTTP if HTTPS fails, ensuring connectivity even behind corporate proxies or firewalls.
| File/Folder | Purpose |
|---|---|
proxystack.json | Main configuration |
proxystack.settings.json | GUI settings |
team.json | Users and audit log |
plugins.json | Installed plugins list |
config/httpd.conf | Generated Apache config |
config/vhosts.conf | Generated virtual hosts |
config/zero-trust.json | Zero Trust mTLS, auth policies, segmentation zones |
config/secrets.json | DPAPI-encrypted secrets vault |
certs/ | SSL certificates (including Zero Trust CA/server certs) |
logs/ | Apache and application logs |
logs/security-scan.json | Security Scanner results |
backups/ | Configuration backups |
profiles/ | Environment profiles |
sites/ | Static site files |
plugins/ | Plugin configuration files |
postgres/ | Portable PostgreSQL (Full edition) |
apache/ | Bundled Apache binaries |
win-acme/ | Let's Encrypt ACME client |
sentinel/ | SentinelAI agent files |
netstat -ano | findstr :80logs/error.logtaskkill /F /IM httpd.exenslookup yourdomain.comdocker --version and docker psnetstat -ano | findstr :5432postgres/pgsql/bin/pg_ctl.exe existspostgres/data/log/ for errorscurl http://localhost:9090/api/statuslogs/access.loglogs/error.loglogs/{domain}-access.log, logs/{domain}-error.logpostgres/data/log/