mirror of
https://github.com/dat515-2025/Group-8.git
synced 2026-03-22 15:12:08 +01:00
Compare commits
5 Commits
merge/prom
...
24087c2810
| Author | SHA1 | Date | |
|---|---|---|---|
| 24087c2810 | |||
|
|
6818b1f649 | ||
| c864e753c9 | |||
| b4a453be04 | |||
| d290664352 |
@@ -1,6 +1,8 @@
|
||||
import logging
|
||||
import os
|
||||
import sys
|
||||
from datetime import datetime
|
||||
from pythonjsonlogger import jsonlogger
|
||||
|
||||
from fastapi import Depends, FastAPI
|
||||
from fastapi.middleware.cors import CORSMiddleware
|
||||
@@ -58,7 +60,24 @@ fastApi.include_router(auth_router)
|
||||
fastApi.include_router(categories_router)
|
||||
fastApi.include_router(transactions_router)
|
||||
|
||||
logging.basicConfig(filename='app.log', level=logging.INFO, format='%(asctime)s %(message)s')
|
||||
|
||||
for h in list(logging.root.handlers):
|
||||
logging.root.removeHandler(h)
|
||||
|
||||
_log_handler = logging.StreamHandler(sys.stdout)
|
||||
_formatter = jsonlogger.JsonFormatter(
|
||||
fmt='%(asctime)s %(levelname)s %(name)s %(message)s %(pathname)s %(lineno)d %(process)d %(thread)d'
|
||||
)
|
||||
_log_handler.setFormatter(_formatter)
|
||||
|
||||
logging.root.setLevel(logging.INFO)
|
||||
logging.root.addHandler(_log_handler)
|
||||
|
||||
|
||||
for _name in ("uvicorn", "uvicorn.error", "uvicorn.access"):
|
||||
_logger = logging.getLogger(_name)
|
||||
_logger.handlers = [_log_handler]
|
||||
_logger.propagate = True
|
||||
|
||||
|
||||
@fastApi.middleware("http")
|
||||
@@ -95,7 +114,7 @@ async def log_traffic(request: Request, call_next):
|
||||
"process_time": process_time,
|
||||
"client_host": client_host
|
||||
}
|
||||
logging.info(str(log_params))
|
||||
logging.getLogger(__name__).info("http_request", extra=log_params)
|
||||
return response
|
||||
|
||||
|
||||
|
||||
@@ -70,3 +70,4 @@ watchfiles==1.1.0
|
||||
wcwidth==0.2.14
|
||||
websockets==15.0.1
|
||||
yarl==1.20.1
|
||||
python-json-logger==2.0.7
|
||||
|
||||
@@ -44,7 +44,7 @@ function CurrencyRates() {
|
||||
|
||||
// Get today's date in YYYY-MM-DD format for the API
|
||||
const today = new Date().toISOString().split('T')[0];
|
||||
const CNB_API_URL = `/api-cnb/cnbapi/exrates/daily?date=${today}&lang=EN`;
|
||||
const CNB_API_URL = `https://api.cnb.cz/cnbapi/exrates/daily?date=${today}&lang=EN`;
|
||||
|
||||
try {
|
||||
const res = await fetch(CNB_API_URL);
|
||||
|
||||
@@ -52,46 +52,45 @@ flowchart LR
|
||||
|
||||
- Backend: Python, FastAPI, FastAPI Users, SQLAlchemy, Pydantic, Alembic, Celery
|
||||
- Frontend: React, TypeScript, Vite
|
||||
- Database: PostgreSQL
|
||||
- Messaging: RabbitMQ
|
||||
- Cache: Redis
|
||||
- Database: MariaDB (Maxscale)
|
||||
- Background jobs: RabbitMQ, Celery
|
||||
- Containerization/Orchestration: Docker, Docker Compose (dev), Kubernetes, Helm
|
||||
- IaC/Platform: OpenTofu (Terraform), Argo CD, cert-manager, MetalLB, Cloudflare Tunnel, Prometheus
|
||||
- IaC/Platform: Proxmox, Talos, Cloudflare pages, OpenTofu (Terraform), cert-manager, MetalLB, Cloudflare Tunnel, Prometheus, Loki
|
||||
|
||||
## Prerequisites
|
||||
|
||||
### System Requirements
|
||||
|
||||
- Operating System: Linux, macOS, or Windows
|
||||
- Operating System (dev): Linux, macOS, or Windows with Docker support
|
||||
- Operating System (prod): Linux with kubernetes
|
||||
- Minimum RAM: 4 GB (8 GB recommended for running backend, frontend, and database together)
|
||||
- Storage: 2 GB free (Docker images may require additional space)
|
||||
- Storage: 4 GB free (Docker images may require additional space)
|
||||
|
||||
### Required Software
|
||||
|
||||
- Docker Desktop or Docker Engine 24+
|
||||
- Docker Compose v2+
|
||||
- Node.js 20+ and npm 10+ (for local frontend dev/build)
|
||||
- Python 3.12+ (for local backend dev outside Docker)
|
||||
- PostgreSQL 15+ (optional if running DB outside Docker)
|
||||
- Helm 3.12+ and kubectl 1.29+ (for Kubernetes deployment)
|
||||
- OpenTofu 1.7+ (for infrastructure provisioning)
|
||||
- Docker Desktop or Docker Engine
|
||||
- Docker Compose
|
||||
- Node.js and npm
|
||||
- Python 3.12+
|
||||
- MariaDB 11
|
||||
- Helm 3.12+ and kubectl 1.29+
|
||||
- OpenTofu
|
||||
|
||||
### Environment Variables (common)
|
||||
|
||||
# TODO: UPDATE
|
||||
- Backend: SECRET, FRONTEND_URL, BACKEND_URL, DATABASE_URL, RABBITMQ_URL, REDIS_URL
|
||||
|
||||
- OAuth vars (Backend): MOJEID_CLIENT_ID/SECRET, BANKID_CLIENT_ID/SECRET (optional)
|
||||
- Frontend: VITE_BACKEND_URL
|
||||
|
||||
### Dependencies (key libraries)
|
||||
I am not sure what is meant by "key libraries"
|
||||
Backend: FastAPI, fastapi-users, SQLAlchemy, pydantic v2, Alembic, Celery, uvicorn
|
||||
Frontend: React, TypeScript, Vite
|
||||
|
||||
Backend: FastAPI, fastapi-users, SQLAlchemy, pydantic v2, Alembic, Celery
|
||||
Frontend: React, TypeScript, Vite
|
||||
Services: PostgreSQL, RabbitMQ, Redis
|
||||
## Local development
|
||||
|
||||
## Build Instructions
|
||||
|
||||
You can run the project with Docker Compose (recommended for local development) or run services manually.
|
||||
You can run the project with Docker Compose and Python virtual environment for testing and dev purposes
|
||||
|
||||
### 1) Clone the Repository
|
||||
|
||||
@@ -103,9 +102,8 @@ cd 7project
|
||||
### 2) Install dependencies
|
||||
Backend
|
||||
```bash
|
||||
# In 7project/backend
|
||||
python3.12 -m venv .venv
|
||||
source .venv/bin/activate # Windows: .venv\Scripts\activate
|
||||
python3 -m venv .venv
|
||||
source .venv/bin/activate
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
Frontend
|
||||
@@ -120,9 +118,10 @@ Backend
|
||||
```bash
|
||||
# From the 7project/ directory
|
||||
docker compose up --build
|
||||
# This starts: PostgreSQL, RabbitMQ/Redis (if defined)
|
||||
# This starts: MariaDB, RabbitMQ
|
||||
|
||||
# Set environment variables (or create .env file)
|
||||
# TODO: fix
|
||||
export SECRET=CHANGE_ME_SECRET
|
||||
export BACKEND_URL=http://127.0.0.1:8000
|
||||
export FRONTEND_URL=http://localhost:5173
|
||||
@@ -131,13 +130,12 @@ export RABBITMQ_URL=amqp://guest:guest@127.0.0.1:5672/
|
||||
export REDIS_URL=redis://127.0.0.1:6379/0
|
||||
|
||||
# Apply DB migrations (Alembic)
|
||||
# From 7project/backend
|
||||
alembic upgrade head
|
||||
# From 7project
|
||||
bash upgrade_database.sh
|
||||
|
||||
# Run API
|
||||
uvicorn app.app:fastApi --reload --host 0.0.0.0 --port 8000
|
||||
|
||||
# Run Celery worker (optional, for emails/background tasks)
|
||||
celery -A app.celery_app.celery_app worker -l info
|
||||
```
|
||||
|
||||
@@ -152,18 +150,22 @@ npm run dev
|
||||
- Backend default: http://127.0.0.1:8000 (OpenAPI at /docs)
|
||||
- Frontend default: http://localhost:5173
|
||||
|
||||
If needed, adjust compose services/ports in compose.yml.
|
||||
|
||||
## Build Instructions
|
||||
### Backend
|
||||
```bash
|
||||
# run in project7/backend
|
||||
docker buildx build --platform linux/amd64,linux/arm64 -t your_container_registry/your_name --push .
|
||||
```
|
||||
### Frontend
|
||||
```bash
|
||||
# run in project7/frontend
|
||||
npm ci
|
||||
npm run build
|
||||
```
|
||||
|
||||
## Deployment Instructions
|
||||
|
||||
### Local (Docker Compose)
|
||||
|
||||
Described in the previous section (Manual Local Run)
|
||||
|
||||
### Kubernetes (via OpenTofu + Helm)
|
||||
|
||||
1) Provision platform services (RabbitMQ/Redis/ingress/tunnel/etc.) with OpenTofu
|
||||
1) Install base services to cluster
|
||||
```bash
|
||||
cd tofu
|
||||
# copy and edit variables
|
||||
|
||||
@@ -64,3 +64,21 @@ resource "kubectl_manifest" "argocd-tunnel-bind" {
|
||||
base_domain = var.cloudflare_domain
|
||||
})
|
||||
}
|
||||
|
||||
resource "helm_release" "loki_stack" {
|
||||
name = "loki-stack"
|
||||
repository = "https://grafana.github.io/helm-charts"
|
||||
chart = "loki-stack"
|
||||
namespace = kubernetes_namespace.monitoring.metadata[0].name
|
||||
version = "2.9.12"
|
||||
|
||||
set = [{
|
||||
name = "grafana.enabled"
|
||||
value = "false"
|
||||
}]
|
||||
|
||||
|
||||
depends_on = [
|
||||
helm_release.kube_prometheus_stack
|
||||
]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user