Changelog
All notable changes to the Open PaaS project will be documented in this file.
[1.4.1] - 2026-06-17
Fixed
- CSRF Token Cookie Propagation: Corrected the
Set-Cookieparsing regex within the server-side fetch proxy (fetchBackend) to properly support space-separated header values (,). This ensures thecsrf_tokencookie is correctly parsed, stored in the browser, and sent back in headers for mutating requests, resolving persistent 403 CSRF verification errors. - Environment Variable (.env) Injection: Configured the container build engine to dynamically generate a
.envfile containing all user-configured and platform-injected environment variables in the build workspace (sourceDir) before building the container image. This fixes deployment crashes for PHP and Node.js applications that strictly expect a.envfile on disk. - Error Response Extraction: Enhanced frontend server-side handlers to properly parse and extract nested messages from the NestJS global exception wrapper, showing detailed error descriptions in toast notifications rather than generic fallback alerts.
[1.4.0] - 2026-06-16
Added
- Edge-Level DDoS & Bot Protection: Implemented comprehensive edge proxy hardening with global rate limiting (
30r/sper IP with burst=50), concurrent connection throttling (30 conn/IP), and DDoS timeout tuning (10s client body/header/send timeouts, 15s keepalive). - Dynamic Lua Bot Blocker Module: Created a reusable OpenResty Lua module (
bot_blocker.lua) that pattern-matches User-Agent strings against a blacklist of known vulnerability scanners and scrapers (TLM-Audit-Scanner, l9explore, sqlmap, nikto, wpscan, MJ12bot, AhrefsBot, SemrushBot, DotBot, PetalBot, python-requests). Blocked requests receive an immediate403 Forbiddenat the edge without touching backend containers. - Scanner Path Protection: Added Nginx location blocks to intercept and deny access to sensitive probing paths (
.env,.git/config,.env.production,.env.local,wp-config.php,composer.json,package.json, etc.) with access logging disabled to reduce noise. - Threat Analysis Report: Conducted a full traffic log analysis of the OpenResty proxy, identifying top traffic-consuming IPs, malicious User-Agents, and scanner probing patterns. Documented findings in a structured threat report.
- Cloudflare Real IP Resolution: Integrated all current Cloudflare IPv4 and IPv6 ranges into Nginx
set_real_ip_fromdirectives withCF-Connecting-IPheader extraction for accurate per-client rate limiting behind the CDN. - Security-Enriched Access Logs: Extended the Nginx log format to capture Cloudflare-specific headers (
cf_ip,cf_ray,cf_country,cf_visitor,true_client_ip) for forensic analysis and DDoS attribution.
Changed
- Bot Blocker Architecture: Migrated User-Agent blacklisting from static Nginx
mapvariables (which suffered lazy evaluation issues when location blocks or OpenResty Lua handlers bypassed server-levelifblocks) to a dynamic Lua module loaded viarequire("bot_blocker").check(). This ensures 100% reliable execution in the request access phase. - Cleaned Up Nginx Configuration: Removed the deprecated
$blocked_botmap fromnginx.conf, removed server-levelif ($blocked_bot)blocks and debug headers (X-Blocked-Bot) fromprod.conf, and wired the Lua bot blocker into both the platform frontend and dynamic app routing server blocks.
Fixed
- Custom Domain Image 403 Diagnosis: Identified that
403 Forbiddenerrors on static assets (images, favicon) for custom domains (e.g.,campuscapitalpro.com) were caused by Cloudflare Hotlink Protection on theuseveris.xyzzone — not by OpenResty. The Referer header from a custom domain doesn't match the zone origin, triggering Cloudflare's block. Fix: disable Hotlink Protection in Cloudflare Scrape Shield settings.
[1.3.0] - 2026-06-15
Added
- Accurate Build Benchmarks: Replaced mutable build duration tracking with actual
startedAtandcompletedAtdatabase timestamps and a persistentbuildPhasesJSON column storing precise durations for each pipeline step (extract, port allocation, docker build, cleanup, edge routing). - Live Container Resource Telemetry: Expose real-time container CPU usage, RAM consumption, network I/O, disk block I/O, and active process count (PIDs) via
/deployments/:id/stats(runningdocker stats --no-streamunder the hood). - Full-Stack Meta-Framework Detection: The engine now auto-detects SSR frameworks (TanStack Start, Next.js, Nuxt, Remix, SvelteKit, SolidStart, and Qwik City) by parsing
package.jsondependencies and routes them to Node.js environments instead of Nginx static serving. - Upload Progress Trackers: Integrated an upload progress indicator and custom linear progress bars displaying upload percentage (
uploadProgress) in both the app creation modal and the deployment log terminal.
[1.2.0] - 2026-06-08
Added
- Host System Observability Metrics: Upgraded health telemetry with full-host metrics (CPU usage percent, memory breakdown in bytes, load averages, host uptime, platform context, and active workload counts).
- Frontend Observability Grid: Transformed dashboard metrics into a responsive 4-column panel displaying workloads, host CPU, host RAM, and API V8 heap usage.
- Provider Streaming Logs Unit Tests: Covered the
streamLogsfunctionality in theDockerProviderandRunnerServicetest suites to ensure robust real-time log pipelines. - Cloudflare Edge Log Integration: Enriched Nginx/OpenResty edge access logs to log original visitor headers (
CF-Connecting-IP,CF-Ray,CF-IPCountry,CF-Visitor,True-Client-IP) to track request context and detect DDoS patterns. - Cloudflare Real IP Resolution: Integrated automatic client IP restoration across Nginx server blocks using official Cloudflare IP ranges.
- Attack Header Retention: Explicitly enabled processing of underscores and malformed headers during network/DDoS attacks via Nginx core directives.
Changed
- Zero-RAM Multipart Streaming: Migrated file uploads in
DeploymentControllerto save incoming zip packages directly to temporary directory paths on disk using Multer disk storage config, bypassing Node process buffer memory limitations. - Streamlined Cleanup: Improved cleanups to garbage collect temporary file paths after deployment queue submission, pre-detection processing, and unzipped package source directories after building finishes.
- Removed Hardcoded Production Secrets: Cleaned up
deploy.shandcompose.prod.yamlof all hardcoded credentials. The deploy script now automatically generates high-entropy passwords (openssl rand -hex 24) for Postgres and Redis dynamically inside~/paas/.envon the target VPS, configures the database user defaults toprod_app, automatically symlinkscontrol-plane/.envto it, and lets Docker Compose load variables automatically without manual parameter flags. - Database Schema Migration Fix: Created the missing SQL migration for the
build_durationcolumn in thedeploymentstable, resolving database update crashes that caused builds to hang indefinitely inBUILDINGstate. Added automatedprisma generatetriggers in the local build script.
[1.1.0] - 2026-06-06
Added
- Build Duration Tracking: Measures deployment build times in seconds and stores them on the
Deploymentdatabase records. - Container Log Streaming (SSE): Added a real-time Server-Sent Events stream for running container console outputs (stdout/stderr) at
GET /deployments/:id/container-logs/stream. - HTTP Access Logs Filter: Added regex-based query parameter logging filter (
?type=http) to stream container logs containing web server and application HTTP traffic. - Global Dashboard Logs Feed: Introduced an aggregated telemetry log feed at
GET /observability/logs/streamthat streams logs from all currently active containers. - Retro Matrix Terminal Styling: Re-designed all log display viewers to look like classic green-on-black phosphor CRT monitors using customized glowing text styling and a scanline overlay pattern.
- App Detail Tab Switcher: Users can now toggle between "Build Logs" and "Live Logs" with Console/HTTP filtering options dynamically on the App Details page.
Changed
- Database Schema: Modified
Deploymentmodel to add an optionalbuildDurationinteger field. - OpenResty Proxy Configuration: Handled domain routing maps and upstream resolution using dynamic Lua Redis routing mappings.
[1.0.0] - 2026-06-06
Added
- Initial Release: Minimalist Control Plane NestJS API backbone and TanStack Start frontend app.
- Runtime Auto-Detection: Support for detecting Node.js and PHP architectures automatically from uploaded packages.
- Live Build Logs (SSE): Event-driven build log streaming directly to client consoles without database polling loops.
- UX Overhaul: Rebuilt the app creator flows into a clean 3-step Deploy Modal modal.