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/ADMINbawaan, 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:
| Mount | Tujuan |
|---|---|
POST /api/admin/login /oauth/* | Endpoint autentikasi khusus admin (lokal + SSO) |
GET /api/admin/verify | Memvalidasi sesi admin |
/api/admin/users | Pencatatan dan pencarian pengguna |
/api/admin/groups | CRUD grup + manajemen anggota |
/api/admin/roles | CRUD peran kustom + pengeditan izin + manajemen anggota |
/api/admin/grants | Pemberian kapabilitas sistem (menetapkan/mencabut/daftar) |
/api/admin/config | Dasar + 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 kapabilitasaccess:admin
Dibundel dengan LibreChat (direkomendasikan)
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 Compose | URL panel admin | Cara disajikan |
|---|---|---|
docker-compose.yml (default) | http://localhost:3000 | Diterbitkan pada port host (ADMIN_PANEL_PORT, default 3000) |
deploy-compose.yml | http://admin.localhost | Dirutekan 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=falseFile 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 # stopdocker 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:latestJaringan 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:3000Environment Variables
| Variabel | Wajib | Default | Deskripsi |
|---|---|---|---|
SESSION_SECRET | Ya di produksi | Cadangan dev hardcoded saat menjalankan bun dev; tidak ada default di image Docker | Kunci enkripsi sesi. Harus minimal 32 karakter. |
VITE_API_BASE_URL | Ya di Docker | http://localhost:3080 (hanya dev lokal) | URL server API LibreChat yang menghadap ke browser, digunakan untuk pengalihan OAuth. |
API_SERVER_URL | Tidak | Mengacu ke VITE_API_BASE_URL | URL 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). |
PORT | Tidak | 3000 | Port yang digunakan oleh admin panel. |
ADMIN_PANEL_SESSION_SECRET | Ya di produksi | Mengacu ke CREDS_KEY di stack Docker LibreChat yang dibundel | Variabel 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_PORT | Tidak | 3000 | Port host yang diekspos oleh layanan admin-panel yang dibundel dalam docker-compose.yml default. |
ADMIN_SSO_ONLY | Tidak | false | Menyembunyikan formulir email/kata sandi, memaksa login hanya melalui SSO. |
ADMIN_SESSION_IDLE_TIMEOUT_MS | Tidak | 1800000 (30 menit) | Batas waktu sesi tidak aktif dalam milidetik. |
SESSION_COOKIE_SECURE | Tidak | true di produksi | Apakah cookie sesi memerlukan HTTPS. |
ADMIN_PANEL_METRICS_SECRET | Tidak | tidak diatur | Bearer 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/adminUntuk 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/adminUntuk 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.
| Variabel | Tujuan |
|---|---|
STATIC_CACHE_MAX_AGE / ADMIN_PANEL_STATIC_CACHE_MAX_AGE | max-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_AGE | s-maxage CDN dalam detik (default 86400 = 1 hari). |
INDEX_CACHE_CONTROL / ADMIN_PANEL_INDEX_CACHE_CONTROL | Header Cache-Control untuk respons indeks HTML. |
INDEX_PRAGMA / ADMIN_PANEL_INDEX_PRAGMA | Header Pragma untuk respons indeks HTML. |
INDEX_EXPIRES / ADMIN_PANEL_INDEX_EXPIRES | Header 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=trueuntuk menyembunyikan formulir kata sandi sepenuhnya.
Akses admin diverifikasi di sisi server oleh LibreChat untuk setiap permintaan. Akun tersebut harus:
- Memiliki
role: 'ADMIN'di MongoDB, atau - 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"
recursionLimityang lebih tinggi dan endpoint tambahan - Izinkan peran "FinanceAdmins" untuk mengelola server MCP sementara pengguna biasa hanya dapat menggunakannya
- Batasi izin
interfaceyang lebih ketat untuk grup kontraktor eksternal
Terkait
- Access Control: model perizinan yang menjadi dasar pembangunan panel admin
- Konfigurasi Antarmuka: fitur flag yang disunting oleh panel
- Authentication: autentikasi pengguna pada LibreChat
- changelog v0.8.5: fondasi API admin
- GitHub: ClickHouse/librechat-admin-panel: sumber, masalah, rilis
Bagaimana panduan ini?
Kontrol Akses
Sistem otorisasi granular LibreChat - kendalikan siapa yang dapat menggunakan, membagikan, mengedit, dan mengelola agen, prompt, server MCP, serta sumber daya lainnya di tingkat pengguna, grup, peran, dan instans.
Atur Ulang Kata Sandi
Fitur ini mengaktifkan fungsionalitas pengaturan ulang kata sandi berbasis email untuk server LibreChat Anda.