Skip to main content
LibreChat is joining ClickHouse to power the open-source Agentic Data Stack 🎉 Learn more
LibreChat

Panel Admin

UI web mandiri untuk mengelola pengguna, grup, peran, penggantian konfigurasi, dan hibah sistem LibreChat - tanpa perlu mengedit librechat.yaml secara manual.

Panel Admin LibreChat

LibreChat Admin Panel adalah antarmuka manajemen berbasis peramban yang berdiri sendiri untuk LibreChat. Panel ini terhubung ke basis data yang sama dengan LibreChat itu sendiri dan menyediakan GUI untuk tugas-tugas administratif yang mendukung granular access control: administrasi pengguna dan grup, manajemen peran, penggantian konfigurasi yang dicakup untuk peran atau grup, serta pemberian kapabilitas tingkat sistem.

Status: Pratinjau

Panel admin kini tersedia untuk pengujian dan merupakan antarmuka manajemen mendatang yang dibangun di atas API admin yang diperkenalkan pada LibreChat v0.8.5. Sumber kode, isu, dan rilis tersedia di github.com/ClickHouse/librechat-admin-panel.

Apa Fungsinya

Panel admin adalah klien tipis: semua data tersimpan di basis data LibreChat, dan setiap tindakan melalui endpoint /api/admin/* yang memiliki versi di server API LibreChat. Panel ini memberikan administrator satu tempat untuk:

  • Kelola konfigurasi: lihat dan edit setiap pengaturan LibreChat melalui formulir dinamis berbasis skema. Bidang baru yang ditambahkan ke skema konfigurasi akan muncul secara otomatis, tanpa memerlukan rilis panel admin.
  • Terapkan penggantian per-principal: cakup penggantian konfigurasi ke peran atau grup tertentu, dengan kaskade berbasis prioritas yang menentukan nilai akhir yang diselesaikan yang dilihat setiap pengguna saat login.
  • Mengelola pengguna: mencantumkan, mencari, dan melihat setiap akun pada instance.
  • Kelola grup: membuat dan menghapus grup, menambah/menghapus anggota, serta menggunakan grup sebagai prinsipal kelas satu dalam ACL dan penggantian (overrides).
  • Kelola peran: buat peran kustom di luar USER / ADMIN bawaan, edit matriks fitur-izin mereka, dan tetapkan pengguna ke peran tersebut.
  • Issue system grants: mendelegasikan kemampuan admin (contoh: manage:users, read:usage, manage:mcpservers) kepada pengguna, grup, atau peran tertentu tanpa menjadikan mereka admin penuh.
  • Authenticate: masuk dengan akun admin LibreChat lokal, atau melalui OpenID SSO / SAML / penyedia OAuth yang didukung saat fitur tersebut diaktifkan pada instance LibreChat.

Untuk model izin yang mendasarinya (prinsipal, ACL sumber daya, kapabilitas, dan bagaimana lapisan-lapisan tersebut disusun), lihat halaman Access Control.

Arsitektur

┌──────────────────┐         ┌──────────────────┐         ┌──────────────┐
│  Admin Panel     │ ───────▶│  LibreChat API   │ ───────▶│   MongoDB    │
│  (Bun + Vite)    │  HTTPS  │  /api/admin/*    │         │  (shared DB) │
└──────────────────┘         └──────────────────┘         └──────────────┘
       │                             │
       │ OAuth/OIDC/SAML redirect    │ Verifies admin access
       └─────────────────────────────┘

Panel admin berjalan sebagai layanan terpisah; layanan ini tidak berbagi proses dengan LibreChat. Kemampuan admin diverifikasi di sisi LibreChat melalui pemberian akses access:admin atau peran SystemRoles.ADMIN, sehingga panel tidak dapat memberikan hak istimewa kepada dirinya sendiri yang seharusnya tidak dimilikinya.

Permukaan API admin yang diekspos oleh LibreChat adalah:

MountTujuan
POST /api/admin/login   /oauth/*Endpoint autentikasi khusus admin (lokal + SSO)
GET /api/admin/verifyMemvalidasi sesi admin
/api/admin/usersPencatatan dan pencarian pengguna
/api/admin/groupsCRUD grup + manajemen anggota
/api/admin/rolesCRUD peran kustom + pengeditan izin + manajemen anggota
/api/admin/grantsPemberian kapabilitas sistem (menetapkan/mencabut/daftar)
/api/admin/configDasar + penggantian konfigurasi per-prinsipal

Memulai

Prasyarat

  • Instans LibreChat yang sedang berjalan pada v0.8.5 atau lebih baru (API admin tidak tersedia pada versi sebelumnya)
  • Akses jaringan dari container/host admin-panel ke API LibreChat
  • Akun admin di LibreChat: bisa berupa pengguna yang pertama kali mendaftar (auto-admin), pengguna dengan role: 'ADMIN' yang diatur di Mongo, atau prinsipal yang telah diberikan kapabilitas access:admin

Jika Anda menjalankan LibreChat dengan docker-compose.yml atau deploy-compose.yml resminya, panel admin akan disertakan sebagai layanan dan dimulai secara otomatis bersama LibreChat -- tidak diperlukan penerapan terpisah.

File ComposeURL panel adminCara disajikan
docker-compose.yml (default)http://localhost:3000Diterbitkan pada port host (ADMIN_PANEL_PORT, default 3000)
deploy-compose.ymlhttp://admin.localhostDirutekan melalui reverse proxy nginx bawaan pada subdomain

Atur session secret panel di dalam .env LibreChat sebelum memulai stack; file compose akan meneruskannya sebagai SESSION_SECRET panel:

# Min 32 characters. Generate with: openssl rand -hex 32
ADMIN_PANEL_SESSION_SECRET=replace-with-a-32-char-random-string

# Optional: host port for the default docker-compose
# ADMIN_PANEL_PORT=3000

# Optional: set true when the panel is served over HTTPS
# ADMIN_PANEL_SESSION_COOKIE_SECURE=false

File compose menghubungkan sisanya secara otomatis: API_SERVER_URL mengarah ke layanan api, VITE_API_BASE_URL mengikuti DOMAIN_CLIENT untuk pengalihan OAuth yang menghadap ke browser, dan ADMIN_PANEL_URL diatur agar LibreChat mengembalikan admin ke panel setelah SSO. Untuk tidak ikut serta, hapus layanan admin-panel atau batasi di balik entri profiles Compose.

admin.localhost pada domain asli

Peramban modern meresolusi *.localhost (termasuk admin.localhost) ke 127.0.0.1, sehingga URL deploy-compose berfungsi tanpa perubahan file hosts. Untuk domain asli, arahkan record DNS ke host tersebut, perbarui server_name admin.localhost di client/nginx.conf, dan atur ADMIN_PANEL_URL agar sesuai.

Standalone (penyebaran terpisah)

Untuk menghosting panel admin secara mandiri -- yang diarahkan ke instans LibreChat yang berjalan di tempat lain -- gunakan image yang dipublikasikan dari GHCR:

# 1. Create an env file
cp .env.example .env

# 2. Edit .env and set at minimum:
#    SESSION_SECRET=<random string, min 32 characters>
#    VITE_API_BASE_URL=http://host.docker.internal:3080

# 3. Start it
docker compose up -d   # http://localhost:3000
docker compose down    # stop

docker run mandiri:

docker run -p 3000:3000 \
  --add-host=host.docker.internal:host-gateway \
  -e SESSION_SECRET=replace-with-32-char-random-string \
  -e VITE_API_BASE_URL=http://host.docker.internal:3080 \
  ghcr.io/clickhouse/librechat-admin-panel:latest

Jaringan Docker

Di dalam container, localhost merujuk pada container itu sendiri, bukan host Anda. Saat LibreChat berjalan pada host yang sama, arahkan VITE_API_BASE_URL ke http://host.docker.internal:3080 (Linux: tambahkan --add-host=host.docker.internal:host-gateway). Dalam produksi, gunakan nama DNS publik/internal dari API LibreChat Anda.

Jalankan Secara Lokal untuk Pengembangan

git clone https://github.com/ClickHouse/librechat-admin-panel.git
cd librechat-admin-panel
cp .env.example .env    # then edit
bun install
bun dev                 # http://localhost:3000

Environment Variables

VariabelWajibDefaultDeskripsi
SESSION_SECRETYa di produksiCadangan dev hardcoded saat menjalankan bun dev; tidak ada default di image DockerKunci enkripsi sesi. Harus minimal 32 karakter.
VITE_API_BASE_URLYa di Dockerhttp://localhost:3080 (hanya dev lokal)URL server API LibreChat yang menghadap ke browser, digunakan untuk pengalihan OAuth.
API_SERVER_URLTidakMengacu ke VITE_API_BASE_URLURL sisi server untuk panggilan API LibreChat. Berguna ketika server admin-panel mengakses LibreChat pada URL yang berbeda dari browser (misalnya layanan Kubernetes internal vs. hostname publik).
PORTTidak3000Port yang digunakan oleh admin panel.
ADMIN_PANEL_SESSION_SECRETYa di produksiMengacu ke CREDS_KEY di stack Docker LibreChat yang dibundelVariabel sisi LibreChat yang dipetakan ke SESSION_SECRET admin panel untuk layanan admin-panel yang dibundel. Buat nilai unik minimal 32 karakter untuk produksi.
ADMIN_PANEL_PORTTidak3000Port host yang diekspos oleh layanan admin-panel yang dibundel dalam docker-compose.yml default.
ADMIN_SSO_ONLYTidakfalseMenyembunyikan formulir email/kata sandi, memaksa login hanya melalui SSO.
ADMIN_SESSION_IDLE_TIMEOUT_MSTidak1800000 (30 menit)Batas waktu sesi tidak aktif dalam milidetik.
SESSION_COOKIE_SECURETidaktrue di produksiApakah cookie sesi memerlukan HTTPS.
ADMIN_PANEL_METRICS_SECRETTidaktidak diaturBearer token yang diperlukan untuk mengambil data dari endpoint Prometheus /metrics. Endpoint akan mengembalikan 401 jika tidak diatur atau tidak cocok.

Dalam tumpukan Docker bawaan LibreChat, panel admin berjalan sebagai layanan admin-panel. docker-compose.yml standar mengeksposnya pada ADMIN_PANEL_PORT; deploy-compose.yml merutekannya melalui nginx di http://admin.localhost dan mengatur ADMIN_PANEL_URL untuk layanan API.

URL Pengalihan LibreChat

Ketika panel admin di-host pada URL yang terpisah dari LibreChat, atur ADMIN_PANEL_URL di lingkungan API LibreChat. Gunakan URL dasar panel admin eksternal, termasuk awalan jalur (path prefix) apa pun, dan hilangkan garis miring (trailing slash) di akhir:

ADMIN_PANEL_URL=https://admin.example.com/admin

Untuk penyebaran Helm, atur librechat.adminPanelUrl di dalam file values Anda. Chart tersebut akan merendernya sebagai ADMIN_PANEL_URL untuk alur OAuth admin LibreChat:

librechat:
  adminPanelUrl: https://admin.example.com/admin

Untuk OpenID SSO, daftarkan ${DOMAIN_SERVER}/api/admin/oauth/openid/callback dengan penyedia identitas Anda.

Kontrol Cache

Ini mencerminkan env var cache LibreChat. Varian ADMIN_PANEL_* lebih diutamakan, dan akan kembali ke padanan LibreChat bersama jika tidak diatur.

VariabelTujuan
STATIC_CACHE_MAX_AGE / ADMIN_PANEL_STATIC_CACHE_MAX_AGEmax-age peramban dalam detik untuk aset yang di-hash di /assets/ (default 172800 = 2 hari).
STATIC_CACHE_S_MAX_AGE / ADMIN_PANEL_STATIC_CACHE_S_MAX_AGEs-maxage CDN dalam detik (default 86400 = 1 hari).
INDEX_CACHE_CONTROL / ADMIN_PANEL_INDEX_CACHE_CONTROLHeader Cache-Control untuk respons indeks HTML.
INDEX_PRAGMA / ADMIN_PANEL_INDEX_PRAGMAHeader Pragma untuk respons indeks HTML.
INDEX_EXPIRES / ADMIN_PANEL_INDEX_EXPIRESHeader Expires untuk respons indeks HTML.

Autentikasi

Panel admin menggunakan kembali tumpukan autentikasi LibreChat dan tidak memiliki basis data pengguna sendiri. Dua jalur masuk didukung:

  • Akun lokal: nama pengguna/kata sandi terhadap pengguna LibreChat mana pun yang akunnya lolos pemeriksaan akses admin.
  • Single sign-on: OpenID Connect, SAML, dan penyedia OAuth sosial yang sudah dikonfigurasi pada instans LibreChat Anda. Atur ADMIN_SSO_ONLY=true untuk menyembunyikan formulir kata sandi sepenuhnya.

Akses admin diverifikasi di sisi server oleh LibreChat untuk setiap permintaan. Akun tersebut harus:

  1. Memiliki role: 'ADMIN' di MongoDB, atau
  2. Memiliki hak akses sistem access:admin (diberikan kepada principal lain melalui panel admin itu sendiri; lihat System Grants).

Sesi berbasis cookie, dienkripsi dengan SESSION_SECRET, dan akan kedaluwarsa saat tidak aktif sesuai dengan ADMIN_SESSION_IDLE_TIMEOUT_MS.

Manajemen Konfigurasi

Panel ini merender konfigurasi LibreChat sebagai formulir dinamis yang didorong oleh skema konfigurasi. Hal ini memiliki dua properti yang berguna:

  • Forward-compatible: ketika LibreChat merilis field konfigurasi baru, panel akan mengambilnya secara otomatis dari skema. Tidak diperlukan peningkatan atau redeploy panel admin.
  • Layered overrides: konfigurasi dasar (dari librechat.yaml) dapat dibayangi oleh override per-principal yang dicakup ke peran atau grup. Saat pengguna masuk, override diselesaikan berdasarkan urutan prioritas dan digabungkan di atas konfigurasi dasar untuk menghasilkan konfigurasi efektif yang dilihat oleh pengguna tersebut.

Ini adalah antarmuka di balik sistem penggantian konfigurasi per-prinsipal berbasis DB milik LibreChat. Kasus penggunaan umum:

  • Berikan grup "Research" recursionLimit yang lebih tinggi dan endpoint tambahan
  • Izinkan peran "FinanceAdmins" untuk mengelola server MCP sementara pengguna biasa hanya dapat menggunakannya
  • Batasi izin interface yang lebih ketat untuk grup kontraktor eksternal

Bagaimana panduan ini?