Standardporte til websted og forum (8081 og 8082)
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

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
This commit is contained in:
Claude 2026-09-29 14:15:14 +00:00
parent 85d3674d53
commit 64ccaedf1f
No known key found for this signature in database
5 changed files with 19 additions and 16 deletions

View file

@ -4,7 +4,8 @@
# Samme mønster som deploy-hub.yml: runneren er host-mode, så .env og compose-filen skrives til INSTALL_DIR # Samme mønster som deploy-hub.yml: runneren er host-mode, så .env og compose-filen skrives til INSTALL_DIR
# via en kortlivet helper-container, og 'docker compose up' køres i docker:cli. # via en kortlivet helper-container, og 'docker compose up' køres i docker:cli.
# #
# Påkrævede secrets: HOST_BIND COMMUNITY_PORT COMMUNITY_CONTACT # Påkrævede secrets: HOST_BIND COMMUNITY_CONTACT
# Valgfri: COMMUNITY_PORT (8081)
# Valgfri: TRUSTED_KEY_ID + TRUSTED_KEY (offentlig nøgle, som feedet er signeret med, hvis den ikke er indbygget) # Valgfri: TRUSTED_KEY_ID + TRUSTED_KEY (offentlig nøgle, som feedet er signeret med, hvis den ikke er indbygget)
# ============================================================================= # =============================================================================
name: deploy community name: deploy community
@ -40,13 +41,13 @@ jobs:
- name: Configured? - name: Configured?
id: check id: check
env: env:
COMMUNITY_PORT: ${{ secrets.COMMUNITY_PORT }} COMMUNITY_CONTACT: ${{ secrets.COMMUNITY_CONTACT }}
run: | run: |
# Indtil secrets er sat, springes deploy over i stedet for at fejle hvert push. # Indtil secrets er sat, springes deploy over i stedet for at fejle hvert push.
if [ -n "${COMMUNITY_PORT:-}" ]; then if [ -n "${COMMUNITY_CONTACT:-}" ]; then
echo "configured=true" >> "$GITHUB_OUTPUT" echo "configured=true" >> "$GITHUB_OUTPUT"
else else
echo "::warning::COMMUNITY_PORT er ikke sat; webstedet deployes ikke (se docs/community.md)" echo "::warning::COMMUNITY_CONTACT er ikke sat; webstedet deployes ikke (se docs/community.md)"
echo "configured=false" >> "$GITHUB_OUTPUT" echo "configured=false" >> "$GITHUB_OUTPUT"
fi fi
@ -70,6 +71,7 @@ jobs:
TRUSTED_KEY: ${{ secrets.TRUSTED_KEY }} TRUSTED_KEY: ${{ secrets.TRUSTED_KEY }}
run: | run: |
set -eu set -eu
COMMUNITY_PORT="${COMMUNITY_PORT:-8081}"
required="HOST_BIND COMMUNITY_PORT COMMUNITY_CONTACT" required="HOST_BIND COMMUNITY_PORT COMMUNITY_CONTACT"
missing=0 missing=0
for v in $required; do for v in $required; do
@ -121,7 +123,7 @@ jobs:
run: | run: |
set -eu set -eu
for i in $(seq 1 30); do for i in $(seq 1 30); do
if docker run --rm alpine:3 wget -qO- -T 3 "http://${HOST_BIND}:${COMMUNITY_PORT}/health" 2>/dev/null | grep -q '"ok"'; then if docker run --rm alpine:3 wget -qO- -T 3 "http://${HOST_BIND}:${COMMUNITY_PORT:-8081}/health" 2>/dev/null | grep -q '"ok"'; then
echo "${CONTAINER} is healthy" echo "${CONTAINER} is healthy"
exit 0 exit 0
fi fi

View file

