Wiki
Opcje wdrożenia
Jak wdrażać QuoteNode: Docker Compose, Coolify i topologia produkcyjna.
Opcje wdrożenia
QuoteNode wspiera kilka modeli wdrożenia opartych o kontenery Docker. Wybierz podejście pasujące do Twojej infrastruktury.
Docker Compose
Standardowe wdrożenie używa jednego pliku docker-compose.yml, który uruchamia wszystkie usługi:
docker compose up -d
Topologia produkcyjna
Internet
│
▼
Caddy (port 80/443, automatyczne HTTPS)
├── /api/* → Backend (Java 25, port 8080)
├── /offer/* → Backend (publiczne strony ofert)
└── /* → Frontend (Vue 3, statyczne assety)
Backend → PostgreSQL (port 5432)
Backend → Gotenberg (port 3000, generowanie PDF)
backup-worker → PostgreSQL (zaplanowane backupy)
Usługi
| Kontener | Obraz | Rola |
|---|---|---|
frontend | Vue 3 + Caddy | Serwuje SPA i proxy’uje API |
backend | Java 25 / Spring Boot | REST API, logika biznesowa, PDF |
postgres | PostgreSQL 16 Alpine | Baza danych |
gotenberg | Gotenberg 8 | Konwersja HTML do PDF |
backup-worker | ten sam obraz co backend | Backupy bazy i plików |
Trwałe wolumeny
| Wolumen | Zawartość |
|---|---|
postgres_prod_data | pliki bazy danych |
backend_prod_uploads | obrazy produktów, logotypy |
backend_prod_pdfs | wygenerowane PDF-y |
backend_prod_backups | archiwa backupów |
backend_prod_geoip | baza MaxMind GeoIP |
Wdrożenie przez Coolify
Coolify to open-source’owy, self-hostowalny PaaS działający na własnym serwerze. QuoteNode ma osobny plik docker-compose.coolify.yml zoptymalizowany pod ten model.
Najważniejsze różnice względem zwykłego Compose
- Coolify zarządza TLS — własny proxy Coolify obsługuje certyfikaty i routing
- Zmienne środowiskowe trafiają przez UI Coolify
- Health checki są monitorowane przez samą platformę
- Dostępne są dwa tryby wdrożenia:
Tryb A — build ze źródeł
Coolify klonuje repozytorium i buduje obrazy przy deployu.
- wolniejsze wdrożenia,
- brak potrzeby osobnego CI/CD,
- dobre na start.
Tryb B — obrazy pre-built
GitHub Actions buduje obrazy i wypycha je do GHCR, a Coolify tylko je pobiera.
- szybsze wdrożenia,
- wymaga ustawionego pipeline’u CI/CD,
- rekomendowane w produkcji.
Release metadata i publiczny manifest aktualizacji
Pipeline release generuje też mały publiczny manifest, którego działające instalacje QuoteNode używają do wykrywania nowszego upstream release:
- publiczny URL:
https://quotenode.dev/releases/latest.json, - flaga frontendu:
VITE_RELEASE_CHECK_ENABLED, - nadpisanie URL-a manifestu:
VITE_RELEASE_MANIFEST_URL.
Ten mechanizm jest addytywny i odrębny od bannera reloadu w obrębie tej samej instalacji:
/app-version.jsonodpowiada na pytanie: “czy ta instalacja wdrożyła nowszy bundle frontendu?”,releases/latest.jsonodpowiada na pytanie: “czy upstream ma już nowszy release QuoteNode?”.
Dla wdrożeń prywatnych lub offline wskaż własne lustro manifestu przez VITE_RELEASE_MANIFEST_URL albo wyłącz zewnętrzny check całkowicie.
Wymagana konfiguracja w Coolify
- Resource type: Dockerfile albo Docker Image
- Internal port:
8080 - Health check path:
/health - Domain: ustawiana po stronie Coolify
- HTTPS: wymuszane automatycznie przez Coolify
Referencja zmiennych środowiskowych
Pełny katalog zmiennych, w tym porty developerskie, zmienne Vite i ustawienia backup-workera, znajdziesz w Referencji zmiennych środowiskowych.
Wymagane we wszystkich wdrożeniach
| Zmienna | Opis |
|---|---|
DB_USERNAME | użytkownik PostgreSQL |
DB_PASSWORD | hasło PostgreSQL |
DB_ENCRYPTION_KEY | klucz AES-256 dla szyfrowania pól wrażliwych |
TIMING_TOKEN_SECRET | sekret dla tokenów bot-detection |
PUBLIC_LINK_PASSWORD_SESSION_SECRET | sekret sesji dla chronionych linków publicznych |
CORS_ALLOWED_ORIGINS | dozwolone originy CORS |
| Zmienna | Opis |
|---|---|
SMTP_HOST | host SMTP |
SMTP_PORT | port SMTP |
SMTP_USERNAME | login SMTP |
SMTP_PASSWORD | hasło SMTP |
SMTP_AUTH | włącza auth SMTP |
SMTP_STARTTLS | włącza STARTTLS |
Backup
| Zmienna | Opis |
|---|---|
BACKUP_ENABLED | włącza backupy automatyczne |
BACKUP_CRON | harmonogram cron |
BACKUP_RCLONE_REMOTE | storage zdalny dla backupów |
BACKUP_GPG_RECIPIENT | odbiorca GPG do szyfrowania backupów |
Security
| Zmienna | Opis |
|---|---|
FEATURE_2FA_ENABLED | włącza 2FA |
SECURITY_BOT_DETECTION_ENABLED | włącza bot detection |
GEOIP_ENABLED | włącza kontrolę GeoIP |
Features
| Zmienna | Opis |
|---|---|
PDF_ENABLED | włącza generowanie PDF |
NOTIFICATIONS_ENABLED | włącza system powiadomień |
NOTIFICATIONS_EMAIL_ENABLED | włącza powiadomienia e-mail |
LOG_LEVEL | poziom logowania |
Minimalne wymagania serwera
| Wdrożenie | RAM | CPU | Dysk |
|---|---|---|---|
| Ewaluacja / solo use | 2 GB | 1 rdzeń | 10 GB SSD |
| Mały zespół | 4 GB | 2 rdzenie | 20 GB SSD |
| Średni zespół | 8 GB | 4 rdzenie | 50 GB SSD |
To konserwatywne estymacje. Faktyczne zużycie zależy od wielkości katalogu, wolumenu ofert i częstotliwości generowania PDF.