sqlinsight-pro/docs/community.md
Claude 64ccaedf1f
Some checks are pending
CI / Integration (mcr.microsoft.com/mssql/server:2017-latest) (push) Blocked by required conditions
CI / Integration (mcr.microsoft.com/mssql/server:2019-latest) (push) Blocked by required conditions
CI / Integration (mcr.microsoft.com/mssql/server:2022-latest) (push) Blocked by required conditions
CI / Integration (mcr.microsoft.com/mssql/server:2025-latest) (push) Blocked by required conditions
CI / Build og unit tests (push) Successful in 54s
deploy community / deploy (push) Successful in 1s
CI / MSI-installer (push) Successful in 35s
Standardporte til websted og forum (8081 og 8082)
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
2026-09-29 14:15:14 +00:00

7.3 KiB

Community-websted og forum

SQLInsight Pro har to offentlige websteder. Begge drives af SEOSoft:

Websted Adresse Hvad
Community-webstedet https://sqlinsight.seosoft.dk Forside, funktioner, download af signerede udgivelser, dokumentation, SQL Server-versioner og supportdatoer, regler og supportaftaler. Projektet src/SQLInsight.Community.
Forummet https://forum.sqlinsight.seosoft.dk Discourse på dansk: spørgsmål og svar (med løste svar), installation og drift, performance, regler, idéer og annonceringer.

Alle tre navne (også hub.sqlinsight.seosoft.dk) peger på SEOSofts offentlige IP. Reverse proxyen dér terminerer TLS og sender videre til appserverens DMZ-adresse (HOST_BIND), på hver sin port:

Navn Container Port (secret) Deploy
hub.sqlinsight.seosoft.dk sqlinsight-hub HOST_PORT deploy-hub.yml, ved push
sqlinsight.seosoft.dk sqlinsight-community COMMUNITY_PORT deploy-community.yml, ved push
forum.sqlinsight.seosoft.dk app (Discourse) FORUM_PORT deploy-forum.yml, kun manuelt

Proxyen skal sende Host, X-Forwarded-For og X-Forwarded-Proto: https. For forummet skal den også tillade WebSockets og lange forespørgsler (Discourse bruger long polling på /message-bus/, så timeout skal være mindst 60 sekunder).

Forummet (Discourse)

Discourse installeres med den officielle discourse_docker-launcher, som er den eneste måde, Discourse understøtter. Workflowet deploy-forum.yml kører launcheren på appserveren i en helper-container, med /var/discourse og docker.sock fra værten. deploy/forum/app.yml er en skabelon, som render.py udfylder fra secrets. Intet hemmeligt ligger i repoet.

  1. Krav: Discourse bruger 2-4 GB RAM og 20 GB disk under /var/discourse på appserveren.

  2. Mail: Discourse kan ikke fungere uden SMTP. Tilmelding, notifikationer og nulstilling af adgangskode sker på mail. Opret en postkasse til forummet, og sørg for SPF og DKIM for afsenderdomænet.

  3. Secrets i repoet (Indstillinger → Actions → Secrets):

    Secret Eksempel
    HOST_BIND, KNOWN_PROXY (findes allerede til hubben) DMZ-adresse og reverse proxyens adresse
    FORUM_PORT 8082 Valgfri. Porten på appserverens DMZ-adresse, som reverse proxyen sender forummet til
    FORUM_ADMIN_EMAIL din adresse Bliver administrator ved tilmelding
    FORUM_SMTP_ADDRESS, FORUM_SMTP_USER, FORUM_SMTP_PASSWORD Mailserver (STARTTLS)
    FORUM_SMTP_PORT 587 Valgfri
    FORUM_NOTIFICATION_EMAIL forum@seosoft.dk Valgfri, ellers FORUM_SMTP_USER
    FORUM_WORKERS, FORUM_DB_SHARED_BUFFERS 4, 512MB Valgfri: ca. 2 pr. CPU-kerne og 25 % af den RAM, Discourse må bruge
  4. Reverse proxy: Peg forum.sqlinsight.seosoft.dk på http://HOST_BIND:FORUM_PORT.

  5. Installation: Kør Actions → deploy forum → Run workflow. Første gang tager det 10-15 minutter. Det samme workflow bruges, når app.yml eller secrets ændres. Selve Discourse opdateres fra /admin/upgrade.

  6. Administrator: Åbn forummet, og opret en bruger med FORUM_ADMIN_EMAIL. Den bliver administrator.

  7. Opsætning som kode: Lav en midlertidig API-nøgle på appserveren:

    docker exec app su discourse -c 'cd /var/www/discourse && RAILS_ENV=production bundle exec rake api_key:create_master[forum-setup]'
    

    Kør derefter:

    DISCOURSE_URL=https://forum.sqlinsight.seosoft.dk DISCOURSE_API_KEY=... \
    CONTACT_EMAIL=support@... python3 deploy/forum/configure.py
    

    configure.py gør følgende:

    • sætter titel, beskrivelser, dansk sprog, tags og løste svar (pluginnet solved følger med Discourse);
    • opretter kategorierne med beskrivelser. Kun medarbejdere kan skrive i Annonceringer;
    • opretter og fastgør et velkomstemne;
    • skjuler Discourses engelske standardemne.

    Scriptet kan køres igen. Det ændrer kun det, der afviger. Slet API-nøglen bagefter under Admin → API.

