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>
7.9 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.seosoft.dk/c/sqlinsight |
SEOSofts fælles Discourse-forum på dansk. SQLInsight Pro er kategorien sqlinsight med underkategorier: spørgsmål og svar (med løste svar), installation og drift, performance, regler, idéer og annonceringer. |
Alle navne 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.seosoft.dk |
app (Discourse, fælles for SEOSofts produkter) |
FORUM_PORT |
deploy-forum.yml, kun manuelt |
forum.sqlinsight.seosoft.dk |
– | – | 301-redirect til forum.seosoft.dk (/ → /c/sqlinsight). Ældre installationer linker hertil |
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)
Forummet er fælles for SEOSofts produkter. Hvert produkt har sin egen hovedkategori; SQLInsight Pro har sqlinsight. Webstedet sætter ForumCategory: sqlinsight, så forsiden kun viser SQLInsight-emner.
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.
-
Krav: Discourse bruger 2-4 GB RAM og 20 GB disk under
/var/discoursepå appserveren. -
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.
-
Secrets i repoet (Indstillinger → Actions → Secrets):
Secret Eksempel HOST_BIND,KNOWN_PROXY(findes allerede til hubben) DMZ-adresse og reverse proxyens adresse FORUM_PORT8082Valgfri. Porten på appserverens DMZ-adresse, som reverse proxyen sender forummet til FORUM_ADMIN_EMAILdin adresse Bliver administrator ved tilmelding FORUM_SMTP_ADDRESS,FORUM_SMTP_USER,FORUM_SMTP_PASSWORDMailserver (STARTTLS) FORUM_SMTP_PORT587Valgfri FORUM_NOTIFICATION_EMAILforum@seosoft.dkValgfri, ellers FORUM_SMTP_USERFORUM_WORKERS,FORUM_DB_SHARED_BUFFERS4,512MBValgfri: ca. 2 pr. CPU-kerne og 25 % af den RAM, Discourse må bruge -
Reverse proxy: Peg
forum.seosoft.dkpåhttp://HOST_BIND:FORUM_PORT. Hostnavnet kan ændres medFORUM_HOSTNAME. -
Installation: Kør Actions → deploy forum → Run workflow. Første gang tager det 10-15 minutter. Det samme workflow bruges, når
app.ymleller secrets ændres. Selve Discourse opdateres fra /admin/upgrade. -
Administrator: Åbn forummet, og opret en bruger med
FORUM_ADMIN_EMAIL. Den bliver administrator. -
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.seosoft.dk DISCOURSE_API_KEY=... \ CONTACT_EMAIL=support@... python3 deploy/forum/configure.pyconfigure.pygør følgende:- sætter forummets titel ("SEOSoft Forum"), beskrivelser, dansk sprog, tags og løste svar (pluginnet
solvedfølger med Discourse); - opretter hovedkategorien SQLInsight Pro (
sqlinsight) og underkategorierne med beskrivelser. Kun medarbejdere kan oprette emner i Annonceringer. Andre produkters kategorier røres ikke; - opretter et velkomstemne og fastgør det i SQLInsight Pro (ikke på hele forummets forside);
- skjuler Discourses engelske standardemne.
Scriptet kan køres igen. Det ændrer kun det, der afviger. Slet API-nøglen bagefter under Admin → API.
- sætter forummets titel ("SEOSoft Forum"), beskrivelser, dansk sprog, tags og løste svar (pluginnet
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.ymligen. - 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, standard8081;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.