From cb2ac819e0b2e4fd6c2e2a9eea8a4089567b27e8 Mon Sep 17 00:00:00 2001 From: Timothy Pidashev Date: Sat, 9 Mar 2024 03:15:53 -0800 Subject: [PATCH] Reverse proxy works locally :D --- Caddyfile.dev | 12 +++++----- compose.dev.yml | 22 ++++++++--------- src/landing/Dockerfile.dev | 49 +++++++++++++++++++++++++++++++++----- src/landing/rxconfig.py | 1 + 4 files changed, 61 insertions(+), 23 deletions(-) diff --git a/Caddyfile.dev b/Caddyfile.dev index a892799..7f50e52 100644 --- a/Caddyfile.dev +++ b/Caddyfile.dev @@ -1,15 +1,15 @@ -{ - auto_https off -} +timmypidashev.localhost { + encode gzip -127.0.0.1:80 { - @backend_routes { + reverse_proxy landing:3000 + + @backend_routes { path /_event/* path /_upload path /ping } handle @backend_routes { - reverse_proxy landing:3000 + reverse_proxy landing:8000 } } diff --git a/compose.dev.yml b/compose.dev.yml index 303dce3..b803460 100644 --- a/compose.dev.yml +++ b/compose.dev.yml @@ -1,16 +1,17 @@ version: '3.8' services: - proxy: - container_name: proxy + caddy: + container_name: caddy image: caddy:latest ports: - 80:80 + - 443:443 volumes: - ./Caddyfile.dev:/etc/caddy/Caddyfile:rw restart: always networks: - - external + - caddy depends_on: - landing @@ -18,14 +19,13 @@ services: container_name: landing image: landing:dev volumes: - - ./src/landing:/app - expose: - - 3000 - - 8000 + - ./src/landing/landing:/app/landing + - ./src/landing/assets:/app/assets + - ./src/landing/rxconfig.py:/app/rxconfig.py networks: - - external + - caddy networks: - external: - name: external - driver: bridge + caddy: + name: caddy + external: true diff --git a/src/landing/Dockerfile.dev b/src/landing/Dockerfile.dev index d88fccf..f5c6b24 100644 --- a/src/landing/Dockerfile.dev +++ b/src/landing/Dockerfile.dev @@ -1,17 +1,54 @@ -FROM python:3.11 +# Stage 1: init +FROM python:3.11 as init # Copy local context to `/app` inside container (see .dockerignore) WORKDIR /app COPY . . -# Install app requirements and reflex in the container +# Create virtualenv which will be copied into the final container +ENV VIRTUAL_ENV=/app/.venv +ENV PATH="$VIRTUAL_ENV/bin:$PATH" +RUN python3.11 -m venv $VIRTUAL_ENV + +# Install app requirements and reflex inside virtualenv RUN pip install -r requirements.txt # Deploy templates and prepare app RUN reflex init -# Needed until Reflex properly passes SIGTERM on backend. -STOPSIGNAL SIGKILL +# Export static copy of frontend to /app/.web/_static +RUN echo "Exporting reflex app to shrink the docker image size, not actually a prod build." +RUN reflex export --frontend-only --no-zip + +# Copy static files out of /app to save space in backend image +RUN mv .web/_static /tmp/_static +RUN rm -rf .web && mkdir .web +RUN mv /tmp/_static .web/_static + +# Stage 2: copy artifacts into slim image +FROM python:3.11-slim +WORKDIR /app +RUN adduser --disabled-password --home /app reflex + +# Install Node.js and unzip +RUN apt-get update && apt-get install -y nodejs unzip curl && curl -fsSL https://bun.sh/install | bash + +# Copy only the necessary files from the "init" stage +COPY --chown=reflex --from=init /app/.venv /app/.venv +COPY --chown=reflex --from=init /app/requirements.txt /app/requirements.txt +COPY --chown=reflex --from=init /app /app + +# Change the ownership and permissions of /app/.local +USER root +RUN mkdir -p /app +RUN chown -R reflex /app +USER reflex + +# Activate the virtual environment and install application requirements +ENV PATH="/app/.venv/bin:$PATH" +RUN python3.11 -m venv /app/.venv +RUN /app/.venv/bin/pip install -r /app/requirements.txt + +# The following lines are for the specific command for the application. +CMD reflex init && reflex run --env dev -# Always apply migrations before starting the backend. -CMD reflex run --env dev diff --git a/src/landing/rxconfig.py b/src/landing/rxconfig.py index b54ba99..be33673 100644 --- a/src/landing/rxconfig.py +++ b/src/landing/rxconfig.py @@ -2,4 +2,5 @@ import reflex as rx config = rx.Config( app_name="landing", + api_url="http://localhost:8000", )