Add R2 image display in homepage with CDN support
All checks were successful
ci/woodpecker/push/deploy Pipeline was successful

This commit is contained in:
2026-02-10 03:10:57 +02:00
parent 2f07cc86db
commit 8a380499e7
2 changed files with 15 additions and 2 deletions

View File

@@ -98,6 +98,10 @@ Backend получает запросы с prefix `/api/` (Caddy использ
### Конфигурация ### Конфигурация
- `backend/src/GBSite.Api/appsettings.Local.json` — connection string к dev_db (gitignored) - `backend/src/GBSite.Api/appsettings.Local.json` — connection string к dev_db (gitignored)
- `.NET User Secrets` — R2 credentials и другие секреты (хранятся вне репо)
- Управление: `dotnet user-secrets set "R2:AccountId" "value"` (из папки `backend/src/GBSite.Api`)
- Просмотр: `dotnet user-secrets list`
- User secrets имеют приоритет выше appsettings*.json
- `frontend/.env.local``LOCAL_API_URL` и `INTERNAL_API_URL` для локального проксирования - `frontend/.env.local``LOCAL_API_URL` и `INTERNAL_API_URL` для локального проксирования
- `deploy/docker-compose.local.yml` — Docker backend с `host.docker.internal:5433` - `deploy/docker-compose.local.yml` — Docker backend с `host.docker.internal:5433`
@@ -175,7 +179,7 @@ Locally via `appsettings.Local.json` with SSH tunnel (`localhost:5433`).
- **CDN domain:** https://cdn.goodbrick.com.ua - **CDN domain:** https://cdn.goodbrick.com.ua
- **Bucket:** goodbrick - **Bucket:** goodbrick
- **Frontend:** `NEXT_PUBLIC_CDN_URL` env var, `cdnUrl()` helper in `src/lib/cdn.ts` - **Frontend:** `NEXT_PUBLIC_CDN_URL` env var, `cdnUrl()` helper in `src/lib/cdn.ts`
- **Backend:** `R2__*` env vars, `R2StorageService` for uploads - **Backend:** `R2__*` env vars (server), .NET User Secrets (local), `R2StorageService` for uploads
- **Upload endpoint:** `POST /api/upload` — multipart/form-data, max 10MB, images only (jpeg/png/webp/avif) - **Upload endpoint:** `POST /api/upload` — multipart/form-data, max 10MB, images only (jpeg/png/webp/avif)
### Folder Convention ### Folder Convention
@@ -185,7 +189,7 @@ Locally via `appsettings.Local.json` with SSH tunnel (`localhost:5433`).
## Key Rules ## Key Rules
- Never commit `.env` files or secrets — credentials are in docker-compose env vars on server - Never commit `.env` files or secrets — on server: docker-compose env vars, locally: .NET User Secrets
- Frontend standalone output (`output: "standalone"` in next.config.ts) — required for Docker - Frontend standalone output (`output: "standalone"` in next.config.ts) — required for Docker
- Backend listens on port 5000 (`ASPNETCORE_URLS=http://+:5000`) - Backend listens on port 5000 (`ASPNETCORE_URLS=http://+:5000`)
- All containers must be in `app-network` (external Docker network) - All containers must be in `app-network` (external Docker network)

View File

@@ -1,3 +1,5 @@
import Image from "next/image";
import { cdnUrl } from "@/lib/cdn";
import { PostHogTestButton } from "./posthog-test-button"; import { PostHogTestButton } from "./posthog-test-button";
export default function Home() { export default function Home() {
@@ -8,6 +10,13 @@ export default function Home() {
<p className="text-xl text-muted-foreground"> <p className="text-xl text-muted-foreground">
Производитель фасадной плитки Производитель фасадной плитки
</p> </p>
<Image
src={cdnUrl("test/Frame 55.png")}
alt="Test R2 image"
width={600}
height={486}
className="rounded-lg shadow-lg"
/>
<div className="flex gap-4 text-sm text-muted-foreground"> <div className="flex gap-4 text-sm text-muted-foreground">
<span>Next.js</span> <span>Next.js</span>
<span>+</span> <span>+</span>