Initial commit: Robot ökoszisztéma v2.0 - Stabilizált jármű és szerviz robotok
This commit is contained in:
5
archive/old_other/CHANGELOG.md
Executable file
5
archive/old_other/CHANGELOG.md
Executable file
@@ -0,0 +1,5 @@
|
||||
## [16.0] - 2026-01-25
|
||||
### Hozzáadva
|
||||
- Smart Tiles: Csempe alapú nézet a Dashboardon.
|
||||
- Brand logók és okmány-lejárat figyelmeztetések.
|
||||
- Automata NAS mentés funkció a telepítőben.
|
||||
3866
archive/old_other/backup_20260128_alap_kesz.sql
Executable file
3866
archive/old_other/backup_20260128_alap_kesz.sql
Executable file
File diff suppressed because it is too large
Load Diff
20
archive/old_other/backup_to_nas.sh
Executable file
20
archive/old_other/backup_to_nas.sh
Executable file
@@ -0,0 +1,20 @@
|
||||
#!/bin/bash
|
||||
# Forrás és cél mappák meghatározása
|
||||
SOURCE="/opt/service_finder"
|
||||
DEST="/mnt/nas/git_vault/service_finder/backup"
|
||||
|
||||
# Mappa létrehozása a NAS-on, ha még nincs ott
|
||||
mkdir -p $DEST
|
||||
|
||||
# Szinkronizálás (rsync)
|
||||
# -a: archiválás (jogok megőrzése)
|
||||
# -v: részletes naplózás
|
||||
# -z: tömörítés az átvitel alatt
|
||||
# --delete: törli a NAS-ról, amit te már töröltél a szerverről (tükrözés)
|
||||
rsync -avz --delete --exclude 'postgres_data' --exclude 'node_modules' $SOURCE $DEST
|
||||
|
||||
# Adatbázis mentés (külön, mert a futó fájlokat nem jó rsync-elni)
|
||||
# Egy SQL dumpot készítünk közvetlenül a NAS-ra
|
||||
docker exec postgres-db pg_dumpall -U postgres > $DEST/full_db_backup.sql
|
||||
|
||||
echo "Mentés sikeresen befejeződött: $(date)"
|
||||
125
archive/old_other/deploy_v16.sh
Executable file
125
archive/old_other/deploy_v16.sh
Executable file
@@ -0,0 +1,125 @@
|
||||
#!/bin/bash
|
||||
# 🚀 SERVICE FINDER - SMART TILES & NAS BACKUP SCRIPT (V16.0)
|
||||
|
||||
PROJECT_ROOT="/opt/service_finder"
|
||||
NAS_BACKUP_PATH="/mnt/nas/app_data/backups"
|
||||
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
|
||||
|
||||
echo "--- 📦 1. BIZTONSÁGI MENTÉS KÉSZÍTÉSE A NAS-RA ---"
|
||||
mkdir -p $NAS_BACKUP_PATH
|
||||
# Mentés a NAS-ra a változtatások előtt
|
||||
tar -czf $NAS_BACKUP_PATH/sf_backup_$TIMESTAMP.tar.gz -C $PROJECT_ROOT backend/app
|
||||
echo "✅ Mentés elkészült: $NAS_BACKUP_PATH/sf_backup_$TIMESTAMP.tar.gz"
|
||||
|
||||
echo "--- ⚙️ 2. VERZIÓ ÉS CHANGELOG FRISSÍTÉSE ---"
|
||||
cat <<EOF >> $PROJECT_ROOT/CHANGELOG.md
|
||||
## [16.0] - 2026-01-25
|
||||
### Hozzáadva
|
||||
- Smart Tiles: Csempe alapú nézet a Dashboardon.
|
||||
- Brand logók és okmány-lejárat figyelmeztetések.
|
||||
- Automata NAS mentés funkció a telepítőben.
|
||||
EOF
|
||||
|
||||
echo "--- 🧠 3. BACKEND FRISSÍTÉSE (fleet.py) ---"
|
||||
cat <<EOF > $PROJECT_ROOT/backend/app/api/v1/endpoints/fleet.py
|
||||
from fastapi import APIRouter, Depends, HTTPException, status
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
from sqlalchemy import select, func
|
||||
from typing import List
|
||||
from app.db.session import get_db
|
||||
from app.schemas.fleet import VehicleCreate, VehicleResponse, EventCreate, EventResponse
|
||||
from app.models.vehicle import UserVehicle
|
||||
from app.models.system_settings import SystemSetting
|
||||
from app.models.vehicle_event import VehicleEvent
|
||||
from app.api.deps import get_current_user
|
||||
from app.models.user import User
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
@router.get("/vehicles", response_model=List[VehicleResponse])
|
||||
async def get_my_vehicles(db: AsyncSession = Depends(get_db), current_user: User = Depends(get_current_user)):
|
||||
result = await db.execute(select(UserVehicle).where(UserVehicle.user_id == current_user.id))
|
||||
return result.scalars().all()
|
||||
|
||||
@router.post("/vehicles/{vehicle_id}/events", response_model=EventResponse)
|
||||
async def create_event(vehicle_id: int, event_in: EventCreate, db: AsyncSession = Depends(get_db), current_user: User = Depends(get_current_user)):
|
||||
v_query = await db.execute(select(UserVehicle).where(UserVehicle.id == vehicle_id, UserVehicle.user_id == current_user.id))
|
||||
vehicle = v_query.scalar_one_or_none()
|
||||
if not vehicle:
|
||||
raise HTTPException(status_code=404, detail="Jármű nem található.")
|
||||
if event_in.odometer < vehicle.current_odometer:
|
||||
raise HTTPException(status_code=400, detail=f"Hiba: Km állás ({event_in.odometer}) kevesebb mint {vehicle.current_odometer}")
|
||||
new_event = VehicleEvent(**event_in.model_dump(), vehicle_id=vehicle_id)
|
||||
db.add(new_event)
|
||||
vehicle.current_odometer = event_in.odometer
|
||||
await db.commit()
|
||||
await db.refresh(new_event)
|
||||
return new_event
|
||||
EOF
|
||||
|
||||
echo "--- 🎨 4. FRONTEND FRISSÍTÉSE (dashboard.html) ---"
|
||||
cat <<EOF > $PROJECT_ROOT/backend/app/static/dashboard.html
|
||||
<!DOCTYPE html>
|
||||
<html lang="hu">
|
||||
<head>
|
||||
<meta charset="UTF-8"><title>Service Finder - Dashboard</title>
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||
<style>
|
||||
body { background: #0f172a; color: white; }
|
||||
.vehicle-tile { background: #1e293b; border-radius: 15px; padding: 20px; border: 1px solid #334155; transition: 0.3s; position: relative; }
|
||||
.vehicle-tile:hover { transform: translateY(-5px); border-color: #3b82f6; }
|
||||
.brand-logo { width: 40px; height: 40px; margin-right: 10px; opacity: 0.8; }
|
||||
.alert-icon { position: absolute; top: 10px; right: 10px; font-size: 1.5rem; }
|
||||
</style>
|
||||
</head>
|
||||
<body class="p-4">
|
||||
<div class="container">
|
||||
<div class="d-flex justify-content-between align-items-center mb-5">
|
||||
<h1 style="font-weight: 900;">GARÁZS</h1>
|
||||
<button class="btn btn-primary" onclick="location.href='register_vehicle.html'">+ ÚJ JÁRMŰ</button>
|
||||
</div>
|
||||
<div id="vehicleList" class="row g-4">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const TOKEN = localStorage.getItem('token');
|
||||
if (!TOKEN) window.location.href = 'login.html';
|
||||
|
||||
async function loadVehicles() {
|
||||
const res = await fetch('/api/v1/fleet/vehicles', {
|
||||
headers: { 'Authorization': 'Bearer ' + TOKEN }
|
||||
});
|
||||
const vehicles = await res.json();
|
||||
const container = document.getElementById('vehicleList');
|
||||
container.innerHTML = '';
|
||||
|
||||
vehicles.forEach(v => {
|
||||
// Egyszerű logika a figyelmeztetésekhez (Backend hivatkozás helyett egyelőre itt)
|
||||
let alertHtml = v.current_odometer > 150000 ? '<span class="alert-icon">🔴</span>' : '';
|
||||
|
||||
container.innerHTML += \`
|
||||
<div class="col-md-4">
|
||||
<div class="vehicle-tile shadow">
|
||||
\${alertHtml}
|
||||
<div class="d-flex align-items-center mb-3">
|
||||
<img src="https://logo.clearbit.com/\${v.make.toLowerCase()}.com" class="brand-logo" onerror="this.src='https://via.placeholder.com/40?text=🚗'">
|
||||
<h4 class="m-0">\${v.license_plate}</h4>
|
||||
</div>
|
||||
<p class="text-info mb-1">\${v.make} \${v.model} (\${v.year})</p>
|
||||
<p class="small text-muted">Aktuális km: <strong>\${v.current_odometer} km</strong></p>
|
||||
<button class="btn btn-sm btn-outline-light w-100 mt-2">ADATLAP ÉS KÖLTSÉG</button>
|
||||
</div>
|
||||
</div>
|
||||
\`;
|
||||
});
|
||||
}
|
||||
loadVehicles();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
EOF
|
||||
|
||||
echo "--- 🔄 5. RENDSZER ÚJRAINDÍTÁSA ---"
|
||||
docker compose restart service_finder_api
|
||||
echo "🚀 FRISSÍTÉS ÉS NAS MENTÉS SIKERES!"
|
||||
176
archive/old_other/docker-compose_2026.02.01.yml
Executable file
176
archive/old_other/docker-compose_2026.02.01.yml
Executable file
@@ -0,0 +1,176 @@
|
||||
services:
|
||||
# 1. ADATBÁZIS
|
||||
postgres-db:
|
||||
image: postgres:15
|
||||
container_name: postgres-db
|
||||
environment:
|
||||
POSTGRES_USER: ${POSTGRES_USER}
|
||||
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
|
||||
POSTGRES_DB: ${POSTGRES_DB}
|
||||
volumes:
|
||||
- ./postgres_data:/var/lib/postgresql/data
|
||||
- ./postgres/init-db.sql:/docker-entrypoint-initdb.d/init-db.sql
|
||||
ports:
|
||||
- "${POSTGRES_PORT}:${POSTGRES_PORT}"
|
||||
networks:
|
||||
- service_finder_net
|
||||
restart: unless-stopped
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
# 2. BACKEND API
|
||||
service_finder_api:
|
||||
build:
|
||||
context: ./backend
|
||||
dockerfile: Dockerfile
|
||||
container_name: service_finder_api
|
||||
volumes:
|
||||
- ./backend:/app
|
||||
- ./alembic.ini:/app/alembic.ini
|
||||
- ./migrations:/app/migrations
|
||||
command: uvicorn app.main:app --host 0.0.0.0 --port 8000 --proxy-headers --forwarded-allow-ips="*"
|
||||
ports:
|
||||
- "8000:8000"
|
||||
environment:
|
||||
- PYTHONPATH=/app
|
||||
- DATABASE_URL=postgresql+asyncpg://${APP_DB_USER}:${APP_DB_PASSWORD}@postgres-db:5432/${APP_DB_NAME}
|
||||
- SECRET_KEY=${SECRET_KEY}
|
||||
- ALGORITHM=${ALGORITHM}
|
||||
- ALLOWED_ORIGINS=https://dev.profibot.hu,
|
||||
- MINIO_ENDPOINT=minio:9000
|
||||
- MINIO_ACCESS_KEY=${POSTGRES_USER}
|
||||
- MINIO_SECRET_KEY=${POSTGRES_PASSWORD}
|
||||
- SENDGRID_API_KEY=${SENDGRID_API_KEY}
|
||||
- POSTGRES_USER=${POSTGRES_USER}
|
||||
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
|
||||
- POSTGRES_DB=${POSTGRES_DB}
|
||||
depends_on:
|
||||
postgres-db:
|
||||
condition: service_healthy
|
||||
minio:
|
||||
condition: service_started
|
||||
redis:
|
||||
condition: service_started
|
||||
networks:
|
||||
- service_finder_net
|
||||
|
||||
# 3. PGADMIN
|
||||
pgadmin:
|
||||
image: dpage/pgadmin4
|
||||
container_name: pgadmin_ui
|
||||
environment:
|
||||
PGADMIN_DEFAULT_EMAIL: ${PGADMIN_EMAIL}
|
||||
PGADMIN_DEFAULT_PASSWORD: ${PGADMIN_PASSWORD}
|
||||
volumes:
|
||||
- ./pgadmin_data:/var/lib/pgadmin
|
||||
ports:
|
||||
- "5050:80"
|
||||
depends_on:
|
||||
- postgres-db
|
||||
networks:
|
||||
- service_finder_net
|
||||
|
||||
# 4. MINIO
|
||||
minio:
|
||||
image: minio/minio
|
||||
container_name: service_finder_minio
|
||||
command: server /data --console-address ":9001"
|
||||
environment:
|
||||
MINIO_ROOT_USER: ${POSTGRES_USER}
|
||||
MINIO_ROOT_PASSWORD: ${POSTGRES_PASSWORD}
|
||||
volumes:
|
||||
- /mnt/nas/app_data/minio_data:/data
|
||||
ports:
|
||||
- "9000:9000"
|
||||
- "9001:9001"
|
||||
networks:
|
||||
- service_finder_net
|
||||
|
||||
# 5. REDIS
|
||||
redis:
|
||||
image: redis:alpine
|
||||
container_name: service_finder_redis
|
||||
volumes:
|
||||
- /mnt/nas/app_data/redis_data:/data
|
||||
networks:
|
||||
- service_finder_net
|
||||
|
||||
# 6. CODE-SERVER
|
||||
code-server:
|
||||
image: codercom/code-server:latest
|
||||
container_name: code-server
|
||||
user: "0:0"
|
||||
volumes:
|
||||
- /opt/service_finder:/opt/service_finder
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
- /opt/service_finder/.vscode_config:/root
|
||||
environment:
|
||||
- PASSWORD=${CODE_SERVER_PASSWORD}
|
||||
- TERM=xterm-256color
|
||||
- TZ=Europe/Budapest
|
||||
working_dir: /opt/service_finder
|
||||
ports:
|
||||
- "8443:8080"
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- service_finder_net
|
||||
# Ez a rész telepíti az eszközöket minden indításkor:
|
||||
command: >
|
||||
command: >
|
||||
sh -c "apt-get update &&
|
||||
apt-get install -y ca-certificates curl gnupg mc python3 python3-pip htop &&
|
||||
install -m 0755 -d /etc/apt/keyrings &&
|
||||
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg &&
|
||||
chmod a+r /etc/apt/keyrings/docker.gpg &&
|
||||
echo \"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian $(. /etc/os-release && echo \"$VERSION_CODENAME\") stable\" | tee /etc/apt/sources.list.d/docker.list > /dev/null &&
|
||||
apt-get update &&
|
||||
apt-get install -y docker-ce-cli &&
|
||||
dumb-init /usr/bin/code-server --bind-addr 0.0.0.0:8080 /opt/service_finder"
|
||||
|
||||
# 7. NGINX PROXY MANAGER
|
||||
nginx-proxy:
|
||||
image: 'jc21/nginx-proxy-manager:latest'
|
||||
container_name: nginx-proxy-manager
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- '80:80'
|
||||
- '81:81'
|
||||
- '443:443'
|
||||
volumes:
|
||||
- ./proxy-manager/data:/data
|
||||
- ./proxy-manager/letsencrypt:/etc/letsencrypt
|
||||
networks:
|
||||
- service_finder_net
|
||||
|
||||
# 8. DOZZLE
|
||||
dozzle:
|
||||
image: amir20/dozzle:latest
|
||||
container_name: dozzle
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
ports:
|
||||
- "8888:8080"
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- service_finder_net
|
||||
|
||||
# 9. Frontend konténer
|
||||
service_finder_frontend:
|
||||
build:
|
||||
context: ./frontend
|
||||
container_name: service_finder_frontend
|
||||
ports:
|
||||
- "3000:80"
|
||||
environment:
|
||||
- ALLOWED_ORIGINS=https://app.profibot.hu,
|
||||
networks:
|
||||
- service_finder_net
|
||||
depends_on:
|
||||
- service_finder_api
|
||||
|
||||
networks:
|
||||
service_finder_net:
|
||||
driver: bridge
|
||||
3
archive/old_other/init_dev.sh
Executable file
3
archive/old_other/init_dev.sh
Executable file
@@ -0,0 +1,3 @@
|
||||
#!/bin/bash
|
||||
sudo apt-get update && sudo apt-get install -y mc python3 python3-pip docker.io htop
|
||||
echo "--- Fejlesztői környezet kész! ---"
|
||||
Reference in New Issue
Block a user