The nginx rate limiter in front of Discourse (web.ratelimited) answers 429
with an HTML page, so reading wait_seconds as JSON crashed the script
halfway through creating categories. Fall back to Retry-After or 10 s.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The forum is shared by SEOSoft's products, so SQLInsight Pro becomes the
top-level category "sqlinsight" with the existing categories beneath it.
- render.py/install.sh: default hostname forum.seosoft.dk
- configure.py: forum-wide settings ("SEOSoft Forum") kept apart from the
SQLInsight Pro category tree; subcategories found via /site.json; the
welcome topic is pinned in the category, not on the shared front page
- Community site: ForumCategory option. The front page lists only that
category's topics (c/<slug>/l/latest.json); forum links go to the
category, topic links stay at the forum root
- Web: default ForumUrl https://forum.seosoft.dk/c/sqlinsight. The old
forum.sqlinsight.seosoft.dk stays as a redirect for installed versions
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Discourse uses AUTH PLAIN by default. Microsoft 365 only offers LOGIN and
XOAUTH2 and rejects PLAIN with "504 5.7.4 Unrecognized authentication
type", so no sign-up mail was sent.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
COMMUNITY_PORT og FORUM_PORT er nu valgfrie secrets. Webstedets deploy
springes over, indtil COMMUNITY_CONTACT er sat.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E3EExwndy8Z22EK2Qpt6BK
Workflowet stoppede med "FORUM_PORT is not set", fordi forummets secrets ikke
er oprettet endnu. Nu tjekkes alle påkrævede secrets først og listes samlet,
og install.sh validerer værdierne, før discourse_docker klones.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E3EExwndy8Z22EK2Qpt6BK
- deploy-community.yml: bygger og starter webstedet ved push (som hubben),
bundet til DMZ-adressen. Springes over, indtil COMMUNITY_PORT er sat.
Feedet læses skrivebeskyttet fra hubbens feed-mappe; download-links går
til hub.sqlinsight.seosoft.dk/updates/ (ny indstilling DownloadUrl).
- deploy-forum.yml (manuel): kører discourse_docker-launcheren i en
helper-container med /var/discourse og docker.sock fra værten.
app.yml er en skabelon, som render.py udfylder fra secrets.
- Discourse uden egen TLS: lytter på DMZ-adressen, tvinger https-links og
tager klient-IP fra X-Forwarded-For fra proxyen (ellers rammer rate
limiting alle brugere samlet).
- Caddy-opsætningen er fjernet; docs/community.md beskriver secrets og
proxy-opsætning.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E3EExwndy8Z22EK2Qpt6BK
- src/SQLInsight.Community: offentligt websted med forside, funktioner, download
af signerede udgivelser (med SHA-256), dokumentation fra docs/, SQL Server-
versioner fra den nyeste signerede regelpakke, regler og supportaftaler.
Viser de seneste forumemner. Streng CSP, ingen login, ingen database.
- deploy/forum: Discourse-opsætning (app.yml til discourse_docker, dansk
sprog og søgning), install.sh og configure.py, der idempotent opsætter
kategorier, løste svar, velkomstemne og indstillinger via API'et.
- deploy/community: Dockerfile og docker compose med Caddy til TLS.
- Webbrugerfladen linker til forum, dokumentation og support på webstedet
(SQLInsight:Web:ForumUrl og CommunityUrl).
- Udgivelsesfiler hedder sqlinsight-<version>-<platform>.<ext>.
- Tests: sider, 404, signerede og manipulerede feeds, forum (også nede),
dokumentationslinks og regler.
- docs/community.md.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E3EExwndy8Z22EK2Qpt6BK