Uden Forgejo: Eksportér de samme værdier (FORUM_BIND i stedet for HOST_BIND), og kør sudo -E deploy/forum/install.sh på serveren.

Drift:

  • Opdatering: via /admin/upgrade. Discourses basisimage opdateres ved at køre deploy-forum.yml igen.
  • Backup: Discourse tager dagligt backup til /var/discourse/shared/standalone/backups. Slå upload til S3 eller kopiering væk fra serveren til under Admin → Backups.
  • Logge: ./launcher logs app.

Forslag til moderation:

  • Lad SEOSoft-medarbejdere have rollen moderator.
  • Markér det bedste svar som løsning, så svaret kan findes igen.
  • Kunder med supportaftale skal bruge mail- eller telefonsupport til sager med kundedata. Forummet er offentligt.

Community-webstedet

Webstedet er en lille ASP.NET Core-applikation uden database. Det viser:

  • Udgivelser: Kun udgivelser fra det signerede opdateringsfeed med en gyldig SEOSoft-signatur vises. Webstedet viser altså præcis det, agenterne ville installere, med SHA-256 for hver fil.
  • SQL Server-versioner: Seneste CU'er og supportstatus, fra den nyeste signerede regelpakke i feedet.
  • Dokumentation: Filerne i docs/, bygget ind i programmet. Links mellem dokumenterne bliver til sider, og links til andre filer i repositoriet går til Forgejo. HTML i Markdown vises ikke.
  • Forum: De seneste emner fra forummets offentlige /latest.json. Hvis forummet er nede, virker webstedet stadig.

deploy-community.yml bygger og starter webstedet ved hvert push til main, der ændrer kode, dokumentation eller regler. Det bruger disse secrets:

  • HOST_BIND (findes allerede);
  • COMMUNITY_PORT: valgfri, standard 8081;
  • COMMUNITY_CONTACT: adressen til henvendelser om supportaftaler.

Peg sqlinsight.seosoft.dk på http://HOST_BIND:COMMUNITY_PORT i reverse proxyen.

Webstedet læser hubbens feed-mappe (/opt/sqlinsight-hub/data/feed) direkte og skrivebeskyttet. Download-links går til https://hub.sqlinsight.seosoft.dk/updates/. Dermed afhænger webstedet ikke af, at appserveren kan nå sin egen offentlige adresse. Forumemnerne på forsiden hentes derimod fra forummets offentlige adresse. Kan appserveren ikke nå den, vises forsiden bare uden emner.

Indstilling (SQLInsight:Community:…) Standard Betydning
Feed (ingen) Det signerede opdateringsfeed: en mappe eller en https-adresse. Uden feed vises ingen udgivelser, og versionssiden bruger den indbyggede regelpakke.
DownloadUrl Feed Offentlig adresse til download-links, når Feed er en mappe eller en intern adresse.
ForumUrl (ingen) Forummets adresse. Bruges til links, /forum og de seneste emner.
SourceUrl Forgejo-repositoriet Link til kildekoden og til filer, som dokumentationen henviser til.
ContactEmail salg@example.com Adressen på supportsiden. Skal sættes.
TrustedKeys:<id> (ingen) Offentlige nøgler ud over de indbyggede. Brug samme værdi som for agenterne.
CacheFor 00:10:00 Hvor længe feed og forumemner caches.

Webstedet sender strenge sikkerhedsheadere (CSP uden inline-scripts og -styles, X-Frame-Options: DENY). Det har ingen login og gemmer ingen data om besøgende.

Uden Docker: dotnet publish src/SQLInsight.Community -c Release. Kør det derefter som en Windows-tjeneste eller en systemd-tjeneste bag IIS, nginx eller Caddy.