Compare commits
10 Commits
a66888bfb3
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 106049be04 | |||
| 0a88970c90 | |||
| c4058528fc | |||
| 88967a238f | |||
| 155b347d3f | |||
| 7724af96f5 | |||
| a9aeb5809d | |||
| 0b962eb2f0 | |||
| 017daeea14 | |||
| 00a355e1e9 |
@@ -1,8 +1,8 @@
|
||||
# CLAUDE.md — kb 维护说明
|
||||
# CLAUDE.md — notebook 维护说明
|
||||
|
||||
## ⚠️ 最重要:敏感信息
|
||||
|
||||
kb 内容会被部署到公网,**禁止包含任何敏感信息**,包括但不限于:
|
||||
知识库内容会被部署到公网,**禁止包含任何敏感信息**,包括但不限于:
|
||||
- 公网 IP 地址
|
||||
- 密码、API Key、Token
|
||||
- 加密密钥(私钥、公钥、UUID、ShortID 等)
|
||||
@@ -36,6 +36,6 @@ kb 内容会被部署到公网,**禁止包含任何敏感信息**,包括但
|
||||
## 每次编辑后
|
||||
|
||||
```bash
|
||||
cd ~/kb && mkdocs build # 重新构建 site/
|
||||
cd ~/notebook && mkdocs build # 重新构建 site/
|
||||
git add -A && git commit -m "描述改动"
|
||||
```
|
||||
|
||||
+7
-3
@@ -11,9 +11,13 @@
|
||||
|
||||
## 📦 模型 & 项目
|
||||
|
||||
> 还没有内容。看到感兴趣的模型、打印了什么东西,可以告诉 Claude 帮你记录。
|
||||
>
|
||||
> 比如:「帮我在 3D打印里加一条,打印了 Genji 盔甲模型,链接是...,参数是...」
|
||||
> 还没有内容,待补充。计划记录:
|
||||
> - 已打印模型列表(名称、链接、耗材、耗时)
|
||||
> - 打印参数优化笔记(层高、温度、回抽、支撑)
|
||||
> - 耗材测试记录(PLA / PETG / ABS 不同品牌对比)
|
||||
> - Bambu Lab A1 维护日志
|
||||
|
||||
看到感兴趣的模型、打印了什么东西,可以告诉 Claude 帮你记录。
|
||||
|
||||
---
|
||||
|
||||
|
||||
+15
-2
@@ -1,3 +1,7 @@
|
||||
---
|
||||
comments: false
|
||||
---
|
||||
|
||||
# 🏠 我的知识库
|
||||
|
||||
欢迎!这里是我(kurihada)的个人知识内容存储。
|
||||
@@ -18,14 +22,23 @@
|
||||
|
||||
## 🔗 快捷入口
|
||||
|
||||
- **照片管理**:[Immich](http://localhost:2283)(AI 标签、人脸识别、RAW 预览)
|
||||
- **照片管理**:[Immich](https://photo.kurihada.com)(AI 标签、人脸识别、RAW 预览)
|
||||
- **大疆素材**:`~/action5pro/`
|
||||
- **RAW 原片**:`~/aa/`
|
||||
|
||||
---
|
||||
|
||||
## 💬 反馈
|
||||
|
||||
页面底部有评论区([Artalk](技术/artalk评论系统.md) 自托管),欢迎对内容进行提问、补充或指正。
|
||||
|
||||
可以使用顶部搜索栏(右上角 🔍)快速查找内容。
|
||||
|
||||
---
|
||||
|
||||
## 🛠 本站说明
|
||||
|
||||
- 基于 [MkDocs Material](https://squidfunk.github.io/mkdocs-material/) 构建
|
||||
- 所有内容为纯 Markdown 文件,存储在 `~/kb/docs/`
|
||||
- 所有内容为纯 Markdown 文件,存储在 `~/notebook/docs/`
|
||||
- Claude 协助维护和更新内容
|
||||
- 评论系统 [Artalk](技术/artalk评论系统.md) 自托管,数据存储在本站服务器
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
{#-
|
||||
Artalk 评论系统集成
|
||||
通过 Material 主题的 comments 块覆盖实现
|
||||
如需关闭某页面的评论,在页面 frontmatter 中设置 comments: false
|
||||
-#}
|
||||
{% if page.meta.comments is not defined or page.meta.comments %}
|
||||
<div id="artalk-comments"></div>
|
||||
<link href="/artalk/dist/Artalk.css" rel="stylesheet">
|
||||
<script src="/artalk/dist/Artalk.js"></script>
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
var isDark = document.documentElement.getAttribute('data-md-color-scheme') === 'slate'
|
||||
|
||||
Artalk.init({
|
||||
el: '#artalk-comments',
|
||||
site: '我的知识库',
|
||||
server: window.location.origin + '/artalk',
|
||||
pageKey: window.location.pathname.replace(/\/$/, ''),
|
||||
pageTitle: document.title,
|
||||
darkMode: isDark
|
||||
})
|
||||
|
||||
// 跟随 MkDocs Material 深色模式切换
|
||||
var observer = new MutationObserver(function(mutations) {
|
||||
mutations.forEach(function(mutation) {
|
||||
var scheme = document.documentElement.getAttribute('data-md-color-scheme')
|
||||
var dark = scheme === 'slate'
|
||||
if (Artalk.darkMode !== dark) Artalk.setDarkMode(dark)
|
||||
})
|
||||
})
|
||||
observer.observe(document.documentElement, { attributes: true, attributeFilter: ['data-md-color-scheme'] })
|
||||
})
|
||||
</script>
|
||||
{% endif %}
|
||||
@@ -0,0 +1,92 @@
|
||||
{#-
|
||||
Override Material theme content partial
|
||||
Adds page metadata bar: creation date, update date, word count, reading time
|
||||
-#}
|
||||
|
||||
{#- CSS must be first to prevent FOUC #}
|
||||
<style>
|
||||
.md-page-metadata {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 0.5rem 1.5rem;
|
||||
margin: 0 0 1.5rem 0;
|
||||
padding-bottom: 0.75rem;
|
||||
border-bottom: 1px solid var(--md-default-fg-color--lightest);
|
||||
font-size: 0.7rem;
|
||||
color: var(--md-default-fg-color--light);
|
||||
}
|
||||
.md-page-metadata__item {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 0.2rem;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.md-page-metadata__item .twemoji {
|
||||
width: 0.9rem;
|
||||
height: 0.9rem;
|
||||
}
|
||||
.md-page-metadata__item .twemoji svg {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
#word-count-value, #reading-time-value {
|
||||
font-variant-numeric: tabular-nums;
|
||||
}
|
||||
</style>
|
||||
|
||||
{% include "partials/tags.html" %}
|
||||
{% include "partials/actions.html" %}
|
||||
{% if "<h1" not in page.content %}
|
||||
<h1>{{ page.title | d(config.site_name, true)}}</h1>
|
||||
{% endif %}
|
||||
|
||||
{#- Metadata bar #}
|
||||
{% if page.meta and (page.meta.git_revision_date_localized or page.meta.git_creation_date_localized) %}
|
||||
<div class="md-page-metadata">
|
||||
<span class="md-page-metadata__item">
|
||||
<span class="twemoji">{% include ".icons/material/calendar-plus.svg" %}</span>
|
||||
创建:{{ page.meta.git_creation_date_localized }}
|
||||
</span>
|
||||
<span class="md-page-metadata__item">
|
||||
<span class="twemoji">{% include ".icons/material/calendar-edit.svg" %}</span>
|
||||
更新:{{ page.meta.git_revision_date_localized }}
|
||||
</span>
|
||||
<span class="md-page-metadata__item" id="word-count">
|
||||
<span class="twemoji">{% include ".icons/material/text-short.svg" %}</span>
|
||||
字数:<span id="word-count-value">—</span>
|
||||
</span>
|
||||
<span class="md-page-metadata__item" id="reading-time">
|
||||
<span class="twemoji">{% include ".icons/material/clock-outline.svg" %}</span>
|
||||
阅读:<span id="reading-time-value">—</span>
|
||||
</span>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{{ page.content }}
|
||||
{% include "partials/source-file.html" %}
|
||||
{% include "partials/feedback.html" %}
|
||||
{% include "partials/comments.html" %}
|
||||
|
||||
{#- Word count & reading time script (SPA-aware) #}
|
||||
<script>
|
||||
function updateMeta() {
|
||||
var article = document.querySelector('.md-content__inner') || document.querySelector('.md-content');
|
||||
if (!article) return;
|
||||
var text = article.textContent || '';
|
||||
var chineseChars = (text.match(/[一-鿿㐀-䶿]/g) || []).length;
|
||||
var englishWords = text.replace(/[一-鿿㐀-䶿]/g, ' ')
|
||||
.split(/\s+/)
|
||||
.filter(function(w) { return w.length > 0; }).length;
|
||||
var totalWords = chineseChars + englishWords;
|
||||
var minutes = Math.max(1, Math.round(totalWords / 400));
|
||||
var wordEl = document.getElementById('word-count-value');
|
||||
var timeEl = document.getElementById('reading-time-value');
|
||||
if (wordEl) wordEl.textContent = totalWords.toLocaleString();
|
||||
if (timeEl) timeEl.textContent = minutes + ' 分钟';
|
||||
}
|
||||
if (typeof document$ !== 'undefined') {
|
||||
document$.subscribe(function() { updateMeta(); });
|
||||
} else {
|
||||
document.addEventListener('DOMContentLoaded', updateMeta);
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,269 @@
|
||||
# Artalk 评论系统部署
|
||||
|
||||
> 为知识库接入自托管评论系统。Artalk v2.9.1:Go 后端 + SQLite,Docker 一键部署,前端 ~40KB,完全自托管无外部依赖。
|
||||
|
||||
---
|
||||
|
||||
## 技术选型
|
||||
|
||||
### 需求约束
|
||||
|
||||
- **自托管**:不能依赖第三方 SaaS(如 Giscus、Disqus),数据在自己服务器上
|
||||
- **无需 GitHub 账号**:读者不应被强制要求 GitHub 登录
|
||||
- **轻量**:服务器资源有限,不能上 PostgreSQL 等重型依赖
|
||||
- **中文友好**:面向中文用户
|
||||
|
||||
对比了 3 款主流的自托管评论系统(数据截至 2026 年 6 月):
|
||||
|
||||
| | Artalk | Waline | Twikoo |
|
||||
|------|:---:|:---:|:---:|
|
||||
| 后端语言 | **Go** | Node.js | Node.js |
|
||||
| 数据库 | **SQLite**(嵌入式) | SQLite | 嵌入式文件 DB |
|
||||
| Docker 镜像 | **~20MB** | ~150MB | ~120MB |
|
||||
| 内存占用 | **~30MB** | ~100-150MB | ~100MB |
|
||||
| 前端大小 | **~40KB** | ~60KB | ~50KB |
|
||||
| 中文支持 | 一级 | 一级 | 一级 |
|
||||
| GitHub Stars | 2.3k | 1.8k | 1.5k |
|
||||
| 管理后台 | 侧边栏集成 | 独立后台 | 独立后台 |
|
||||
| 邮件通知 | ✅ | ✅ | ✅ |
|
||||
| 验证码 | ✅ 图片验证 | ✅ | ✅ |
|
||||
| 社交登录 | ✅ 多平台 | ✅ | ✅ |
|
||||
| 图片上传 | ✅ | ✅ | ✅ |
|
||||
| Markdown | ✅ | ✅ | ✅ |
|
||||
| 多站点 | ✅ | ✅ | ✅ |
|
||||
|
||||
### 为什么选 Artalk
|
||||
|
||||
1. **Go 后端最省资源**:Artalk 是唯一用 Go 写的,Docker 镜像只有 ~20MB,运行时内存 ~30MB。Waline 和 Twikoo 都是 Node.js,内存占用 3-5 倍
|
||||
2. **SQLite 零维护**:不需要单独跑数据库容器,数据就是一个文件,备份只需 `cp` 一下
|
||||
3. **中文社区最强**:开发者是中国人,文档完整,中文 issue 响应快
|
||||
4. **前端最轻**:~40KB 的 JS,对页面加载速度几乎没有影响
|
||||
|
||||
Walie 和 Twikoo 也都是优秀项目,功能丰富度甚至略超 Artalk。但 知识库这种低流量个人站点,**省资源 + 零维护**的优先级远高于功能数量,Artalk 最合适。
|
||||
|
||||
---
|
||||
|
||||
## 架构
|
||||
|
||||
```mermaid
|
||||
graph LR
|
||||
Browser["浏览器"]
|
||||
Caddy["Caddy"]
|
||||
MkDocs["MkDocs 静态文件"]
|
||||
Artalk["Artalk Docker<br/>:23366"]
|
||||
SQLite[("SQLite<br/>/data")]
|
||||
|
||||
Browser --> Caddy
|
||||
Caddy -->|"/"| MkDocs
|
||||
Caddy -->|"/artalk* → strip prefix"| Artalk
|
||||
Artalk --> SQLite
|
||||
```
|
||||
|
||||
- Artalk 后端和 知识库站点部署在同一台服务器
|
||||
- Caddy 将 `/artalk*` 路径反代到 Artalk 容器(自动去除 `/artalk` 前缀)
|
||||
- 前端 JS/CSS 同域加载 `/artalk/dist/`,完全自托管无跨域问题
|
||||
|
||||
---
|
||||
|
||||
## 一、Docker 部署
|
||||
|
||||
### 1.1 实际部署位置
|
||||
|
||||
```bash
|
||||
~/docker/artalk/
|
||||
├── docker-compose.yml
|
||||
└── data/
|
||||
├── artalk.db # SQLite 数据库
|
||||
├── artalk.yml # 配置文件
|
||||
└── artalk.log # 日志
|
||||
```
|
||||
|
||||
### 1.2 docker-compose.yml
|
||||
|
||||
```yaml
|
||||
services:
|
||||
artalk:
|
||||
image: artalk/artalk-go
|
||||
container_name: artalk
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- ./data:/data
|
||||
environment:
|
||||
- TZ=Asia/Shanghai
|
||||
- ATK_LOCALE=zh-CN
|
||||
- ATK_SITE_DEFAULT=我的知识库
|
||||
- ATK_SITE_URL=https://note.kurihada.com
|
||||
- ATK_TRUSTED_DOMAINS=https://note.kurihada.com
|
||||
networks:
|
||||
- nginx
|
||||
|
||||
networks:
|
||||
nginx:
|
||||
external: true
|
||||
```
|
||||
|
||||
> 注意:需要加入 `nginx` 网络以便 Caddy 能通过容器名 `artalk` 访问。`ATK_TRUSTED_DOMAINS` 限制允许跨域请求的域名,防止 CSRF。
|
||||
|
||||
### 1.3 启动
|
||||
|
||||
```bash
|
||||
cd ~/docker/artalk && docker compose up -d
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 二、Caddy 反向代理
|
||||
|
||||
Caddyfile 配置(`~/docker/caddy/Caddyfile`):
|
||||
|
||||
```caddy
|
||||
note.kurihada.com {
|
||||
handle_path /artalk* {
|
||||
reverse_proxy artalk:23366
|
||||
}
|
||||
handle {
|
||||
root * /srv/mkdocs
|
||||
file_server
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
- `handle_path /artalk*`:匹配 `/artalk` 开头的路径,**自动去除 `/artalk` 前缀**后转发
|
||||
- 例如 `/artalk/dist/Artalk.js` → Artalk 收到 `/dist/Artalk.js`
|
||||
- `handle { ... }` 包裹 `file_server`,保证与 `handle_path` 互斥不冲突
|
||||
|
||||
修改后重载:`docker restart caddy`
|
||||
|
||||
---
|
||||
|
||||
## 三、初始化 Artalk
|
||||
|
||||
### 3.1 创建管理员
|
||||
|
||||
**推荐方式(交互式):**
|
||||
|
||||
```bash
|
||||
docker exec -it artalk ./artalk admin
|
||||
```
|
||||
|
||||
按提示输入用户名、邮箱、密码即可。Artalk 自己生成 bcrypt 哈希,不会出现兼容性问题。
|
||||
|
||||
> ⚠️ 不建议手动在 `artalk.yml` 中写 bcrypt 哈希。Python 等工具生成的 `$2b$` 格式与 Go 的 `$2a$` 不完全兼容,会导致密码验证失败。
|
||||
|
||||
### 3.2 关键配置文件
|
||||
|
||||
Artalk 配置文件位于 `~/docker/artalk/data/artalk.yml`,需确保以下两项正确:
|
||||
|
||||
```yaml
|
||||
site_default: 我的知识库
|
||||
site_url: "https://note.kurihada.com"
|
||||
```
|
||||
|
||||
修改后 `docker restart artalk` 生效。
|
||||
|
||||
---
|
||||
|
||||
## 四、MkDocs 端运作方式
|
||||
|
||||
kb 已通过 Material 主题的 `custom_dir` 机制集成了 Artalk 前端。
|
||||
|
||||
### 关键文件
|
||||
|
||||
- **覆盖模板**:`docs/overrides/partials/comments.html` — Artalk JS/CSS 引入 + 初始化
|
||||
- **CSS/JS 路径**:`/artalk/dist/Artalk.css` 和 `/artalk/dist/Artalk.js`(同域加载)
|
||||
- **API 地址**:`window.location.origin + '/artalk'`(自动适配当前域名)
|
||||
|
||||
### 关闭特定页面评论
|
||||
|
||||
在 `.md` 文件头部添加 frontmatter:
|
||||
|
||||
```yaml
|
||||
---
|
||||
comments: false
|
||||
---
|
||||
```
|
||||
|
||||
### 深色模式
|
||||
|
||||
Artalk 通过 MutationObserver 监听 Material 主题的 `data-md-color-scheme` 属性变化,自动跟随切换。
|
||||
|
||||
---
|
||||
|
||||
## 五、日常管理
|
||||
|
||||
```bash
|
||||
# 查看日志
|
||||
docker logs artalk -f
|
||||
|
||||
# 重启
|
||||
docker restart artalk
|
||||
|
||||
# 升级
|
||||
cd ~/docker/artalk && docker compose pull && docker compose up -d
|
||||
|
||||
# 备份数据
|
||||
cp ~/docker/artalk/data/artalk.db ~/backup/artalk-$(date +%Y%m%d).db
|
||||
```
|
||||
|
||||
### 查看 Artalk 配置
|
||||
|
||||
访问 `https://note.kurihada.com/artalk/api/v2/conf` 查看当前前端配置。
|
||||
|
||||
---
|
||||
|
||||
## 六、可选配置
|
||||
|
||||
### 邮件通知
|
||||
|
||||
编辑 `~/docker/artalk/data/artalk.yml`,配置 SMTP:
|
||||
|
||||
```yaml
|
||||
email:
|
||||
enabled: true
|
||||
send_type: smtp
|
||||
send_name: "{{reply_nick}}"
|
||||
send_addr: noreply@example.com
|
||||
smtp:
|
||||
host: smtp.qq.com
|
||||
port: 587
|
||||
username: example@qq.com
|
||||
password: ""
|
||||
```
|
||||
|
||||
然后 `docker restart artalk`。
|
||||
|
||||
### 验证码
|
||||
|
||||
默认已启用图片验证码(`captcha.captcha_type: image`),评论 3 次后触发。
|
||||
|
||||
### 社交登录
|
||||
|
||||
配置 `auth` 段可启用 GitHub/Gitea/Google 等社交账号登录,参见 [Artalk 文档](https://artalk.js.org/guide/backend/auth.html)。
|
||||
|
||||
---
|
||||
|
||||
## 七、踩坑笔记
|
||||
|
||||
### Caddy `handle_path` 必须带 `*` 通配符
|
||||
|
||||
`handle_path /artalk` 只匹配确切路径 `/artalk`,不匹配 `/artalk/xxx`。必须写成 `handle_path /artalk*`。
|
||||
|
||||
排查方法:`docker exec caddy caddy adapt --config /etc/caddy/Caddyfile` 查看生成的 JSON,看 `match.path` 是否包含了通配符。
|
||||
|
||||
### 管理员密码不要手动写 bcrypt 哈希
|
||||
|
||||
Python 生成的 `$2b$` bcrypt 哈希与 Go 的 `$2a$` 格式不完全兼容,直接写入 `artalk.yml` 可能导致密码验证失败。
|
||||
|
||||
正确做法是用 Artalk 自带的 CLI 创建:
|
||||
|
||||
```bash
|
||||
docker exec -it artalk ./artalk admin
|
||||
```
|
||||
|
||||
### 配置文件权限问题
|
||||
|
||||
`artalk.yml` 由 Docker 挂载后属主为 root,本地编辑需 `sudo`。修改后需 `docker restart artalk` 才能生效。
|
||||
|
||||
### 环境变量与配置文件的关系
|
||||
|
||||
Artalk 2.9.x 中环境变量和 `artalk.yml` 均可生效。当前部署两种方式同时使用,`ATK_SITE_DEFAULT`、`ATK_SITE_URL` 在 docker-compose.yml 中设置,同时也直接写入了 `artalk.yml`。修改配置时建议**两边保持一致**,避免排查困难。
|
||||
@@ -0,0 +1,70 @@
|
||||
# Immich 照片管理
|
||||
|
||||
> 自托管照片管理服务,支持 AI 标签、人脸识别、RAW 预览、多用户。域名 `photo.kurihada.com`。
|
||||
|
||||
---
|
||||
|
||||
## 架构
|
||||
|
||||
Immich 由 4 个容器组成,部署在 `~/docker/immich/`:
|
||||
|
||||
| 容器 | 镜像 | 说明 |
|
||||
|------|------|------|
|
||||
| immich_server | ghcr.io/immich-app/immich-server | 主服务 + API |
|
||||
| immich_postgres | pgvector/pgvector | 数据库(PostgreSQL + pgvector) |
|
||||
| immich_redis | valkey/valkey | 缓存 |
|
||||
| immich_machine_learning | ghcr.io/immich-app/immich-machine-learning | AI 智能搜索/人脸识别 |
|
||||
|
||||
通过 Caddy 反代 `photo.kurihada.com → immich_server:2283`。
|
||||
|
||||
---
|
||||
|
||||
## 日常管理
|
||||
|
||||
```bash
|
||||
# 查看状态
|
||||
cd ~/docker/immich && docker compose ps
|
||||
|
||||
# 查看日志
|
||||
docker logs immich_server -f
|
||||
|
||||
# 更新
|
||||
docker compose pull && docker compose up -d
|
||||
|
||||
# 完整重启
|
||||
docker compose down && docker compose up -d
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 存储
|
||||
|
||||
| 内容 | 路径 |
|
||||
|------|------|
|
||||
| 照片库 | `~/docker/immich/library/` |
|
||||
| 数据库 | PostgreSQL(容器内) |
|
||||
| 外部库(RAW) | `~/aa/`(只读挂载,Immich 索引访问) |
|
||||
|
||||
---
|
||||
|
||||
## 备份
|
||||
|
||||
```bash
|
||||
# 备份照片库
|
||||
rsync -av ~/docker/immich/library/ /backup/immich-library/
|
||||
|
||||
# 备份数据库(推荐用 pg_dump)
|
||||
docker exec immich_postgres pg_dump -U postgres immich > /backup/immich-db-$(date +%Y%m%d).sql
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 更新
|
||||
|
||||
Immich 发版频繁(~每月),更新前务必查看 [Release Notes](https://github.com/immich-app/immich/releases) 了解破坏性变更。
|
||||
|
||||
```bash
|
||||
cd ~/docker/immich
|
||||
docker compose pull
|
||||
docker compose up -d
|
||||
```
|
||||
+20
-11
@@ -8,7 +8,8 @@
|
||||
|------|------|
|
||||
| 系统 | Ubuntu 24.04, 16 核, 12GB RAM |
|
||||
| 存储 | 1TB NVMe SSD(后续加机械硬盘) |
|
||||
| Web 服务 | Nginx Proxy Manager (Docker) |
|
||||
| 反向代理 | Caddy (Docker) |
|
||||
| Docker 网络 | `nginx`(所有服务加入此网络互通) |
|
||||
| 内网穿透 | frpc |
|
||||
| 照片管理 | Immich |
|
||||
| 知识库 | MkDocs Material |
|
||||
@@ -17,18 +18,26 @@
|
||||
|
||||
## 📋 服务列表
|
||||
|
||||
| 服务 | 说明 |
|
||||
|------|------|
|
||||
| Immich | 照片/视频管理 + AI 标签 |
|
||||
| Immich API | Immich 后端 API |
|
||||
| Nginx Proxy Manager | 反向代理管理面板 |
|
||||
| Gitea | 自托管 Git 服务 |
|
||||
| Minio | S3 兼容对象存储 |
|
||||
| Java app.jar | Spring Boot 应用 |
|
||||
| Java auth-backend | 认证后端 |
|
||||
所有公网流量经 Caddy(TLS 终结)转发到各后端服务。
|
||||
|
||||
| 服务 | 域名 | 说明 |
|
||||
|------|------|------|
|
||||
| Caddy | — | 反向代理,自动 Let's Encrypt TLS |
|
||||
| MkDocs | [note.kurihada.com](https://note.kurihada.com) | 知识库(本页面) |
|
||||
| Artalk | 同域 `/artalk/` | 评论系统 |
|
||||
| Immich | [photo.kurihada.com](https://photo.kurihada.com) | 照片/视频管理 + AI 标签 |
|
||||
| Gitea | [git.kurihada.com](https://git.kurihada.com) | 自托管 Git 服务 |
|
||||
| MinIO | [minio.kurihada.com](https://minio.kurihada.com) | S3 兼容对象存储 |
|
||||
| Alist | [pan.kurihada.com](https://pan.kurihada.com) | 网盘文件管理 |
|
||||
| Vaultwarden | [pass.kurihada.com](https://pass.kurihada.com) | 密码管理器 |
|
||||
| WordPress | [www.kurihada.com](https://www.kurihada.com) | 博客 |
|
||||
|
||||
---
|
||||
|
||||
## 📝 技术笔记
|
||||
|
||||
- [旁路由 + 去广告 部署](旁路由部署.md) — sing-box + AdGuard Home 旁路由架构、配置路径、已知问题
|
||||
- [MkDocs 知识库部署](mkdocs部署.md) — MkDocs Material 构建 + Caddy 静态文件服务
|
||||
- [Artalk 评论系统](artalk评论系统.md) — 自托管评论系统,Docker 部署 + MkDocs 集成
|
||||
- [Immich 照片管理](immich部署.md) — 自托管照片服务,AI 标签 + 人脸识别
|
||||
- [旁路由部署](旁路由部署.md) — sing-box + AdGuard Home 架构、部署、踩坑笔记
|
||||
- [旁路由使用指南](旁路由使用/Linux.md) — 各平台客户端配置(Linux / Windows / macOS / Android / iPhone)
|
||||
|
||||
@@ -0,0 +1,224 @@
|
||||
# MkDocs 知识库部署
|
||||
|
||||
> `note.kurihada.com` — 基于 MkDocs Material 的个人知识库,Caddy 静态文件服务。
|
||||
|
||||
---
|
||||
|
||||
## 架构
|
||||
|
||||
```mermaid
|
||||
graph LR
|
||||
Repo["~/notebook Git 仓库"]
|
||||
Build["mkdocs build"]
|
||||
Site["kb/site/ 静态文件"]
|
||||
Caddy["Caddy Docker<br/>caddy:alpine"]
|
||||
Browser["浏览器<br/>note.kurihada.com"]
|
||||
|
||||
Repo --> Build --> Site -->|"bind mount :ro"| Caddy --> Browser
|
||||
```
|
||||
|
||||
整个流程:编辑 Markdown → `mkdocs build` 生成静态文件 → Caddy 直接 serve。
|
||||
|
||||
---
|
||||
|
||||
## 一、MkDocs 配置
|
||||
|
||||
### 1.1 mkdocs.yml 要点
|
||||
|
||||
```yaml
|
||||
site_name: 我的知识库
|
||||
theme:
|
||||
name: material
|
||||
language: zh
|
||||
features:
|
||||
- navigation.instant # SPA 即时加载
|
||||
- navigation.tabs # 顶部标签
|
||||
- navigation.indexes # 分类文件夹可点击
|
||||
- search.suggest # 搜索建议
|
||||
- content.code.copy # 代码块复制按钮
|
||||
custom_dir: docs/overrides # Artalk 评论等自定义模板
|
||||
|
||||
markdown_extensions:
|
||||
- pymdownx.superfences: # Mermaid 流程图支持
|
||||
custom_fences:
|
||||
- name: mermaid
|
||||
class: mermaid
|
||||
format: !!python/name:pymdownx.superfences.fence_code_format
|
||||
```
|
||||
|
||||
### 1.2 目录结构
|
||||
|
||||
```
|
||||
~/notebook/
|
||||
├── mkdocs.yml # 站点配置
|
||||
├── docs/ # Markdown 源文件
|
||||
│ ├── index.md
|
||||
│ ├── overrides/ # 主题覆盖(评论系统等)
|
||||
│ │ └── partials/
|
||||
│ │ └── comments.html
|
||||
│ ├── 技术/
|
||||
│ ├── 旅行/
|
||||
│ ├── 摄影/
|
||||
│ ├── 3D打印/
|
||||
│ └── 日记/
|
||||
├── site/ # 构建输出(.gitignore 忽略)
|
||||
└── .gitignore
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 二、构建
|
||||
|
||||
### 2.1 本地构建
|
||||
|
||||
```bash
|
||||
cd ~/notebook && mkdocs build
|
||||
```
|
||||
|
||||
输出到 `site/` 目录,耗时 < 1 秒。
|
||||
|
||||
### 2.2 本地预览
|
||||
|
||||
```bash
|
||||
mkdocs serve -a 0.0.0.0:8000
|
||||
```
|
||||
|
||||
浏览器打开 `http://localhost:8000`,修改 Markdown 后自动刷新。
|
||||
|
||||
### 2.3 Git 工作流
|
||||
|
||||
```bash
|
||||
cd ~/notebook
|
||||
mkdocs build # 构建
|
||||
git add -A
|
||||
git commit -m "描述改动" # 提交 Markdown 源码
|
||||
```
|
||||
|
||||
> `site/` 已在 `.gitignore` 中忽略,只提交 Markdown 源文件。
|
||||
|
||||
---
|
||||
|
||||
## 三、Caddy 部署
|
||||
|
||||
### 3.1 前置:创建 Docker 网络
|
||||
|
||||
```bash
|
||||
docker network create nginx
|
||||
```
|
||||
|
||||
所有通过 Caddy 反代的服务都加入 `nginx` 网络,容器间通过容器名互相访问。
|
||||
|
||||
### 3.2 docker-compose.yml
|
||||
|
||||
Caddy 部署在 `~/docker/caddy/`:
|
||||
|
||||
```yaml
|
||||
services:
|
||||
caddy:
|
||||
image: caddy:alpine
|
||||
container_name: caddy
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- nginx
|
||||
ports:
|
||||
- "80:80"
|
||||
- "443:443"
|
||||
volumes:
|
||||
- ./Caddyfile:/etc/caddy/Caddyfile:ro
|
||||
- ./data:/data # TLS 证书存储
|
||||
- /home/kurihada/notebook/site:/srv/mkdocs:ro # kb 静态文件
|
||||
|
||||
networks:
|
||||
nginx:
|
||||
external: true
|
||||
```
|
||||
|
||||
### 3.3 首次启动
|
||||
|
||||
```bash
|
||||
cd ~/docker/caddy && docker compose up -d
|
||||
```
|
||||
|
||||
启动前确认 `~/notebook/site/` 目录存在(需先执行过 `mkdocs build`),否则 bind mount 会创建一个空目录导致 404。
|
||||
|
||||
### 3.4 Caddyfile 中 kb 的配置
|
||||
|
||||
Caddyfile 开头有全局块配置 Let's Encrypt 通知邮箱:
|
||||
|
||||
```caddy
|
||||
{
|
||||
email kurihada@qq.com
|
||||
}
|
||||
```
|
||||
|
||||
kb 站点的配置:
|
||||
|
||||
```caddy
|
||||
note.kurihada.com {
|
||||
handle_path /artalk* {
|
||||
reverse_proxy artalk:23366
|
||||
}
|
||||
handle {
|
||||
root * /srv/mkdocs
|
||||
file_server
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
列一下关键点:
|
||||
|
||||
- `root * /srv/mkdocs` — 指向挂载进来的 `site/` 目录
|
||||
- `handle_path /artalk*` — Artalk 评论系统反代(详见 [Artalk 部署文档](artalk评论系统.md))
|
||||
- `handle { ... }` — 包裹 `file_server`,保证和 `handle_path` 互斥
|
||||
- Caddy 自动申请和续期 Let's Encrypt TLS 证书,无需额外配置
|
||||
|
||||
### 3.5 部署后重载
|
||||
|
||||
修改 Caddyfile 后重载(两种方式):
|
||||
|
||||
```bash
|
||||
docker restart caddy # 简单粗暴,短暂中断
|
||||
docker exec caddy caddy reload --config /etc/caddy/Caddyfile # 零停机
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 四、完整工作流
|
||||
|
||||
```
|
||||
1. 编辑 docs/ 下的 Markdown
|
||||
2. mkdocs build # 生成 site/
|
||||
3. git add -A && git commit # 提交源码
|
||||
4. (无需重启 Caddy) # site/ 通过 bind mount 实时生效
|
||||
```
|
||||
|
||||
> 因为 Caddy 通过 `bind mount` 直接读取 `~/notebook/site/`,`mkdocs build` 后变更即时生效,无需重启任何服务。
|
||||
|
||||
---
|
||||
|
||||
## 五、维护
|
||||
|
||||
### 升级 MkDocs Material
|
||||
|
||||
```bash
|
||||
pip install --upgrade mkdocs-material
|
||||
mkdocs build # 确认构建无报错
|
||||
```
|
||||
|
||||
### 检查构建状态
|
||||
|
||||
```bash
|
||||
cd ~/notebook && mkdocs build --verbose
|
||||
```
|
||||
|
||||
### DNS 与 TLS
|
||||
|
||||
- DNS:`note.kurihada.com` A 记录指向服务器 IP
|
||||
- TLS:Caddy 自动通过 Let's Encrypt 申请,90 天自动续期
|
||||
- 证书存储:`~/docker/caddy/data/`
|
||||
|
||||
### Caddy 日志
|
||||
|
||||
```bash
|
||||
docker logs caddy | grep note.kurihada.com
|
||||
```
|
||||
@@ -27,7 +27,7 @@
|
||||
|
||||
4. 保存
|
||||
|
||||
?> 不同 Android 厂商设置路径略有差异,核心就是 WiFi → 高级 → 静态 IP + 手动代理。
|
||||
!!! tip "不同 Android 厂商设置路径略有差异,核心就是 WiFi → 高级 → 静态 IP + 手动代理。切换静态 IP 时,**IP 地址/网关/子网掩码保持 DHCP 分配的值不变**,只修改 DNS 字段。"
|
||||
|
||||
---
|
||||
|
||||
@@ -37,11 +37,12 @@
|
||||
|
||||
### 推荐 App
|
||||
|
||||
| App | 价格 | 说明 |
|
||||
|-----|:---:|------|
|
||||
| **Hiddify Next** | 免费 | 开源,支持 VLESS Reality |
|
||||
| **v2rayNG** | 免费 | 老牌客户端,功能全面 |
|
||||
| **Clash Meta** | 免费 | 规则灵活 |
|
||||
| App | 价格 | VLESS Reality |
|
||||
|-----|:---:|:---:|
|
||||
| **Hiddify Next** | 免费 | 支持 |
|
||||
| **v2rayNG** | 免费 | 支持 |
|
||||
|
||||
> Clash Meta 虽然规则灵活,但**不支持 VLESS Reality**,不适合此旁路由架构。
|
||||
|
||||
### 配置方法
|
||||
|
||||
@@ -75,6 +76,12 @@
|
||||
|
||||
有些 app(如银行类)不走系统代理。可以在 Hiddify Next 等 App 中使用 **VPN 模式**,接管全部流量。
|
||||
|
||||
### DNS 去广告不生效?
|
||||
|
||||
Android 9+ 有「私人 DNS」(DNS-over-TLS)功能,开启后会**覆盖 WiFi 的 DNS 设置**,导致 AdGuard Home 被绕过。
|
||||
|
||||
检查路径:**设置 → 连接 → 更多连接设置 → 私人 DNS → 设为关闭**
|
||||
|
||||
### 出门时无法连接 VPS?
|
||||
|
||||
1. 检查 VPS 是否在线
|
||||
|
||||
+47
-5
@@ -6,9 +6,13 @@
|
||||
|
||||
## 接入旁路由
|
||||
|
||||
### 系统代理(GNOME)
|
||||
根据你的 Linux 机器是不是旁路由本身,选择对应的配置方式。
|
||||
|
||||
1. 打开 **设置 → 网络 → 代理**
|
||||
### 场景 A:这台 Linux 就是旁路由
|
||||
|
||||
本机已运行 sing-box + AdGuard Home,DNS 和代理指向自己即可。
|
||||
|
||||
1. 打开 **设置 → 网络 → 代理**(GNOME)或者用 NetworkManager 命令行
|
||||
2. 选择 **手动**
|
||||
3. 填写:
|
||||
|
||||
@@ -17,14 +21,51 @@
|
||||
| SOCKS 代理 | `127.0.0.1` |
|
||||
| 端口 | `7890` |
|
||||
|
||||
?> DNS 会自动使用 AdGuard(因为旁路由本机 DNS 已设为 `127.0.0.1`)。
|
||||
!!! tip "DNS 会自动使用 AdGuard(旁路由本机 DNS 已设为 `127.0.0.1`),无需额外配置。"
|
||||
|
||||
### 终端代理(可选)
|
||||
### 场景 B:这台 Linux 是局域网内其他机器
|
||||
|
||||
DNS 和代理都需要指向旁路由 IP。
|
||||
|
||||
#### 设置 DNS
|
||||
|
||||
**GNOME 图形界面:**
|
||||
|
||||
1. 打开 **设置 → 网络**
|
||||
2. 选择当前连接 → **IPv4 → DNS**
|
||||
3. 添加:`旁路由 IP`(如 `192.168.31.112`)
|
||||
4. 备用:`223.5.5.5`
|
||||
|
||||
**命令行方式(NetworkManager):**
|
||||
|
||||
```bash
|
||||
nmcli con mod "连接名" ipv4.dns "旁路由IP" ipv4.ignore-auto-dns yes
|
||||
nmcli con up "连接名"
|
||||
```
|
||||
|
||||
#### 设置系统代理
|
||||
|
||||
1. 打开 **设置 → 网络 → 代理**
|
||||
2. 选择 **手动**
|
||||
3. 填写 SOCKS 代理地址为旁路由 IP
|
||||
|
||||
| 字段 | 值 |
|
||||
|------|-----|
|
||||
| SOCKS 代理 | `旁路由 IP`(如 `192.168.31.112`) |
|
||||
| 端口 | `7890` |
|
||||
|
||||
---
|
||||
|
||||
## 终端代理(可选)
|
||||
|
||||
如果需要在终端里走代理,设置环境变量:
|
||||
|
||||
```bash
|
||||
# 本机就是旁路由
|
||||
export ALL_PROXY=socks5://127.0.0.1:7890
|
||||
|
||||
# 局域网内其他机器(替换为实际 IP)
|
||||
export ALL_PROXY=socks5://旁路由IP:7890
|
||||
```
|
||||
|
||||
或者写入 `~/.bashrc` 持久化:
|
||||
@@ -48,13 +89,14 @@ curl --socks5 127.0.0.1:7890 https://www.google.com -o /dev/null -s -w '%{http_c
|
||||
# 测试 DNS 去广告
|
||||
nslookup doubleclick.net
|
||||
# 返回 0.0.0.0 → 广告域名已被拦截
|
||||
# 如果提示 command not found,安装 dnsutils(Debian/Ubuntu)或 bind-utils(Fedora)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 服务管理
|
||||
|
||||
旁路由本机就是服务器,所以日常管理命令也在这里执行:
|
||||
如果这台机器就是旁路由,日常管理命令:
|
||||
|
||||
```bash
|
||||
sudo systemctl restart sing-box # 重启翻墙
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
|
||||
4. 点击 **保存**
|
||||
|
||||
?> 不需要翻墙时关掉即可,国内网站直连,不受影响。
|
||||
!!! tip "不需要翻墙时关掉即可,国内网站直连,不受影响。"
|
||||
|
||||
---
|
||||
|
||||
|
||||
+2
-12
@@ -37,10 +37,7 @@
|
||||
|
||||
### 推荐 App
|
||||
|
||||
| App | 价格 | 说明 |
|
||||
|-----|:---:|------|
|
||||
| **Shadowrocket**(小火箭) | 美区 $2.99 | 最流行,稳定好用 |
|
||||
| **Hiddify Next** | 免费 | 开源替代,功能相近 |
|
||||
**Shadowrocket**(小火箭),美区 App Store $2.99,最稳定好用的翻墙客户端。
|
||||
|
||||
### Shadowrocket 配置
|
||||
|
||||
@@ -66,13 +63,6 @@
|
||||
4. 保存 → 开启连接
|
||||
5. 首次连接会弹出 VPN 授权,点击 **允许**
|
||||
|
||||
### Hiddify Next 配置(免费方案)
|
||||
|
||||
1. App Store 搜索 Hiddify Next 安装
|
||||
2. 添加配置 → 手动输入
|
||||
3. 协议 VLESS,参数同上表
|
||||
4. 保存连接
|
||||
|
||||
---
|
||||
|
||||
## 验证
|
||||
@@ -86,7 +76,7 @@
|
||||
|
||||
### WiFi 代理不生效?
|
||||
|
||||
有些 app 不走 HTTP 代理。可以用 Shadowrocket/Hiddify Next 的 **代理模式** 在 WiFi 下也开启,无需设置系统 HTTP 代理。
|
||||
有些 app 不走 HTTP 代理。可以在 Shadowrocket 中开启 **代理模式**,WiFi 下也无需手动设置系统 HTTP 代理。
|
||||
|
||||
### 出门无法连接 VPS?
|
||||
|
||||
|
||||
@@ -38,14 +38,14 @@
|
||||
|
||||
4. 点击 **好**
|
||||
|
||||
?> 不需要翻墙时关掉即可。也可以使用 **SwitchyOmega**(Chrome 扩展)按规则自动切换,国内网站不走代理。
|
||||
!!! tip "不需要翻墙时关掉即可。也可以使用 **SwitchyOmega**(Chrome 扩展)按规则自动切换,国内网站不走代理。"
|
||||
|
||||
---
|
||||
|
||||
## 终端代理(可选)
|
||||
|
||||
```bash
|
||||
# 临时开启
|
||||
# 临时开启(替换为实际旁路由 IP,如 192.168.31.112)
|
||||
export ALL_PROXY=socks5://旁路由IP:7890
|
||||
|
||||
# 写入 ~/.zshrc 持久化
|
||||
@@ -59,7 +59,7 @@ echo 'alias unproxy="unset ALL_PROXY"' >> ~/.zshrc
|
||||
|
||||
```bash
|
||||
# 测试代理是否通
|
||||
curl --socks5 旁路由IP:7890 https://www.google.com -o /dev/null -s -w '%{http_code}'
|
||||
curl --socks5 旁路由IP:7890 https://www.google.com -o /dev/null -s -w '%{http_code}' # 替换为实际 IP
|
||||
# 返回 200 → 正常
|
||||
|
||||
# 测试 DNS 去广告
|
||||
|
||||
+52
-6
@@ -2,6 +2,20 @@
|
||||
|
||||
> 用一台 Ubuntu 机器做旁路由,实现全家翻墙 + DNS 去广告。基于 sing-box(VLESS + Reality)和 AdGuard Home。
|
||||
|
||||
## 目录
|
||||
|
||||
1. **概述** — 什么是旁路由、架构图
|
||||
2. **一、部署教程** — 6 步完成旁路由搭建
|
||||
- 1.1 前置条件
|
||||
- 1.2 本机网络配置(静态 IP、IP 转发)
|
||||
- 1.3 VPS 服务端(sing-box 安装、Reality 配置)
|
||||
- 1.4 本机客户端(sing-box 入站 + 路由规则)
|
||||
- 1.5 DNS 端口冲突解决(systemd-resolved)
|
||||
- 1.6 AdGuard Home(Docker 部署、过滤规则)
|
||||
- 1.7 各设备接入
|
||||
3. **二、使用教程** — 日常管理、故障排查
|
||||
4. **三、踩坑笔记** — TProxy 为什么不用、DNS 劫持等
|
||||
|
||||
---
|
||||
|
||||
## 概述
|
||||
@@ -52,7 +66,7 @@ graph TD
|
||||
### 1.1 前置条件
|
||||
|
||||
- 一台 24 小时开机的 Linux 设备(本例 Ubuntu 24.04),已接入局域网
|
||||
- 一台境外 VPS(本例香港 CentOS Stream 9)
|
||||
- 一台境外 VPS(本例 Debian 12,位于香港)
|
||||
- 一个域名(用于 Reality 伪装,本例 `www.microsoft.com` 作为 SNI)
|
||||
|
||||
### 1.2 步骤一:配置旁路由本机网络
|
||||
@@ -97,12 +111,22 @@ sudo sysctl -p /etc/sysctl.d/99-bypass.conf
|
||||
#### 安装 sing-box
|
||||
|
||||
```bash
|
||||
# VPS 上执行(CentOS Stream 9 示例)
|
||||
# 官方安装脚本
|
||||
# VPS 上执行(Debian 12,其他发行版参见官方文档)
|
||||
# 安装依赖
|
||||
sudo apt update && sudo apt install -y curl ca-certificates
|
||||
|
||||
# 添加官方源
|
||||
sudo mkdir -p /etc/apt/keyrings
|
||||
curl -fsSL https://sing-box.app/gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/sing-box.gpg
|
||||
# 具体安装方式参见 https://sing-box.sagernet.org/installation/
|
||||
echo "deb [signed-by=/etc/apt/keyrings/sing-box.gpg] https://sing-box.app/deb /" | sudo tee /etc/apt/sources.list.d/sing-box.list
|
||||
|
||||
# 安装并启用
|
||||
sudo apt update && sudo apt install -y sing-box
|
||||
sudo systemctl enable sing-box
|
||||
```
|
||||
|
||||
> 其他发行版(CentOS/Fedora)的安装方式参见 [sing-box 官方文档](https://sing-box.sagernet.org/installation/)。
|
||||
|
||||
#### 生成 Reality 密钥
|
||||
|
||||
```bash
|
||||
@@ -243,7 +267,29 @@ curl --socks5 127.0.0.1:7890 https://www.google.com -o /dev/null -s -w '%{http_c
|
||||
# 返回 200 或 301/302 即成功
|
||||
```
|
||||
|
||||
### 1.5 步骤四:部署 AdGuard Home
|
||||
### 1.5 步骤四:解决 DNS 端口冲突
|
||||
|
||||
Ubuntu 24.04 默认运行 `systemd-resolved`,占用 `127.0.0.53:53`。AdGuard Home 需要绑定 `0.0.0.0:53`,必须先释放 53 端口:
|
||||
|
||||
```bash
|
||||
# 禁用 systemd-resolved 的 DNS stub listener
|
||||
sudo sed -i 's/#DNSStubListener=yes/DNSStubListener=no/' /etc/systemd/resolved.conf
|
||||
sudo systemctl restart systemd-resolved
|
||||
|
||||
# 确认 53 端口已释放(应该无输出)
|
||||
sudo ss -tuln | grep ':53 '
|
||||
```
|
||||
|
||||
> 如果 `ss` 命令仍有输出(说明其他进程占用 53 端口),用 `sudo lsof -i :53` 排查。
|
||||
|
||||
同时确保 `/etc/resolv.conf` 指向有效的 DNS 服务器:
|
||||
|
||||
```bash
|
||||
# 如果 /etc/resolv.conf 指向 127.0.0.53,暂时改为公共 DNS
|
||||
echo 'nameserver 223.5.5.5' | sudo tee /etc/resolv.conf
|
||||
```
|
||||
|
||||
### 1.6 步骤五:部署 AdGuard Home
|
||||
|
||||
用 Docker 启动 AdGuard Home,统一管理局域网 DNS 并过滤广告。
|
||||
|
||||
@@ -297,7 +343,7 @@ docker run -d \
|
||||
https://dns.quad9.net/dns-query
|
||||
```
|
||||
|
||||
### 1.6 步骤五:各设备接入
|
||||
### 1.7 步骤六:各设备接入
|
||||
|
||||
部署完成后,各终端设备需要配置 DNS 和代理才能使用旁路由。每个平台的设置方式不同,详见各平台使用指南:
|
||||
|
||||
|
||||
+8
-4
@@ -14,12 +14,16 @@
|
||||
| 内容 | 位置 | 大小 |
|
||||
|------|------|------|
|
||||
| RAW 原片 (ARW) | `~/aa/` | 117 张 / 2.8 GB |
|
||||
| Immich 管理 | [Immich](http://localhost:2283) | — |
|
||||
| Immich 管理 | [Immich](https://photo.kurihada.com) | AI 标签 + RAW 预览 |
|
||||
|
||||
---
|
||||
|
||||
## 📝 拍摄笔记
|
||||
|
||||
> 还没有内容,待 Claude 帮你整理。
|
||||
>
|
||||
> 可以告诉 Claude:「帮我写一篇 xx 拍摄的笔记,参数是...」
|
||||
> 还没有内容,待补充。计划涵盖:
|
||||
> - 拍摄参数记录(光圈、快门、ISO、焦段)
|
||||
> - 后期思路(Lightroom / Darktable 调色)
|
||||
> - 航拍飞行点位与构图笔记
|
||||
> - 赛里木湖之行的拍摄成果(2026 年 8 月)
|
||||
|
||||
可以告诉 Claude:「帮我写一篇 xx 拍摄的笔记,参数是...」
|
||||
|
||||
+3
-1
@@ -4,7 +4,9 @@
|
||||
|
||||
## 📝 游记 & 计划
|
||||
|
||||
> 还没有内容,待 Claude 帮你整理。
|
||||
- **[赛里木湖 2026](赛里木湖2026.md)** — 8 月 20-25 日,6 天北疆赛里木湖 + 独库公路,含拍摄计划与行程表
|
||||
|
||||
> 更多游记待补充。8 月赛里木湖之行的旅行日记将在行程中或结束后更新。
|
||||
|
||||
---
|
||||
|
||||
|
||||
+18
-3
@@ -2,6 +2,21 @@
|
||||
|
||||
---
|
||||
|
||||
> 日记按日期组织,文件名格式:`YYYY-MM-DD.md`
|
||||
>
|
||||
> 告诉 Claude 你想记录什么,我来帮你写成结构化的日记。
|
||||
## 使用方式
|
||||
|
||||
日记按日期组织,文件名格式 `YYYY-MM-DD.md`。
|
||||
|
||||
告诉 Claude:「帮我记一下今天的日记,今天做了...」
|
||||
|
||||
## 日记列表
|
||||
|
||||
> 还没有日记条目,待添加。
|
||||
|
||||
---
|
||||
|
||||
## 计划记录
|
||||
|
||||
- 技术折腾日志(部署了什么东西、踩了什么坑)
|
||||
- 旅行当天的即时记录
|
||||
- 摄影外出拍摄日志
|
||||
- 日常碎碎念
|
||||
|
||||
+11
-8
@@ -29,6 +29,7 @@ theme:
|
||||
- search.suggest # 搜索建议
|
||||
- search.highlight # 搜索高亮
|
||||
- content.code.copy # 代码块复制按钮
|
||||
custom_dir: docs/overrides # 自定义模板覆盖(评论系统等)
|
||||
|
||||
markdown_extensions:
|
||||
- admonition # 提示框 !!! note
|
||||
@@ -51,6 +52,10 @@ markdown_extensions:
|
||||
plugins:
|
||||
- search:
|
||||
lang: zh # 中文搜索优化
|
||||
- git-revision-date-localized:
|
||||
enable_creation_date: true
|
||||
type: date
|
||||
locale: zh
|
||||
|
||||
extra:
|
||||
social:
|
||||
@@ -60,12 +65,12 @@ extra:
|
||||
nav:
|
||||
- 首页: index.md
|
||||
- 旅行:
|
||||
- 旅行/index.md
|
||||
- 赛里木湖 2026: 旅行/赛里木湖2026.md
|
||||
- 摄影:
|
||||
- 摄影/index.md
|
||||
- 摄影: 摄影/index.md
|
||||
- 技术:
|
||||
- 技术/index.md
|
||||
- MkDocs 部署: 技术/mkdocs部署.md
|
||||
- Artalk 评论系统: 技术/artalk评论系统.md
|
||||
- Immich 照片管理: 技术/immich部署.md
|
||||
- 旁路由部署: 技术/旁路由部署.md
|
||||
- 旁路由使用:
|
||||
- Linux: 技术/旁路由使用/Linux.md
|
||||
@@ -73,7 +78,5 @@ nav:
|
||||
- macOS: 技术/旁路由使用/macOS.md
|
||||
- Android: 技术/旁路由使用/Android.md
|
||||
- iPhone: 技术/旁路由使用/iPhone.md
|
||||
- 3D打印:
|
||||
- 3D打印/index.md
|
||||
- 日记:
|
||||
- 日记/index.md
|
||||
- 3D打印: 3D打印/index.md
|
||||
- 日记: 日记/index.md
|
||||
|
||||
Reference in New Issue
Block a user