Multi-stage Dockerfile (node:20 builder + php:8.2-fpm-alpine runtime), nginx serving frontend SPA + PHP-FPM backend at /lux-studio/, supervisord managing both processes. docker-compose.prod.yml on port 8085, .env.optical mounted read-only, uploads in a named volume. Apache include at deploy/apache-lux-studio.conf proxies /lux-studio/ → :8085. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
44 lines
1.3 KiB
Nginx Configuration File
44 lines
1.3 KiB
Nginx Configuration File
events {
|
|
worker_connections 1024;
|
|
}
|
|
|
|
http {
|
|
include /etc/nginx/mime.types;
|
|
default_type application/octet-stream;
|
|
sendfile on;
|
|
|
|
server {
|
|
listen 80;
|
|
root /var/www/html;
|
|
|
|
# Block sensitive backend files
|
|
location ~ ^/lux-studio/api/(\.env|composer\.|vendor/|\.htaccess|\.git) {
|
|
return 404;
|
|
}
|
|
|
|
# Block uploads dir — served only via stream_video.php
|
|
location ^~ /lux-studio/api/uploads/ {
|
|
return 403;
|
|
}
|
|
|
|
# Block internal-only PHP classes
|
|
location ~ ^/lux-studio/api/(AuthMiddleware|JWTValidator|session_manager|env_loader|config)\.php$ {
|
|
return 403;
|
|
}
|
|
|
|
# PHP API — pass to php-fpm
|
|
location ~ ^/lux-studio/api/(.+\.php)$ {
|
|
fastcgi_pass 127.0.0.1:9000;
|
|
fastcgi_index index.php;
|
|
include fastcgi_params;
|
|
fastcgi_param SCRIPT_FILENAME /var/www/html/lux-studio/api/$1;
|
|
fastcgi_param DOCUMENT_ROOT /var/www/html/lux-studio/api;
|
|
fastcgi_read_timeout 300;
|
|
}
|
|
|
|
# Frontend SPA — fallback to index.html for React Router
|
|
location /lux-studio/ {
|
|
try_files $uri $uri/ /lux-studio/index.html;
|
|
}
|
|
}
|
|
}
|