Author SHA1 Message Date
Gallus-maintanance 2af70c238b Update events
ci/woodpecker/push/woodpecker Pipeline was successful
2026-08-11 09:36:48 +00:00
Gallus-maintanance 30f4b9d8c5 Update events
ci/woodpecker/push/woodpecker Pipeline was successful
2026-08-11 08:47:41 +00:00
KenzoandClaude Opus 5 390b016cc2 fix(backend): Bilder unter /images/ ausliefern
ci/woodpecker/push/woodpecker Pipeline was successful
Die Bild-URLs in der DB sind /images/events/... bzw. /images/gallery/... -
das ist der Pfad auf der publizierten Astro-Seite. Das Backend lieferte die
Dateien aber nur unter /static/ mit Root auf dem Workspace aus, die Datei lag
also unter /static/public/images/... Ein Aufruf von /images/... traf auf gar
keine Route, kam als JSON-404 zurueck und wurde vom Browser als
OpaqueResponseBlocking verworfen. Dadurch waren im Adminbereich saemtliche
Event- und Gallery-Bilder kaputt.

Zusaetzlicher statischer Mount /images/ -> <workspace>/public/images. Die DB
bleibt unveraendert und die URLs stimmen weiterhin fuer die publizierte Seite.
/static/ bleibt zusaetzlich bestehen.

Beide Verzeichnisse werden vorab angelegt - @fastify/static verweigert sonst
die Registrierung, wenn der Workspace noch nicht geklont ist.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
2026-08-11 10:22:40 +02:00
KenzoandClaude Opus 5 e9d7ce262d ci: Backend per Woodpecker deployen
Die Pipeline hatte nur einen Deploy-Step fuer das Frontend (App gallus-pub).
Die Backend-App gallus-cms-backend wurde von der CI nie ausgerollt, sondern
haing am letzten manuellen fly deploy. Ein Push auf main hat damit zwar die
Admin-Seite aktualisiert, aber nie die API dahinter.

Step laeuft vor deploy_frontend und nutzt denselben FLY_API_TOKEN.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
2026-08-11 10:22:40 +02:00
Kenzo fdd3793ee1 Merge pull request 'fix(backend): Publish repariert - spawn git ENOENT und kaputter Image-Build' (#5) from fix/publish-git-enoent into main
ci/woodpecker/push/woodpecker Pipeline was successful
Reviewed-on: #5
2026-08-11 09:51:59 +02:00
4 changed files with 37 additions and 0 deletions
+15
View File
@@ -80,6 +80,21 @@ steps:
- branch: main - branch: main
event: push event: push
# Backend zuerst - die Admin-Seite braucht die API
deploy_backend:
image: node:20
environment:
FLY_API_TOKEN:
from_secret: FLY_API_TOKEN
commands:
- curl -L https://fly.io/install.sh | sh
- export PATH="$HOME/.fly/bin:$PATH"
# aus backend/ heraus, damit Build-Kontext und Dockerfile stimmen
- cd backend && flyctl deploy --app gallus-cms-backend --remote-only
when:
- branch: main
event: push
deploy_frontend: deploy_frontend:
image: node:20 image: node:20
environment: environment:
+14
View File
@@ -8,6 +8,7 @@ import { env, validateEnv } from './config/env.js';
import { db, initDatabase } from './config/database.js'; import { db, initDatabase } from './config/database.js';
import fastifyStatic from '@fastify/static'; import fastifyStatic from '@fastify/static';
import path from 'path'; import path from 'path';
import fs from 'fs';
// Import routes // Import routes
import authRoute from './routes/auth.js'; import authRoute from './routes/auth.js';
@@ -79,12 +80,25 @@ fastify.register(multipart, {
// Serve static files (uploaded images, etc.) from persistent volume // Serve static files (uploaded images, etc.) from persistent volume
const dataDir = env.GIT_WORKSPACE_DIR || path.join(process.cwd(), 'data'); const dataDir = env.GIT_WORKSPACE_DIR || path.join(process.cwd(), 'data');
// Muss existieren, sonst verweigert @fastify/static die Registrierung
fs.mkdirSync(dataDir, { recursive: true });
fastify.register(fastifyStatic, { fastify.register(fastifyStatic, {
root: dataDir, root: dataDir,
prefix: '/static/', prefix: '/static/',
decorateReply: false decorateReply: false
}); });
// Uploads liegen unter <workspace>/public/images. In der DB stehen sie als
// /images/... - das ist die URL auf der publizierten Astro-Seite. Damit die
// Admin-Oberflaeche dieselben Pfade verwenden kann, hier ebenso ausliefern.
const imagesDir = path.join(dataDir, 'public', 'images');
fs.mkdirSync(imagesDir, { recursive: true });
fastify.register(fastifyStatic, {
root: imagesDir,
prefix: '/images/',
decorateReply: false
});
// Decorate fastify with authenticate method // Decorate fastify with authenticate method
fastify.decorate('authenticate', authenticate); fastify.decorate('authenticate', authenticate);
Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

+8
View File
@@ -27,6 +27,14 @@ const events = [
Plätze sind begrenzt! Jetzt reservieren unter 🍀WA 077 232 27 70 Plätze sind begrenzt! Jetzt reservieren unter 🍀WA 077 232 27 70
`, `,
}, },
{
image: "/images/events/msogsj4l-bmlcxc.jpeg",
title: "SG Fest",
date: "2026-08-14",
description: `
Das Stadt-Fest steht vor der Tür! Wir haben OFFEN ab 17:00Uhr mit Karaoke! Wir freuen uns auf euch!
`,
},
{ {
image: "/images/events/mr82c7eh-yp87hy.jpeg", image: "/images/events/mr82c7eh-yp87hy.jpeg",
title: "Richie Live", title: "Richie Live",