diff --git a/README.md b/README.md index 69c1a41..b2d4b5e 100644 --- a/README.md +++ b/README.md @@ -102,7 +102,7 @@ To enables/configures ci, create repository variables and secrets as needed: - Start services (production): ```bash -docker compose -f docker/docker-compose.yml up --build +just compose-deploy ``` - Start services for development (mounts project and enables hot reload): diff --git a/docker/Dockerfile b/docker/Dockerfile index 989d973..d739aa8 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,8 +1,11 @@ -FROM python:3.12-slim +FROM ghcr.io/astral-sh/uv:python3.12-bookworm-slim ENV PYTHONDONTWRITEBYTECODE=1 \ PYTHONUNBUFFERED=1 +# use aliyun mirror if you need it +RUN sed -i 's|deb.debian.org|mirrors.aliyun.com|g' /etc/apt/sources.list.d/debian.sources + RUN apt-get update \ && apt-get install -y --no-install-recommends gcc libpq-dev build-essential postgresql-client \ && rm -rf /var/lib/apt/lists/* @@ -12,8 +15,7 @@ WORKDIR /app # copy repository into image. .dockerignore will exclude tests, docs and other dev files COPY . . -RUN python -m pip install --upgrade pip setuptools wheel \ - && pip install --no-cache-dir . +RUN uv pip install --system --no-cache . EXPOSE 8000 diff --git a/docker/docker-compose.dev.yml b/docker/docker-compose.dev.yml index 186a565..ae24eff 100644 --- a/docker/docker-compose.dev.yml +++ b/docker/docker-compose.dev.yml @@ -1,5 +1,3 @@ -version: '3.9' - services: app: # Development overrides: mount project root and enable hot reload diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 91c6aee..5bbc86d 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -1,18 +1,20 @@ -version: '3.9' - services: app: build: context: .. dockerfile: docker/Dockerfile + pull: true image: fastapi-boilerplate:latest env_file: - ../.env ports: - "8000:8000" + restart: unless-stopped depends_on: - - db - - redis + db: + condition: service_healthy + redis: + condition: service_healthy db: image: postgres:15-alpine @@ -35,6 +37,11 @@ services: - "6379:6379" volumes: - redis_data:/data + healthcheck: + test: ["CMD", "redis-cli", "ping"] + interval: 10s + timeout: 5s + retries: 5 volumes: postgres_data: diff --git a/justfile b/justfile index 4cc9407..32f5898 100644 --- a/justfile +++ b/justfile @@ -31,6 +31,9 @@ run port=PORT: @benchmark: uv run locust -f tests/locustfile.py +@compose-deploy: + docker compose -f docker/docker-compose.yml up -d --build + # Generate database migration @db-migrate message: uv run alembic revision --autogenerate -m "{{message}}"