Contents

Configuration

The main configuration file is proxystack.json in the ProxyStack root folder.

Structure

{
  "settings": {
    "httpPort": 80,
    "httpsPort": 443,
    "serverAdmin": "admin@localhost",
    "environment": "development"
  },
  "sites": [...],
  "apps": [...],
  "security": {...},
  "sentinel": {...}
}

Settings File

GUI-specific settings are stored separately in proxystack.settings.json:

{
  "autoStartApache": true,
  "alertsEnabled": true,
  "slackWebhook": "https://hooks.slack.com/services/...",
  "alertEmail": "alerts@example.com"
}

Environment Profiles

Store profiles in profiles/ folder:

Switch profiles from the Security tab using the Environment dropdown.

Site Configuration

Reverse Proxy Site

{
  "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
}

Static Site with SPA Fallback

{
  "domain": "static.example.com",
  "documentRoot": "sites/my-react-app/build",
  "spaFallback": true,
  "ssl": { "enabled": true, "cert": "...", "key": "..." }
}

Hybrid Site (Static + Proxy Routes)

{
  "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": "..." }
}
All paths in proxystack.json are relative to the ProxyStack root folder. Use forward slashes: certs/cert.pem, not C:\ProxyStack\certs\cert.pem.

Site Fields

FieldTypeDescription
domainstringPrimary domain name
aliasesstring[]Additional domain aliases
proxyobjectMain reverse proxy target
documentRootstringStatic file directory
proxyRoutesarrayPer-path proxy routes
sslobjectSSL certificate configuration
redirectHttpToHttpsboolAuto-redirect HTTP to HTTPS
spaFallbackboolServe index.html for non-file routes

App Configuration

{
  "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
        }
      ]
    }
  ]
}

Sub-Processes

FieldTypeDescription
namestringDisplay name
commandstringCommand to run
workingDirectorystring?Working directory (inherits from parent if null)
portintPort the sub-process listens on (0 if N/A)
autoStartboolStart 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.

SSL & Certificates

Let's Encrypt (Free Certificates)

  1. Go to Certs tab
  2. Click "Let's Encrypt"
  3. Enter your domain and email
  4. ProxyStack stops Apache, runs win-acme for HTTP-01 validation, then restarts Apache
  5. Certificate files are saved to certs/
Your domain's DNS must point to this server, and port 80 must be accessible from the internet for HTTP-01 validation.

Self-Signed Certificates

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.

Auto-Detection

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:

Docker Integration

The Docker tab provides comprehensive container management (requires Docker Desktop).

Container Management

Image Management

Docker Compose

Container Templates

One-click deploy for common services: NGINX, Apache, Caddy, PostgreSQL, MySQL, MongoDB, Redis, Node.js, Python, Go, Adminer, pgAdmin.

Resource Monitoring

Real-time CPU usage, memory consumption, network I/O, and disk usage per container.

Portable PostgreSQL

ProxyStack can manage a portable PostgreSQL instance without Docker.

First Time Setup

  1. Click "Start PostgreSQL" in the Docker tab
  2. If not installed, you'll be prompted to download (~300 MB)
  3. PostgreSQL extracts to postgres/ automatically
  4. Database initializes on first run

Paths

PathDescription
postgres/pgsql/bin/PostgreSQL binaries
postgres/data/Database data directory
postgres/data/log/PostgreSQL logs

Database Console

Go to Advanced tab → Database Console. Enter connection details and execute SQL queries directly from the GUI.

Security Features

{
  "security": {
    "enableHSTS": true,
    "enableXFrameOptions": true,
    "enableXContentTypeOptions": true,
    "enableXXSSProtection": true,
    "ipWhitelist": ["192.168.1.0/24"],
    "ipBlacklist": ["10.0.0.5"]
  }
}

Security Headers

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.

IP Access Control

Configure IP whitelists and blacklists to restrict access to your sites.

Encrypted Secrets Vault

The Secrets & Tools tab provides an encrypted vault for storing sensitive values like API keys, database passwords, and tokens.

Auto-Start on Boot

Enable "Start ProxyStack with Windows" and "Auto-start Apache" in the Security tab to run ProxyStack as a background service.

REST API Reference

Enable the API from Security tab → "Enable REST API (port 9090)".

Endpoints

MethodEndpointDescription
GET/api/statusApache status and version
GET/api/healthHealth check for all services
GET/api/configConfiguration summary
GET/api/sitesList all configured sites
GET/api/appsList all configured apps
POST/api/apache/startStart Apache
POST/api/apache/stopStop Apache
POST/api/apache/restartRestart Apache
GET/api/certsSSL certificate status
GET/api/metricsPerformance metrics
POST/api/backupTrigger manual backup
GET/api/pluginsList installed plugins

Authentication

For production use, enable API key authentication in the Production tab. Include the header X-API-Key: your-key with all requests.

Usage Examples

# 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();

Error Handling

All endpoints return JSON. Errors include an error field. HTTP status codes: 200 (success), 401 (unauthorized), 404 (not found), 500 (internal error).

Alerts & Notifications

Supported Channels

ChannelSetup
SlackEnter Slack Incoming Webhook URL in Security tab
EmailConfigure SMTP settings in proxystack.settings.json

Alert Types

Cooldown

Default 5-minute cooldown prevents alert spam for flapping services. Each service has an independent cooldown timer.

Plugins

Extend ProxyStack with plugins from the Plugin Marketplace (Advanced tab).

Managing Plugins

  1. Go to Advanced tab → Plugin Marketplace
  2. Click "Install Plugin" to add a new plugin
  3. Click "Configure" to set up plugin-specific settings
  4. Reload Apache config to apply plugin changes

Plugin Configuration

Plugin configs are stored as JSON files in the plugins/ directory. Each plugin has its own configuration schema.

Team & Roles

The Team tab supports multi-user access with role-based permissions.

User Roles

RolePermissions
AdminFull access to all features
DeveloperManage sites, apps, and configuration
OperatorStart/stop services, view logs
ViewerRead-only access

Audit Log

All actions (site changes, config updates, service starts/stops) are recorded in the audit log with timestamp, user, action, and details. Stored in team.json.

GUI Tabs Overview

TabPurpose
DashboardStart/Stop Apache, status cards, quick actions, update checker
LogsReal-time Apache access and error log viewer
ConfigEdit proxystack.json directly, validate configuration
SitesAdd/edit/remove domains, proxy targets, SSL settings
CertsSSL certificate management, Let's Encrypt, self-signed generation
AppsBackend process manager with sub-processes
DockerContainer management, Compose, PostgreSQL, templates
MonitorCPU/RAM/Disk monitoring, service health checks
SecurityHeaders, IP lists, REST API, auto-start, environment profiles
Secrets & ToolsEncrypted vault, Port Scanner
ProductionBackups, rate limiting, SSL expiry monitoring, remote management
TeamUsers, roles, audit log
ObservabilityRequest tracing, metrics, service dependency graph
AdvancedRewriting, caching, API gateway, plugins, database console

File Locations

File/FolderPurpose
proxystack.jsonMain configuration
proxystack.settings.jsonGUI settings
team.jsonUsers and audit log
plugins.jsonInstalled plugins list
config/httpd.confGenerated Apache config
config/vhosts.confGenerated virtual hosts
certs/SSL certificates
logs/Apache and application logs
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

Troubleshooting

Apache won't start

Apache won't stop

Let's Encrypt fails

Docker not found

PostgreSQL won't start

REST API not responding

Logs Location