@ -7,8 +7,8 @@
# Runneren er host-mode, så launcheren køres i en helper-container med /var/discourse og docker.sock fra værten. # Runneren er host-mode, så launcheren køres i en helper-container med /var/discourse og docker.sock fra værten.
# app.yml udfyldes fra secrets af render.py; intet hemmeligt ligger i repoet. # app.yml udfyldes fra secrets af render.py; intet hemmeligt ligger i repoet.
# #
# Påkrævede secrets: HOST_BIND FORUM_PORT KNOWN_PROXY FORUM_ADMIN_EMAIL FORUM_SMTP_ADDRESS FORUM_SMTP_USER FORUM_SMTP_PASSWORD # Påkrævede secrets: HOST_BIND KNOWN_PROXY FORUM_ADMIN_EMAIL FORUM_SMTP_ADDRESS FORUM_SMTP_USER FORUM_SMTP_PASSWORD
# Valgfri: FORUM_SMTP_PORT (587) FORUM_NOTIFICATION_EMAIL (= FORUM_SMTP_USER) FORUM_WORKERS (4) FORUM_DB_SHARED_BUFFERS (512MB) # Valgfri: FORUM_PORT (8082) FORUM_SMTP_PORT (587) FORUM_NOTIFICATION_EMAIL (= FORUM_SMTP_USER) FORUM_WORKERS (4) FORUM_DB_SHARED_BUFFERS (512MB)
# ============================================================================= # =============================================================================
name: deploy forum name: deploy forum
@ -47,7 +47,7 @@ jobs:
run: | run: |
set -eu set -eu
missing="" missing=""
for v in FORUM_BIND FORUM_PORT KNOWN_PROXY FORUM_ADMIN_EMAIL FORUM_SMTP_ADDRESS FORUM_SMTP_USER FORUM_SMTP_PASSWORD; do for v in FORUM_BIND KNOWN_PROXY FORUM_ADMIN_EMAIL FORUM_SMTP_ADDRESS FORUM_SMTP_USER FORUM_SMTP_PASSWORD; do
[ -n "$(printenv "$v" || true)" ] || missing="$missing $v" [ -n "$(printenv "$v" || true)" ] || missing="$missing $v"
done done
if [ -n "$missing" ]; then if [ -n "$missing" ]; then
@ -70,7 +70,7 @@ jobs:
run: | run: |
set -eu set -eu
for i in $(seq 1 60); do for i in $(seq 1 60); do
if docker run --rm alpine:3 wget -qO- -T 3 "http://${HOST_BIND}:${FORUM_PORT}/srv/status" 2>/dev/null | grep -q ok; then if docker run --rm alpine:3 wget -qO- -T 3 "http://${HOST_BIND}:${FORUM_PORT:-8082}/srv/status" 2>/dev/null | grep -q ok; then
echo "forum is up" echo "forum is up"
exit 0 exit 0
fi fi

View file

@ -38,8 +38,8 @@ cd "$TARGET"
host="${FORUM_HOSTNAME:-forum.sqlinsight.seosoft.dk}" host="${FORUM_HOSTNAME:-forum.sqlinsight.seosoft.dk}"
cat <<NEXT cat <<NEXT
Discourse kører på ${FORUM_BIND}:${FORUM_PORT}. Første gang: Discourse kører på ${FORUM_BIND}:${FORUM_PORT:-8082}. Første gang:
1. Peg reverse proxyen for $host på http://${FORUM_BIND}:${FORUM_PORT} (med X-Forwarded-Proto: https og WebSockets). 1. Peg reverse proxyen for $host på http://${FORUM_BIND}:${FORUM_PORT:-8082} (med X-Forwarded-Proto: https og WebSockets).
2. Åbn https://$host og opret administratoren med adressen i FORUM_ADMIN_EMAIL. 2. Åbn https://$host og opret administratoren med adressen i FORUM_ADMIN_EMAIL.
3. Lav en API-nøgle til opsætningen: 3. Lav en API-nøgle til opsætningen:
docker exec app su discourse -c 'cd /var/www/discourse && RAILS_ENV=production bundle exec rake api_key:create_master[forum-setup]' docker exec app su discourse -c 'cd /var/www/discourse && RAILS_ENV=production bundle exec rake api_key:create_master[forum-setup]'

