From 782fa386d591a5e1c9ffa5c0a53b4239eb38fe6c Mon Sep 17 00:00:00 2001 From: minhtrannhat Date: Tue, 10 Oct 2023 14:33:11 -0400 Subject: [PATCH] Fix(Docker): Seperate DEV and PROD - Restructured the project --- README.md | 12 ++++++- backend/.dockerignore | 12 +++++++ backend/Dockerfile | 33 +++++++++++++++++++ backend/README.md | 1 + backend/install.sh | 7 ++++ pdm.lock => backend/pdm.lock | 0 pyproject.toml => backend/pyproject.toml | 6 ++++ {src => backend/src}/neo_neo_todo/__init__.py | 0 {src => backend/src}/neo_neo_todo/main.py | 0 {tests => backend/tests}/__init__.py | 0 10 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 backend/.dockerignore create mode 100644 backend/Dockerfile create mode 100644 backend/README.md create mode 100755 backend/install.sh rename pdm.lock => backend/pdm.lock (100%) rename pyproject.toml => backend/pyproject.toml (94%) rename {src => backend/src}/neo_neo_todo/__init__.py (100%) rename {src => backend/src}/neo_neo_todo/main.py (100%) rename {tests => backend/tests}/__init__.py (100%) diff --git a/README.md b/README.md index fbdd682..f5e48d0 100644 --- a/README.md +++ b/README.md @@ -1 +1,11 @@ -# neo-neo-todo +# Neo Neo Todo API + +## Backend + +- Run the live `uvicorn` webserver with `uvicorn neo_neo_todo.main:app --reload` at the backend root. + +### Backend dependencies + +## Frontend + +## Frontend dependencies diff --git a/backend/.dockerignore b/backend/.dockerignore new file mode 100644 index 0000000..b8e1c9a --- /dev/null +++ b/backend/.dockerignore @@ -0,0 +1,12 @@ +# Python files +__pycache__/ +.venv/ + +# ide files +.vscode/ + +# Pytest +.pytest_cache/ + +# enviroment constants +.envrc diff --git a/backend/Dockerfile b/backend/Dockerfile new file mode 100644 index 0000000..d81f8e6 --- /dev/null +++ b/backend/Dockerfile @@ -0,0 +1,33 @@ +# build stage +FROM python:3.11 AS builder + +# install PDM +RUN pip install -U pip setuptools wheel +RUN pip install pdm + +# copy files +COPY pyproject.toml pdm.lock README.md /backend/ +COPY install.sh /backend/ +COPY src/ /backend/src + +# import ENV +ARG ENV + +# install dependencies and project into the local packages directory +WORKDIR /backend +RUN mkdir __pypackages__ && chmod u+x install.sh && ./install.sh + +# run stage +FROM python:3.11 + +# retrieve packages from build stage +ENV PYTHONPATH=/backend/pkgs +COPY --from=builder /backend/__pypackages__/3.11/lib /backend/pkgs + +# retrieve executables +COPY --from=builder /backend/__pypackages__/3.11/bin/* /bin/ + +EXPOSE 8080 + +# set command/entrypoint, adapt to fit your needs +CMD ["python3","-m", "uvicorn", "neo_neo_todo.main:app", "--reload"] diff --git a/backend/README.md b/backend/README.md new file mode 100644 index 0000000..10eebe5 --- /dev/null +++ b/backend/README.md @@ -0,0 +1 @@ +# Backend Technical Write Up diff --git a/backend/install.sh b/backend/install.sh new file mode 100755 index 0000000..8f0a24a --- /dev/null +++ b/backend/install.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +if [ ${ENV} = "DEV" ]; then + pdm sync --dev +else + pdm sync --prod --no-editable +fi diff --git a/pdm.lock b/backend/pdm.lock similarity index 100% rename from pdm.lock rename to backend/pdm.lock diff --git a/pyproject.toml b/backend/pyproject.toml similarity index 94% rename from pyproject.toml rename to backend/pyproject.toml index 0b91feb..9b9f9fd 100644 --- a/pyproject.toml +++ b/backend/pyproject.toml @@ -39,11 +39,17 @@ asyncio_mode = "auto" pythonpath = ["src"] [tool.pdm.scripts] + # python code formatting format-black = "black src/ tests/" + # python code linting lint-ruff = "ruff check src/ tests/" format = {composite = ["format-black"]} + lint = {composite = ["lint-ruff"]} + test = "pytest tests/" + +start = "uvicorn neo_neo_todo.main:app --reload" diff --git a/src/neo_neo_todo/__init__.py b/backend/src/neo_neo_todo/__init__.py similarity index 100% rename from src/neo_neo_todo/__init__.py rename to backend/src/neo_neo_todo/__init__.py diff --git a/src/neo_neo_todo/main.py b/backend/src/neo_neo_todo/main.py similarity index 100% rename from src/neo_neo_todo/main.py rename to backend/src/neo_neo_todo/main.py diff --git a/tests/__init__.py b/backend/tests/__init__.py similarity index 100% rename from tests/__init__.py rename to backend/tests/__init__.py