diff --git a/.env.example b/.env.example index e5ef1f8..34f812f 100644 --- a/.env.example +++ b/.env.example @@ -6,7 +6,7 @@ PORT=8317 API_KEYS=sk-your-api-key # 容器内 Lingma 二进制路径 -LINGMA_BIN=/app/bin/Lingma +LINGMA_BIN=/app/data/bin/Lingma # Lingma 获取方式:marketplace 或 vsix LINGMA_SOURCE_TYPE=marketplace # Marketplace 发布者 @@ -20,7 +20,7 @@ LINGMA_BOOTSTRAP_ALWAYS=true # 强制刷新(true 时忽略本地缓存) LINGMA_FORCE_REFRESH=false # Lingma 工作目录(登录/会话数据) -LINGMA_WORK_DIR=/root/.lingma/vscode/sharedClientCache +LINGMA_WORK_DIR=/app/data/.lingma/vscode/sharedClientCache # Lingma WebSocket 端口 LINGMA_SOCKET_PORT=36510 # Lingma 启动等待秒数 diff --git a/.gitignore b/.gitignore index a9af95d..e2e1fce 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,7 @@ __pycache__/ *.pyc bin/ runtime-bin/ +data/ +!data/ +data/* +!data/.gitkeep diff --git a/README.md b/README.md index 2fcbfb5..39728d5 100644 --- a/README.md +++ b/README.md @@ -10,13 +10,14 @@ ## 1. 准备目录 ```bash -mkdir -p runtime-bin +mkdir -p data ``` 说明: -- 启动时会自动获取最新插件并提取 `Lingma` 到 `runtime-bin`。 +- 启动时会自动获取最新插件并提取 `Lingma` 到 `data/bin`。 - 默认通过 VSCode Marketplace 查询最新版本,再下载对应 VSIX。 +- 登录态与运行数据统一写入 `data/.lingma`。 ## 2. 配置环境变量 @@ -71,6 +72,8 @@ PORT=8317 API_KEYS=sk-your-api-key LINGMA_USERNAME=your-username LINGMA_PASSWORD=your-password +LINGMA_BIN=/app/data/bin/Lingma +LINGMA_WORK_DIR=/app/data/.lingma/vscode/sharedClientCache LINGMA_SOURCE_TYPE=marketplace LINGMA_MARKETPLACE_PUBLISHER=Alibaba-Cloud LINGMA_MARKETPLACE_EXTENSION=tongyi-lingma @@ -78,6 +81,12 @@ LINGMA_VSIX_URL=https://tongyi-code.oss-cn-hangzhou.aliyuncs.com/vscode/tongyi-l DEDICATED_DOMAIN_URL= ``` +### 数据目录说明 + +- 本项目所有持久化数据都在 `./data`: + - `data/bin/Lingma`:自动提取的 Lingma 二进制 + - `data/.lingma/...`:Lingma 登录态、缓存、日志 + ## 3. Docker 运行 ```bash diff --git a/app/bootstrap_lingma.py b/app/bootstrap_lingma.py index ecc2a86..8c3ffdf 100644 --- a/app/bootstrap_lingma.py +++ b/app/bootstrap_lingma.py @@ -87,7 +87,7 @@ def _query_marketplace_latest_vsix(publisher: str, extension: str) -> tuple[str, def bootstrap_from_vsix() -> None: - lingma_bin = Path(os.getenv("LINGMA_BIN", "/app/bin/Lingma")) + lingma_bin = Path(os.getenv("LINGMA_BIN", "/app/data/bin/Lingma")) source_type = os.getenv("LINGMA_SOURCE_TYPE", "marketplace").strip().lower() vsix_url = os.getenv( "LINGMA_VSIX_URL", diff --git a/app/config.py b/app/config.py index f424fa0..99dd3c8 100644 --- a/app/config.py +++ b/app/config.py @@ -31,13 +31,13 @@ def load_settings() -> Settings: api_keys = [k.strip() for k in keys_raw.split(",") if k.strip()] work_dir = os.getenv( "LINGMA_WORK_DIR", - str(Path.home() / ".lingma" / "vscode" / "sharedClientCache"), + "/app/data/.lingma/vscode/sharedClientCache", ) return Settings( host=os.getenv("HOST", "0.0.0.0"), port=int(os.getenv("PORT", "8317")), api_keys=api_keys, - lingma_bin=os.getenv("LINGMA_BIN", "/app/bin/Lingma"), + lingma_bin=os.getenv("LINGMA_BIN", "/app/data/bin/Lingma"), lingma_work_dir=work_dir, lingma_socket_port=int(os.getenv("LINGMA_SOCKET_PORT", "36510")), lingma_startup_timeout=int(os.getenv("LINGMA_STARTUP_TIMEOUT", "40")), diff --git a/data/.gitkeep b/data/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/docker-compose.yml b/docker-compose.yml index a92ddb0..fd6d0d7 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -8,6 +8,5 @@ services: ports: - "${PORT:-8317}:${PORT:-8317}" volumes: - - ./runtime-bin:/app/bin - - /root/.lingma:/root/.lingma + - ./data:/app/data restart: unless-stopped