Migrate to PostgreSQL + add FastAPI webapp for Coolify deploy
Backend migration: - Replace pyodbc/SQL Server with psycopg2/PostgreSQL throughout - Rewrite Database class with portable SQL: SERIAL, ON CONFLICT, NOW() - Lowercase table names (rip_help_files, rip_help_sections) - Postgres convention - libpq connection string format in HELP_DB_CONN Webapp (webapp/): - FastAPI app: GET /, GET /images/<f>, GET /home-image, GET /api/sections, POST /api/keywords/<code>, GET /healthz - Jinja2 template extracted from generate_html.py with HTTP image URLs - Direct keyword save to DB (no JSON download detour) - Same prefix scoping as CLI tools (?prefix=RIP) Deployment: - Dockerfile (python:3.12-slim + uvicorn) - docker-compose.yml for local dev - requirements-webapp.txt (minimal, no Windows-only deps) - .dockerignore excludes pipeline scripts and BAT files - README updated with webapp section and Coolify deploy guide Also: switch AI model to claude-haiku-4-5 (~3x cheaper, same quality for this task) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
62
README.md
62
README.md
@@ -120,5 +120,65 @@ UNIQUE constraint: `(prefix, file_path)`
|
||||
|---|---|---|
|
||||
| `MIN_SECTION_TOKENS` | 60 | Под този праг секцията се слива с предишната |
|
||||
| `MAX_AI_CHARS` | 4000 | Символи, пращани към Claude |
|
||||
| `AI_MODEL` | claude-sonnet-4-6 | Модел за класификация |
|
||||
| `AI_MODEL` | claude-haiku-4-5 | Модел за класификация |
|
||||
| `MIN_IMAGE_PX` | 50 | Картинки под NxN px се пропускат |
|
||||
|
||||
---
|
||||
|
||||
## Webapp (FastAPI)
|
||||
|
||||
`webapp/` съдържа FastAPI app за server deploy (Coolify / Docker).
|
||||
|
||||
### Endpoint-и
|
||||
|
||||
| Метод | Път | Описание |
|
||||
|---|---|---|
|
||||
| GET | `/` | HTML viewer (Home/Editor/Search/Generator); query `?prefix=RIP&home=1` |
|
||||
| GET | `/images/<file>` | Сервира картинка от `OUTPUT_DIR/images/` |
|
||||
| GET | `/home-image` | Home image (от `HOME_IMAGE` env var или `Bairaci.png`) |
|
||||
| GET | `/api/sections` | JSON списък със секции; query `?prefix=` |
|
||||
| POST | `/api/keywords/<code>` | `{keywords: "..."}` → UPDATE в DB |
|
||||
| GET | `/healthz` | Health check (DB ping) |
|
||||
|
||||
### Env vars
|
||||
|
||||
| Var | Default | Описание |
|
||||
|---|---|---|
|
||||
| `HELP_DB_CONN` | — | libpq формат за Postgres (задължително) |
|
||||
| `OUTPUT_DIR` | `./data` | Директория с `images/` подпапка |
|
||||
| `HOME_IMAGE` | — | Абсолютен път към home картинка (опционален) |
|
||||
|
||||
### Локален dev
|
||||
|
||||
```
|
||||
pip install -r requirements-webapp.txt
|
||||
$env:HELP_DB_CONN="host=192.168.88.18 port=5432 dbname=rip_help_system user=sa password=..."
|
||||
$env:OUTPUT_DIR="q:\RIP_Help_Source\Output"
|
||||
python -m uvicorn webapp.main:app --reload
|
||||
# отвори http://127.0.0.1:8000/?prefix=RIP&home=1
|
||||
```
|
||||
|
||||
### Coolify deploy
|
||||
|
||||
1. В Coolify: New Resource → Application → Public/Private Repository
|
||||
2. URL: `https://git.inex-project.net/sabo/rip-help-system.git`
|
||||
3. Build pack: **Dockerfile**
|
||||
4. Environment variables (в Coolify UI, не в git):
|
||||
- `HELP_DB_CONN=host=... port=5432 dbname=rip_help_system user=... password=...`
|
||||
- `OUTPUT_DIR=/data/help_output`
|
||||
- `HOME_IMAGE=/data/help_output/Bairaci.png` (по избор)
|
||||
5. Persistent storage (volume): `/data/help_output` (там качваш картинките с WinSCP/rsync)
|
||||
6. Port: 8000
|
||||
7. Custom domain → Coolify прави HTTPS (Let's Encrypt) автоматично
|
||||
|
||||
### Качване на картинки на сървъра
|
||||
|
||||
Локалният `help_processor.py` пише в `q:\RIP_Help_Source\Output\` (включително `images/` подпапка). За deploy:
|
||||
|
||||
```
|
||||
# с WinSCP — sync на цялата директория
|
||||
local: q:\RIP_Help_Source\Output\
|
||||
remote: /home/sabo/share/help_output/ ← Coolify volume mount
|
||||
```
|
||||
|
||||
Базата (Postgres на 192.168.88.18) се ползва от webapp-а директно.
|
||||
|
||||
Reference in New Issue
Block a user