diff --git a/.idea/shelf/_2026_8_31_10_29____.xml b/.idea/shelf/_2026_8_31_10_29____.xml
deleted file mode 100644
index 456edb6..0000000
--- a/.idea/shelf/_2026_8_31_10_29____.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/.idea/shelf/_2026_9_1_01_18____.xml b/.idea/shelf/_2026_9_1_01_18____.xml
deleted file mode 100644
index a57c441..0000000
--- a/.idea/shelf/_2026_9_1_01_18____.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/.idea/shelf/在进行更新之前于_2026_8_31_10_29_取消提交了更改_[更改]/shelved.patch b/.idea/shelf/在进行更新之前于_2026_8_31_10_29_取消提交了更改_[更改]/shelved.patch
deleted file mode 100644
index 7f41584..0000000
--- a/.idea/shelf/在进行更新之前于_2026_8_31_10_29_取消提交了更改_[更改]/shelved.patch
+++ /dev/null
@@ -1,119 +0,0 @@
-Index: README.md
-IDEA additional info:
-Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP
-<+># Docker_Compose\n\nDocker Compose远程仓库\n\n## 家用服务器部署情况\n### N100主机\niStore系统(芯片:N100,运行内存:16G,储存:521G M.2固态硬盘)\n1. OpenClash 【家庭代理】\n2. Frpc 【外网访问】\n3. SunPanel:`http://192.168.0.2:1100` 【服务导航页】【Frp:sp.kunle777.top】\n4. RSSHub:`http://192.168.0.2:1200` 【Rss订阅器】 \n5. Bark:`http://192.168.0.2:1300` 【通知服务】【Frp:bark.kunle777.top】\n6. gitea:`http://192.168.0.2:1400` 【私人代码仓库】【Frp:gitea.kunle777.top】\n7. Dockhand:`http://192.168.0.2:1500` 【容器监管平台】【Frp:dockhand.kunle777.top】\n8. HomeAssistant:`http://192.168.0.2:8123` 【智能家居平台】【Frp:ha.kunle777.top】\n\n\n### 4600Pro主机\nUgreenNas(芯片:N6005,运行内存:32G,储存:1TB固态+35TB机械硬盘【1TB SSD硬盘缓存】)\n1. 节点小宝 【内网穿透】\n2. socket-proxy:`http://192.168.0.111:1011` 【监管节点】\n3. MoviePilot:`http://192.168.0.111:2100` 【影视平台】【Frp:mp.kunle777.top】\n4. mdcX:`http://192.168.0.111:2200` 【影视刮削器】\n5. qBittorrent:`http://192.168.0.111:2300` 【下载器】\n6. TG_Downloader:`http://192.168.0.111:2400` 【下载器】\n7. qinglongPanel:`http://192.168.0.111:2500` 【python代码托管】【Frp:ql.kunle777.top】\n8. komga:`http://192.168.0.112:2600` 【漫画阅读器】【Frp:komga.kunle777.top】\n9. yuvomi:`http://192.168.0.111:2700` 【家庭管理平台】\n10. so-novel:`http://192.168.0.111:2800` \n\n\n### 480t主机\nUgreenNas(芯片:1235U,运行内存:64GB,储存:4TB固态)\n1. socket-proxy:`http://192.168.0.112:1011` 【监管节点】\n2. EMBY1:`http://192.168.0.112:3100` 【影音播放器(媒体库)】【Frp:emby.kunle777.top】\n3. EMBY2:`http://192.168.0.112:3200` 【影音播放器(资源库)】\n4. n8n:`http://192.168.0.112:3300` 【自动化AI平台】【Frp:n8n.kunle777.top】\n5. dify:`http://192.168.0.112:3400` 【智能体平台】【Frp:dify.kunle777.top】\n6. minio:`http://192.168.0.112:3500` 【对象存储】\ntodo:\n7. RAGFlow:`http://192.168.0.112:3600` 【知识库AI平台】【待配置】\n------ 数据中心 ------\n1. mysql数据库:`tcp://192.168.0.112:4100`\n2. postgres数据库:`tcp://192.168.0.112:4200`\n3. redis数据库:`tcp://192.168.0.112:4300`
-Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
-<+>UTF-8
-===================================================================
-diff --git a/README.md b/README.md
---- a/README.md (revision 0be24643b792862513e54acdbf14015e93efb59b)
-+++ b/README.md (date 1788142567359)
-@@ -28,18 +28,30 @@
- 9. yuvomi:`http://192.168.0.111:2700` 【家庭管理平台】
- 10. so-novel:`http://192.168.0.111:2800`
-
-+### Ultra 7 255H 六盘位 NAS
-+------ 媒体及下载中心 ------
-+UgreenNas(芯片:Ultra 7 255H,运行内存:64G,储存:1TB固态+35TB机械硬盘【1TB SSD硬盘缓存】)
-+1. 节点小宝 【内网穿透】
-+2. socket-proxy:`http://192.168.0.111:1011` 【监管节点】
-+3. EMBY1:`http://192.168.0.111:2100` 【影音播放器(媒体库)】【Frp:emby.kunle777.top】
-+3. EMBY2:`http://192.168.0.111:2150` 【影音播放器(资源库)】
-+3. MoviePilot:`http://192.168.0.111:2200` 【影视平台】【Frp:mp.kunle777.top】
-+4. mdcX:`http://192.168.0.111:2300` 【影视刮削器】
-+5. qBittorrent:`http://192.168.0.111:2400` 【下载器】
-+6. TG_Downloader:`http://192.168.0.111:2500` 【下载器】
-+7. qinglongPanel:`http://192.168.0.111:2600` 【python代码托管】【Frp:ql.kunle777.top】
-+8. komga:`http://192.168.0.111:2700` 【漫画阅读器】【Frp:komga.kunle777.top】
-+9. yuvomi:`http://192.168.0.111:2800` 【家庭管理平台】
-+10. SearXNG:`http://192.168.0.111:2900` 【智能体搜素引擎MCP服务】
-+
-
- ### 480t主机
-+------ AI及数据中心 ------
- UgreenNas(芯片:1235U,运行内存:64GB,储存:4TB固态)
- 1. socket-proxy:`http://192.168.0.112:1011` 【监管节点】
--2. EMBY1:`http://192.168.0.112:3100` 【影音播放器(媒体库)】【Frp:emby.kunle777.top】
--3. EMBY2:`http://192.168.0.112:3200` 【影音播放器(资源库)】
--4. n8n:`http://192.168.0.112:3300` 【自动化AI平台】【Frp:n8n.kunle777.top】
--5. dify:`http://192.168.0.112:3400` 【智能体平台】【Frp:dify.kunle777.top】
--6. minio:`http://192.168.0.112:3500` 【对象存储】
--todo:
--7. RAGFlow:`http://192.168.0.112:3600` 【知识库AI平台】【待配置】
-------- 数据中心 ------
--1. mysql数据库:`tcp://192.168.0.112:4100`
--2. postgres数据库:`tcp://192.168.0.112:4200`
--3. redis数据库:`tcp://192.168.0.112:4300`
-\ No newline at end of file
-+2. dify:`http://192.168.0.112:3100` 【智能体平台】【Frp:dify.kunle777.top】
-+3. RAGFlow:`http://192.168.0.112:3200` 【知识库AI平台】【待配置】
-+4. db-mcp-server:http://192.168.0.112:3300 【智能体数据库MCP服务】
-+5. minio:`http://192.168.0.112:4100` 【对象存储】
-+6. postgres数据库:`tcp://192.168.0.112:4200`
-+7. redis数据库:`tcp://192.168.0.112:4300`
-\ No newline at end of file
-Index: .idea/workspace.xml
-IDEA additional info:
-Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP
-<+>\n\n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n {\n "lastFilter": {\n "state": "OPEN",\n "assignee": "K7Unle"\n }\n}\n {\n "selectedUrlAndAccountId": {\n "url": "https://github.com/odysseus-dev/odysseus.git",\n "accountId": "59f646c1-e8fd-42ab-afc6-29303ea39a06"\n }\n}\n {\n "associatedIndex": 2,\n "fromUser": false\n}\n \n \n \n \n \n {\n "keyToString": {\n "ASKED_SHARE_PROJECT_CONFIGURATION_FILES": "true",\n "ModuleVcsDetector.initialDetectionPerformed": "true",\n "RunOnceActivity.ShowReadmeOnStart": "true",\n "RunOnceActivity.git.unshallow": "true",\n "RunOnceActivity.typescript.service.memoryLimit.init": "true",\n "SHARE_PROJECT_CONFIGURATION_FILES": "true",\n "codeWithMe.voiceChat.enabledByDefault": "false",\n "git-widget-placeholder": "main",\n "last_opened_file_path": "/Users/kun/PycharmProjects/Docker_Compose/AI团队设计",\n "node.js.detected.package.jshint": "true",\n "node.js.selected.package.jshint": "",\n "nodejs_package_manager_path": "npm",\n "settings.editor.selected.configurable": "configurable.group.project"\n }\n}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 1785115064124\n \n \n 1785115064124\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 1785117134273\n \n \n \n 1785117134273\n \n \n \n 1785119062713\n \n \n \n 1785119062713\n \n \n \n 1785119183055\n \n \n \n 1785119183055\n \n \n \n 1785119242447\n \n \n \n 1785119242447\n \n \n \n 1785119449261\n \n \n \n 1785119449261\n \n \n \n 1785119906941\n \n \n \n 1785119906941\n \n \n \n 1785120129210\n \n \n \n 1785120129210\n \n \n \n 1785120154958\n \n \n \n 1785120154958\n \n \n \n 1785120590256\n \n \n \n 1785120590256\n \n \n \n 1785120682944\n \n \n \n 1785120682944\n \n \n \n 1785392423458\n \n \n \n 1785392423458\n \n \n \n 1786005435040\n \n \n \n 1786005435040\n \n \n \n 1786083110752\n \n \n \n 1786083110752\n \n \n \n 1786323673444\n \n \n \n 1786323673444\n \n \n \n 1786410272062\n \n \n \n 1786410272062\n \n \n \n 1786410474675\n \n \n \n 1786410474675\n \n \n \n 1787022400600\n \n \n \n 1787022400600\n \n \n \n 1787030905479\n \n \n \n 1787030905479\n \n \n \n 1787031207232\n \n \n \n 1787031207232\n \n \n \n 1787033233020\n \n \n \n 1787033233020\n \n \n \n 1787281188731\n \n \n \n 1787281188731\n \n \n \n 1787620183521\n \n \n \n 1787620183521\n \n \n \n 1787620202451\n \n \n \n 1787620202451\n \n \n \n 1787620261315\n \n \n \n 1787620261315\n \n \n \n 1787648681948\n \n \n \n 1787648681948\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
-Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
-<+>UTF-8
-===================================================================
-diff --git a/.idea/workspace.xml b/.idea/workspace.xml
---- a/.idea/workspace.xml (revision 0be24643b792862513e54acdbf14015e93efb59b)
-+++ b/.idea/workspace.xml (date 1788143352284)
-@@ -4,8 +4,9 @@
-
-
-
--
-+
-
-+
-
-
-
-@@ -14,6 +15,7 @@
-
-
-
-+
-
- {
- "lastFilter": {
-@@ -107,6 +109,8 @@
-
-
-
-+
-+
-
-
-
-@@ -308,7 +312,15 @@
-
- 1787648681948
-
--
-+
-+
-+ 1787725503425
-+
-+
-+
-+ 1787725503425
-+
-+
-
-
-
-@@ -323,6 +335,7 @@
-
-
-
--
-+
-+
-
-
-\ No newline at end of file
diff --git a/.idea/shelf/在进行更新之前于_2026_9_1_01_18_取消提交了更改_[更改]/shelved.patch b/.idea/shelf/在进行更新之前于_2026_9_1_01_18_取消提交了更改_[更改]/shelved.patch
deleted file mode 100644
index fb40745..0000000
--- a/.idea/shelf/在进行更新之前于_2026_9_1_01_18_取消提交了更改_[更改]/shelved.patch
+++ /dev/null
@@ -1,93 +0,0 @@
-Index: .idea/workspace.xml
-IDEA additional info:
-Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP
-<+>\n\n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n {\n "lastFilter": {\n "state": "OPEN",\n "assignee": "K7Unle"\n }\n}\n {\n "selectedUrlAndAccountId": {\n "url": "https://github.com/odysseus-dev/odysseus.git",\n "accountId": "59f646c1-e8fd-42ab-afc6-29303ea39a06"\n }\n}\n {\n "associatedIndex": 2,\n "fromUser": false\n}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 1785115064124\n \n \n 1785115064124\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 1785117134273\n \n \n \n 1785117134273\n \n \n \n 1785119062713\n \n \n \n 1785119062713\n \n \n \n 1785119183055\n \n \n \n 1785119183055\n \n \n \n 1785119242447\n \n \n \n 1785119242447\n \n \n \n 1785119449261\n \n \n \n 1785119449261\n \n \n \n 1785119906941\n \n \n \n 1785119906941\n \n \n \n 1785120129210\n \n \n \n 1785120129210\n \n \n \n 1785120154958\n \n \n \n 1785120154958\n \n \n \n 1785120590256\n \n \n \n 1785120590256\n \n \n \n 1785120682944\n \n \n \n 1785120682944\n \n \n \n 1785392423458\n \n \n \n 1785392423458\n \n \n \n 1786005435040\n \n \n \n 1786005435040\n \n \n \n 1786083110752\n \n \n \n 1786083110752\n \n \n \n 1786323673444\n \n \n \n 1786323673444\n \n \n \n 1786410272062\n \n \n \n 1786410272062\n \n \n \n 1786410474675\n \n \n \n 1786410474675\n \n \n \n 1787022400600\n \n \n \n 1787022400600\n \n \n \n 1787030905479\n \n \n \n 1787030905479\n \n \n \n 1787031207232\n \n \n \n 1787031207232\n \n \n \n 1787033233020\n \n \n \n 1787033233020\n \n \n \n 1787281188731\n \n \n \n 1787281188731\n \n \n \n 1787620183521\n \n \n \n 1787620183521\n \n \n \n 1787620202451\n \n \n \n 1787620202451\n \n \n \n 1787620261315\n \n \n \n 1787620261315\n \n \n \n 1787648681948\n \n \n \n 1787648681948\n \n \n \n 1788011791356\n \n \n \n 1788011791356\n \n \n \n 1788011949750\n \n \n \n 1788011949750\n \n \n \n 1788012355905\n \n \n \n 1788012355905\n \n \n \n 1788014249329\n \n \n \n 1788014249329\n \n \n \n 1788090925000\n \n \n \n 1788090925000\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
-Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
-<+>UTF-8
-===================================================================
-diff --git a/.idea/workspace.xml b/.idea/workspace.xml
---- a/.idea/workspace.xml (revision 28650013a0757e6d8e8a0d5fec832dffa3d32135)
-+++ b/.idea/workspace.xml (date 1788196715590)
-@@ -6,7 +6,6 @@
-
-
-
--
-
-
-
-@@ -40,27 +39,27 @@
-
-
-
-- {
-+ "keyToString": {
-+ "ASKED_SHARE_PROJECT_CONFIGURATION_FILES": "true",
-+ "ModuleVcsDetector.initialDetectionPerformed": "true",
-+ "RunOnceActivity.ShowReadmeOnStart": "true",
-+ "RunOnceActivity.git.unshallow": "true",
-+ "RunOnceActivity.typescript.service.memoryLimit.init": "true",
-+ "codeWithMe.voiceChat.enabledByDefault": "false",
-+ "git-widget-placeholder": "main",
-+ "last_opened_file_path": "/Users/kun/PycharmProjects/Docker_Compose/4600Pro/db-mcp-server",
-+ "node.js.detected.package.jshint": "true",
-+ "node.js.selected.package.jshint": "",
-+ "nodejs_package_manager_path": "npm",
-+ "settings.editor.selected.configurable": "configurable.group.project"
- },
-- "keyToStringList": {
-- "com.intellij.ide.scratch.ScratchImplUtil$2/新建临时文件": [
-- "TEXT"
-+ "keyToStringList": {
-+ "com.intellij.ide.scratch.ScratchImplUtil$2/新建临时文件": [
-+ "TEXT"
- ]
- }
--}]]>
-+}
-
-
-
-@@ -286,7 +285,10 @@
-
-
-
--
-+
-+
-+
-+
-
-
-
-@@ -528,7 +530,15 @@
-
- 1788090925000
-
--
-+
-+
-+ 1788092156036
-+
-+
-+
-+ 1788092156036
-+
-+
-
-
-
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index a8123c6..3bdf623 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -4,13 +4,15 @@
-
-
-
-
-
-
+
+
+
+
+
+
+
+
@@ -54,10 +56,11 @@
"RunOnceActivity.typescript.service.memoryLimit.init": "true",
"codeWithMe.voiceChat.enabledByDefault": "false",
"git-widget-placeholder": "main",
- "last_opened_file_path": "/Users/kun/PycharmProjects/Docker_Compose/480T/Mem0",
+ "last_opened_file_path": "/Users/kun/PycharmProjects/Docker_Compose/4600Pro/BookOrbit",
"node.js.detected.package.jshint": "true",
"node.js.selected.package.jshint": "",
"nodejs_package_manager_path": "npm",
+ "python.packages.toolwindow.project.migrated.to.right.top.v2": "true",
"settings.editor.selected.configurable": "configurable.group.project"
},
"keyToStringList": {
@@ -68,11 +71,11 @@
}]]>
+
-
@@ -250,30 +253,12 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
@@ -310,7 +295,8 @@
-
+
+
@@ -552,7 +538,15 @@
1788090925000
-
+
+
+ 1788274058419
+
+
+
+ 1788274058419
+
+
@@ -569,6 +563,7 @@
-
+
+
\ No newline at end of file
diff --git a/4600Pro/BookOrbit/.env b/4600Pro/BookOrbit/.env
new file mode 100644
index 0000000..3ddf43d
--- /dev/null
+++ b/4600Pro/BookOrbit/.env
@@ -0,0 +1,107 @@
+# Docker image to run. Pin a sha-* tag or @sha256 digest for stricter deploys.
+APP_IMAGE=ghcr.io/bookorbit/bookorbit:latest
+
+# App publish port on host
+# For access only from this host (such as a host reverse proxy), use 127.0.0.1:3000.
+APP_PORT=2600
+
+# Optional listen address inside the container (IPv4 or IPv6, without brackets).
+# Keep the default for bridge networking; use APP_PORT above to restrict host exposure.
+# HOST=0.0.0.0
+
+# Host folder that appears as /books in the container.
+# Point this at your library root; use an absolute path on NAS/Portainer installs.
+BOOKS_HOST_PATH=/volume2/docker/docker_projects/bookorbit/books
+APP_DATA_HOST_PATH=/volume2/docker/docker_projects/bookorbit/data/app
+POSTGRES_DATA_HOST_PATH=/volume2/docker/docker_projects/bookorbit/data/postgres
+
+# Container runtime UID/GID for files written to app-managed data folders.
+# Most users can leave these defaults.
+PUID=1000
+PGID=1000
+
+# Database credentials
+POSTGRES_USER=bookorbit
+POSTGRES_PASSWORD=change-this-password
+POSTGRES_DB=bookorbit
+
+# App secrets
+JWT_SECRET=change-this-to-a-long-random-secret
+# Fresh installs should generate an independent key with: openssl rand -hex 32
+# Existing installs upgrading from an older release must initially copy their current JWT_SECRET here so existing podcast URLs remain readable.
+PODCAST_ENCRYPTION_KEY=change-this-to-a-different-long-random-secret
+# Required for the initial /auth/setup endpoint (x-setup-token header)
+SETUP_BOOTSTRAP_TOKEN=change-this-to-a-long-random-secret
+
+# Sensitive values can instead be read from mounted files by appending _FILE.
+# Leave the direct value blank, then set its _FILE variable to the container path.
+# Keep the blank assignment: docker-compose.yml requires these keys to be present.
+# A non-empty direct value and its _FILE variable are mutually exclusive.
+# The file must be mounted into every service that uses it, and must not be empty.
+# POSTGRES_PASSWORD_FILE=/run/secrets/bookorbit_postgres_password
+# JWT_SECRET_FILE=/run/secrets/bookorbit_jwt_secret
+# PODCAST_ENCRYPTION_KEY_FILE=/run/secrets/bookorbit_podcast_encryption_key
+# SETUP_BOOTSTRAP_TOKEN_FILE=/run/secrets/bookorbit_setup_bootstrap_token
+
+# External/public URL used by emails and Kobo endpoints
+APP_URL=https://bookorbit.example.com
+
+# Node.js JavaScript heap limit in MB. Raise this for very large libraries, 250K+ books.
+NODE_MAX_OLD_SPACE_SIZE=2048
+
+# --- Optional overrides (uncomment to set) ---
+
+# If you already run your own PostgreSQL, set DATABASE_URL and remove the
+# postgres service from docker-compose.yml. Your instance must have the
+# uuid-ossp, pg_trgm, and vector (pgvector) extensions available.
+# DATABASE_URL=postgres://user:password@yourhost:5432/bookorbit
+# DATABASE_URL_FILE=/run/secrets/bookorbit_database_url
+# Or set individual parts (POSTGRES_HOST, POSTGRES_PORT, POSTGRES_USER, POSTGRES_PASSWORD, POSTGRES_DB)
+
+# CORS origin for the frontend when served from a different domain than APP_URL
+# CLIENT_URL=https://app.example.com
+
+# Container folder used as the top of the library creation folder picker.
+# Defaults to / when unset. Set to /books to hide other container root folders.
+# LIBRARY_BROWSE_ROOT=/books
+
+# Set to false only if your platform manages bind mount ownership externally.
+# BOOKORBIT_FIX_PERMISSIONS=true
+
+# Recommended if you store SMTP provider credentials (generate: openssl rand -hex 32)
+# EMAIL_ENCRYPTION_KEY=
+# EMAIL_ENCRYPTION_KEY_FILE=/run/secrets/bookorbit_email_encryption_key
+
+# Recommended if you store migration source credentials (generate: openssl rand -hex 32)
+# MIGRATION_ENCRYPTION_KEY=
+# MIGRATION_ENCRYPTION_KEY_FILE=/run/secrets/bookorbit_migration_encryption_key
+
+# Required before download-client or indexer credentials can be saved.
+# BOOK_REQUEST_ENCRYPTION_KEY=
+# BOOK_REQUEST_ENCRYPTION_KEY_FILE=/run/secrets/bookorbit_book_request_encryption_key
+
+# Optional GitHub token used to read release notes, raising the anonymous API rate limit.
+# GITHUB_RELEASES_TOKEN=
+# GITHUB_RELEASES_TOKEN_FILE=/run/secrets/bookorbit_github_releases_token
+
+# Absolute container path that authorizes local migration backup files.
+# Mount a dedicated host directory at this path as read-only before enabling backup mode.
+# MIGRATION_IMPORT_ROOT=/imports
+
+# Log level (default: info). Set to debug for verbose output.
+# LOG_LEVEL=info
+
+# Allow OIDC issuer/discovery URLs that resolve to private/local addresses.
+# Default false. Enable only in trusted self-hosted networks.
+# OIDC_ALLOW_LOCAL_ISSUERS=false
+# Trust additional PEM-encoded certificate authorities for outbound TLS, including OIDC.
+# Mount the CA bundle read-only, set its in-container path here, and restart BookOrbit.
+# NODE_EXTRA_CA_CERTS=/path/to/private-ca-bundle.pem
+
+# Disable username/password sign-in after at least one active administrator has linked an enabled
+# OIDC provider. Set false and restart to recover access if the identity provider is unavailable.
+# DISABLE_LOCAL_AUTH=false
+
+# Optional: allow Cloudflare Web Analytics beacon when using automatic setup.
+# Keep unset/false to preserve strict CSP (`script-src 'self'`).
+# CSP_ALLOW_CLOUDFLARE_INSIGHTS=false
\ No newline at end of file
diff --git a/4600Pro/BookOrbit/docker-compose.yaml b/4600Pro/BookOrbit/docker-compose.yaml
new file mode 100644
index 0000000..714e944
--- /dev/null
+++ b/4600Pro/BookOrbit/docker-compose.yaml
@@ -0,0 +1,96 @@
+name: bookorbit
+
+services:
+ app:
+ container_name: bookorbit-app
+ image: ${APP_IMAGE?required}
+ restart: unless-stopped
+ init: true
+ env_file:
+ - .env
+ ports:
+ - "${APP_PORT:-3000}:${PORT:-3000}"
+ environment:
+ NODE_ENV: production
+ PORT: ${PORT:-3000}
+ DATABASE_URL: ${DATABASE_URL:-}
+ POSTGRES_HOST: ${POSTGRES_HOST:-postgres}
+ POSTGRES_PORT: ${POSTGRES_PORT:-5432}
+ POSTGRES_USER: ${POSTGRES_USER?required}
+ POSTGRES_PASSWORD: ${POSTGRES_PASSWORD?required}
+ POSTGRES_DB: ${POSTGRES_DB?required}
+ JWT_SECRET: ${JWT_SECRET?required}
+ PODCAST_ENCRYPTION_KEY: ${PODCAST_ENCRYPTION_KEY:-}
+ SETUP_BOOTSTRAP_TOKEN: ${SETUP_BOOTSTRAP_TOKEN?required}
+ APP_URL: ${APP_URL?required}
+ CLIENT_URL: ${CLIENT_URL:-${APP_URL?required}}
+ TZ: ${TZ:-UTC}
+ PUID: ${PUID:-1000}
+ PGID: ${PGID:-1000}
+ NODE_MAX_OLD_SPACE_SIZE: ${NODE_MAX_OLD_SPACE_SIZE:-auto}
+ BOOK_DOCK_PATH: ${BOOK_DOCK_PATH:-}
+ LIBRARY_BROWSE_ROOT: ${LIBRARY_BROWSE_ROOT:-}
+ DISABLE_LOCAL_AUTH: ${DISABLE_LOCAL_AUTH:-false}
+ depends_on:
+ postgres:
+ condition: service_healthy
+ volumes:
+ - ${BOOKS_HOST_PATH:-./books}:/books
+ - ${APP_DATA_HOST_PATH:-./data/app}:/data
+ read_only: true
+ tmpfs:
+ - /tmp
+ cap_drop:
+ - ALL
+ cap_add:
+ - CHOWN
+ - DAC_OVERRIDE
+ - FOWNER
+ - SETGID
+ - SETUID
+ security_opt:
+ - no-new-privileges:true
+ stop_grace_period: 30s
+
+ # Opt-in: add `--profile tts` to your compose commands. BookOrbit reaches it inside the compose
+ # network at http://kokoro:8880/v1, so no port is published to the host.
+ kokoro:
+ container_name: bookorbit-kokoro
+ image: ${KOKORO_IMAGE:-ghcr.io/remsky/kokoro-fastapi-cpu:v0.8.0}
+ profiles: ["tts"]
+ restart: unless-stopped
+ init: true
+ expose:
+ - "8880"
+ security_opt:
+ - no-new-privileges:true
+ stop_grace_period: 30s
+ healthcheck:
+ test:
+ [
+ "CMD-SHELL",
+ 'python -c "import urllib.request;urllib.request.urlopen(''http://127.0.0.1:8880/v1/audio/voices'')"',
+ ]
+ interval: 30s
+ timeout: 10s
+ retries: 5
+ start_period: 60s
+
+ postgres:
+ container_name: bookorbit-db
+ image: pgvector/pgvector:pg18
+ restart: unless-stopped
+ environment:
+ POSTGRES_USER: ${POSTGRES_USER?required}
+ POSTGRES_PASSWORD: ${POSTGRES_PASSWORD?required}
+ POSTGRES_DB: ${POSTGRES_DB?required}
+ PGDATA: /var/lib/postgresql/data/pgdata
+ volumes:
+ - ${POSTGRES_DATA_HOST_PATH:-./data/postgres}:/var/lib/postgresql/data
+ healthcheck:
+ test:
+ ["CMD-SHELL", 'pg_isready -U "$${POSTGRES_USER}" -d "$${POSTGRES_DB}"']
+ interval: 10s
+ timeout: 5s
+ retries: 10
+ start_period: 20s
\ No newline at end of file
diff --git a/4600Pro/komga/docker-compose.yaml b/4600Pro/komga/docker-compose.yaml
deleted file mode 100644
index 30ddfa8..0000000
--- a/4600Pro/komga/docker-compose.yaml
+++ /dev/null
@@ -1,13 +0,0 @@
-services:
- komga:
- image: gotson/komga
- container_name: komga
- volumes:
- # 本地卷宗挂载
- - /volume2/docker/docker_projects/komga:/config
- - /volume1/4600Pro/PornClub/Anime:/data
- ports:
- - "2600:25600"
- environment:
- - TZ=Asia/Shanghai
- restart: unless-stopped
\ No newline at end of file
diff --git a/README.md b/README.md
index f256291..b8ef2c9 100644
--- a/README.md
+++ b/README.md
@@ -41,7 +41,6 @@ UgreenNas(芯片:Ultra 7 255H,运行内存:64G,储存:1TB固态+35TB
5. qBittorrent:`http://192.168.0.111:2400` 【下载器】
6. TG_Downloader:`http://192.168.0.111:2500` 【下载器】
7. qinglongPanel:`http://192.168.0.111:2600` 【python代码托管】【Frp:ql.kunle777.top】
-8. komga:`http://192.168.0.111:2700` 【漫画阅读器】【Frp:komga.kunle777.top】
9. yuvomi:`http://192.168.0.111:2800` 【家庭管理平台】
10. SearXNG:`http://192.168.0.111:2900` 【智能体搜素引擎MCP服务】