sqlinsight-pro/.forgejo/workflows/deploy-forum.yml
Claude 69fa641f26
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
deploy hub / deploy (push) Successful in 24s
CI / Build og unit tests (push) Successful in 56s
deploy community / deploy (push) Successful in 1s
CI / MSI-installer (push) Successful in 33s
Websted og forum bag SEOSofts reverse proxy på appserveren
- 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
2026-09-29 13:59:53 +00:00

73 lines
3.1 KiB
YAML

# =============================================================================
# Installér eller genopbyg forummet (Discourse, forum.sqlinsight.seosoft.dk) på appserveren.
#
# Kun manuelt (Actions → deploy forum → Run workflow): en rebuild tager 10-15 minutter, og forummet er nede imens.
# Discourse opdateres ellers fra /admin/upgrade.
#
# 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.
#
# Påkrævede secrets: HOST_BIND FORUM_PORT 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)
# =============================================================================
name: deploy forum
on:
workflow_dispatch:
concurrency:
group: deploy-sqlinsight-forum
cancel-in-progress: false
jobs:
deploy:
runs-on: [self-hosted, appserver]
timeout-minutes: 60
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Build launcher helper
run: docker build -t sqlinsight-forum-launcher deploy/forum
- name: Rebuild Discourse
env:
FORUM_BIND: ${{ secrets.HOST_BIND }}
FORUM_PORT: ${{ secrets.FORUM_PORT }}
KNOWN_PROXY: ${{ secrets.KNOWN_PROXY }}
FORUM_ADMIN_EMAIL: ${{ secrets.FORUM_ADMIN_EMAIL }}
FORUM_SMTP_ADDRESS: ${{ secrets.FORUM_SMTP_ADDRESS }}
FORUM_SMTP_PORT: ${{ secrets.FORUM_SMTP_PORT }}
FORUM_SMTP_USER: ${{ secrets.FORUM_SMTP_USER }}
FORUM_SMTP_PASSWORD: ${{ secrets.FORUM_SMTP_PASSWORD }}
FORUM_NOTIFICATION_EMAIL: ${{ secrets.FORUM_NOTIFICATION_EMAIL }}
FORUM_WORKERS: ${{ secrets.FORUM_WORKERS }}
FORUM_DB_SHARED_BUFFERS: ${{ secrets.FORUM_DB_SHARED_BUFFERS }}
run: |
set -eu
# Samme sti inde og ude, så launcherens bind mounts (/var/discourse/shared/...) peger på værtens mapper.
docker run --rm \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /var/discourse:/var/discourse \
-e FORUM_BIND -e FORUM_PORT -e KNOWN_PROXY -e FORUM_ADMIN_EMAIL \
-e FORUM_SMTP_ADDRESS -e FORUM_SMTP_PORT -e FORUM_SMTP_USER -e FORUM_SMTP_PASSWORD \
-e FORUM_NOTIFICATION_EMAIL -e FORUM_WORKERS -e FORUM_DB_SHARED_BUFFERS \
sqlinsight-forum-launcher
- name: Wait for the forum
env:
HOST_BIND: ${{ secrets.HOST_BIND }}
FORUM_PORT: ${{ secrets.FORUM_PORT }}
run: |
set -eu
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
echo "forum is up"
exit 0
fi
echo "attempt $i: not ready"
sleep 5
done
docker logs --tail 100 app || true
exit 1