fix: switch sitemap/robots to dynamic generation + Nginx proxy
CI Pipeline / backend-test (push) Successful in 8m58s
CI Pipeline / frontend-test (push) Successful in 29s
CI Pipeline / frontend-build (push) Successful in 31s
CI Pipeline / backend-lint (push) Successful in 10s
CI Pipeline / backend-test (pull_request) Successful in 8m56s
CI Pipeline / frontend-test (pull_request) Successful in 28s
CI Pipeline / frontend-build (pull_request) Successful in 32s
CI Pipeline / backend-lint (pull_request) Successful in 11s
CI Pipeline / quality-gate (push) Successful in 3s
CI Pipeline / quality-gate (pull_request) Successful in 3s

The reviewer noted the static sitemap.xml had a hardcoded domain in a
white-label app.  Instead of writing files to disk, we now serve
sitemap.xml and robots.txt as dynamic API endpoints that read
KMTN_WEBSITE_URL at runtime.

- Nginx proxies /sitemap.xml and /robots.txt to the backend API so
  search crawlers reach them at root paths.
- Removed the startup filesystem-write that would fail in Docker
  (backend can't write to Nginx container's static dir).
- Simplified sitemap_export.py to pure generation functions (no I/O).
- Added /api/sitemap/regenerate admin endpoint for consistency.
This commit is contained in:
Hermes Robot committed 2026-08-04 20:06:00 +00:00
1 parent 5484c761b4
commit 3dead2921a
4 files changed
+67 -99

No files matched your search

-8
View File
@@ -183,14 +183,6 @@ async def lifespan(app: FastAPI):
except Exception as e:
print(f" WARNING: Failed to write theme.json on startup: {e}")
# Write sitemap.xml + robots.txt on startup (tenant-aware)
try:
from app.sitemap_export import write_sitemap_files
info = write_sitemap_files()
print(f" ✓ Sitemap + robots.txt written (base_url={info['base_url']})")
except Exception as e:
print(f" WARNING: Failed to write sitemap on startup: {e}")
# Check GeoLite2 database
geo_db = settings.GEOLITE2_DB_PATH
if os.path.exists(geo_db):