FROM node:22-bookworm # Install Nginx RUN apt-get update && apt-get install -y nginx-light && rm -rf /var/lib/apt/lists/* WORKDIR /app # Enable pnpm RUN corepack enable && corepack prepare pnpm@latest --activate # Copy source code COPY . . # Patch out the client-side browser/localhost restriction before building RUN grep -rl "settings are unavailable" . | xargs -r sed -i 's/settings are unavailable in this browser/settings enabled/g' || true RUN find . -type f \( -name "*.ts" -o -name "*.tsx" -o -name "*.js" -o -name "*.jsx" \) -exec sed -i 's/isLocalhost/true/g' {} + || true # Install dependencies and build the patched source RUN pnpm install RUN pnpm run build # Create workspaces directory RUN mkdir -p /app/workspaces # Nginx config spoofing local loopback RUN echo 'server { \ listen 3080; \ location / { \ proxy_pass http://127.0.0.1:3081; \ proxy_set_header Host 127.0.0.1:3081; \ proxy_set_header Origin http://127.0.0.1:3081; \ proxy_set_header Referer http://127.0.0.1:3081/; \ proxy_set_header X-Real-IP 127.0.0.1; \ proxy_set_header X-Forwarded-For 127.0.0.1; \ proxy_http_version 1.1; \ proxy_set_header Upgrade $http_upgrade; \ proxy_set_header Connection "upgrade"; \ } \ }' > /etc/nginx/sites-available/default EXPOSE 3080 CMD nginx && node --import tsx/esm apps/cli/src/bin.ts web --port 3081 --no-open