Prechádzať zdrojové kódy

feat: вкладка MinIO Console в админке, прокси /minio/* → minio:9002 через Caddy

neyrogovnarik 1 mesiac pred
rodič
commit
3a04939de5

+ 10 - 1
deploy/Caddyfile

@@ -2,8 +2,17 @@
 	http_port 80
 }
 
-# API subdomain — прокси на backend + MinIO (HTTP, SSL на Synology)
+# API subdomain — прокси на backend + MinIO + MinIO console (HTTP, SSL на Synology)
 http://api.{$DOMAIN} {
+	# MinIO Console (встраивается в iframe в админке)
+	handle_path /minio/* {
+		reverse_proxy minio:9002
+		header {
+			-X-Frame-Options
+			Content-Security-Policy "frame-ancestors http://{$DOMAIN} https://{$DOMAIN};"
+		}
+	}
+
 	handle_path /files/* {
 		reverse_proxy minio:9000 {
 			header_up Host {host}

+ 1 - 0
frontend/src/app/admin/layout.tsx

@@ -107,6 +107,7 @@ export default function AdminLayout({ children }: { children: React.ReactNode })
     { href: '/admin', label: 'Модерация', icon: '📋' },
     { href: '/admin/users', label: 'Пользователи', icon: '👥' },
     { href: '/admin/tags', label: 'Теги', icon: '🏷️' },
+    { href: '/admin/minio', label: 'MinIO', icon: '☁️' },
   ]
 
   return (

+ 18 - 0
frontend/src/app/admin/minio/page.tsx

@@ -0,0 +1,18 @@
+'use client'
+
+export default function MinioConsolePage() {
+  return (
+    <div className="flex h-full flex-col">
+      <div className="mb-4 flex items-center justify-between">
+        <h1 className="text-lg font-bold text-white">MinIO Console</h1>
+      </div>
+      <div className="flex-1 overflow-hidden rounded-lg border border-white/10">
+        <iframe
+          src="https://api.photoplaces.ru/minio"
+          className="h-full w-full"
+          sandbox="allow-scripts allow-forms allow-same-origin allow-popups"
+        />
+      </div>
+    </div>
+  )
+}