From dc34381f6983f6c5d93c1912cb712e2f3d03cb6f Mon Sep 17 00:00:00 2001 From: Sourav Chandhok <114119117+souravC01@users.noreply.github.com> Date: Sat, 12 Sep 2026 07:30:31 +0000 Subject: [PATCH] Add legacy Render redirect --- Dockerfile | 54 +++++----------------------------------------- render_redirect.py | 40 ++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 49 deletions(-) create mode 100644 render_redirect.py diff --git a/Dockerfile b/Dockerfile index 01fe6db..118ac17 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,55 +1,11 @@ -# ============================================================================== -# JobHelperGuru Production Multi-Stage Dockerfile -# Stage 1: Build React Frontend Assets -# Stage 2: Serve Unified FastAPI Service on Render Free Tier -# ============================================================================== +FROM python:3.11-slim -# ------------------------------------------------------------------------------ -# Stage 1: Frontend Builder -# ------------------------------------------------------------------------------ -FROM node:20-alpine AS frontend-builder -WORKDIR /app/frontend - -# Install dependencies -COPY frontend/package*.json ./ -RUN npm ci - -# Build static bundle -COPY frontend/ ./ -ARG VITE_GOOGLE_CLIENT_ID -ENV VITE_GOOGLE_CLIENT_ID=$VITE_GOOGLE_CLIENT_ID -RUN npm run build - -# ------------------------------------------------------------------------------ -# Stage 2: Production Python Runtime -# ------------------------------------------------------------------------------ -FROM python:3.11-slim AS production WORKDIR /app -# Install system dependencies (curl for container health checks, libpq-dev for PostgreSQL) -RUN apt-get update && apt-get install -y --no-install-recommends \ - curl \ - gcc \ - libpq-dev \ - && rm -rf /var/lib/apt/lists/* - -# Install Python production dependencies -COPY requirements.txt . -COPY requirements/ ./requirements/ -RUN pip install --no-cache-dir -r requirements.txt - -# Copy backend source code and initialize local storage directories -COPY backend/ ./backend/ -RUN mkdir -p /app/data/uploads - -# Copy built frontend assets from Stage 1 into the location expected by FastAPI -COPY --from=frontend-builder /app/frontend/dist ./frontend/dist +COPY render_redirect.py . -# Render assigns port dynamically via $PORT environment variable (defaults to 8000) -EXPOSE 8000 +ENV PORT=10000 -ENV PORT=8000 -ENV PYTHONUNBUFFERED=1 +EXPOSE 10000 -# Start FastAPI via uvicorn binding to 0.0.0.0 and dynamic $PORT -CMD ["sh", "-c", "uvicorn backend.main:app --host 0.0.0.0 --port ${PORT:-8000}"] +CMD ["python", "render_redirect.py"] diff --git a/render_redirect.py b/render_redirect.py new file mode 100644 index 0000000..8ba08d0 --- /dev/null +++ b/render_redirect.py @@ -0,0 +1,40 @@ +import os +from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer + +TARGET = "https://jobhelperguru.vercel.app" + + +class RedirectHandler(BaseHTTPRequestHandler): + def do_GET(self): + self.handle_request() + + def do_HEAD(self): + self.handle_request(head_only=True) + + def handle_request(self, head_only=False): + if self.path.split("?", 1)[0] in ("/health", "/api/health"): + body = b"ok" + self.send_response(200) + self.send_header("Content-Type", "text/plain") + self.send_header("Content-Length", str(len(body))) + self.end_headers() + + if not head_only: + self.wfile.write(body) + return + + self.send_response(302) + self.send_header("Location", TARGET + self.path) + self.send_header("Cache-Control", "no-store") + self.end_headers() + + def log_message(self, format, *args): + print(format % args) + + +port = int(os.environ.get("PORT", "10000")) + +server = ThreadingHTTPServer(("0.0.0.0", port), RedirectHandler) + +print(f"Legacy redirect listening on port {port}") +server.serve_forever()