Instalacja
Instalacja z Coolify
Wdrożenie QuoteNode za pomocą Coolify, używając paczki budującej Docker Compose oraz dedykowanego pliku compose dla Coolify.
Instalacja z Coolify
Coolify jest rekomendowaną ścieżką wdrożenia publicznej w wersji beta, gdy potrzebujesz zarządzanego HTTPS, wdrożeń opartych na Git, kontroli stanu kontenerów oraz interfejsu webowego do zarządzania zmiennymi środowiskowymi.
Ustawienia repozytorium
Utwórz aplikację z repozytorium QuoteNode i użyj poniższych ustawień:
| Ustawienie | Wartość |
|---|---|
| Build Pack | Docker Compose |
| Katalog bazowy | / |
| Lokalizacja Docker Compose | /infra/docker-compose.coolify.yml |
| Domena publiczna | skonfiguruj tylko dla frontend, na przykład https://crm2.prodata.cc |
| Domena backendu | pozostaw pustą, chyba że wiesz, dlaczego musi być publiczna |
| Domena worker’a backupu | pozostaw pustą |
| Domena Gotenberg | pozostaw pustą |
Proxy Coolify powinno kierować domenę do usługi frontend. Backend, worker backupu, PostgreSQL i Gotenberg pozostają wewnętrzne. Nie przypisuj publicznych domen do backend, backup-worker, postgres ani gotenberg; bezpośrednie udostępnienie tych usług zwiększa powierzchnię ataku i może ominąć zamierzoną granicę frontend/proxy.
Polecenia budowania i uruchamiania
W przypadku standardowych wdrożeń Coolify pozostaw niestandardowe polecenia puste, chyba że Twoja konfiguracja Coolify tego wymaga. Jeśli Coolify wyświetla wygenerowane polecenia, mogą one wyglądać następująco:
docker compose build
docker compose up -d
Nie polegaj na ustawieniach Nixpacks Node dla środowiska uruchomieniowego QuoteNode w tym trybie. Dockerfile’y i plik Compose definiują środowisko uruchomieniowe.
Przełączniki zaawansowane
Zalecane wartości domyślne:
| Opcja Coolify | Rekomendacja |
|---|---|
| Inject Build Args to Dockerfile | włączone |
| Auto Deploy | włączone dla środowiska staging, opcjonalne dla produkcji |
| Git Submodules | tylko jeśli Twój checkout ich wymaga |
| LFS | tylko jeśli repozytorium używa zasobów Git LFS |
| Shallow Clone | dopuszczalne |
| Proxy Force HTTPS | włączone |
| Enable Gzip Compression | włączone |
| Strip Prefixes | pozostaw domyślne, chyba że wdrażasz pod prefiksem ścieżki |
Przejrzyj Watch Paths przed ich użyciem. Ścieżka taka jak services/api/** jest nieaktualna dla tego układu repozytorium; kod backendu znajduje się w backend/**, a kod frontendu w frontend/**.
Wymagane zmienne środowiskowe
Ustaw te wartości w interfejsie środowiskowym Coolify:
DB_NAME=quotenode
DB_USERNAME=quotenode
DB_PASSWORD=<random-32+-characters>
DB_URL=jdbc:postgresql://postgres:5432/quotenode
DB_ENCRYPTION_KEY=<64-hex-characters>
TIMING_TOKEN_SECRET=<random-32+-characters>
PUBLIC_LINK_PASSWORD_SESSION_SECRET=<random-32+-characters>
CORS_ALLOWED_ORIGINS=https://<frontend-domain>
NOTIFICATIONS_PUBLIC_PREFERENCES_URL=https://<frontend-domain>/notifications/preferences
PDF_ENABLED=true
NOTIFICATIONS_ENABLED=true
NOTIFICATIONS_EMAIL_ENABLED=false
FEATURE_2FA_ENABLED=true
BACKUP_ENABLED=false
BACKUP_CRON=0 0 2 * * *
SECURITY_BOT_DETECTION_ENABLED=true
# IP klienta jest wykrywane automatycznie za wewnętrznymi proxy i CDN (w tym Cloudflare) — zostaw puste.
# Ustaw tylko dla nietypowego proxy, którego peer transportowy ma adres PUBLICZNY do zaufania (IP/CIDR lub nazwa hosta).
SECURITY_TRUSTED_PROXIES=
GEOIP_ENABLED=false
LOG_LEVEL=INFO
VITE_RELEASE_CHECK_ENABLED=true
VITE_RELEASE_MANIFEST_URL=https://quotenode.dev/releases/latest.json
Jeśli dostarczanie e-maili jest włączone, ustaw również:
NOTIFICATIONS_EMAIL_ENABLED=true
SMTP_HOST=smtp.example.com
SMTP_PORT=587
SMTP_USERNAME[email protected]
SMTP_PASSWORD=<smtp-password>
SMTP_AUTH=true
SMTP_STARTTLS=true
BACKUP_CRON używa formatu crona Springa z sześcioma polami, więc 0 0 2 * * * oznacza godzinę 02:00 każdego dnia.
Niektóre szablony operatora zawierają również SERVICE_URL_FRONTEND=https://<frontend-domain>. Utrzymuj je zgodnym z domeną frontendu, jeśli Twój proces wdrażania z niego korzysta. Obecny plik compose dla Coolify nie konsumuje tej zmiennej bezpośrednio; dostęp przeglądarki jest kontrolowany przez CORS_ALLOWED_ORIGINS, a linki do preferencji powiadomień używają NOTIFICATIONS_PUBLIC_PREFERENCES_URL.
Metadane wydania
Wdrożenia z kodu źródłowego w Coolify mogą pozostawić APP_VERSION pustym, chyba że budowany jest tag wydania. Ustaw metadane, gdy Twój CI lub pipeline Coolify może je dostarczyć:
# APP_VERSION może być pominięte dla wdrożeń z kodu źródłowego, dopóki nie budowany jest tag wydania.
APP_CHANNEL=beta
APP_COMMIT_SHA=<commit-sha>
APP_BUILD_TIME=<iso-time>
APP_BUILD_NUMBER=<build-number>
APP_SOURCE_REF=<branch-or-tag>
APP_IMAGE_TAG=<image-tag>
Użyj APP_CHANNEL=alpha, beta, rc, dev lub stable zgodnie z wdrażanym wydaniem.
Bezpieczeństwo licencji
Dla prawdziwych wdrożeń beta i publicznych:
LICENSE_SKIP_SIGNATURE_CHECK=false
Ustaw jawnie na false dla prawdziwych wdrożeń beta. Plik compose domyślnie ustawia również false, gdy zmienna jest pominięta, ale operatorzy produkcyjni nie powinni polegać na tej niejednoznaczności. Ustawienie na true wyłącza weryfikację autentyczności licencji i może naruszać warunki licencji; użyj tego tylko w jednorazowych środowiskach deweloperskich.
Sprawdzenia po wdrożeniu
Po tym, jak wdrożenie stanie się zdrowe w Coolify:
- Otwórz
https://<frontend-domain>/health. - Otwórz domenę frontendu w przeglądarce.
- Zaloguj się przy użyciu wstępnie utworzonego administratora tylko przy pierwszym uruchomieniu, następnie zmień hasło.
- Utwórz ofertę.
- Wygeneruj PDF.
- Utwórz i otwórz link publiczny.
- Jeśli e-mail jest włączony, zweryfikuj SMTP i linki do preferencji powiadomień.
- Sprawdź obszar administracyjny licencji/wersji pod kątem aktualnej wersji i statusu powiadomienia o wydaniu.
Typowe problemy z Coolify
- Linki publiczne nie działają, gdy
CORS_ALLOWED_ORIGINSnie zgadza się dokładnie z pochodzeniem przeglądarki. - Linki do preferencji e-mail nie działają, gdy
NOTIFICATIONS_PUBLIC_PREFERENCES_URLnadal wskazuje na localhost lub starą domenę. - Gotenberg nie powinien otrzymywać publicznej domeny; jest to wewnętrzna usługa PDF.
- Zarządzane HTTPS przez Coolify wymaga, aby domena frontendu rozwiązywała się do serwera Coolify.
- Jeśli metadane budowania są puste, aplikacja nadal może działać, ale wyświetlanie wersji w panelu administracyjnym może pokazywać mniej szczegółów dotyczących wydania.