mirror of
https://github.com/grillazz/fastapi-sqlalchemy-asyncpg.git
synced 2025-11-30 13:20:40 +03:00
compose refactor
This commit is contained in:
30
Makefile
30
Makefile
@@ -14,32 +14,32 @@ docker-up: ## Run project with compose
|
||||
docker-clean: ## Clean Reset project containers and volumes with compose
|
||||
docker compose down -v --remove-orphans | true
|
||||
docker compose rm -f | true
|
||||
docker volume rm fastapi_postgres_data | true
|
||||
docker volume rm panettone_postgres_data | true
|
||||
|
||||
.PHONY: docker-apply-db-migrations
|
||||
docker-apply-db-migrations: ## apply alembic migrations to database/schema
|
||||
docker compose run --rm app alembic upgrade head
|
||||
docker compose run --rm api1 alembic upgrade head
|
||||
|
||||
.PHONY: docker-create-db-migration
|
||||
docker-create-db-migration: ## Create new alembic database migration aka database revision. Example: make docker-create-db-migration msg="add users table"
|
||||
docker compose up -d db | true
|
||||
docker compose run --no-deps app alembic revision --autogenerate -m "$(msg)"
|
||||
docker compose up -d postgres | true
|
||||
docker compose run --no-deps api1 alembic revision --autogenerate -m "$(msg)"
|
||||
|
||||
.PHONY: docker-test
|
||||
docker-test: ## Run project tests
|
||||
docker compose -f compose.yml -f test-compose.yml run --rm app pytest tests --durations=0 -vv
|
||||
docker compose -f compose.yml -f test-compose.yml run --rm api1 pytest tests --durations=0 -vv
|
||||
|
||||
.PHONY: docker-test-snapshot
|
||||
docker-test-snapshot: ## Run project tests with inline snapshot
|
||||
docker compose -f compose.yml -f test-compose.yml run --rm app pytest tests --inline-snapshot=fix
|
||||
docker compose -f compose.yml -f test-compose.yml run --rm api1 pytest tests --inline-snapshot=fix
|
||||
|
||||
.PHONY: safety
|
||||
safety: ## Check project and dependencies with safety https://github.com/pyupio/safety
|
||||
docker compose run --rm app safety check
|
||||
docker compose run --rm api1 safety check
|
||||
|
||||
.PHONY: py-upgrade
|
||||
py-upgrade: ## Upgrade project py files with pyupgrade library for python version 3.10
|
||||
pyupgrade --py313-plus `find app -name "*.py"`
|
||||
pyupgrade --py313-plus `find api1 -name "*.py"`
|
||||
|
||||
.PHONY: lint
|
||||
lint: ## Lint project code.
|
||||
@@ -47,16 +47,16 @@ lint: ## Lint project code.
|
||||
|
||||
.PHONY: slim-build
|
||||
slim-build: ## with power of docker-slim build smaller and safer images
|
||||
docker-slim build --compose-file docker-compose.yml --target-compose-svc app --dep-include-target-compose-svc-deps true --http-probe-exec app fastapi-sqlalchemy-asyncpg_app:latest
|
||||
docker-slim build --compose-file docker-compose.yml --target-compose-svc api1 --dep-include-target-compose-svc-deps true --http-probe-exec api1 fastapi-sqlalchemy-asyncpg_api1:latest
|
||||
|
||||
.PHONY: docker-feed-database
|
||||
docker-feed-database: ## create database objects and insert data
|
||||
docker compose exec db psql devdb devdb -f /home/gx/code/shakespeare_work.sql | true
|
||||
docker compose exec db psql devdb devdb -f /home/gx/code/shakespeare_chapter.sql | true
|
||||
docker compose exec db psql devdb devdb -f /home/gx/code/shakespeare_wordform.sql | true
|
||||
docker compose exec db psql devdb devdb -f /home/gx/code/shakespeare_character.sql | true
|
||||
docker compose exec db psql devdb devdb -f /home/gx/code/shakespeare_paragraph.sql | true
|
||||
docker compose exec db psql devdb devdb -f /home/gx/code/shakespeare_character_work.sql
|
||||
docker compose exec postgres psql devdb devdb -f /home/gx/code/shakespeare_work.sql | true
|
||||
docker compose exec postgres psql devdb devdb -f /home/gx/code/shakespeare_chapter.sql | true
|
||||
docker compose exec postgres psql devdb devdb -f /home/gx/code/shakespeare_wordform.sql | true
|
||||
docker compose exec postgres psql devdb devdb -f /home/gx/code/shakespeare_character.sql | true
|
||||
docker compose exec postgres psql devdb devdb -f /home/gx/code/shakespeare_paragraph.sql | true
|
||||
docker compose exec postgres psql devdb devdb -f /home/gx/code/shakespeare_character_work.sql
|
||||
|
||||
.PHONY: model-generate
|
||||
model-generate: ## generate sqlalchemy models from database
|
||||
|
||||
10
README.md
10
README.md
@@ -32,6 +32,7 @@
|
||||
<li><a href="#smtp-setup">Email Configuration</a></li>
|
||||
<li><a href="#uv-knowledge-and-inspirations">UV knowledge and inspirations</a></li>
|
||||
<li><a href="#large-language-model">Integration with local LLM</a></li>
|
||||
<li><a href="#ha-sample-with-nginx-as-load-balancer">High Availability sample with nginx as load balancer</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#acknowledgments">Acknowledgments</a></li>
|
||||
@@ -184,6 +185,14 @@ ollama run llama3.2
|
||||
|
||||
<p align="right">(<a href="#readme-top">back to top</a>)</p>
|
||||
|
||||
### HA sample with nginx as load balancer
|
||||
Sample high availability setup with nginx as load balancer and 2 uvicorn instances running on different ports.
|
||||
```shell
|
||||
make docker-up-ha
|
||||
```
|
||||
<p align="right">(<a href="#readme-top">back to top</a>)</p>
|
||||
|
||||
|
||||
### UV knowledge and inspirations
|
||||
- https://docs.astral.sh/uv/
|
||||
- https://hynek.me/articles/docker-uv/
|
||||
@@ -217,6 +226,7 @@ I've included a few of my favorites to kick things off!
|
||||
<details>
|
||||
<summary>2025 (3 changes)</summary>
|
||||
<ul>
|
||||
<li>[SEP 2 2025] add sample high availability with nginx as load balancer</li>
|
||||
<li>[AUG 23 2025] intro exception handlers</li>
|
||||
<li>[JUL some sunny day 2025] add rotoger</li>
|
||||
<li>[MAY 3, 2025] add large language model integration :robot:</li>
|
||||
|
||||
@@ -36,6 +36,9 @@ async def lifespan(app: FastAPI):
|
||||
"Postgres pool created", idle_size=app.postgres_pool.get_idle_size()
|
||||
)
|
||||
yield
|
||||
except Exception as e:
|
||||
await logger.aerror("Error during app startup", error=repr(e))
|
||||
raise
|
||||
finally:
|
||||
await app.redis.close()
|
||||
await app.postgres_pool.close()
|
||||
|
||||
25
compose.yml
25
compose.yml
@@ -1,7 +1,6 @@
|
||||
services:
|
||||
app:
|
||||
container_name: fsap_app
|
||||
network_mode: host
|
||||
api1:
|
||||
container_name: panettone_api1
|
||||
build: .
|
||||
environment:
|
||||
- PYTHONPATH=/panettone
|
||||
@@ -12,7 +11,6 @@ services:
|
||||
uvicorn app.main:app
|
||||
--host 0.0.0.0 --port 8080
|
||||
--lifespan=on --use-colors --loop uvloop --http httptools
|
||||
--reload --log-level debug
|
||||
"
|
||||
volumes:
|
||||
- ./app:/panettone/app
|
||||
@@ -22,17 +20,16 @@ services:
|
||||
ports:
|
||||
- "8080:8080"
|
||||
depends_on:
|
||||
- db
|
||||
- inmemory
|
||||
- postgres
|
||||
- redis
|
||||
|
||||
db:
|
||||
container_name: fsap_db
|
||||
network_mode: host
|
||||
postgres:
|
||||
container_name: panettone_postgres
|
||||
build:
|
||||
context: ./db
|
||||
dockerfile: Dockerfile
|
||||
volumes:
|
||||
- fastapi_postgres_data:/var/lib/postgresql/data
|
||||
- panettone_postgres_data:/var/lib/postgresql/data
|
||||
env_file:
|
||||
- .env
|
||||
ports:
|
||||
@@ -50,15 +47,15 @@ services:
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
inmemory:
|
||||
redis:
|
||||
image: redis:latest
|
||||
network_mode: host
|
||||
container_name: fsap_inmemory
|
||||
container_name: panettone_redis
|
||||
ports:
|
||||
- "6379:6379"
|
||||
env_file:
|
||||
- .env
|
||||
entrypoint: redis-server --appendonly yes
|
||||
|
||||
|
||||
volumes:
|
||||
fastapi_postgres_data: {}
|
||||
panettone_postgres_data: {}
|
||||
@@ -1,9 +1,9 @@
|
||||
services:
|
||||
app:
|
||||
api1:
|
||||
environment:
|
||||
- POSTGRES_DB=testdb
|
||||
|
||||
db:
|
||||
postgres:
|
||||
environment:
|
||||
- POSTGRES_USER=${POSTGRES_USER}
|
||||
- POSTGRES_DB=testdb
|
||||
Reference in New Issue
Block a user