View file

@ -3,8 +3,8 @@
render.py <template> <output> render.py <template> <output>
Required: FORUM_BIND FORUM_PORT KNOWN_PROXY FORUM_ADMIN_EMAIL FORUM_SMTP_ADDRESS FORUM_SMTP_USER FORUM_SMTP_PASSWORD Required: FORUM_BIND KNOWN_PROXY FORUM_ADMIN_EMAIL FORUM_SMTP_ADDRESS FORUM_SMTP_USER FORUM_SMTP_PASSWORD
Optional: FORUM_HOSTNAME (forum.sqlinsight.seosoft.dk), FORUM_SMTP_PORT (587), FORUM_NOTIFICATION_EMAIL (FORUM_SMTP_USER), Optional: FORUM_HOSTNAME (forum.sqlinsight.seosoft.dk), FORUM_PORT (8082), FORUM_SMTP_PORT (587), FORUM_NOTIFICATION_EMAIL (FORUM_SMTP_USER),
FORUM_WORKERS (4), FORUM_DB_SHARED_BUFFERS (512MB) FORUM_WORKERS (4), FORUM_DB_SHARED_BUFFERS (512MB)
""" """
import ipaddress import ipaddress
@ -14,6 +14,7 @@ import sys
DEFAULTS = { DEFAULTS = {
"FORUM_HOSTNAME": "forum.sqlinsight.seosoft.dk", "FORUM_HOSTNAME": "forum.sqlinsight.seosoft.dk",
"FORUM_PORT": "8082",
"FORUM_SMTP_PORT": "587", "FORUM_SMTP_PORT": "587",
"FORUM_WORKERS": "4", "FORUM_WORKERS": "4",
"FORUM_DB_SHARED_BUFFERS": "512MB", "FORUM_DB_SHARED_BUFFERS": "512MB",

View file

@ -28,7 +28,7 @@ Discourse installeres med den officielle `discourse_docker`-launcher, som er den
| Secret | Eksempel | | | Secret | Eksempel | |
|---|---|---| |---|---|---|
| `HOST_BIND`, `KNOWN_PROXY` | (findes allerede til hubben) | DMZ-adresse og reverse proxyens adresse | | `HOST_BIND`, `KNOWN_PROXY` | (findes allerede til hubben) | DMZ-adresse og reverse proxyens adresse |
| `FORUM_PORT` | `8082` | Port på DMZ-adressen | | `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_ADMIN_EMAIL` | din adresse | Bliver administrator ved tilmelding |
| `FORUM_SMTP_ADDRESS`, `FORUM_SMTP_USER`, `FORUM_SMTP_PASSWORD` | | Mailserver (STARTTLS) | | `FORUM_SMTP_ADDRESS`, `FORUM_SMTP_USER`, `FORUM_SMTP_PASSWORD` | | Mailserver (STARTTLS) |
| `FORUM_SMTP_PORT` | `587` | Valgfri | | `FORUM_SMTP_PORT` | `587` | Valgfri |
@ -80,9 +80,9 @@ Webstedet er en lille ASP.NET Core-applikation uden database. Det viser:
- **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. - **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. - **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 kræver tre secrets: `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); - `HOST_BIND` (findes allerede);
- `COMMUNITY_PORT`, fx `8081`; - `COMMUNITY_PORT`: valgfri, standard `8081`;
- `COMMUNITY_CONTACT`: adressen til henvendelser om supportaftaler. - `COMMUNITY_CONTACT`: adressen til henvendelser om supportaftaler.
Peg `sqlinsight.seosoft.dk` på `http://HOST_BIND:COMMUNITY_PORT` i reverse proxyen. Peg `sqlinsight.seosoft.dk` på `http://HOST_BIND:COMMUNITY_PORT` i reverse proxyen.