diff --git a/.dockerignore b/.dockerignore index e3b05ab..ea6e7a5 100644 --- a/.dockerignore +++ b/.dockerignore @@ -2,7 +2,6 @@ __pycache__ .venv *.db -.env .git *.pyc .pytest_cache diff --git a/.env.example b/.env.example index 1d0c19d..2bc29e6 100644 --- a/.env.example +++ b/.env.example @@ -1,2 +1,5 @@ -DATABASE_URL=sqlite+aiosqlite:///./trackit.db -DEBUG=False \ No newline at end of file +POSTGRES_USER = +POSTGRES_PASSWORD = +POSTGRES_DB = +DATABASE_URL = +DEBUG = \ No newline at end of file diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 192d6e2..1cfa58a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -2,10 +2,17 @@ name: CI on: push: - branches: [ main, develop ] + branches: [ main, dev ] pull_request: branches: [ main ] +env: + POSTGRES_USER: ${{ secrets.POSTGRES_USER }} + POSTGRES_PASSWORD: ${{ secrets.POSTGRES_PASSWORD }} + POSTGRES_DB: ${{ secrets.POSTGRES_DB }} + DATABASE_URL: ${{ secrets.DATABASE_URL }} + DEBUG: ${{ secrets.DEBUG }} + jobs: test: runs-on: ubuntu-latest diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index f745775..4b17cc3 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -1,11 +1,18 @@ -name: Docker Image CI +name: Docker Image on: push: - branches: [ "main" ] + branches: [ "main", "dev" ] pull_request: branches: [ "main" ] +env: + POSTGRES_USER: ${{ secrets.POSTGRES_USER }} + POSTGRES_PASSWORD: ${{ secrets.POSTGRES_PASSWORD }} + POSTGRES_DB: ${{ secrets.POSTGRES_DB }} + DATABASE_URL: ${{ secrets.DATABASE_URL }} + DEBUG: ${{ secrets.DEBUG }} + jobs: build: @@ -14,13 +21,26 @@ jobs: steps: - uses: actions/checkout@v6 + - name: Build the Docker image - run: docker build . --file Dockerfile --tag my-image-name:$(date +%s) + run: docker build -t trackit-api:latest . - name: Run docker compose run: | - docker compose up -d - sleep 10 + docker compose up -d --build + sleep 5 + env: + POSTGRES_USER: ${{ secrets.POSTGRES_USER }} + POSTGRES_PASSWORD: ${{ secrets.POSTGRES_PASSWORD }} + POSTGRES_DB: ${{ secrets.POSTGRES_DB }} + + - name: Show API logs + run: | + docker logs trackit-api --tail 50 + + - name: Wait for Postgres + run: | + timeout 60s bash -c 'until docker exec pg-db pg_isready -U trackit; do sleep 1; done' - name: Check container is running run: | diff --git a/.gitignore b/.gitignore index 66f28f8..385aeab 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,5 @@ __pycache__ .venv .pytest_cache *.db -.env \ No newline at end of file +.env +check-list-docker.md \ No newline at end of file diff --git a/app/core/config.py b/app/core/config.py index 8339787..6c23434 100644 --- a/app/core/config.py +++ b/app/core/config.py @@ -2,9 +2,12 @@ from pydantic import ConfigDict class Settings(BaseSettings): - DATABASE_URL: str = 'sqlite+aiosqlite:///./trackit.db' + POSTGRES_USER: str + POSTGRES_PASSWORD: str + POSTGRES_DB: str + DATABASE_URL: str DEBUG: bool = True - model_config = ConfigDict(env_file = '.env', case_sensetive = True) + model_config = ConfigDict(env_file = '.env', case_sensitive = True) settings = Settings() diff --git a/docker-compose.yml b/docker-compose.yml index 197c6ef..a9b1f84 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,14 +1,29 @@ services: + db: + image: postgres:15 + container_name: pg-db + environment: + POSTGRES_USER: ${POSTGRES_USER} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + POSTGRES_DB: ${POSTGRES_DB} + ports: + - "5432:5432" + volumes: + - postgres_data:/var/lib/postgresql/data + + api: build: . container_name: trackit-api ports: - "8000:8000" environment: - - DATABASE_URL=sqlite+aiosqlite:///./trackit.db - - DEBUG=True + - DATABASE_URL=${DATABASE_URL} + - DEBUG=${DEBUG} volumes: - - ./trackit.db:/app/trackit.db - ./app:/app/app command: uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload - restart: unless-stopped \ No newline at end of file + restart: unless-stopped + +volumes: + postgres_data: \ No newline at end of file diff --git a/readme.md b/readme.md index 65dafb4..2360789 100644 --- a/readme.md +++ b/readme.md @@ -14,7 +14,6 @@ API for tracking habits. Written in FastAPI with asynchronous database operation ``` git clone https://github.com/ghostfaccee/TrackIt-API.git cd TrackIt-API -touch trackit.db docker compose up --build ``` diff --git a/requirements.txt b/requirements.txt index fd26594..96aabc4 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,6 +3,7 @@ annotated-doc==0.0.4 annotated-types==0.7.0 anyio==4.14.1 asgi-lifespan==2.1.0 +asyncpg==0.31.0 certifi==2026.6.17 click==8.4.2 fastapi==0.138.1