648 lines
15 KiB
Markdown
648 lines
15 KiB
Markdown
# 🚀 Coolify Deployment Guide - Ebook Translation System
|
|
|
|
Kompletný návod na nasadenie Ebook Translation System do Coolify.
|
|
|
|
---
|
|
|
|
## 📋 Predpoklady
|
|
|
|
### Čo potrebujete:
|
|
|
|
- ✅ **Coolify inštalovaný** na vašom serveri
|
|
- ✅ **Git repozitár** (GitHub, GitLab, Gitea, atď.)
|
|
- ✅ **Doména alebo subdoména** (odporúčané)
|
|
- ✅ **SSH prístup** k serveru (voliteľné, ale užitočné)
|
|
|
|
---
|
|
|
|
## 🎯 Architektúra Deploymentu
|
|
|
|
```
|
|
┌──────────────────────────────────────────────────┐
|
|
│ Coolify Server │
|
|
│ │
|
|
│ ┌────────────────────────────────────────────┐ │
|
|
│ │ Traefik Reverse Proxy │ │
|
|
│ │ (automaticky od Coolify) │ │
|
|
│ │ - SSL/TLS (Let's Encrypt) │ │
|
|
│ │ - Domain routing │ │
|
|
│ └──────────────────┬─────────────────────────┘ │
|
|
│ │ │
|
|
│ ┌──────────────────▼─────────────────────────┐ │
|
|
│ │ Backend Container (FastAPI) │ │
|
|
│ │ - Port: 8000 │ │
|
|
│ │ - Volumes: logs, translations │ │
|
|
│ └──────────────────┬─────────────────────────┘ │
|
|
│ │ │
|
|
│ ┌──────────────────▼─────────────────────────┐ │
|
|
│ │ PostgreSQL Container │ │
|
|
│ │ - Port: 5432 (internal) │ │
|
|
│ │ - Volume: postgres_data │ │
|
|
│ └────────────────────────────────────────────┘ │
|
|
│ │
|
|
└──────────────────────────────────────────────────┘
|
|
```
|
|
|
|
---
|
|
|
|
## 🔧 Príprava projektu
|
|
|
|
### **KROK 1: Nahrajte projekt do Git repozitára**
|
|
|
|
```bash
|
|
# Ak ešte nemáte Git repozitár
|
|
|
|
# 1. Inicializujte Git v projekte
|
|
cd /home/richardtekula/Documents/WORK/extension/Ebook_System
|
|
git init
|
|
|
|
# 2. Pridajte .gitignore
|
|
cat > .gitignore << 'EOF'
|
|
# Environment variables
|
|
.env
|
|
.env.local
|
|
.env.production
|
|
*.env
|
|
|
|
# Python
|
|
__pycache__/
|
|
*.py[cod]
|
|
.venv/
|
|
venv/
|
|
*.so
|
|
|
|
# Logs
|
|
*.log
|
|
logs/
|
|
|
|
# Database
|
|
*.db
|
|
*.sqlite
|
|
|
|
# IDE
|
|
.vscode/
|
|
.idea/
|
|
*.swp
|
|
|
|
# OS
|
|
.DS_Store
|
|
Thumbs.db
|
|
|
|
# Temporary
|
|
*.tmp
|
|
*.bak
|
|
EOF
|
|
|
|
# 3. Commitnite súbory
|
|
git add .
|
|
git commit -m "Initial commit: Ebook Translation System"
|
|
|
|
# 4. Pridajte remote repozitár (GitHub/GitLab/atď.)
|
|
git remote add origin https://github.com/vase-meno/ebook-system.git
|
|
git branch -M main
|
|
git push -u origin main
|
|
```
|
|
|
|
---
|
|
|
|
## 🚀 Nasadenie v Coolify
|
|
|
|
### **KROK 1: Vytvorenie nového projektu v Coolify**
|
|
|
|
1. **Prihláste sa do Coolify** webového rozhrania
|
|
2. Kliknite na **"+ New"** alebo **"New Resource"**
|
|
3. Vyberte **"Docker Compose"**
|
|
|
|
### **KROK 2: Konfigurácia Git repozitára**
|
|
|
|
1. **Source:** Vyberte váš Git provider (GitHub, GitLab, atď.)
|
|
2. **Repository:** Zadajte URL vašeho repozitára
|
|
```
|
|
https://github.com/vase-meno/ebook-system.git
|
|
```
|
|
3. **Branch:** `main` (alebo master, podľa vášho nastavenia)
|
|
4. **Auto Deploy:** Zapnite (automatický deployment pri každom push)
|
|
|
|
### **KROK 3: Nastavenie Build Configuration**
|
|
|
|
1. **Build Pack:** `Docker Compose`
|
|
2. **Docker Compose Location:** `docker-compose.yml` (v root adresári)
|
|
3. **Base Directory:** `/` (root projektu)
|
|
|
|
### **KROK 4: Environment Variables**
|
|
|
|
V Coolify prejdite na **"Environment"** sekciu a pridajte tieto premenné:
|
|
|
|
```bash
|
|
# ==========================================
|
|
# DATABASE
|
|
# ==========================================
|
|
POSTGRES_DB=ebook_prod
|
|
POSTGRES_USER=ebook_user
|
|
POSTGRES_PASSWORD=VaseSilneHeslo123!@#
|
|
|
|
DATABASE_URL=postgresql://ebook_user:VaseSilneHeslo123!@#@postgres:5432/ebook_prod
|
|
|
|
# ==========================================
|
|
# SECURITY
|
|
# ==========================================
|
|
# Vygenerujte: python3 -c "import secrets; print(secrets.token_urlsafe(32))"
|
|
SECRET_KEY=vygenerovany-32-znakovy-tajny-kluc-pouzite-prikaz-vyssie
|
|
|
|
DEBUG=false
|
|
ENVIRONMENT=production
|
|
|
|
# ==========================================
|
|
# ADMIN
|
|
# ==========================================
|
|
ADMIN_USERNAME=admin
|
|
ADMIN_PASSWORD=VaseAdminHeslo123!@#
|
|
|
|
# ==========================================
|
|
# CORS & DOMAINS
|
|
# ==========================================
|
|
# Nastavte na vašu skutočnú doménu!
|
|
CORS_ORIGINS=https://ebook.vasa-domena.sk,https://www.ebook.vasa-domena.sk
|
|
TRUSTED_HOSTS=ebook.vasa-domena.sk,www.ebook.vasa-domena.sk
|
|
|
|
# ==========================================
|
|
# APPLICATION
|
|
# ==========================================
|
|
APP_NAME=Ebook Translation System
|
|
APP_VERSION=1.0.0
|
|
LOG_LEVEL=WARNING
|
|
|
|
HOST=0.0.0.0
|
|
PORT=8000
|
|
WORKERS=4
|
|
|
|
# ==========================================
|
|
# TIMEZONE
|
|
# ==========================================
|
|
TZ=Europe/Bratislava
|
|
```
|
|
|
|
**DÔLEŽITÉ:**
|
|
- Kliknite na **"🔒"** ikonu pri citlivých premenných (heslá, SECRET_KEY) aby boli skryté
|
|
- Použite **silné heslá** - min. 16 znakov
|
|
- Vygenerujte **nový SECRET_KEY** - nikdy nepoužívajte default hodnoty
|
|
|
|
### **KROK 5: Domain Configuration**
|
|
|
|
1. Prejdite na **"Domains"** sekciu
|
|
2. Kliknite **"Add Domain"**
|
|
3. Zadajte vašu doménu:
|
|
```
|
|
ebook.vasa-domena.sk
|
|
```
|
|
4. Zapnite **"Enable SSL/TLS"** (Let's Encrypt)
|
|
5. Uložte
|
|
|
|
**DNS Konfigurácia:**
|
|
V DNS nastaveniach vašej domény vytvorte A record:
|
|
```
|
|
Type: A
|
|
Name: ebook (alebo @ pre root doménu)
|
|
Value: IP_ADRESA_VASHO_SERVERA
|
|
TTL: 3600
|
|
```
|
|
|
|
### **KROK 6: Storage/Volumes Configuration**
|
|
|
|
Coolify automaticky vytvorí volumes definované v `docker-compose.yml`:
|
|
- `ebook_postgres_data` - PostgreSQL databáza
|
|
- `ebook_backend_logs` - Aplikačné logy
|
|
- `ebook_translation_files` - Nahrané prekladové súbory
|
|
|
|
**Overenie volumes:**
|
|
```bash
|
|
# SSH do servera
|
|
ssh user@vas-server.sk
|
|
|
|
# Zoznam volumes
|
|
docker volume ls | grep ebook
|
|
```
|
|
|
|
### **KROK 7: Deploy!**
|
|
|
|
1. Skontrolujte všetky nastavenia
|
|
2. Kliknite **"Deploy"** alebo **"Start"**
|
|
3. Sledujte deployment logy v reálnom čase
|
|
|
|
**Coolify vykoná:**
|
|
1. Clone Git repozitára
|
|
2. Build Docker images (podľa Dockerfile)
|
|
3. Vytvorenie volumes
|
|
4. Spustenie PostgreSQL kontajnera
|
|
5. Spustenie Backend kontajnera
|
|
6. Nastavenie Traefik reverse proxy
|
|
7. Vygenerovanie SSL certifikátu (Let's Encrypt)
|
|
|
|
---
|
|
|
|
## ✅ Overenie Deploymentu
|
|
|
|
### **1. Skontrolujte Health Endpoint**
|
|
|
|
```bash
|
|
curl https://ebook.vasa-domena.sk/health
|
|
```
|
|
|
|
**Očakávaný výstup:**
|
|
```json
|
|
{
|
|
"status": "healthy",
|
|
"timestamp": 1736612345.67,
|
|
"version": "1.0.0",
|
|
"environment": "production",
|
|
"database_status": "connected"
|
|
}
|
|
```
|
|
|
|
### **2. Otvorte Admin Panel**
|
|
|
|
Otvorte prehliadač a choďte na:
|
|
```
|
|
https://ebook.vasa-domena.sk/login
|
|
```
|
|
|
|
Prihláste sa s credentials z environment variables:
|
|
- **Username:** `admin`
|
|
- **Password:** Vaše `ADMIN_PASSWORD`
|
|
|
|
### **3. Skontrolujte Logy v Coolify**
|
|
|
|
V Coolify prejdite na:
|
|
- **"Logs"** → Sledujte deployment a runtime logy
|
|
- Hľadajte chyby alebo varovania
|
|
|
|
### **4. Testujte funkčnosť**
|
|
|
|
1. **Vygenerujte kupón:**
|
|
- V admin paneli prejdite na "Generate"
|
|
- Vygenerujte testovací kupón
|
|
- Skontrolujte či sa uložil do databázy
|
|
|
|
2. **Nahrajte translation file:**
|
|
- Prejdite na "Translation Upload"
|
|
- Nahrajte testovací Excel súbor
|
|
- Overte či sa nahralo úspešne
|
|
|
|
---
|
|
|
|
## 🔍 Monitoring a Debugging
|
|
|
|
### **Sledovanie Logov v Coolify**
|
|
|
|
1. V Coolify dashboarde kliknite na váš projekt
|
|
2. Prejdite na **"Logs"**
|
|
3. Vyberte kontajner:
|
|
- `backend` - Aplikačné logy
|
|
- `postgres` - Databázové logy
|
|
|
|
**Real-time logs:**
|
|
```bash
|
|
# SSH do servera
|
|
ssh user@vas-server.sk
|
|
|
|
# Nájdite názov vášho projektu v Coolify
|
|
docker ps | grep ebook
|
|
|
|
# Sledujte logy
|
|
docker logs -f <container-name>
|
|
|
|
# Alebo použite docker-compose (ak máte prístup k docker-compose.yml)
|
|
docker-compose logs -f backend
|
|
```
|
|
|
|
### **Databázové operácie**
|
|
|
|
```bash
|
|
# SSH do servera
|
|
ssh user@vas-server.sk
|
|
|
|
# Pripojte sa do PostgreSQL kontajnera
|
|
docker exec -it <postgres-container-name> psql -U ebook_user -d ebook_prod
|
|
|
|
# SQL príkazy:
|
|
# Zobraziť všetky kupóny
|
|
SELECT * FROM coupon_codes LIMIT 10;
|
|
|
|
# Počet kupónov
|
|
SELECT COUNT(*) FROM coupon_codes;
|
|
|
|
# Použité kupóny
|
|
SELECT code, used_at FROM coupon_codes WHERE usage_count > 0;
|
|
|
|
# Ukončite psql
|
|
\q
|
|
```
|
|
|
|
### **Backup Databázy**
|
|
|
|
```bash
|
|
# SSH do servera
|
|
ssh user@vas-server.sk
|
|
|
|
# Vytvorte backup
|
|
docker exec <postgres-container-name> pg_dump -U ebook_user ebook_prod > backup_$(date +%Y%m%d_%H%M%S).sql
|
|
|
|
# Alebo pomocou docker-compose
|
|
docker-compose exec postgres pg_dump -U ebook_user ebook_prod > backup.sql
|
|
```
|
|
|
|
---
|
|
|
|
## 🔄 Update a Redeploy
|
|
|
|
### **Automatický Update (Git Push)**
|
|
|
|
Ak máte zapnuté **Auto Deploy** v Coolify:
|
|
|
|
```bash
|
|
# Lokálne na vašom počítači
|
|
cd /home/richardtekula/Documents/WORK/extension/Ebook_System
|
|
|
|
# Urobte zmeny v kóde
|
|
# ...
|
|
|
|
# Commitnite zmeny
|
|
git add .
|
|
git commit -m "Update: pridaná nová funkcia"
|
|
git push origin main
|
|
|
|
# Coolify automaticky detekuje push a spustí redeploy
|
|
```
|
|
|
|
### **Manuálny Redeploy**
|
|
|
|
V Coolify:
|
|
1. Prejdite na váš projekt
|
|
2. Kliknite **"Redeploy"** alebo **"Restart"**
|
|
3. Sledujte logy
|
|
|
|
### **Rebuild from Scratch**
|
|
|
|
Ak potrebujete celkom nový build (napr. po zmene Dockerfile):
|
|
|
|
V Coolify:
|
|
1. Zastavte aplikáciu: **"Stop"**
|
|
2. Vymažte staré images (voliteľné)
|
|
3. Kliknite **"Deploy"** znovu
|
|
|
|
SSH metóda:
|
|
```bash
|
|
# Zastavte všetko
|
|
docker-compose down
|
|
|
|
# Vymažte volumes (POZOR: stratíte dáta!)
|
|
docker-compose down -v
|
|
|
|
# Rebuild a spustite
|
|
docker-compose up -d --build
|
|
```
|
|
|
|
---
|
|
|
|
## 🛠️ Riešenie Problémov
|
|
|
|
### **Problem: Backend sa nespustí**
|
|
|
|
**Symptómy:**
|
|
- Container sa crashuje
|
|
- Health check failuje
|
|
- 502 Bad Gateway error
|
|
|
|
**Riešenie:**
|
|
|
|
1. **Skontrolujte logy:**
|
|
```bash
|
|
docker logs <backend-container-name>
|
|
```
|
|
|
|
2. **Skontrolujte environment variables:**
|
|
```bash
|
|
docker exec <backend-container-name> env | grep DATABASE_URL
|
|
```
|
|
|
|
3. **Overte databázové pripojenie:**
|
|
```bash
|
|
docker exec <backend-container-name> python -c "
|
|
from sqlalchemy import create_engine
|
|
import os
|
|
engine = create_engine(os.getenv('DATABASE_URL'))
|
|
conn = engine.connect()
|
|
print('Database connection OK!')
|
|
"
|
|
```
|
|
|
|
### **Problem: Databáza nie je dostupná**
|
|
|
|
**Symptómy:**
|
|
- `could not connect to server: Connection refused`
|
|
- `database "ebook_prod" does not exist`
|
|
|
|
**Riešenie:**
|
|
|
|
1. **Skontrolujte či PostgreSQL beží:**
|
|
```bash
|
|
docker ps | grep postgres
|
|
```
|
|
|
|
2. **Skontrolujte logy:**
|
|
```bash
|
|
docker logs <postgres-container-name>
|
|
```
|
|
|
|
3. **Reštartujte PostgreSQL:**
|
|
```bash
|
|
docker restart <postgres-container-name>
|
|
```
|
|
|
|
4. **Overte že databáza existuje:**
|
|
```bash
|
|
docker exec <postgres-container-name> psql -U ebook_user -l
|
|
```
|
|
|
|
### **Problem: SSL certifikát nefunguje**
|
|
|
|
**Symptómy:**
|
|
- SSL certificate errors
|
|
- "Not secure" v prehliadači
|
|
|
|
**Riešenie:**
|
|
|
|
V Coolify:
|
|
1. Prejdite na **"Domains"**
|
|
2. Kliknite **"Regenerate Certificate"**
|
|
3. Počkajte 1-2 minúty
|
|
4. Skontrolujte či sa certifikát vygeneroval
|
|
|
|
DNS check:
|
|
```bash
|
|
nslookup ebook.vasa-domena.sk
|
|
# Overte že IP adresa sedí
|
|
```
|
|
|
|
### **Problem: CORS chyby v Extension**
|
|
|
|
**Symptómy:**
|
|
- Extension nedokáže kontaktovať backend
|
|
- Console chyby: `CORS policy: No 'Access-Control-Allow-Origin'`
|
|
|
|
**Riešenie:**
|
|
|
|
1. **Skontrolujte CORS_ORIGINS v .env:**
|
|
```bash
|
|
CORS_ORIGINS=https://ebook.vasa-domena.sk
|
|
```
|
|
|
|
2. **Overte že extension používa správnu URL:**
|
|
- Otvorte `ebook_extension/config.js`
|
|
- Skontrolujte `API_BASE: "https://ebook.vasa-domena.sk"`
|
|
|
|
3. **Reštartujte backend:**
|
|
```bash
|
|
docker restart <backend-container-name>
|
|
```
|
|
|
|
---
|
|
|
|
## 📊 Performance Tuning
|
|
|
|
### **Optimalizácia Pre Production**
|
|
|
|
1. **Zvýšte počet workers:**
|
|
```bash
|
|
# V .env
|
|
WORKERS=4 # 2-4x počet CPU cores
|
|
```
|
|
|
|
2. **Použite Gunicorn namiesto Uvicorn:**
|
|
|
|
Upravte `Dockerfile`:
|
|
```dockerfile
|
|
CMD ["gunicorn", "main:app", \
|
|
"-w", "4", \
|
|
"-k", "uvicorn.workers.UvicornWorker", \
|
|
"--bind", "0.0.0.0:8000", \
|
|
"--access-logfile", "-", \
|
|
"--error-logfile", "-"]
|
|
```
|
|
|
|
3. **Povoľte PostgreSQL connection pooling:**
|
|
|
|
V backend kóde (SQLAlchemy):
|
|
```python
|
|
engine = create_engine(
|
|
DATABASE_URL,
|
|
pool_size=20,
|
|
max_overflow=40,
|
|
pool_pre_ping=True
|
|
)
|
|
```
|
|
|
|
---
|
|
|
|
## 🔒 Bezpečnosť
|
|
|
|
### **Checklist pred produkciou:**
|
|
|
|
- [ ] `DEBUG=false`
|
|
- [ ] Silné `ADMIN_PASSWORD` (min 16 znakov)
|
|
- [ ] Unikátny `SECRET_KEY` (32+ znakov)
|
|
- [ ] `ENVIRONMENT=production`
|
|
- [ ] Špecifické `CORS_ORIGINS` (nie wildcard)
|
|
- [ ] SSL/HTTPS enabled
|
|
- [ ] Firewall nakonfigurovaný
|
|
- [ ] Pravidelné zálohy nastavené
|
|
- [ ] Log monitoring aktívny
|
|
- [ ] Environment variables sú označené ako secret v Coolify
|
|
|
|
### **Pravidelná údržba:**
|
|
|
|
```bash
|
|
# Rotácia logov (každý mesiac)
|
|
docker exec <backend-container-name> find /app/admin-backend/logs -name "*.log" -mtime +30 -delete
|
|
|
|
# Záloha databázy (každý týždeň)
|
|
docker exec <postgres-container-name> pg_dump -U ebook_user ebook_prod > backup_weekly.sql
|
|
|
|
# Docker cleanup (každý mesiac)
|
|
docker system prune -af --volumes
|
|
```
|
|
|
|
---
|
|
|
|
## 📱 Chrome Extension Setup
|
|
|
|
Po úspešnom deployi backendu:
|
|
|
|
### **1. Aktualizujte Extension Config**
|
|
|
|
```bash
|
|
# Lokálne na vašom počítači
|
|
cd /home/richardtekula/Documents/WORK/extension/Ebook_System/ebook_extension
|
|
|
|
# Otvorte config.js
|
|
nano config.js
|
|
```
|
|
|
|
Zmeňte:
|
|
```javascript
|
|
export const CONFIG = {
|
|
API_BASE: "https://ebook.vasa-domena.sk", // ← VAŠA DOMÉNA!
|
|
VERIFY_ENDPOINT: "/verify",
|
|
TRANSLATIONS_ENDPOINT: "/translations/latest",
|
|
// ... zvyšok
|
|
};
|
|
```
|
|
|
|
### **2. Načítanie do Chrome**
|
|
|
|
1. Chrome: `chrome://extensions/`
|
|
2. Zapnite "Developer mode"
|
|
3. "Load unpacked"
|
|
4. Vyberte `ebook_extension/` priečinok
|
|
5. Hotovo! 🎉
|
|
|
|
### **3. Testovanie**
|
|
|
|
1. Kliknite na extension icon
|
|
2. Zadajte testovací kupón
|
|
3. Verify
|
|
4. Vyberte jazyk
|
|
5. Test translation
|
|
|
|
---
|
|
|
|
## 🎉 Hotovo!
|
|
|
|
Váš Ebook Translation System je úspešne nasadený na Coolify!
|
|
|
|
### **Ďalšie kroky:**
|
|
|
|
1. ✅ Vytvorte prvých admin používateľov
|
|
2. ✅ Vygenerujte kupóny pre používateľov
|
|
3. ✅ Nahrajte prekladové súbory
|
|
4. ✅ Distribuujte Chrome extension
|
|
5. ✅ Nastavte monitoring a alerting
|
|
6. ✅ Pravidelné zálohy
|
|
|
|
**Potrebujete pomoc?** Skontrolujte logy alebo kontaktujte podporu.
|
|
|
|
---
|
|
|
|
## 📞 Užitočné Odkazy
|
|
|
|
- **Coolify Dokumentácia:** https://coolify.io/docs
|
|
- **Docker Compose Docs:** https://docs.docker.com/compose/
|
|
- **FastAPI Docs:** https://fastapi.tiangolo.com/
|
|
- **PostgreSQL Docs:** https://www.postgresql.org/docs/
|
|
|
|
---
|
|
|
|
**Autor:** Ebook Translation System Team
|
|
**Verzia:** 1.0.0
|
|
**Posledná aktualizácia:** {{ current_date }}
|