Skip to content

Commit d374d7a

Browse files
committed
Docs: Enhances documentation site with new features
Adds documentation for Docker user permissions. Improves Clarity analytics integration using component-level injection and content region attribution. Introduces a Bilibili video player component to the homepage. These changes improve the user experience and provide more detailed information on key features and configurations.
1 parent d1ccfd2 commit d374d7a

36 files changed

Lines changed: 2428 additions & 37 deletions

File tree

docs/installation/docker-compose.md

Lines changed: 174 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,11 @@ services:
7979
TZ: Asia/Shanghai
8080
ConnectionStrings__Default: "Host=postgres;Port=5432;Database=hagicode;Username=postgres;Password=postgres"
8181
License__Activation__LicenseKey: "${HAGICODE_LICENSE_KEY:-D76B5C-EC0A70-AEA453-BC9414-0A198D-V3}"
82+
# 用户和组 ID 配置(用于文件权限管理)
83+
# 详细说明请参考"用户权限管理"章节
84+
# 将 1000 替换为您在宿主机的实际用户 ID 和组 ID
85+
# - PUID=1000
86+
# - PGID=1000
8287
# 智谱 AI API Key(必须配置 - 容器部署必需)
8388
# 取消注释并设置您的密钥
8489
# 购买链接:https://www.bigmodel.cn/claude-code?ic=14BY54APZA
@@ -319,6 +324,175 @@ ports:
319324
```
320325
:::
321326

327+
## 用户权限管理
328+
329+
### 为什么需要关注用户权限
330+
331+
在使用 Docker Compose 部署 Hagicode 时,容器内外用户权限的映射是一个重要的问题。如果不正确配置,可能会导致文件读写权限冲突。
332+
333+
**问题根源**:
334+
335+
- **用户 ID 映射不匹配**:Docker 容器内的用户 ID 是通过 Hash Code 生成的,与宿主机的用户 ID 可能不一致
336+
- **文件权限冲突**:当使用 root 用户在宿主机创建目录并挂载到容器时,容器内的非 root 用户可能无法读写这些文件
337+
- **权限不一致导致的问题**:
338+
- 容器内应用无法修改挂载目录中的文件
339+
- 容器内创建的文件在宿主机上显示为不同所有者
340+
- 影响正常的文件读写操作和开发体验
341+
342+
### 方案一:用户 ID 映射配置(推荐)
343+
344+
这是最安全和推荐的解决方案。通过配置环境变量 `PUID` 和 `PGID`,可以让容器内的进程以指定的用户 ID 和组 ID 运行,从而与宿主机的用户权限保持一致。
345+
346+
**配置步骤**:
347+
348+
1. **获取宿主机用户 ID 和组 ID**
349+
350+
在宿主机上运行以下命令:
351+
352+
```bash
353+
id username
354+
```
355+
356+
将 `username` 替换为您的实际用户名。如果使用 root 用户操作,可以创建一个非 root 用户:
357+
358+
```bash
359+
# 创建新用户(如果需要)
360+
sudo useradd -m -s /bin/bash hagicode
361+
# 获取用户 ID
362+
id hagicode
363+
```
364+
365+
输出示例:
366+
```
367+
uid=1000(hagicode) gid=1000(hagicode) groups=1000(hagicode)
368+
```
369+
370+
记下 `uid` 和 `gid` 的值(示例中为 1000)。
371+
372+
2. **配置 docker-compose.yml**
373+
374+
在 `docker-compose.yml` 的 `environment` 部分添加 `PUID` 和 `PGID` 环境变量:
375+
376+
```yaml
377+
services:
378+
hagicode:
379+
environment:
380+
# 用户和组 ID 配置(用于文件权限管理)
381+
# 请将 1000 替换为您在宿主机的实际用户 ID 和组 ID
382+
- PUID=1000
383+
- PGID=1000
384+
```
385+
386+
3. **重启容器使配置生效**
387+
388+
```bash
389+
docker compose restart hagicode
390+
```
391+
392+
4. **验证配置**
393+
394+
检查容器内用户是否正确配置:
395+
396+
```bash
397+
docker exec hagicode-app id
398+
```
399+
400+
应该显示您配置的用户 ID 和组 ID。
401+
402+
**适用场景**
403+
- 宿主机使用 root 用户操作
404+
- 需要安全的权限配置
405+
- 生产环境部署
406+
407+
**优点**
408+
- 安全性高,符合最小权限原则
409+
- 文件权限清晰,易于管理
410+
- 适用于多用户环境
411+
412+
**缺点**
413+
- 需要额外配置步骤
414+
- 需要了解用户 ID 和组 ID
415+
416+
### 方案二:权限设置
417+
418+
这是一个快速但不够安全的解决方案。通过直接设置目录权限为 777,允许所有用户读写,但不推荐用于生产环境。
419+
420+
:::warning 安全警告
421+
此方案仅适用于开发环境和测试环境。在生产环境中使用 777 权限存在安全风险,任何用户都可以读写目录中的文件。
422+
:::
423+
424+
**操作步骤**
425+
426+
1. **使用 root 创建工作目录**
427+
428+
```bash
429+
sudo mkdir -p /path/to/repos
430+
```
431+
432+
2. **设置目录权限为 777**
433+
434+
```bash
435+
sudo chmod 777 /path/to/repos
436+
```
437+
438+
3. **验证权限**
439+
440+
```bash
441+
ls -la /path/to/repos
442+
```
443+
444+
输出示例:
445+
```
446+
drwxrwxrwx 2 root root 4096 Jan 15 10:00 .
447+
```
448+
449+
**适用场景**
450+
- 开发环境
451+
- 单用户环境
452+
- 需要快速解决权限问题
453+
454+
**优点**
455+
- 操作简单,快速解决
456+
- 无需修改 Docker 配置
457+
458+
**缺点**
459+
- 安全性较低,任何用户都可以读写
460+
- 不适合生产环境
461+
- 多用户环境可能存在风险
462+
463+
### 故障排除
464+
465+
以下是常见的权限问题及解决方法:
466+
467+
| 问题现象 | 可能原因 | 解决方案 |
468+
|---------|---------|---------|
469+
| 容器内无法写文件 | 用户 ID 不匹配 | 配置 PUID/PGID 或设置目录权限 |
470+
| 容器内创建的文件宿主机无法访问 | 所有者 ID 不一致 | 使用方案一配置用户 ID 映射 |
471+
| Permission denied 错误 | 文件或目录权限不足 | 检查并修改文件/目录权限 |
472+
473+
**诊断命令**
474+
475+
```bash
476+
# 检查宿主机文件权限
477+
ls -la /path/to/repos
478+
479+
# 检查容器内用户
480+
docker exec hagicode-app id
481+
482+
# 检查容器内文件权限
483+
docker exec hagicode-app ls -la /app/workdir
484+
485+
# 测试容器内文件写入
486+
docker exec hagicode-app touch /app/workdir/test.txt
487+
```
488+
489+
**预防权限问题的最佳实践**
490+
491+
1. 优先使用方案一(用户 ID 映射配置)
492+
2. 在宿主机上使用专用的非 root 用户运行 Hagicode
493+
3. 避免在生产环境使用 777 权限
494+
4. 定期检查挂载目录的文件权限
495+
322496
## 访问应用
323497

324498
### Web 界面

docusaurus.config.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import type { Config } from '@docusaurus/types';
22
import type { Options as PresetOptions } from '@docusaurus/preset-classic';
33

4+
// Read CLARITY_PROJECT_ID from environment
45
const CLARITY_PROJECT_ID = process.env.CLARITY_PROJECT_ID;
56

67
const config: Config = {
@@ -16,10 +17,13 @@ const config: Config = {
1617

1718
onBrokenLinks: 'throw',
1819

19-
scripts: CLARITY_PROJECT_ID ? [{
20-
src: `https://www.clarity.ms/tag/${CLARITY_PROJECT_ID}`,
21-
async: true,
22-
}] : [],
20+
// Inject inline script to make CLARITY_PROJECT_ID available to client code
21+
scripts: CLARITY_PROJECT_ID ? [
22+
{
23+
src: `data:text/javascript;charset=utf-8,window.__CLARITY_PROJECT_ID__="${CLARITY_PROJECT_ID}";`,
24+
async: false,
25+
},
26+
] : [],
2327

