Add R2 image display in homepage with CDN support
All checks were successful
ci/woodpecker/push/deploy Pipeline was successful
All checks were successful
ci/woodpecker/push/deploy Pipeline was successful
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user