Commit Graph

58 Commits

Author SHA1 Message Date
Rylan Cai 52756f6904 ✨ chore(eval): add run Harbor Skill (#19625)
* ✨ feat(eval): add local Harbor harness

* ✨ feat(eval): support local and cloud Harbor targets

* 🐛 fix(eval): expose npm lh binary to Harbor shells

* 🐛 fix(eval): harden Harbor bootstrap and runner
2026-09-16 14:18:50 +08:00
Arvin Xu c5ec20abab ✨ feat(docker): run self-hosted Compose chats in Gateway Mode by default (#19583)
* ✨ feat(docker): run self-hosted Compose chats in Gateway Mode by default

- Add the lobehub-gateway service to docker-compose and wire the lobe service
  to it; AGENT_GATEWAY_INTERNAL_URL keeps server pushes on the Compose network
  while browsers use AGENT_GATEWAY_URL.
- S3_INTERNAL_ENDPOINT routes the server's own S3 requests to rustfs:9000 while
  presigned URLs keep the browser-facing S3_ENDPOINT, which local mode sets to
  localhost and the container cannot reach.
- setup.sh generates a per-deployment JWKS_KEY and gateway token and writes the
  gateway URL for each deploy mode; the .env template drops the public JWKS key.
- Warn loudly at container startup when an upgraded stack lacks the gateway
  settings or still uses the public example JWKS_KEY, and document the upgrade.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* 🔒 fix(docker): pass only the public JWK to the gateway container

The gateway only needs the public half of JWKS_KEY to verify browser
sessions, but it received the full private key set, so anyone able to read
the gateway environment could sign tokens LobeHub trusts. setup.sh now also
writes JWKS_PUBLIC_KEY (the same key without d/p/q/dp/dq/qi), Compose passes
only that to the gateway, and the startup check warns when it is missing,
still contains private fields, or does not match JWKS_KEY.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-09-16 00:33:26 +08:00
Arvin Xu 40f8f469cf 🐛 fix(docker): make the one-click Docker Compose install start on the released image (#19590)
- Apply a bucket CORS rule in rustfs-init so browser uploads to RustFS through
  presigned URLs are not blocked by the preflight.
- Preload pg_cron and pg_stat_statements alongside pg_search, matching the
  ParadeDB image default. Its first-start bootstrap creates pg_cron under set -e,
  so preloading only pg_search aborted initialization, restarted the container
  and failed the first docker compose up with an unhealthy database.
- Probe PostgreSQL health over TCP with a start period. During initialization the
  image runs a temporary socket-only server, so the socket probe passed early and
  LobeHub's migrations failed with ECONNREFUSED until it had restarted repeatedly.
- setup.sh downloads templates from lobehub/lobehub main, uses curl with a wget
  fallback, and detects the host IP on macOS where hostname -I is missing.

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-09-15 21:46:07 +08:00
Arvin Xu 37f77f1313 🔧 chore(docker): replace minio with rustfs/rc in compose scripts (#19572)
* 🔧 chore(docker): replace minio with rustfs/rc in compose scripts

- dev/deploy: swap minio/mc init image for rustfs/rc and rename mc
  commands to their mc-compatible rc equivalents
- production/grafana: replace the minio server with rustfs/rustfs,
  split bucket initialization into a rustfs-init sidecar using
  rustfs/rc, and rename MINIO_* env vars to RUSTFS_*
- verified locally: rc alias/mb/ls/anonymous set-json/admin info work
  against a live RustFS server

* 🔥 revert(docker): drop production/grafana migration, keep minimal rustfs/rc swap

Per review feedback, the production/grafana changes (named volume switch
and MINIO_* -> RUSTFS_* env rename) break existing deployments' data and
.env contract. Revert them; keep only the rustfs-init image swap
(minio/mc -> rustfs/rc) and mc -> rc command rename in dev/deploy.

---------

Co-authored-by: arvinxx <arvinxuxu@icloud.com>
2026-09-15 13:53:21 +08:00
YuTengjing 13ada65ad9 ✨ feat(fts-search): safe per-entity Elasticsearch mapping migrations (#19186) 2026-09-09 09:03:40 +08:00
YuTengjing 330c12a760 ✨ feat(self-host): add optional Elasticsearch to Docker Compose (#19028) 2026-09-02 17:37:38 +08:00
qybaihe 4b0ac06411 🐛 fix: use S3 policy Id field for RustFS init (#15603)
Co-authored-by: YuTengjing <ytj2713151713@gmail.com>
2026-07-29 23:46:44 +08:00
Sui_Feng 2731937feb 🔨 chore(docker-compose): Explicitly enable pg_search in the Paradedb container (#16096)
Enable pg_search in Postgres containers

Start Postgres with shared_preload_libraries=pg_search in three docker-compose files (deploy, dev, production/grafana). This adds a command to the Postgres service so the pg_search library is preloaded on startup, ensuring the pg_search extension is available for full-text search features.
Related Links: https://github.com/paradedb/paradedb/pull/4914
2026-06-20 14:44:14 +08:00
WindSpiritSR 0439a29189 🔨 chore(docker): replace dev/prod pgsql docker image with paradedb (#13373)
🐛 fix(docker): replace dev/prod pgsql docker image with paradedb

Signed-off-by: WindSpiritSR <simon343riley@gmail.com>
2026-03-30 16:52:00 +08:00
YuTengjing 1df5ae32f1 🐛 fix: distinguish SSRF block errors from network errors (#13103) 2026-03-18 18:16:19 +08:00
Marcell Gu 023e3ef11a 📝 docs: Simplify docker compose network architecture & Remove broken links from docker compose docs (#12749)
* ♻️ refactor(docker): simplify network architecture and add admin port
- Remove unnecessary network-service (alpine) container
- Use dedicated lobe-network bridge for all services
- Add RUSTFS_ADMIN_PORT environment variable for admin console
- Update container-to-container communication to use Docker service names
- Use relative path volumes for better data persistence

* 📝 docs: update Docker Compose deployment guide
- Add single-domain deployment documentation
- Update INTERNAL_APP_URL guidance
- Clarify Port Mode vs Domain Mode behavior
- Add S3_ENDPOINT configuration tips
- Remove broken link to non-existent server-database documentation

* fix(docker): keep backward-compatible volume paths for existing deployments

- PostgreSQL: Keep ./data (not ./postgres_data)
- Redis: Keep redis_data named volume (not ./redis_data)
- RustFS: Keep rustfs-data named volume (not ./rustfs_data)

This ensures existing users can upgrade without data migration.

* fix(docker): correct Port Mode vs Domain Mode description

- Fix reversed explanation in comments
- Port Mode: Uses default ports (3210/9000/9001)
- Domain Mode: Custom ports via reverse proxy

This aligns with the actual deployment script behavior.
2026-03-10 09:55:56 +08:00
Innei fcdaf9d814 🔧 chore: update eslint v2 configuration and suppressions (#12133)
* v2 init

* chore: update eslint suppressions and package dependencies

- Removed several eslint suppressions related to array sorting and reversing from eslint-suppressions.json to clean up the configuration.
- Updated @lobehub/lint package version from 2.0.0-beta.6 to 2.0.0-beta.7 in package.json for improvements and bug fixes.
- Made minor formatting adjustments in vitest.config.mts and various SKILL.md files for better readability and consistency.

Signed-off-by: Innei <tukon479@gmail.com>

* fix: clean up import statements and formatting

- Removed unnecessary whitespace in replaceComponentImports.ts for improved readability.
- Standardized import statements in contextEngineering.ts and createAgentExecutors.ts by adding missing spaces for consistency.

Signed-off-by: Innei <tukon479@gmail.com>

* chore: update eslint suppressions and clean up code formatting

* 🐛 fix: use vi.hoisted for mock variable initialization

Fix TDZ error in persona service test by using vi.hoisted() to ensure
mock variables are available when vi.mock factory runs.

---------

Signed-off-by: Innei <tukon479@gmail.com>
2026-02-11 13:04:48 +08:00
YuTengjing 7ba15cceba ♻️ refactor(docker-compose): restructure dev environment (#12132)
* 🔥 chore(docker-compose): remove Casdoor SSO dependency

Casdoor is no longer needed since BetterAuth now supports email/password registration natively.

LOBE-3907

* ♻️ refactor(docker-compose): restructure directories

- Rename local/ to dev/ for development dependencies
- Remove logto/ and zitadel/ from production/
- Restore Casdoor config in production/grafana/
- Simplify dev/ to core services only (postgresql, redis, rustfs, searxng)
- Update docker-compose.development.yml to use dev/
- Remove minio-bucket.config.json (switched to rustfs)

* ♻️ refactor(docker-compose): simplify dev environment setup

- Remove docker-compose.development.yml, use dev/docker-compose.yml directly
- Add npm scripts: dev:docker, dev:docker:down, dev:docker:reset
- Simplify .env.example.development (remove variable refs, redundant vars)
- Update docker-compose/dev/.env.example (consistent passwords)
- Add docker-compose/dev/data/ to .gitignore
- Update setup docs: use npm scripts, remove image generation section

* 🔧 chore: add SSRF_ALLOW_PRIVATE_IP_ADDRESS to dev env example

* 🔒 security: auto-generate KEY_VAULTS_SECRET and AUTH_SECRET in setup.sh

- Remove hardcoded secrets from docker-compose.yml
- Add placeholders to .env.example files
- Generate secrets dynamically in setup.sh using openssl rand -base64 32

* 🔧 chore(docker-compose): expose SearXNG port and improve dev scripts

- Add SearXNG port mapping (8180:8080) for host access
- Use --wait flag in dev:docker to ensure services are healthy
- Include db:migrate in dev:docker:reset for one-command reset
- Update MinIO reference to RustFS in zh-CN docs
- Add SearXNG to service URLs and port conflict docs
2026-02-06 12:21:30 +08:00
YuTengjing e2fd28eece 🐛 fix: hide password features when AUTH_DISABLE_EMAIL_PASSWORD is set (#12023) 2026-02-02 14:17:10 +08:00
Arvin Xu 4a87b31246 📝 docs: improve docs (#12013)
Update docs
2026-01-31 19:46:44 +08:00
Arvin Xu f17acd7f7e ♻️ chore(docker-compose): refactor docker compose (#11989)
* improve message content

* ♻️ refactor(docker-compose): 创建精简版 deploy 配置

- 新建 docker-compose/deploy 目录,包含最小化部署配置
- 仅保留核心服务:postgresql、redis、rustfs、searxng、lobe
- 移除 Casdoor 认证服务相关配置
- 移除可观测性服务(Grafana/Prometheus/Tempo/otel-collector)
- 使用 paradedb/paradedb:latest 镜像(支持 pgvector + pg_search)
- 更新 setup.sh 指向新的 deploy 目录
- 清理 .env 示例文件中的 Casdoor 相关配置

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* update document

* update content

* update content

* improve env

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 18:15:43 +08:00
YuTengjing e6cb6cb592 🐛 fix: rename docker image and update docs for v2 (#11911) 2026-01-27 22:14:58 +08:00
Rylan Cai 56942d4d57 👷 docs: Migrate On-Click Deployment to LobeHub (#11856)
* wip: use rustfs

* wip: update init rustfs

* wip: fix rustfs ports

* wip: fix rustfs ak sk

* wip: add dbg points

* fix: mc ak pk err

* fix: missing sso provider

* chore: set `lobe` to lobehub/lobehub

* 🐛 fix: network err

* chore: add webhook secret

* chore: add no searxng log display

* chore: update docs

* 🐛 fix: remove unstable options to fit older server

* 🐛 fix: add warning to add jwks

* 🐛 fix: check status after create bucket
2026-01-26 20:23:56 +08:00
YuTengjing 1eff8646f7 ✨ feat: remove NextAuth (#11732) 2026-01-23 23:57:08 +08:00
Neko 36750adc3a 🔨 chore: support to have Redis and providers (#10391)
* feat: added redis providers (ioredis, upstash)

For environment annotation of Vitest, read more: https://github.com/capricorn86/happy-dom/issues/1042#issuecomment-3585851354

Co-authored-by: Makito <5277268+sumimakito@users.noreply.github.com>

* chore: changed as suggested

---------

Co-authored-by: Makito <5277268+sumimakito@users.noreply.github.com>
2025-11-28 11:35:35 +08:00
XYenon 7eb78c43e6 👷 build: add INTERNAL_APP_URL for server-to-server calls (#9960)
* ✨ feat: add INTERNAL_APP_URL for server-to-server calls

Add INTERNAL_APP_URL environment variable to bypass CDN/proxy for internal operations like embedding and file chunking. Falls back to APP_URL if not set.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>

* 📝 docs: add INTERNAL_APP_URL documentation

Add documentation for INTERNAL_APP_URL environment variable in:
- docker-compose .env.example
- Docker Compose deployment guide (English and Chinese)

Explains how to bypass CDN/proxy for server-to-server operations.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>

* ✅ test: add tests for INTERNAL_APP_URL feature

Add comprehensive test coverage for INTERNAL_APP_URL:
- Test fallback behavior to APP_URL when INTERNAL_APP_URL is not set
- Test explicit INTERNAL_APP_URL configuration
- Test localhost bypass for CDN/proxy
- Test createAsyncServerClient using INTERNAL_APP_URL
- Test authentication headers in async calls

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>

---------

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2025-11-06 13:28:54 +08:00
renovate[bot] d8d28371d6 Update ghcr.io/grafana/xk6-client-tracing Docker tag to v0.0.9 (#9666)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-17 16:14:08 +08:00
Neko d54113036a 👷 build: integrated otel for instrumenting backend side of Next.js (#9073) 2025-09-23 09:34:48 +02:00
Neko bed591c559 👷 chore: added docker-compose configuration files for Grafana, Prometheus, and Tempo, Otel stacks (#9071)
* feat: added docker-compose configuration files for Grafana, Prometheus, and Tempo, Otel stacks

* fix: datasource uid
2025-09-11 11:27:24 +08:00
Asuka109 d1c5645517 🔨 chore: add docker compose to setup local services for development (#8608)
* 👷 build: add docker compose to setup local services for development

* 👷 build: setup dotenv-expand for all the npm scripts

* 🐛 fix: remove useless comments

* 📚 docs: add server-side database setup guide with i18n support

- Add comprehensive server-side database setup documentation
- Include step-by-step Docker service configuration
- Add Chinese localization for better developer experience
- Cover environment setup, database migration, and verification steps
2025-09-02 17:06:01 +08:00
Rylan Cai 6c83807218 🔨 chore: Migrate self-hosting auth to Casdoor@v2 (#8767)
* 🔨 chore: update casdoor to v2

* 🐛 fix: enable signin

* 🐛 fix: webhook hostname diag failed
2025-08-12 00:19:29 +08:00
Maple Gao 9e980cbf28 👷 build: pin minio version (#8378)
* 🔨  chore: fix MiniO image version
* fix: MiniO disabled web admin panel in latest version

* 🔨  chore: fix Relay Mode mis-report
* fix: Relay mode should check localhost under network_mode: service:network-service itself, but if failed, should notice user check relay URL

* 🔨  chore: fix Relay Mode mis-report
* fix: Relay mode should check localhost under network_mode: service:network-service itself, but if failed, should notice user check relay URL

* 🔨  chore: fix Relay Mode mis-report
* fix: Relay mode should check localhost under network_mode: service:network-service itself, but if failed, should notice user check relay URL

* 🔨  chore: fix Relay Mode mis-report
* fix: Relay mode should check localhost under network_mode: service:network-service itself, but if failed, should notice user check relay URL

* Revert "🔨  chore: fix MiniO image version"

This reverts commit 1d6c2cd334.

* Revert "🔨  chore: fix Relay Mode mis-report * fix: Relay mode should check localhost under network_mode: service:network-service itself, but if failed, should notice user check relay URL"

This reverts commit 7bc8a47b

* 🔨  chore: fix MiniO Version
* fix: MiniO new version do not have web admin panel
2025-07-10 12:26:41 +08:00
Purelind 58d356c477 🔨 chore(setup.sh): Replace SED_COMMAND with SED_INPLACE_ARGS for improved compatibility across platforms on macOS (#7639) 2025-06-01 16:28:04 +08:00
Max Brauer a988632e77 🔨 chore: disable signups for the default lobechat org in Casdoor (#7830)
Otherwise, anyone can signup with the lobechat organization and it is
very likely that's not wanted. We should be closed and secure by
default.

Signed-off-by: Max Brauer <mbrauer@vmware.com>
2025-05-14 10:08:23 +08:00
Max Brauer 7469c10a9a 🔨 chore: fix typo in docker compose (#7718)
Signed-off-by: Max Brauer <mbrauer@vmware.com>
2025-05-08 10:22:24 +08:00
Rylan Cai 422f8f5aa8 📌 chore: lock casdoor to v1.843 (#7331)
* 📌 pin: lock casdoor to v1.843

* 📝 docs: link to pr
2025-04-08 00:42:18 +08:00
Rylan Cai 81867c413c 👷 chore: fix re-init in setup.sh (#6714) 2025-03-09 19:00:22 +08:00
triwinds fa938f9b12 🔨 chore: add missing restart: always on network-service (#6581) 2025-02-27 23:13:44 +08:00
Arvin Xu 47efd1ba43 🔨 chore: improve setup.sh to download searxng file (#6552) 2025-02-26 23:42:22 +08:00
Kaco 9a14ee6211 📝 docs: Add searxng to docker compose (#6509)
* Add searxng to docker compose

* Update docker-compose.yml

Block external access to port 8080

---------

Co-authored-by: Kaco <leungkaco@gmail.com>
2025-02-26 22:47:39 +08:00
itning bef09e4db2 👷 docs: Fix the issue that the communication with the casdoor server is not available due to the port change. (#6408) 2025-02-22 15:03:09 +08:00
Rylan Cai 2dc712a9be 📝 docs: files access denied in one-click deploy (#6213) 2025-02-16 22:19:10 +08:00
Rylan Cai b61cec7444 📝 docs: fix casdoor webhooks & add Chinese warnings in local docker compose template (#6181)
* 📝 docs: fix webhook url in docs

* 👷 ci: add zh warning

* 📝 docs: fix webhooks url
2025-02-16 00:20:03 +08:00
Rylan Cai 5cc967ad95 👷 chore: Add configuration check for docker compose at setup.sh (#5926)
* 👷 chore: add configuration check in local

* 🐛 fix: do not display error msg if correct

* ✏️ typo: fix incorrect description

* 👷 ci: add warnings
2025-02-11 00:59:35 +08:00
Arvin Xu 260c0fd5ec 🔨 chore: fix docker-compose.yml (#5890) 2025-02-08 16:34:28 +08:00
Rylan Cai 00f9d34001 🔨 chore: pin lobe-chat-database@1.51.3 in docker-compose.yml to avoid one-click deploy error (#5831) 2025-02-07 14:56:43 +08:00
Rylan Cai cc088449ce 📝 docs: only detect private ip in port mode 2025-02-04 13:29:02 +08:00
Rylan Cai b63765ccce 📝 docs: Refactor the setup.sh to make deployment much easier (#5290)
* 🚧 wip: wip

* ✨ feat: create s3 bucket at start

* 🐛 fix: pswd shown in plain

* ♻️ refactor: remove unpack commands

* 🔨 ci: update script

* 🐛 fix: env files not downloaded

* 🔨 chore: support interact prompts

* 🐛 fix: AUTH_URL

* 🐛 fix: should download first

* 🐛 fix: let casdoor set origin

* 📝 docs: update docs for new setup

* 📝 docs: user non-admin app for lobe

* 👷 chore: remove -f for setup.sh

* 📝 docs: user

* 👷 chore: fix wrong host for casdoor

* 📝 docs: en docs

* 📝 docs: use new script

* ✏️ typo: fix typos

* 🐛 fix: wrong ip setup

* 🐛 fix: protocal generate failed

* 🐛 fix: remove warning

* ♻️ refactor: add warning for ip mode

* 📝 docs: display reverse proxy

* ♻️ refactor: move setup.sh to ../

* ✏️ typo: fix typos

* ♻️ refactor: remove setup.sh
2025-02-03 23:50:22 +08:00
wbean 13c3455414 🔨 chore: local docker-compose setup.sh compatible mac osx (#5247)
* Update setup.sh

fix: local docker-compose setup.sh compatible maxos

* Update setup.sh

remove unnecessary branch for system chosen
2025-01-27 10:43:47 +08:00
Yao Cai c0439c0fd8 📝 docs: support use custom host in docker-compose setup script & regenerate secrets (#4576) 2024-12-05 09:33:11 +08:00
Arthals 2820697103 📝docs: align variable names (#4369) 2024-10-14 21:50:22 +08:00
Arthals c04afbadaa 📝docs: docker compose project name (#4349) 2024-10-13 12:09:16 +08:00
Arthals 62cbf1c032 📝docs: add casdoor docker compose document (#4338)
* 📝docs: Casdoor

* 📝docs: Docker-compose

* 📝docs: Docker-compose

* 📝docs: English ver.

* 📝docs: Incorporate review suggestions

* 📝docs: Incorporate review suggestions
2024-10-13 10:49:20 +08:00
Yao Cai b36d466cb5 ♻️ docs: Maintainable configurations for casdoor initialization (#4259)
* ♻️ refactor: make init_data.json visible

* ♻️ refactor: remove unused webapi records

* ♻️ refactor: remove unused signin methods

* :refactor: recycle: remove unused tokens

* ♻️ refactor: remove unused providers

* 🐛 fix: wrong redirectUrls

* 💄 style: use lobe branding

* 👷 ci: specific docker compose file version

* ♻️ refactor: remove session

* ♻️ refactor: enableLinkWithEmail

* ⏪ revert: - version for docker compose

* 🐛 fix: command not work on newest docker
2024-10-10 19:40:25 +08:00
Lumia 88dc3c9617 📝 docs: Add deployment using ZITADEL authentication services (#4081)
* Create docker-compose.yml for local deploy with zitadel

Create docker-compose.yml for local deploy with zitadel

* Create .env.zh-CN.example for local deploy with zitadel

Create .env.zh-CN.example for local deploy with zitadel

* Create .env.example for local deploy with zitadel

Create .env.example for local deploy with zitadel

* Update .env.zh-CN.example

* Create docker-compose.yml for self-hosting with zitadel

Create docker-compose.yml for self-hosting with zitadel

* Create .env.zh-CN.example for self-hosting deploy with zitadel

Create .env.zh-CN.example for self-hosting deploy with zitadel

* Create .env.example for self-host deploy with zitadel

Create .env.example for self-host deploy with zitadel

* Create zitadel-init-steps.yaml

* Create zitadel-config.yaml

* Update docker-compose.yml

* Update docker-compose.yml

* Create zitadel-config.yaml

* Create zitadel-init-steps.yaml

* Update .env.zh-CN.example

* Update .env.example

* Update .env.example

* Update .env.zh-CN.example

* Update zitadel-init-steps.yaml
2024-09-28 23:35:48 +08:00