2428
presets: [
2529
[
Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
# Change: 添加B站编程实战演示视频
2+
3+
## Status
4+
5+
**ExecutionCompleted** (2026-01-15)
6+
7+
## Why
8+
9+
当前主页缺少关于 AI 多任务编程实战的演示视频内容,无法有效展示 Hagicode 在 AI 编程辅助方面的核心能力。添加《每天哈基半小时,AI多任务编程实战》的演示视频可以让访客直观了解 Hagicode 的核心功能和使用方法。
10+
11+
## What Changes
12+
13+
- 在主页添加 Bilibili 视频播放器组件
14+
- 创建可复用的 `BilibiliVideo` 组件(推荐选项)或直接在主页嵌入 iframe
15+
- 添加视频容器样式,与现有首页设计保持一致
16+
- 实现响应式设计,支持桌面、平板和移动设备
17+
18+
## UI Design Changes
19+
20+
### 首页视频区域布局
21+
22+
```
23+
+--------------------------------------------------------------------------+
24+
| 编程实战演示视频 |
25+
| 观看《每天哈基半小时,AI多任务编程实战》 |
26+
| |
27+
| +--------------------------------------------------------------------+ |
28+
| | | |
29+
| | [Bilibili 嵌入式播放器] | |
30+
| | | |
31+
| | (视频容器 - 16:9 宽高比) | |
32+
| | | |
33+
| +--------------------------------------------------------------------+ |
34+
| |
35+
+--------------------------------------------------------------------------+
36+
```
37+
38+
### 响应式布局规格
39+
40+
**桌面端 (>1024px):**
41+
```
42+
+-------------------------------+
43+
| 视频容器 (900px) |
44+
+-------------------------------+
45+
```
46+
47+
**平板端 (768px-1024px):**
48+
```
49+
+---------------------------+
50+
| 视频容器 (700px) |
51+
+---------------------------+
52+
```
53+
54+
**移动端 (<768px):**
55+
```
56+
+-------------------------+
57+
| 视频容器 (全宽) |
58+
| 内边距 1rem |
59+
+-------------------------+
60+
```
61+
62+
### Bilibili 播放器嵌入参数
63+
64+
```
65+
iframe src: //player.bilibili.com/player.html
66+
参数:
67+
- isOutside: true (外部嵌入模式)
68+
- aid: 115898165822763
69+
- bvid: BV1pirZBuEzq
70+
- cid: 35399205805
71+
- p: 1 (第一分P)
72+
- scrolling: no
73+
- frameborder: 0
74+
- framespacing: 0
75+
- allowfullscreen: true
76+
```
77+
78+
## Code Flow Changes
79+
80+
### 组件架构 (选项 1 - 推荐)
81+
82+
```mermaid
83+
graph TD
84+
A[src/pages/index.tsx] --> B[导入 BilibiliVideo]
85+
B --> C[src/theme/BilibiliVideo/index.tsx]
86+
C --> D[构建 iframe URL]
87+
C --> E[应用响应式样式]
88+
C --> F[处理主题切换]
89+
F --> G[渲染 Bilibili iframe]
90+
```
91+
92+
### 组件架构 (选项 2 - 直接嵌入)
93+
94+
```mermaid
95+
graph TD
96+
A[src/pages/index.tsx] --> B[直接添加 iframe]
97+
B --> C[内联响应式容器]
98+
C --> D[渲染 Bilibili iframe]
99+
```
100+
101+
### 数据流
102+
103+
```mermaid
104+
sequenceDiagram
105+
participant U as 用户
106+
participant H as 首页
107+
participant BV as BilibiliVideo 组件
108+
participant B as Bilibili 服务器
109+
110+
U->>H: 访问首页
111+
H->>BV: 渲染视频组件
112+
BV->>BV: 构建播放器 URL
113+
BV->>B: 加载 iframe
114+
B-->>BV: 返回播放器
115+
BV-->>U: 显示视频
116+
```
117+
118+
## Impact
119+
120+
### 受影响的规格
121+
- `specs/docusaurus-site/spec.md` - 添加新的视频展示需求
122+
123+
### 受影响的代码
124+
- **新增文件**:
125+
- `src/theme/BilibiliVideo/index.tsx` (选项 1)
126+
- `src/components/home/BilibiliVideoPlayer.tsx` (选项 1 备选)
127+
- **修改文件**:
128+
- `src/pages/index.tsx` - 添加视频组件导入和渲染
129+
130+
### 用户体验改进
131+
- 访客可以在首页直接观看 AI 编程实战演示
132+
- 更直观地了解 Hagicode 的核心功能和使用方法
133+
- 提高用户对产品的理解和兴趣
134+
135+
### 技术影响
136+
- 需要确保构建通过:`npm run build` 无错误
137+
- 需要确保类型检查通过:`npm run typecheck` 无错误
138+
- 需要确保视频在不同设备上正常显示
139+
- 需要支持亮色和暗色主题切换
140+
141+
### 维护注意事项
142+
- 如果 Bilibili 视频链接发生变化,需要更新嵌入代码
143+
- 组件化实现便于未来添加更多视频内容
144+
- 视频加载需要考虑网络延迟和错误处理

0 commit comments

Comments
 (0)