diff --git a/Dockerfile.cron b/Dockerfile.cron new file mode 100644 index 0000000..1dfe4c9 --- /dev/null +++ b/Dockerfile.cron @@ -0,0 +1,6 @@ +FROM alpine + +RUN apk add --no-cache curl +RUN crontab -l | { cat; echo '* * * * * curl -X POST "http://tasks:8000/api/cache_product_usage_data" -H "Authorization: Bearer ${API_KEY}"'; } | crontab - + +CMD ["crond", "-f", "-l", "2"] diff --git a/Makefile b/Makefile index ab27f81..69c618d 100644 --- a/Makefile +++ b/Makefile @@ -7,11 +7,17 @@ ifeq ($(shell uname -m), arm64) DOCKER_BUILD=docker buildx build --platform linux/amd64 endif -build: +api: fooder Dockerfile requirements.txt $(DOCKER_BUILD) -t registry.domandoman.xyz/fooder/api -f Dockerfile . +cron: Dockerfile.cron + $(DOCKER_BUILD) -t registry.domandoman.xyz/fooder/cron -f Dockerfile.cron . + +build: api cron + push: docker push registry.domandoman.xyz/fooder/api + docker push registry.domandoman.xyz/fooder/cron black: python -m black fooder diff --git a/docker-compose.yml b/docker-compose.yml index d5e219e..e930502 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -25,3 +25,23 @@ services: - .env ports: - "8000:8000" + + tasks: + restart: unless-stopped + image: registry.domandoman.xyz/fooder/api + networks: + - fooder + env_file: + - .env + command: "uvicorn fooder.tasks_app:app --host 0.0.0.0 --port 8000 --workers 1" + + cron: + restart: unless-stopped + image: registry.domandoman.xyz/fooder/cron + build: + dockerfile: Dockerfile.cron + context: . + networks: + - fooder + env_file: + - .env diff --git a/env.template b/env.template index ee78795..06e26c5 100644 --- a/env.template +++ b/env.template @@ -7,6 +7,7 @@ DB_URI="postgresql+asyncpg://${POSTGRES_USER}:${POSTGRES_PASSWORD}@database/${PO ECHO_SQL=0 SECRET_KEY="${SECRET_KEY}" # generate with $ openssl rand -hex 32 +API_KEY="${API_KEY}" # generate with $ openssl rand -hex 32 REFRESH_SECRET_KEY="${REFRESH_SECRET_KEY}" # generate with $ openssl rand -hex 32 ALGORITHM="HS256" ACCESS_TOKEN_EXPIRE_MINUTES=30 diff --git a/fooder/router.py b/fooder/router.py index 7dcdeb4..d306f31 100644 --- a/fooder/router.py +++ b/fooder/router.py @@ -1,12 +1,12 @@ from fastapi import APIRouter -from .view.product import router as product_router + from .view.diary import router as diary_router -from .view.meal import router as meal_router from .view.entry import router as entry_router +from .view.meal import router as meal_router +from .view.preset import router as preset_router +from .view.product import router as product_router from .view.token import router as token_router from .view.user import router as user_router -from .view.preset import router as preset_router - router = APIRouter(prefix="/api") router.include_router(product_router, prefix="/product", tags=["product"]) diff --git a/fooder/view/tasks.py b/fooder/view/tasks.py index 233f7bc..c2dd672 100644 --- a/fooder/view/tasks.py +++ b/fooder/view/tasks.py @@ -1,12 +1,12 @@ from fastapi import APIRouter, Depends, Request -from ..controller.tasks import CacheProductUsageData +from ..controller.tasks import CacheProductUsageData router = APIRouter(prefix="/api", tags=["tasks"]) @router.post("/cache_product_usage_data") -async def create_user( +async def cache_product_usage_data( request: Request, contoller: CacheProductUsageData = Depends(CacheProductUsageData), ):