Files
site-slavic-pulse-com/docker-compose-example/README.md
T
tomasz-syn-grzegorza e22c26798b Fix Facebook in-app browser playback and document www SSL setup.
Mute autoplay and add faster loader fallback for FB/Instagram WebViews; document adding www.slavic-pulse.com in Dokploy to avoid self-signed cert errors on mobile.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-27 16:40:38 +02:00

5.2 KiB

Slavic Pulse - Frontend (Dokploy Deployment)

Statyczna strona z intro YouTube (short FHD 16:9 lub vertical 9:16 — wybór po formacie viewportu). Tło przed filmem to miniaturka z YouTube. Konfiguracja w .env, HTML generowany przy starcie kontenera.

Struktura projektu

site-slavic-pulse-com/
├── docker-compose.yml              # Lokalny dev (build z Dockerfile)
├── Dockerfile
├── default.conf
├── index.html.template             # Szablon strony
├── generate-from-env.sh            # Generator HTML z .env
├── assets/imgs/favico/             # Favicony
├── site.webmanifest.template
└── docker-compose-example/         # Pliki deploymentowe Dokploy
    ├── docker-compose.yml
    ├── .env.example
    └── README.md

Dokploy deployment

Kroki w Dokploy UI:

  1. Nowa aplikacja (Compose) → wklej docker-compose-example/docker-compose.yml
  2. Wklej .env (na podstawie .env.example) — ustaw VIDEO_ID_*, opisy SEO
  3. Domains → dodaj oba hosty (Container Port = 80, HTTPS = Let's Encrypt):
    • slavic-pulse.com
    • www.slavic-pulse.comwymagane — bez tego www dostaje domyślny cert Traefika (CN=*, self-signed) i telefony pokazują „serwer nie potrafi udowodnić tożsamości”
  4. (Opcjonalnie) Advanced → Redirects → preset www → non-www, żeby www przekierowywało na apex
  5. Traefik routuje ruch HTTPS → port 80 kontenera (bez mapowania portu na hosta)
  6. Deploy

Porty: nie używaj ports: w compose — Traefik/Dokploy łączy się z wewnętrznym :80. W docker ps kolumna PORTS może być pusta — to normalne przy routingu przez Traefik.

Gitea Provider w Dokploy (OAuth) — autoryzuje Dokploy do listowania repo i deployu z UI, ale nie zastępuje credentials dla git clone wewnątrz kontenera przy starcie. Dla prywatnego repo: ustaw repo jako Public lub dodaj GITEA_REPO_URL z Deploy Token w .env.

Jak to działa

  1. Start konteneragit clone repozytorium z Gitea
  2. generate-from-env.sh — buduje index.html i site.webmanifest ze zmiennych .env
  3. Tło — miniaturka YouTube (img.youtube.com) dopasowana do FHD/vertical
  4. Intro wideo — YouTube IFrame API, autoplay
  5. Po filmie — przekierowanie (jeśli POST_VIDEO_REDIRECT_ENABLED=true) lub tło z miniaturki

Konfiguracja (.env)

Zmienna Opis
GITEA_REPO_URL Opcjonalnie — URL clone z tokenem dla prywatnego repo
VIDEO_ID_FHD / VIDEO_ID_VERTICAL ID shortów YouTube
POST_VIDEO_REDIRECT_URL_* URL po zakończeniu filmu
POST_VIDEO_REDIRECT_ENABLED true = redirect, false = zostaje tło

Rozwiązywanie problemów

Kontener Restarting (128), brak portów w docker ps

Przyczyna: git clone nie może pobrać repozytorium (najczęściej prywatne repo bez credentials).

Diagnostyka na serwerze:

docker logs slavic-pulse-com-frontend --tail 50

Typowy błąd:

fatal: could not read Username for 'https://gitea.expert-it.agency-ai.dev': No such device or address

Rozwiązanie A (najprostsze): ustaw repozytorium jako Public w Gitea → Settings → Repository → Make Repository Public → redeploy.

Rozwiązanie B (repo prywatne): w Gitea utwórz Deploy Token / PAT i dodaj do .env w Dokploy:

GITEA_REPO_URL=https://oauth2:TWÓJ_TOKEN@gitea.expert-it.agency-ai.dev/tomasz-syn-grzegorza/site-slavic-pulse-com.git

Brak portów w docker ps (kolumna PORTS pusta)

Przy Traefik/Dokploy bez ports: w compose — to oczekiwane. Sprawdź w Dokploy UI: domena → Container Port = 80, kontener Up (healthy).

Zmiana konfiguracji po deployu

  1. Edytuj .env w Dokploy
  2. Redeploy / restart kontenera (przy starcie ponownie klonuje repo i generuje HTML)

Błąd certyfikatu SSL na telefonie („serwer nie potrafi udowodnić…”)

Diagnoza (stan typowy):

  • https://slavic-pulse.com — certyfikat Let's Encrypt OK
  • https://www.slavic-pulse.comself-signed (Traefik default, CN=*) → błąd na Androidzie / iPhone / WebView Facebooka

Strona wysyła Strict-Transport-Security: includeSubDomains, więc po wizycie na działającym apexie przeglądarka wymusza HTTPS także na www — a tam cert jest zły → twardy błąd.

Naprawa w Dokploy (zalecane):

  1. DomainsAdd Domain
  2. Host: www.slavic-pulse.com, Port: 80, HTTPS: włączone, Certificate: letsencrypt
  3. Deploy / poczekaj ~30 s na wystawienie certyfikatu
  4. Sprawdź: curl -I https://www.slavic-pulse.com (powinno być HTTP 200 lub 301, bez błędu SSL)
  5. (Opcjonalnie) Advanced → Redirectswww to non-www

Alternatywa w DNS (OVH): zamiast rekordu A dla www ustaw przekierowanie HTTP na https://slavic-pulse.com w panelu domeny — wtedy ruch www nie trafia na serwer bez certyfikatu.

Facebook / in-app browser: linki w postach powinny wskazywać https://slavic-pulse.com (bez www). Po naprawie www problem znika także dla użytkowników, którzy wpiszą www ręcznie.

Odnowienie certyfikatu: Let's Encrypt odnawia cert automatycznie przez Traefik. Jeśli cert wygasa, w Dokploy sprawdź logi Traefik i czy port 80 jest dostępny z internetu (HTTP-01 challenge).