Ana içeriğe geç

Panel kurulumu

Panel apps/dashboard altındaki Next.js 15 uygulamasıdır. Mongo ile hiç doğrudan konuşmaz ve tarayıcıya hiçbir sır indirmez: her sayfa bir Server Component, her mutasyon bir server action'dır ve ikisi de API'nin /v1/admin yüzeyini paylaşılan bir token ile çağırır.

1 API tarafını yapılandır

API /v1/admin'i yalnızca ADMIN_API_TOKEN ayarlıyken açar. Yoksa bütün yüzey 404 döner — 401 değil — ki paneli olmayan bir kurulum kilitli bir kapı ilan etmesin.

# .env
ADMIN_API_TOKEN=$(openssl rand -hex 24) # ≥ 24 karakter
ENCRYPTION_KEY=# generate:keys zaten ayarladı

Değiştirdikten sonra API'yi yeniden başlatın.

2 Paneli yapılandır

Panelin dört değere ihtiyacı var; hiçbiri NEXT_PUBLIC_ değil:

# .env
API_URL=http://localhost:3000 # panel *sunucusu* API'ye nasıl ulaşır
ADMIN_API_TOKEN=# API'deki değerle aynı olmalı
SESSION_SECRET=$(openssl rand -hex 32)
ADMIN_PASSWORD_HASH=# aşağıda
INSECURE_COOKIES=false # yalnızca düz http localhost için true

Bootstrap parola hash'ini üretin:

bun run generate:admin-password
# Admin password (görünmeyecek): ********
# ADMIN_PASSWORD_HASH=JGFyZ29uMmlkJHY9MTkkbT0xOTQ1Nix0PTIscD0xJ…

Değer, argon2id hash'inin base64 kodlanmış halidir: ham hash $ işaretleriyle doludur ve Bun'ın .env ayrıştırıcısı, Compose interpolasyonu ve Dokploy'un ortam sekmesi her biri bunları farklı biçimde genişletir. Satırı yazdırıldığı gibi yapıştırın; panel açılışta çözer.

Localhost'ta düz HTTP

Oturum çerezi varsayılan olarak Secure'dur ve tarayıcılar http:// üzerinden düşürür. Yerel çalıştırma için INSECURE_COOKIES=true ayarlayın; üretimde asla.

3 Çalıştır

Compose altında panel zaten stack'in parçasıdır (docker/dashboard.Dockerfile, 127.0.0.1:3001'de yayınlanır) ve API'ye http://api:3000 olarak ulaşır; docker compose up -d yeterlidir. Traefik arkasında DASHBOARD_DOMAIN ayarlayın — bkz. Dokploy / Traefik.

Docker dışında:

bun run dev:dashboard # geliştirme, :3001
# ya da
bun run build:dashboard
bun --filter @opennotification/dashboard start

http://localhost:3001 adresini açın.

4 İlk giriş (bootstrap)

Giriş sayfası

E-posta alanını boş bırakıp hash'lediğiniz bootstrap parolasını girin. Bu yol yalnızca hiç üye hesabı yokken çalışır: sizi sahip olarak içeri alır ki gerçek hesapları davet edebilesiniz, ilk sahip aktif olur olmaz kendini kapatır.

Üyeler'e gidip kendinizi e-postanız ve owner rolüyle davet edin. Davet bağlantısını kabul edip parola belirleyin — bundan sonra e-posta + parolayla girersiniz ve ADMIN_PASSWORD_HASH girişi ölmüştür. Bkz. Üyeler.

Oturum ve güvenlik notları

  • Oturum imzalı bir JSON çerezidir (id, email, name, role, apps, exp), 7 gün, httpOnly, sameSite=strict. SESSION_SECRET'i değiştirmek herkesi çıkarır — kasıtlı panik düğmesi.
  • Giriş denemeleri hem panelde (bootstrap yolu) hem API'de (üye yolu) IP başına sınırlıdır.
  • Panelden gelen her mutasyon API'ye x-admin-actor / x-admin-actor-email başlıklarıyla ulaşır ve API bunu denetim günlüğüne yazar.
  • Panel kimlik bilgilerinin yalnızca durumunu okur. Saklanan .p8'i, service account'u ya da VAPID private key'i gösteremez — API hiç döndürmez.

Paneli dağıtma

Henüz panel Dockerfile'ı yok. bun run build:dashboard ile derleyip next start'ı bir process manager altında, API ile aynı reverse proxy'nin arkasında, kendi hostname'iyle (örn. push-admin.example.com) çalıştırın. API'ye API_URL üzerinden ulaşması yeterlidir; bu dahili adres olabilir — onu kullanan tek şey paneldir.