From 122d15118210327bd0d4bb5b60a4cb185a2d3b43 Mon Sep 17 00:00:00 2001 From: Adrian Miesikowski Date: Tue, 10 Feb 2026 20:56:59 +0100 Subject: [PATCH] Switch from ISR to full SSR + add comprehensive logging --- Dockerfile | 6 +++++- app/api/blog/route.ts | 5 ++++- app/blog/[slug]/page.tsx | 4 ++-- app/blog/page.tsx | 4 ++-- app/page.tsx | 4 ++-- docker-entrypoint.sh | 21 +++++++++++++++++++++ lib/blog.ts | 4 ++++ lib/mongodb.ts | 21 ++++++++++++++++++--- 8 files changed, 58 insertions(+), 11 deletions(-) create mode 100644 docker-entrypoint.sh diff --git a/Dockerfile b/Dockerfile index f4e362e..2519aed 100644 --- a/Dockerfile +++ b/Dockerfile @@ -37,6 +37,10 @@ COPY --from=builder /app/public ./public COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static +# Copy entrypoint script +COPY --chown=nextjs:nodejs docker-entrypoint.sh ./ +RUN chmod +x docker-entrypoint.sh + USER nextjs EXPOSE 3000 @@ -44,4 +48,4 @@ EXPOSE 3000 ENV PORT=3000 ENV HOSTNAME="0.0.0.0" -CMD ["node", "server.js"] +CMD ["./docker-entrypoint.sh"] diff --git a/app/api/blog/route.ts b/app/api/blog/route.ts index 0981225..978a3eb 100644 --- a/app/api/blog/route.ts +++ b/app/api/blog/route.ts @@ -4,11 +4,14 @@ import { getAllPosts } from "@/lib/blog"; export const dynamic = "force-dynamic"; export async function GET(request: Request) { + console.log("[API] 🌐 GET /api/blog - Request received"); try { const { searchParams } = new URL(request.url); const category = searchParams.get("category") as "case-study" | "blog" | null; + console.log("[API] πŸ“‹ Parameters:", { category }); const posts = await getAllPosts(category || undefined); + console.log("[API] βœ… Response ready:", { count: posts.length }); return NextResponse.json({ success: true, @@ -16,7 +19,7 @@ export async function GET(request: Request) { count: posts.length, }); } catch (error) { - console.error("API Error:", error); + console.error("[API] ❌ Error:", error); return NextResponse.json({ success: false, error: "Failed to fetch posts" }, { status: 500 }); } } diff --git a/app/blog/[slug]/page.tsx b/app/blog/[slug]/page.tsx index e93a7a6..fdb1c35 100644 --- a/app/blog/[slug]/page.tsx +++ b/app/blog/[slug]/page.tsx @@ -3,8 +3,8 @@ import { notFound } from "next/navigation"; import { getAllPosts, getPostBySlug } from "@/lib/blog"; import BlogPost from "@/components/BlogPost"; -// ISR: Revalidate every 60 seconds -export const revalidate = 60; +// Force SSR - always fetch fresh data +export const dynamic = 'force-dynamic'; // Generate static params for all blog posts export async function generateStaticParams() { diff --git a/app/blog/page.tsx b/app/blog/page.tsx index ecc3a4f..81649bd 100644 --- a/app/blog/page.tsx +++ b/app/blog/page.tsx @@ -2,8 +2,8 @@ import type { Metadata } from "next"; import { getAllPosts } from "@/lib/blog"; import BlogList from "@/components/BlogList"; -// Revalidate every 60 seconds -export const revalidate = 60; +// Force SSR - always fetch fresh data +export const dynamic = 'force-dynamic'; export const metadata: Metadata = { title: "Blog AI i Case Studies β€” SZMYT AI Labs", diff --git a/app/page.tsx b/app/page.tsx index e82686c..c90e3f9 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -10,8 +10,8 @@ import ScrollReveal from "@/components/ScrollReveal"; import FeaturedBlog from "@/components/FeaturedBlog"; import { getFeaturedPosts } from "@/lib/blog"; -// Revalidate every 60 seconds -export const revalidate = 60; +// Force SSR - always fetch fresh data +export const dynamic = 'force-dynamic'; export const metadata: Metadata = { title: "Sztuczna Inteligencja dla Firm β€” WdroΕΌenie AI w Biznesie | SZMYT AI Labs", diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh new file mode 100644 index 0000000..391ef1e --- /dev/null +++ b/docker-entrypoint.sh @@ -0,0 +1,21 @@ +#!/bin/sh + +echo "=========================================" +echo "πŸš€ Starting sztucznainteligencjadlafirm container" +echo "=========================================" +echo "" +echo "πŸ“¦ Environment Variables:" +echo " NODE_ENV: ${NODE_ENV}" +echo " PORT: ${PORT}" +echo " MONGODB_URI: ${MONGODB_URI}" +echo "" +echo "πŸ” Container Info:" +echo " Hostname: $(hostname)" +echo " User: $(whoami)" +echo " PWD: $(pwd)" +echo "" +echo "=========================================" +echo "" + +# Start Next.js server +exec node server.js diff --git a/lib/blog.ts b/lib/blog.ts index c1fe171..b70b65d 100644 --- a/lib/blog.ts +++ b/lib/blog.ts @@ -56,17 +56,21 @@ function serializePost(post: any): BlogPost { export async function getAllPosts( category?: "case-study" | "blog", ): Promise { + console.log("[Blog] πŸ“š Fetching posts...", { category: category || "all" }); try { const client = await clientPromise; const db = client.db(DB_NAME); const query = category ? { category } : {}; + console.log("[Blog] πŸ” Query:", query); + const posts = await db .collection(COLLECTION_NAME) .find(query) .sort({ publishedAt: -1 }) .toArray(); + console.log("[Blog] βœ… Posts fetched:", posts.length); return posts.map(serializePost); } catch (error) { console.error("Database Error:", error); diff --git a/lib/mongodb.ts b/lib/mongodb.ts index a606214..2d7dbb5 100644 --- a/lib/mongodb.ts +++ b/lib/mongodb.ts @@ -1,9 +1,13 @@ import { MongoClient } from "mongodb"; -// Production MongoDB connection -const uri = +// MongoDB connection from environment or fallback +const uri = process.env.MONGODB_URI || "mongodb://mo1124_ai_web:~4nfR5EA)3%C2%A3%40@mongo76.mydevil.net:27017/mo1124_ai_web?authSource=mo1124_ai_web"; +console.log("[MongoDB] πŸ”§ Initializing connection..."); +console.log("[MongoDB] πŸ“ URI:", uri.replace(/:\/\/([^:]+):([^@]+)@/, "://:@")); +console.log("[MongoDB] 🌍 Environment:", process.env.NODE_ENV); + // Use global variable to preserve connection across HMR in development let globalWithMongo = global as typeof globalThis & { _mongoClientPromise?: Promise; @@ -12,8 +16,19 @@ let globalWithMongo = global as typeof globalThis & { let clientPromise: Promise; if (!globalWithMongo._mongoClientPromise) { + console.log("[MongoDB] πŸ”Œ Creating new connection..."); const client = new MongoClient(uri); - globalWithMongo._mongoClientPromise = client.connect(); + globalWithMongo._mongoClientPromise = client.connect() + .then((client) => { + console.log("[MongoDB] βœ… Connected successfully"); + return client; + }) + .catch((error) => { + console.error("[MongoDB] ❌ Connection failed:", error.message); + throw error; + }); +} else { + console.log("[MongoDB] ♻️ Reusing existing connection"); } clientPromise = globalWithMongo._mongoClientPromise;