diff --git a/Containerfile b/Containerfile index 5285dbd..1a1812f 100644 --- a/Containerfile +++ b/Containerfile @@ -11,10 +11,10 @@ ENV UV_NO_MANAGED_PYTHON=true ENV VIRTUAL_ENV=/usr/local/share/dooris/venv/ ENV PNPM_HOME=/usr/local/share/dooris/pnpm/ ENV PATH=$PNPM_HOME:$VIRTUAL_ENV/bin:$PATH -ENV DOORIS_STATIC_ROOT=/var/www/dooris/static/ +ENV DOORIS_SERVE_STATIC=/var/www/dooris/static/ WORKDIR /usr/local/src/dooris/ -RUN apk add --no-cache uv nginx python3 pnpm +RUN apk add --no-cache uv python3 pnpm RUN addgroup -g $APP_GID dooris &&\ adduser -h /usr/local/src/dooris -u $APP_UID -G dooris -D dooris &&\ mkdir -p /var/www/dooris/ /usr/local/share/dooris/ /usr/local/src/dooris/ /var/cache/dooris/ &&\ @@ -25,25 +25,19 @@ RUN addgroup -g $APP_GID dooris &&\ FROM base AS deps USER dooris ADD --link --chown=dooris:dooris api/pyproject.toml api/uv.lock api/ -# ADD --link --chown=dooris:dooris package.json pnpm-lock.yaml . +ADD --link --chown=dooris:dooris app/package.json app/pnpm-lock.yaml app/ RUN uv venv $VIRTUAL_ENV &&\ uv sync --active --frozen --no-install-project --no-editable -# RUN pnpm install --frozen-lockfile --package-import-method=copy +RUN pnpm --dir=app/ install --frozen-lockfile --package-import-method=copy FROM deps AS final ADD --chown=dooris:dooris --link . /usr/local/src/dooris/ -# RUN pnpm run build +RUN pnpm --dir=app/ run build --outDir=$DOORIS_SERVE_STATIC RUN --mount=type=cache,uid=$APP_UID,gid=$APP_GID,target=$UV_CACHE_DIR \ uv sync --active --frozen -# RUN export dooris_SECRET_KEY=django-insecure \ -# dooris_BASE_URI=http://invalid.invalid \ -# dooris_DB_URL=sqlite:///:memory: &&\ -# ./manage.py collectstatic --no-input -# ADD dev/cmd.sh /usr/local/bin/cmd.sh -ENTRYPOINT [ "/usr/local/bin/cmd.sh" ] -CMD [ "0.0.0.0:8000" ] +ENTRYPOINT [ "uv", "run", "--active", "dooris-api" ] EXPOSE 8000/tcp diff --git a/api/src/dooris_api/__init__.py b/api/src/dooris_api/__init__.py index f587774..5e684af 100644 --- a/api/src/dooris_api/__init__.py +++ b/api/src/dooris_api/__init__.py @@ -40,12 +40,22 @@ def main(): default=os.environ.get("DOORIS_BASE_URL", None), help="The Base-URL that this application is reachable under", ) + argp.add_argument( + "--serve-static", + required=False, + default=os.environ.get("DOORIS_SERVE_STATIC", None), + help="In addition to the API functionality, serve static files from this path", + ) args = argp.parse_args() app_config.set(args) import uvicorn from dooris_api.app import app + if args.serve_static: + from fastapi.staticfiles import StaticFiles + app.mount("/", StaticFiles(directory=args.serve_static, html=True), name="static") + config = uvicorn.Config(app, port=8000, log_level="debug") server = uvicorn.Server(config) server.run() diff --git a/api/src/dooris_api/app.py b/api/src/dooris_api/app.py index 9f8bedc..f4b54ee 100644 --- a/api/src/dooris_api/app.py +++ b/api/src/dooris_api/app.py @@ -48,6 +48,7 @@ async def lifespan(app: FastAPI): app = FastAPI( title="Dooris", summary="Server to interact with CCCHH doors via locks over CCUJACK over HomeMatic over WiFi", + openapi_url="/api/openapi.json", docs_url="/api/docs", lifespan=lifespan, )