mirror of
https://github.com/8butubb/8butubb.github.io.git
synced 2026-07-10 19:23:08 +00:00
update hugo config and update posts
This commit is contained in:
@@ -0,0 +1,570 @@
|
||||
---
|
||||
title: Git 完整教程指南
|
||||
tags: ["git", "版本控制", "教程"]
|
||||
date: 2025-10-08
|
||||
summary: "从零开始学习 Git 版本控制系统,包含基础概念、常用命令、分支管理、协作流程等完整内容。"
|
||||
---
|
||||
|
||||
> 本教程适用于 Git 初学者到进阶用户,涵盖日常开发中 90% 的使用场景。
|
||||
|
||||
## 什么是 Git
|
||||
|
||||
Git 是一个分布式版本控制系统,用于跟踪文件的修改历史。与集中式版本控制系统(如 SVN)不同,Git 的每个工作副本都是完整的仓库,包含项目的完整历史记录。
|
||||
|
||||
### Git 的核心概念
|
||||
|
||||
- **仓库(Repository)**: 项目的版本控制中心,包含所有文件的历史记录。
|
||||
- **工作目录(Working Directory)**: 你在本地进行修改的文件所在目录。
|
||||
- **暂存区(Staging Area)**: 一个中间区域,用于暂存你要提交的文件变更。
|
||||
- **本地仓库(Local Repository)**: 你在本地计算机上的仓库,包含完整的历史记录。
|
||||
- **远程仓库(Remote Repository)**: 托管在服务器上的仓库,用于与团队成员共享代码。
|
||||
|
||||
### Git 工作流程
|
||||
|
||||
```mermaid
|
||||
graph TB
|
||||
subgraph "Git 工作区域"
|
||||
A[工作目录<br/>Working Directory]
|
||||
B[暂存区<br/>Staging Area]
|
||||
C[本地仓库<br/>Local Repository]
|
||||
D[远程仓库<br/>Remote Repository]
|
||||
end
|
||||
|
||||
A -->|git add| B
|
||||
B -->|git commit| C
|
||||
C -->|git push| D
|
||||
D -->|git pull| C
|
||||
C -->|git checkout| A
|
||||
|
||||
style A fill:#e3f2fd
|
||||
style B fill:#f3e5f5
|
||||
style C fill:#e8f5e9
|
||||
style D fill:#fff3e0
|
||||
```
|
||||
|
||||
## Git 安装与配置
|
||||
|
||||
### 安装 Git
|
||||
|
||||
**Windows**: 下载并安装 [Git for Windows](https://git-scm.com/download/win)
|
||||
|
||||
**macOS**:
|
||||
```bash
|
||||
# 使用 Homebrew
|
||||
brew install git
|
||||
|
||||
# 或者下载安装包
|
||||
# https://git-scm.com/download/mac
|
||||
```
|
||||
|
||||
**Linux (Ubuntu/Debian)**:
|
||||
```bash
|
||||
sudo apt update
|
||||
sudo apt install git
|
||||
```
|
||||
|
||||
**Linux (CentOS/RHEL)**:
|
||||
```bash
|
||||
sudo yum install git
|
||||
```
|
||||
|
||||
### 基础配置
|
||||
|
||||
```bash
|
||||
# 配置用户信息(必须)
|
||||
git config --global user.name "你的名字"
|
||||
git config --global user.email "your.email@example.com"
|
||||
|
||||
# 配置默认分支名(推荐)
|
||||
git config --global init.defaultBranch main
|
||||
|
||||
# 配置文本编辑器(可选)
|
||||
git config --global core.editor vim
|
||||
|
||||
# 查看配置
|
||||
git config --list
|
||||
```
|
||||
|
||||
## Git 基础操作
|
||||
|
||||
### 初始化仓库
|
||||
|
||||
```bash
|
||||
# 在当前目录初始化 Git 仓库
|
||||
git init
|
||||
|
||||
# 克隆远程仓库
|
||||
git clone https://github.com/username/repository.git
|
||||
|
||||
# 克隆并指定目录名
|
||||
git clone https://github.com/username/repository.git my-project
|
||||
```
|
||||
|
||||
### 文件状态管理
|
||||
|
||||
```bash
|
||||
# 查看文件状态
|
||||
git status
|
||||
|
||||
# 添加文件到暂存区
|
||||
git add filename.txt
|
||||
git add . # 添加所有文件
|
||||
git add -A # 添加所有变更(包括删除)
|
||||
|
||||
# 从暂存区移除文件
|
||||
git reset filename.txt
|
||||
|
||||
# 提交变更
|
||||
git commit -m "提交信息"
|
||||
git commit -m "标题" -m "详细描述"
|
||||
|
||||
# 跳过暂存区直接提交
|
||||
git commit -am "提交信息"
|
||||
```
|
||||
|
||||
### 查看历史
|
||||
|
||||
```bash
|
||||
# 查看提交历史
|
||||
git log
|
||||
|
||||
# 简洁查看
|
||||
git log --oneline
|
||||
|
||||
# 查看最近5次提交
|
||||
git log -5
|
||||
|
||||
# 查看文件修改历史
|
||||
git log --follow filename.txt
|
||||
|
||||
# 查看每次提交的差异
|
||||
git log -p
|
||||
|
||||
# 查看统计信息
|
||||
git log --stat
|
||||
```
|
||||
|
||||
### 撤销操作
|
||||
|
||||
```bash
|
||||
# 撤销工作区的修改
|
||||
git checkout -- filename.txt
|
||||
|
||||
# 撤销暂存区的文件
|
||||
git reset HEAD filename.txt
|
||||
|
||||
# 修改最后一次提交
|
||||
git commit --amend -m "新的提交信息"
|
||||
|
||||
# 回退到指定版本
|
||||
git reset --hard commit-hash
|
||||
|
||||
# 软回退(保留修改)
|
||||
git reset --soft commit-hash
|
||||
```
|
||||
|
||||
## 分支管理
|
||||
|
||||
### 分支概念
|
||||
|
||||
```mermaid
|
||||
graph LR
|
||||
A[main分支] --> B[创建feature分支]
|
||||
B --> C[开发新功能]
|
||||
C --> D[合并回main]
|
||||
A --> E[创建hotfix分支]
|
||||
E --> F[修复bug]
|
||||
F --> D
|
||||
|
||||
style A fill:#4caf50
|
||||
style B fill:#2196f3
|
||||
style C fill:#2196f3
|
||||
style D fill:#4caf50
|
||||
style E fill:#ff9800
|
||||
style F fill:#ff9800
|
||||
```
|
||||
|
||||
### 分支操作
|
||||
|
||||
```bash
|
||||
# 查看分支
|
||||
git branch # 本地分支
|
||||
git branch -r # 远程分支
|
||||
git branch -a # 所有分支
|
||||
|
||||
# 创建分支
|
||||
git branch feature-login
|
||||
git checkout -b feature-login # 创建并切换
|
||||
|
||||
# 切换分支
|
||||
git checkout main
|
||||
git switch main # Git 2.23+ 新命令
|
||||
|
||||
# 合并分支
|
||||
git merge feature-login
|
||||
|
||||
# 删除分支
|
||||
git branch -d feature-login # 安全删除
|
||||
git branch -D feature-login # 强制删除
|
||||
|
||||
# 重命名分支
|
||||
git branch -m old-name new-name
|
||||
```
|
||||
|
||||
### 解决冲突
|
||||
|
||||
当合并分支时出现冲突:
|
||||
|
||||
```bash
|
||||
# 1. 查看冲突文件
|
||||
git status
|
||||
|
||||
# 2. 手动编辑冲突文件
|
||||
# 删除冲突标记,保留需要的代码
|
||||
|
||||
# 3. 标记冲突已解决
|
||||
git add filename.txt
|
||||
|
||||
# 4. 完成合并
|
||||
git commit
|
||||
```
|
||||
|
||||
## 远程仓库操作
|
||||
|
||||
### 连接远程仓库
|
||||
|
||||
```bash
|
||||
# 添加远程仓库
|
||||
git remote add origin https://github.com/username/repository.git
|
||||
|
||||
# 查看远程仓库
|
||||
git remote -v
|
||||
|
||||
# 重命名远程仓库
|
||||
git remote rename origin github
|
||||
|
||||
# 删除远程仓库
|
||||
git remote remove origin
|
||||
```
|
||||
|
||||
### 推送与拉取
|
||||
|
||||
```bash
|
||||
# 推送到远程仓库
|
||||
git push origin main
|
||||
|
||||
# 首次推送(设置上游分支)
|
||||
git push -u origin main
|
||||
|
||||
# 强制推送(谨慎使用)
|
||||
git push -f origin main
|
||||
|
||||
# 拉取更新
|
||||
git pull origin main
|
||||
|
||||
# 获取更新但不合并
|
||||
git fetch origin
|
||||
```
|
||||
|
||||
### 标签管理
|
||||
|
||||
```bash
|
||||
# 创建标签
|
||||
git tag v1.0.0
|
||||
git tag -a v1.0.0 -m "版本说明"
|
||||
|
||||
# 查看标签
|
||||
git tag
|
||||
|
||||
# 推送标签
|
||||
git push origin v1.0.0
|
||||
git push origin --tags
|
||||
|
||||
# 删除标签
|
||||
git tag -d v1.0.0
|
||||
git push origin --delete v1.0.0
|
||||
```
|
||||
|
||||
## 高级功能
|
||||
|
||||
### Stash(暂存)
|
||||
|
||||
```bash
|
||||
# 保存当前工作进度
|
||||
git stash
|
||||
|
||||
# 查看保存的进度
|
||||
git stash list
|
||||
|
||||
# 恢复最近保存的进度
|
||||
git stash pop
|
||||
|
||||
# 恢复指定的进度
|
||||
git stash apply stash@{1}
|
||||
|
||||
# 删除保存的进度
|
||||
git stash drop stash@{0}
|
||||
```
|
||||
|
||||
### Cherry-pick
|
||||
|
||||
```bash
|
||||
# 选择性地合并某个提交
|
||||
git cherry-pick commit-hash
|
||||
|
||||
# 合并多个提交
|
||||
git cherry-pick commit1 commit2
|
||||
|
||||
# 继续合并(解决冲突后)
|
||||
git cherry-pick --continue
|
||||
```
|
||||
|
||||
### Rebase
|
||||
|
||||
```bash
|
||||
# 交互式 rebase
|
||||
git rebase -i HEAD~3
|
||||
|
||||
# 继续 rebase
|
||||
git rebase --continue
|
||||
|
||||
# 中止 rebase
|
||||
git rebase --abort
|
||||
|
||||
# 跳过当前提交
|
||||
git rebase --skip
|
||||
```
|
||||
|
||||
### 子模块
|
||||
|
||||
```bash
|
||||
# 添加子模块
|
||||
git submodule add https://github.com/user/repo.git path/to/submodule
|
||||
|
||||
# 初始化子模块
|
||||
git submodule init
|
||||
|
||||
# 更新子模块
|
||||
git submodule update
|
||||
|
||||
# 递归更新
|
||||
git submodule update --recursive --remote
|
||||
```
|
||||
|
||||
## Git 工作流程
|
||||
|
||||
### Git Flow 工作流
|
||||
|
||||
```mermaid
|
||||
graph TB
|
||||
A[main] --> B[develop]
|
||||
B --> C[feature/feature-1]
|
||||
B --> D[feature/feature-2]
|
||||
C --> B
|
||||
D --> B
|
||||
B --> E[release/v1.0]
|
||||
E --> A
|
||||
E --> F[hotfix/fix-1]
|
||||
F --> A
|
||||
F --> B
|
||||
|
||||
style A fill:#4caf50
|
||||
style B fill:#2196f3
|
||||
style C fill:#9c27b0
|
||||
style D fill:#9c27b0
|
||||
style E fill:#ff9800
|
||||
style F fill:#f44336
|
||||
```
|
||||
|
||||
### GitHub Flow
|
||||
|
||||
1. **创建分支**:从 main 分支创建功能分支
|
||||
2. **提交修改**:在功能分支上进行开发
|
||||
3. **创建 Pull Request**:提交代码审查
|
||||
4. **代码审查**:团队成员进行代码审查
|
||||
5. **合并分支**:审查通过后合并到 main 分支
|
||||
6. **部署**:自动或手动部署到生产环境
|
||||
|
||||
### GitLab Flow
|
||||
|
||||
结合 Git Flow 和 GitHub Flow 的优点,支持多环境部署。
|
||||
|
||||
## 实用技巧
|
||||
|
||||
### 配置别名
|
||||
|
||||
```bash
|
||||
# 配置常用别名
|
||||
git config --global alias.st status
|
||||
git config --global alias.co checkout
|
||||
git config --global alias.br branch
|
||||
git config --global alias.ci commit
|
||||
git config --global alias.unstage 'reset HEAD --'
|
||||
git config --global alias.last 'log -1 HEAD'
|
||||
git config --global alias.visual '!gitk'
|
||||
```
|
||||
|
||||
### 忽略文件
|
||||
|
||||
创建 `.gitignore` 文件:
|
||||
|
||||
```
|
||||
# 忽略所有 .log 文件
|
||||
*.log
|
||||
|
||||
# 忽略 node_modules 目录
|
||||
node_modules/
|
||||
|
||||
# 忽略 IDE 配置文件
|
||||
.vscode/
|
||||
.idea/
|
||||
|
||||
# 忽略操作系统文件
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
|
||||
# 忽略编译输出
|
||||
dist/
|
||||
build/
|
||||
*.exe
|
||||
*.dll
|
||||
```
|
||||
|
||||
### 查看文件差异
|
||||
|
||||
```bash
|
||||
# 查看工作区与暂存区的差异
|
||||
git diff
|
||||
|
||||
# 查看暂存区与仓库的差异
|
||||
git diff --staged
|
||||
|
||||
# 查看两个提交的差异
|
||||
git diff commit1 commit2
|
||||
|
||||
# 查看文件的历史修改
|
||||
git log -p filename.txt
|
||||
```
|
||||
|
||||
### 统计信息
|
||||
|
||||
```bash
|
||||
# 查看提交统计
|
||||
git shortlog -sn
|
||||
|
||||
# 查看代码行数统计
|
||||
git log --stat
|
||||
|
||||
# 查看贡献者
|
||||
git log --pretty=format:"%an" | sort | uniq -c | sort -nr
|
||||
```
|
||||
|
||||
## 常见问题解决
|
||||
|
||||
### 误提交大文件
|
||||
|
||||
```bash
|
||||
# 从仓库中删除大文件
|
||||
git filter-branch --force --index-filter \
|
||||
'git rm --cached --ignore-unmatch path/to/large-file' \
|
||||
--prune-empty --tag-name-filter cat -- --all
|
||||
|
||||
# 清理和垃圾回收
|
||||
git reflog expire --expire=now --all
|
||||
git gc --prune=now --aggressive
|
||||
```
|
||||
|
||||
### 修改历史提交信息
|
||||
|
||||
```bash
|
||||
# 修改最近一次提交
|
||||
git commit --amend
|
||||
|
||||
# 修改历史提交(交互式)
|
||||
git rebase -i HEAD~3
|
||||
```
|
||||
|
||||
### 找回丢失的提交
|
||||
|
||||
```bash
|
||||
# 查看引用日志
|
||||
git reflog
|
||||
|
||||
# 恢复到某个状态
|
||||
git reset --hard HEAD@{1}
|
||||
```
|
||||
|
||||
### 子模块问题
|
||||
|
||||
```bash
|
||||
# 更新子模块
|
||||
git submodule update --init --recursive
|
||||
|
||||
# 克隆包含子模块的仓库
|
||||
git clone --recursive https://github.com/user/repo.git
|
||||
```
|
||||
|
||||
## 最佳实践
|
||||
|
||||
### 提交信息规范
|
||||
|
||||
```
|
||||
类型(范围): 简短描述
|
||||
|
||||
详细描述(可选)
|
||||
|
||||
Fixes #123
|
||||
```
|
||||
|
||||
**类型说明**:
|
||||
- `feat`: 新功能
|
||||
- `fix`: 修复bug
|
||||
- `docs`: 文档更新
|
||||
- `style`: 代码格式调整
|
||||
- `refactor`: 代码重构
|
||||
- `test`: 测试相关
|
||||
- `chore`: 构建过程或辅助工具的变动
|
||||
|
||||
### 分支命名规范
|
||||
|
||||
- `feature/功能名称`:新功能开发
|
||||
- `bugfix/bug描述`:bug修复
|
||||
- `hotfix/紧急修复`:紧急修复
|
||||
- `release/版本号`:发布准备
|
||||
- `test/测试名称`:测试相关
|
||||
|
||||
### 工作流程建议
|
||||
|
||||
1. **频繁提交**:小而频繁的提交比大而少的提交更好
|
||||
2. **明确提交信息**:写清楚提交的目的和内容
|
||||
3. **及时拉取**:开始工作前拉取最新代码
|
||||
4. **使用分支**:不要在主分支上直接开发
|
||||
5. **代码审查**:提交前进行自我审查
|
||||
6. **保持同步**:定期与远程仓库同步
|
||||
|
||||
## 学习资源
|
||||
|
||||
### 官方资源
|
||||
- [Git 官方文档](https://git-scm.com/doc)
|
||||
- [Pro Git 书籍](https://git-scm.com/book/zh/v2)
|
||||
- [GitHub Guides](https://guides.github.com/)
|
||||
|
||||
### 交互式学习
|
||||
- [Learn Git Branching](https://learngitbranching.js.org/)
|
||||
- [GitHub Learning Lab](https://lab.github.com/)
|
||||
- [Git 小游戏](https://onlywei.github.io/explain-git-with-d3/)
|
||||
|
||||
### 可视化工具
|
||||
- [GitKraken](https://www.gitkraken.com/)
|
||||
- [SourceTree](https://www.sourcetreeapp.com/)
|
||||
- [GitHub Desktop](https://desktop.github.com/)
|
||||
|
||||
## 总结
|
||||
|
||||
Git 是现代软件开发中不可或缺的工具。掌握 Git 不仅能够提高开发效率,还能更好地与团队协作。本教程涵盖了 Git 的核心概念和常用操作,建议通过实践来加深理解。
|
||||
|
||||
记住 Git 的学习曲线可能有些陡峭,但一旦掌握,它将成为你开发工具箱中最强大的工具之一。持续练习,遇到问题不要害怕,Git 的强大功能值得你投入时间学习。
|
||||
|
||||
---
|
||||
|
||||
> 💡 **提示**:Git 命令很多,不需要全部记住。常用的命令熟练掌握即可,其他的可以按需查询。建议收藏本教程作为参考手册。
|
||||
@@ -0,0 +1,50 @@
|
||||
---
|
||||
title: Linux 硬链接
|
||||
tags: ["linux"]
|
||||
date: 2024-12-04
|
||||
summary: "在 Linux 系统中,文件的存储与管理是通过链接来实现的。硬链接是其中一种重要的链接类型,本文将详细介绍硬链接的概念、创建方法及其应用场景。"
|
||||
---
|
||||
在 Linux 系统中,文件的存储与管理是通过链接来实现的。硬链接是其中一种重要的链接类型,本文将详细介绍硬链接的概念、创建方法及其应用场景。
|
||||
|
||||
## 什么是硬链接?
|
||||
|
||||
硬链接是指向文件系统中某个文件数据块的直接引用。通过硬链接,多个文件名可以指向同一个数据块,即使一个文件被删除,其他指向相同数据块的硬链接仍然存在并可以访问数据。这意味着硬链接并不创建文件的副本,而是创建了一个新的目录项。
|
||||
|
||||
## 硬链接的特点
|
||||
|
||||
1. **共享数据**:多个文件名共享同一个数据块,节省存储空间。
|
||||
2. **不支持跨文件系统**:硬链接只能在同一个文件系统中创建,无法链接到其他文件系统的文件。
|
||||
3. **目录不能创建硬链接**:为了防止循环引用,通常不允许为目录创建硬链接(只有超级用户可以)。
|
||||
4. **引用计数**:每个文件在文件系统中都有一个引用计数,表示有多少个硬链接指向该文件。当引用计数减为零时,文件数据才会被实际删除。
|
||||
|
||||
## 示例
|
||||
|
||||
1. 创建一个名为 `file1.txt` 的文件:
|
||||
|
||||
```shell
|
||||
echo "Hello, Linux!" > file1.txt
|
||||
|
||||
|
||||
```
|
||||
|
||||
2. 创建一个硬链接 `file2.txt`:
|
||||
|
||||
```shell
|
||||
ln file1.txt file2.txt
|
||||
|
||||
```
|
||||
|
||||
3. 检查链接:
|
||||
|
||||
```shell
|
||||
ls -l
|
||||
|
||||
```
|
||||
|
||||
## 实际应用
|
||||
|
||||
之前有朋友问我,威联通的外部设备如何做共享,想在外部设备里面存电影,挂载到emby上,但是由于外置在威联通系统里压根就没法共享,导致无法在emby里引用出来。
|
||||
|
||||
说到这很多朋友大概能明白了,可以直接在可以引用的目录里创建一个硬链接,让程序访问这个硬链接即可。
|
||||
|
||||
说白了,linux下的硬链接有点类似于windows上的快捷方式。
|
||||
@@ -0,0 +1,55 @@
|
||||
---
|
||||
title: Linux文件系统概述
|
||||
tags: ["linux"]
|
||||
date: 2024-12-04
|
||||
---
|
||||
Linux的文件系统结构是其核心组成部分之一,它以一种层次化的方式组织数据,使得用户和程序能够高效地访问和管理文件。以下是一些关键概念和特点:
|
||||
|
||||
## 1\. 层次化结构
|
||||
|
||||
Linux的文件系统是从根目录(\`/\`)开始的。所有文件和目录都在这个根目录下,形成树状结构。常见的目录包括:
|
||||
|
||||
- ** `/bin` ** :存放基本命令的二进制文件。
|
||||
- ** `/etc` ** :系统配置文件。
|
||||
- ** `/home` ** :用户的主目录,每个用户在此有自己的文件夹。
|
||||
- ** `/var` ** :存放可变数据,如日志文件和邮件。
|
||||
|
||||
这种层次化结构有助于保持系统的整洁和高效。
|
||||
|
||||
## 2\. 文件权限
|
||||
|
||||
Linux对文件和目录的管理非常注重安全性,采用了严格的文件权限机制。每个文件和目录都有三种基本权限:
|
||||
|
||||
- **读(r)** :允许查看文件内容或列出目录内容。
|
||||
- **写(w)** :允许修改文件内容或添加/删除目录内容。
|
||||
- **执行(x)** :允许执行文件(如果是可执行文件)或访问目录。
|
||||
|
||||
此外,文件权限是分为三类的:
|
||||
|
||||
- **用户(u)** :文件的所有者。
|
||||
- **组(g)** :与文件所有者同属一个组的用户。
|
||||
- **其他(o)** :所有其他用户。
|
||||
|
||||
## 3\. 硬链接与软链接
|
||||
|
||||
Linux支持两种类型的链接:
|
||||
|
||||
- **硬链接**:指向同一文件的多个目录项,实际上是同一数据块,删除一个不会影响其他。
|
||||
- **软链接(符号链接)** :指向另一个文件的路径,如果目标文件被删除,软链接会失效。
|
||||
|
||||
## 4\. 文件系统的挂载
|
||||
|
||||
Linux支持多种文件系统(如ext4、XFS等),可以通过挂载(mount)将其他文件系统整合进当前的文件系统结构中。挂载点是一个目录,挂载后,外部文件系统的内容会出现在该目录下。
|
||||
|
||||
## 5\. 文件系统的管理
|
||||
|
||||
在Linux中,文件系统的管理包括格式化、检查和修复等操作。常用工具包括:
|
||||
|
||||
- ** `mkfs` ** :用于创建文件系统。
|
||||
- ** `fsck` ** :用于检查和修复文件系统错误。
|
||||
|
||||
---
|
||||
|
||||
---
|
||||
|
||||
Linux文件系统的设计强调灵活性、安全性和效率,使得用户可以轻松地管理和组织文件。理解文件系统结构和权限机制对于使用和管理Linux系统至关重要。
|
||||
@@ -0,0 +1,30 @@
|
||||
---
|
||||
title: docker搭建思源笔记
|
||||
tags: ["linux","docker"]
|
||||
date: 2024-11-23
|
||||
summary: "docker搭建思源笔记..."
|
||||
---
|
||||
|
||||
- `PUID`: 自定义用户 ID(可选,如果未提供,默认为 `1000`)
|
||||
- `PGID`: 自定义组 ID(可选,如果未提供,默认为 `1000`)
|
||||
- `workspace_dir_host`:宿主机上的工作空间文件夹路径
|
||||
- `accessAuthCode`:访问授权码,请**务必修改**,否则任何人都可以读写你的数据(必须配置,否则容器无法启动)
|
||||
|
||||
---
|
||||
|
||||
# docker-compose
|
||||
|
||||
version: "3.9"
|
||||
services:
|
||||
main:
|
||||
image: b3log/siyuan
|
||||
command: ['--workspace=/siyuan/workspace/', '--accessAuthCode=xxx']
|
||||
ports:
|
||||
- 6806:6806
|
||||
volumes:
|
||||
- workspace_dir_host:/siyuan/workspace
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- TZ=Asia/shanghai
|
||||
- PUID=${YOUR_USER_PUID} # 自定义用户 ID
|
||||
- PGID=${YOUR_USER_PGID} # 自定义组 ID
|
||||
@@ -0,0 +1,175 @@
|
||||
---
|
||||
title: frp内网穿透使用指南
|
||||
tags: ["linux"]
|
||||
date: 2024-12-02
|
||||
summary: "frp(Fast Reverse Proxy)是一个高性能的反向代理应用,主要用于内网穿透。..."
|
||||
---
|
||||
## 什么是 frp?
|
||||
|
||||
frp(Fast Reverse Proxy)是一个高性能的反向代理应用,主要用于内网穿透。它可以将内网服务暴露到公网上,方便外部访问。
|
||||
|
||||
有很多小伙伴,家里都有性能很强大的电脑,但是苦于没有公网 IP,导致无法在互联网上部署自己的网站或者服务,而 frp 内网穿透就是用来解决这个问题的。
|
||||
|
||||
---
|
||||
|
||||
- 首先你得拥有一台具有公网 IP 的服务器,如果你只是用来进行内网穿透的话,性能并不需要很强,1h1g 是肯定够用了。
|
||||
- 其次,在中国境内的服务器因为种种原因,需要进行网站备案,所以我这里更推荐你去购买香港或者美国的服务器,可以免备案。会省下很多麻烦事。
|
||||
|
||||
> PS: 这里推荐一下本站在用的服务器 CloudCone,价格便宜实惠,流量大,用作 frp 服务器绰绰有余。我这边购买的是 2h1g 服务器,一年也就 130 元人民币,并且还支持支付宝直接支付,无需 VISA 卡之类的,本站强烈推荐!!!!
|
||||
|
||||
---
|
||||
|
||||
## frp 内网穿透
|
||||
|
||||
frp 一共分为两个部分:
|
||||
|
||||
- **服务器**:一个具有公网 IP 的服务器,运行 frps(frp server)。
|
||||
- **客户端**:一台处于内网中的机器,运行 frpc(frp client)。
|
||||
|
||||
### frps(服务端)
|
||||
|
||||
1. 前往 [frp GitHub Releases 页面](https://github.com/fatedier/frp/releases) 下载适合你服务器操作系统的 frp 包。(一般linux64位系统选择linux\_amd64即可)
|
||||
2. 解压缩下载的包:
|
||||
|
||||
tar -zxvf frp_x.x.x_linux_amd64.tar.gz
|
||||
3. 进入解压好的目录,找到frps.toml文件
|
||||
|
||||
vim frps.toml
|
||||
4. 编辑frps.toml文件
|
||||
|
||||
```sh
|
||||
[common]
|
||||
|
||||
# frps 服务端的基本配置
|
||||
|
||||
# frps 监听的端口,frpc 将通过这个端口连接到 frps
|
||||
|
||||
bind_port = 7443
|
||||
|
||||
# 用于身份验证的 token,frpc 连接时需要提供相同的 token
|
||||
|
||||
token = xxxxxxxxx
|
||||
|
||||
# 监控面板的端口(可选),通过这个端口可以访问 frps 的状态信息
|
||||
|
||||
dashboard_port = 8443
|
||||
|
||||
# 监控面板的用户名和密码,保护监控面板的访问
|
||||
|
||||
dashboard_user = new_username
|
||||
dashboard_pwd = NewPassword!2024
|
||||
|
||||
# 允许开放的端口范围,设置为只开放 10000-11000 端口(可自定义开放端口)
|
||||
|
||||
allow_ports = 10000-11000
|
||||
|
||||
# 日志级别,可选值有 trace, debug, info, warn, error
|
||||
|
||||
log_level = info
|
||||
|
||||
# 日志文件路径,frps 的日志将写入该文件
|
||||
|
||||
log_file = ./frps.log
|
||||
|
||||
# 指定日志的最大大小(单位:MB),达到该大小后将进行轮转
|
||||
|
||||
max_log_size = 10
|
||||
|
||||
# 允许的最大连接数,限制同时连接到 frps 的 frpc 客户端数量
|
||||
|
||||
max_connections = 100
|
||||
|
||||
# 启用加密传输(可选),可以提高数据传输的安全性
|
||||
|
||||
enable_encrypt = true
|
||||
|
||||
# 启用 TCP KeepAlive(可选),可以防止由于网络问题导致的连接断开
|
||||
|
||||
tcp_keep_alive = true
|
||||
|
||||
# 允许的最大数据包大小(单位:字节)
|
||||
|
||||
max_packet_size = 8192
|
||||
```
|
||||
|
||||
### frp从(客户端)
|
||||
|
||||
前面的步骤都是一样的
|
||||
|
||||
- 前往 [frp GitHub Releases 页面](https://github.com/fatedier/frp/releases) 下载适合你服务器操作系统的 frp 包。(一般linux64位系统选择linux\_amd64即可)
|
||||
- 解压缩下载的包:
|
||||
|
||||
tar -zxvf frp_x.x.x_linux_amd64.tar.gz
|
||||
|
||||
1. 找到frpc.toml
|
||||
2. 编辑frpc.toml
|
||||
|
||||
|
||||
```sh
|
||||
[common]
|
||||
|
||||
# frpc 连接到 frps 服务器的配置
|
||||
|
||||
# frps 服务器的地址
|
||||
|
||||
server_addr = "your_frps_server_ip" # 替换为你的 frps 服务器 IP
|
||||
|
||||
# frps 服务器的端口
|
||||
|
||||
server_port = 7443 # 与 frps 的 bind_port 一致
|
||||
|
||||
# 身份验证 token,必须与 frps 中的 token 一致
|
||||
|
||||
token = "xxxxxxxxx"
|
||||
|
||||
# 以下是需要开放的服务配置
|
||||
|
||||
# 例如,HTTP 服务
|
||||
|
||||
[http]
|
||||
type = "tcp"
|
||||
local_ip = "127.0.0.1"
|
||||
local_port = 80 # 本地 HTTP 服务端口
|
||||
remote_port = 10001 # 通过 frp 暴露的端口
|
||||
|
||||
# 其他服务可以继续添加
|
||||
```
|
||||
---
|
||||
|
||||
> ***这时候通过访问公网服务器ip加上remote_port端口,即可访问你对应的内网服务了!如果访问有不了请检查一下服务器的防火墙,和云服务器上的防火墙。***
|
||||
|
||||
这时我们还需要把公网服务器上的frps服务设置为开机自启动
|
||||
|
||||
---
|
||||
|
||||
- 创建 一个Systemd 服务文件
|
||||
|
||||
sudo vi /etc/systemd/system/frps.service
|
||||
|
||||
在文件里添加
|
||||
|
||||
```
|
||||
[Unit]
|
||||
Description=frp server
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
ExecStart=/path/to/frps -c /path/to/frps.toml
|
||||
Restart=on-failure
|
||||
User=your_username # 替换为运行 frps 的用户名
|
||||
WorkingDirectory=/path/to/frp # frp 的工作目录
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
```
|
||||
|
||||
- 重新加载 Systemd
|
||||
|
||||
sudo systemctl daemon-reload
|
||||
- 启动服务并设置为开机自启
|
||||
|
||||
sudo systemctl start frpssudo systemctl enable frps
|
||||
- 查看服务状态
|
||||
|
||||
sudo systemctl status frps
|
||||
- 如果出现错误,大概率是你的路径填写的不对,确保 `ExecStart` 路径指向你的 frps 可执行文件和配置文件的正确路径。
|
||||
@@ -0,0 +1,373 @@
|
||||
---
|
||||
title: gitea 自部署使用体验
|
||||
tags: ["git","docker"]
|
||||
date: 2025-11-27
|
||||
summary: "本文基于 Docker Compose 一键启动 Gitea + Gitea Runner 的实战记录。"
|
||||
---
|
||||
|
||||
> 注意:本文基于 Docker Compose 一键启动 Gitea + Gitea Runner 的实战记录。
|
||||
|
||||
## 为什么使用 gitea
|
||||
使用 gitea,主要原因是它的内存占用低,只有100 M 左右,而 gitlab 官方推荐的最小配置是 4 G 内存。github 在大多数区域访问速度较慢,而 gitea 可以在自部署的情况下,提供与 github 相同的功能。
|
||||
|
||||
## 架构速览
|
||||
|
||||
Gitea 采用微内核 + 插件扩展的轻量架构,核心组件如下:
|
||||
|
||||
1. **Web 服务层**
|
||||
- 基于 Go 的 HTTP 服务(Gin 框架)
|
||||
- 提供 Web UI、REST & Git 协议入口
|
||||
|
||||
2. **业务逻辑层**
|
||||
- 路由与中间件(鉴权、CSRF、Session)
|
||||
- 仓库管理(Git 命令封装、钩子触发)
|
||||
- 组织/用户/权限模型(RBAC)
|
||||
|
||||
3. **存储层**
|
||||
- **SQLite**(默认,单文件零配置)
|
||||
- **MySQL / PostgreSQL**(生产推荐)
|
||||
- 文件系统:Git 裸仓库、LFS 对象、头像、日志
|
||||
|
||||
4. **后台任务**
|
||||
- 定时器:镜像同步、归档清理、统计更新
|
||||
- 队列:邮件、WebHook、索引构建
|
||||
|
||||
5. **可选扩展**
|
||||
- **Gitea Runner**:基于 act(兼容 GitHub Actions)的 CI 执行器
|
||||
- **包管理**:npm、maven、nuget、docker registry 统一入口
|
||||
|
||||
### 架构图(Mermaid)
|
||||
|
||||
```mermaid
|
||||
graph TB
|
||||
subgraph "客户端层"
|
||||
A[Web浏览器]
|
||||
B[Git客户端]
|
||||
C[API客户端]
|
||||
end
|
||||
|
||||
subgraph "负载均衡/反向代理"
|
||||
D[Nginx/Apache]
|
||||
end
|
||||
|
||||
subgraph "Gitea核心服务"
|
||||
E[Web服务<br/>Gin框架]
|
||||
F[API服务<br/>RESTful]
|
||||
G[Git服务<br/>SSH/HTTP]
|
||||
H[认证授权<br/>Session/OAuth]
|
||||
end
|
||||
|
||||
subgraph "业务逻辑层"
|
||||
I[仓库管理]
|
||||
J[用户管理]
|
||||
K[组织管理]
|
||||
L[权限控制<br/>RBAC]
|
||||
M[WebHook]
|
||||
N[邮件服务]
|
||||
end
|
||||
|
||||
subgraph "数据存储层"
|
||||
O[数据库<br/>SQLite/MySQL/PostgreSQL]
|
||||
P[Git仓库<br/>文件系统]
|
||||
Q[LFS对象存储]
|
||||
R[缓存<br/>Redis/Memcached]
|
||||
end
|
||||
|
||||
subgraph "后台任务"
|
||||
S[定时任务<br/>Cron]
|
||||
T[队列处理<br/>WebHook/邮件]
|
||||
U[索引构建]
|
||||
V[镜像同步]
|
||||
end
|
||||
|
||||
subgraph "可选扩展"
|
||||
W[Gitea Runner<br/>CI/CD]
|
||||
X[包管理<br/>npm/docker/maven]
|
||||
Y[代码搜索<br/>Bleve]
|
||||
end
|
||||
|
||||
A --> D
|
||||
B --> D
|
||||
C --> D
|
||||
|
||||
D --> E
|
||||
D --> F
|
||||
D --> G
|
||||
|
||||
E --> H
|
||||
F --> H
|
||||
G --> H
|
||||
|
||||
H --> I
|
||||
H --> J
|
||||
H --> K
|
||||
H --> L
|
||||
|
||||
I --> O
|
||||
I --> P
|
||||
J --> O
|
||||
K --> O
|
||||
L --> O
|
||||
|
||||
I --> Q
|
||||
M --> T
|
||||
N --> T
|
||||
|
||||
S --> V
|
||||
U --> R
|
||||
T --> N
|
||||
|
||||
W --> P
|
||||
X --> Q
|
||||
Y --> R
|
||||
|
||||
style A fill:#e1f5fe
|
||||
style B fill:#e1f5fe
|
||||
style C fill:#e1f5fe
|
||||
style D fill:#fff3e0
|
||||
style E fill:#f3e5f5
|
||||
style F fill:#f3e5f5
|
||||
style G fill:#f3e5f5
|
||||
style H fill:#f3e5f5
|
||||
style I fill:#e8f5e9
|
||||
style J fill:#e8f5e9
|
||||
style K fill:#e8f5e9
|
||||
style L fill:#e8f5e9
|
||||
style M fill:#e8f5e9
|
||||
style N fill:#e8f5e9
|
||||
style O fill:#ffebee
|
||||
style P fill:#ffebee
|
||||
style Q fill:#ffebee
|
||||
style R fill:#ffebee
|
||||
style S fill:#fce4ec
|
||||
style T fill:#fce4ec
|
||||
style U fill:#fce4ec
|
||||
style V fill:#fce4ec
|
||||
style W fill:#e0f2f1
|
||||
style X fill:#e0f2f1
|
||||
style Y fill:#e0f2f1
|
||||
```
|
||||
|
||||
### 架构说明
|
||||
|
||||
**Gitea** 采用分层架构设计,各层职责清晰:
|
||||
|
||||
1. **客户端层**:支持 Web 浏览器、Git 客户端和 API 客户端访问
|
||||
2. **负载均衡层**:可通过 Nginx/Apache 实现反向代理和负载均衡
|
||||
3. **核心服务层**:提供 Web UI、API 接口和 Git 协议支持
|
||||
4. **业务逻辑层**:处理仓库、用户、组织管理和权限控制
|
||||
5. **数据存储层**:支持多种数据库和文件系统存储
|
||||
6. **后台任务**:负责定时任务、队列处理和同步操作
|
||||
7. **扩展功能**:提供 CI/CD、包管理和代码搜索等可选功能
|
||||
|
||||
这种架构设计使得 Gitea 具有轻量级、高可用和易扩展的特点。
|
||||
|
||||
```mermaid
|
||||
graph TB
|
||||
subgraph "客户端层"
|
||||
A[Web浏览器]
|
||||
B[Git客户端]
|
||||
C[API客户端]
|
||||
end
|
||||
|
||||
subgraph "负载均衡层"
|
||||
D[Nginx/反向代理]
|
||||
end
|
||||
|
||||
subgraph "Gitea核心服务"
|
||||
E[Web服务<br/>Gin框架]
|
||||
F[REST API]
|
||||
G[Git协议处理器]
|
||||
H[认证授权<br/>RBAC]
|
||||
I[中间件<br/>CSRF/Session]
|
||||
end
|
||||
|
||||
subgraph "业务逻辑层"
|
||||
J[仓库管理]
|
||||
K[用户/组织管理]
|
||||
L[问题跟踪]
|
||||
M[PR/MR流程]
|
||||
N[WebHook系统]
|
||||
O[通知系统]
|
||||
end
|
||||
|
||||
subgraph "数据存储层"
|
||||
P[Git仓库<br/>文件系统]
|
||||
Q[SQLite/MySQL<br/>PostgreSQL]
|
||||
R[LFS对象存储]
|
||||
S[会话存储]
|
||||
T[缓存Redis]
|
||||
end
|
||||
|
||||
subgraph "后台服务"
|
||||
U[定时任务<br/>镜像同步]
|
||||
V[队列服务<br/>异步任务]
|
||||
W[邮件服务]
|
||||
X[索引构建]
|
||||
end
|
||||
|
||||
subgraph "扩展组件"
|
||||
Y[Gitea Runner<br/>CI/CD]
|
||||
Z[包管理<br/>npm/maven]
|
||||
AA[容器注册表]
|
||||
end
|
||||
|
||||
A --> D
|
||||
B --> D
|
||||
C --> D
|
||||
|
||||
D --> E
|
||||
D --> F
|
||||
D --> G
|
||||
|
||||
E --> H
|
||||
F --> H
|
||||
G --> H
|
||||
|
||||
H --> I
|
||||
I --> J
|
||||
I --> K
|
||||
I --> L
|
||||
I --> M
|
||||
I --> N
|
||||
I --> O
|
||||
|
||||
J --> P
|
||||
K --> Q
|
||||
L --> Q
|
||||
M --> P
|
||||
N --> V
|
||||
O --> W
|
||||
|
||||
V --> U
|
||||
V --> X
|
||||
V --> W
|
||||
|
||||
J --> Y
|
||||
J --> Z
|
||||
J --> AA
|
||||
|
||||
P --> R
|
||||
Q --> S
|
||||
Q --> T
|
||||
|
||||
style A fill:#e1f5fe
|
||||
style B fill:#e1f5fe
|
||||
style C fill:#e1f5fe
|
||||
style D fill:#fff3e0
|
||||
style E fill:#f3e5f5
|
||||
style F fill:#f3e5f5
|
||||
style G fill:#f3e5f5
|
||||
style H fill:#f3e5f5
|
||||
style I fill:#f3e5f5
|
||||
style J fill:#e8f5e8
|
||||
style K fill:#e8f5e8
|
||||
style L fill:#e8f5e8
|
||||
style M fill:#e8f5e8
|
||||
style N fill:#e8f5e8
|
||||
style O fill:#e8f5e8
|
||||
style P fill:#fce4ec
|
||||
style Q fill:#fce4ec
|
||||
style R fill:#fce4ec
|
||||
style S fill:#fce4ec
|
||||
style T fill:#fce4ec
|
||||
style U fill:#fff9c4
|
||||
style V fill:#fff9c4
|
||||
style W fill:#fff9c4
|
||||
style X fill:#fff9c4
|
||||
style Y fill:#e0f2f1
|
||||
style Z fill:#e0f2f1
|
||||
style AA fill:#e0f2f1
|
||||
```
|
||||
|
||||
### 架构特点说明
|
||||
|
||||
**1. 轻量级设计**
|
||||
- 单二进制文件部署,内存占用仅100M左右
|
||||
- 内置Web服务器,无需额外HTTP服务
|
||||
- SQLite零配置支持,适合个人和小团队
|
||||
|
||||
**2. 模块化架构**
|
||||
- 核心服务与业务逻辑分离
|
||||
- 插件化扩展机制
|
||||
- 可选组件按需启用
|
||||
|
||||
**3. 数据一致性**
|
||||
- Git裸仓库直接存储,保证数据完整性
|
||||
- 数据库存储元数据,支持快速查询
|
||||
- LFS支持大文件存储
|
||||
|
||||
**4. 高可用支持**
|
||||
- 支持数据库主从复制
|
||||
- 文件系统可对接分布式存储
|
||||
- 会话和缓存支持外部存储
|
||||
|
||||
## docker compose 部署
|
||||
> docker 和 docker compose 的安装可以参考 [docker 官方文档](https://docs.docker.com/get-docker/)
|
||||
|
||||
```yaml
|
||||
networks:
|
||||
gitea:
|
||||
external: false
|
||||
|
||||
services:
|
||||
gitea:
|
||||
image: gitea/gitea:latest
|
||||
container_name: gitea
|
||||
environment:
|
||||
- USER_UID=1000
|
||||
- USER_GID=10
|
||||
- GITEA__database__DB_TYPE=mysql
|
||||
- GITEA__database__HOST=db:3306
|
||||
- GITEA__database__NAME=gitea
|
||||
- GITEA__database__USER=gitea
|
||||
- GITEA__database__PASSWD=xxxxx
|
||||
restart: always
|
||||
networks:
|
||||
- gitea
|
||||
volumes:
|
||||
- ./data:/data
|
||||
- /etc/timezone:/etc/timezone:ro
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
ports:
|
||||
- "23000:3000"
|
||||
- "22222:22"
|
||||
depends_on:
|
||||
- db
|
||||
|
||||
db:
|
||||
image: mysql:8
|
||||
container_name: mysql-gitea
|
||||
restart: always
|
||||
environment:
|
||||
- MYSQL_ROOT_PASSWORD=gitea
|
||||
- MYSQL_USER=gitea
|
||||
- MYSQL_PASSWORD=xxxxxx
|
||||
- MYSQL_DATABASE=gitea
|
||||
networks:
|
||||
- gitea
|
||||
volumes:
|
||||
- ./mysql:/var/lib/mysql
|
||||
|
||||
runner:
|
||||
image: gitea/act_runner:latest
|
||||
container_name: runner
|
||||
restart: always
|
||||
depends_on:
|
||||
- gitea
|
||||
volumes:
|
||||
- ./runner/data:/data
|
||||
- ./runner/cache:/root/.cache
|
||||
- ./runner/config.yaml:/config.yaml
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
networks:
|
||||
- gitea
|
||||
environment:
|
||||
- GITEA_INSTANCE_URL=http://gitea:3000/
|
||||
- GITEA_RUNNER_REGISTRATION_TOKEN=xxxxxxx
|
||||
- CONFIG_FILE=/config.yaml
|
||||
- GITEA_RUNNER_NAME=docker-runner
|
||||
- GITEA_RUNNER_LABELS=docker
|
||||
```
|
||||
其中,runner 的 token可以先随便填一个,后面在 gitea 中注册时会替换。
|
||||
|
||||
@@ -0,0 +1,112 @@
|
||||
---
|
||||
title: markdown语法使用指南
|
||||
tags: ["markdown"]
|
||||
date: 2025-03-06
|
||||
summary: "用来学习markdown语法"
|
||||
---
|
||||
## 基础语法
|
||||
|
||||
---
|
||||
|
||||
### 标题
|
||||
|
||||
```markdown
|
||||
# H1
|
||||
## H2
|
||||
### H3
|
||||
#### H4
|
||||
##### H5
|
||||
###### H6
|
||||
```
|
||||
|
||||
### 文本样式
|
||||
|
||||
```markdown
|
||||
*斜体* _斜体_
|
||||
**粗体** __粗体__
|
||||
***粗斜体*** ___粗斜体___
|
||||
~~删除线~~
|
||||
```
|
||||
|
||||
### 列表
|
||||
|
||||
```markdown
|
||||
- 无序列表
|
||||
* 无序列表
|
||||
+ 无序列表
|
||||
|
||||
1. 有序列表
|
||||
2. 有序列表
|
||||
3. 有序列表
|
||||
|
||||
- [x] 已完成
|
||||
- [ ] 未完成
|
||||
```
|
||||
|
||||
### 代码
|
||||
|
||||
```markdown
|
||||
行内代码:`code`
|
||||
|
||||
代码块:
|
||||
```python
|
||||
print("Hello World")
|
||||
```
|
||||
```
|
||||
|
||||
### 链接与图片
|
||||
|
||||
```markdown
|
||||
[链接文字](URL "标题")
|
||||

|
||||
```
|
||||
|
||||
### 引用
|
||||
|
||||
```markdown
|
||||
> 引用内容
|
||||
> 多行引用
|
||||
```
|
||||
|
||||
### 表格
|
||||
|
||||
```markdown
|
||||
| 左对齐 | 居中对齐 | 右对齐 |
|
||||
|:-------|:-------:|-------:|
|
||||
| 数据 | 数据 | 数据 |
|
||||
| 数据 | 数据 | 数据 |
|
||||
```
|
||||
|
||||
## 高级语法
|
||||
|
||||
---
|
||||
|
||||
### 分隔线
|
||||
|
||||
```markdown
|
||||
---
|
||||
***
|
||||
___
|
||||
```
|
||||
|
||||
### 脚注
|
||||
|
||||
```markdown
|
||||
这是一个脚注[^note]
|
||||
[^note]: 脚注内容
|
||||
```
|
||||
|
||||
### HTML
|
||||
|
||||
```markdown
|
||||
<details>
|
||||
<summary>点击展开</summary>
|
||||
隐藏内容
|
||||
</details>
|
||||
```
|
||||
|
||||
### 转义字符
|
||||
|
||||
```markdown
|
||||
\*转义星号\*
|
||||
```
|
||||
@@ -0,0 +1,101 @@
|
||||
---
|
||||
title: zerotier使用指南
|
||||
tags: ["linux"]
|
||||
date: 2025-09-07
|
||||
summary: "zerotier使用指南"
|
||||
---
|
||||
# 注册
|
||||
|
||||
1.进入[https://my.zerotier.com/network](https://my.zerotier.com/network)注册登录
|
||||
|
||||
Create A Network 新建网络,查看网络id
|
||||
|
||||
# linux端
|
||||
|
||||
## 1.安装
|
||||
|
||||
curl -s [https://install.zerotier.com](https://install.zerotier.com) | sudo bash
|
||||
|
||||
## 2.加入网络
|
||||
|
||||
sudo zerotier-cli join #你的网络id
|
||||
#设置zerotier自启
|
||||
sudo systemctl enable zerotier-one.service
|
||||
|
||||
新设备加入都要去[zerotier后台](https://my.zerotier.com/network)许可
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
Authorized勾打上,name自己起,点击save保存
|
||||
|
||||
# docker安装
|
||||
|
||||
docker run -d -restart always -name zerotier -v 你本地的地址:/var/lib/zerotier-one -network host zerotier/zerotier:latest
|
||||
#要使用host网络模式
|
||||
|
||||
docker exec -it zerotier
|
||||
sudo zerotier-cli join #你的网络id
|
||||
|
||||
# ios端
|
||||
|
||||
App Store登录美区账号
|
||||
|
||||
搜索下载zerotier-one
|
||||
|
||||
打开点击右上角➕
|
||||
|
||||
输入网页端显示的网络id
|
||||
|
||||
点击add network
|
||||
|
||||
---
|
||||
|
||||
如果只是简单的互通到这里为止,你的iphone和linux已经可以实现互相访问了,直接ping网页端显示的ip地址即可,一般刚连上会延迟比较高,打洞成功后延迟基本在个位数
|
||||
|
||||

|
||||
|
||||
# 进阶设置
|
||||
|
||||
## zerotier托管路由
|
||||
|
||||
如果你想实现访问linux客户端下的其他局域网设备,比如ps5等无法安装zerotier的设备
|
||||
|
||||
在linux已经安装配置好zerotier的基础上
|
||||
|
||||
# 通过 ip a可以查看网卡配置,找到对应的zerotier虚拟网卡
|
||||
ztiv5heone: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 2800 qdisc fq_codel state UNKNOWN group default qlen 1000
|
||||
link/ether c6:a0:24:d1:76:3b brd ff:ff:ff:ff:ff:ff
|
||||
inet 10.147.17.11/24 brd 10.147.17.255 scope global ztiv5heone
|
||||
valid_lft forever preferred_lft forever
|
||||
inet6 fe80::c4a0:24ff:fed1:763b/64 scope link
|
||||
valid_lft forever preferred_lft forever
|
||||
|
||||
# ztiv5heone 为虚拟网卡名字
|
||||
#允许防火墙通过
|
||||
iptables -I FORWARD -i ztiv5heone -j ACCEPT
|
||||
iptables -I FORWARD -o ztiv5heone -j ACCEPT
|
||||
iptables -t nat -I POSTROUTING -o ztiv5heone -j MASQUERADE
|
||||
|
||||
# 允许转发
|
||||
cat /proc/sys/net/ipv4/ip_forward
|
||||
# 如果返回 1,表示开启不需要后续操作;0 表示关闭需要开启
|
||||
|
||||
sudo vim /etc/sysctl.conf
|
||||
#在文件中找到(或添加)以下行:net.ipv4.ip_forward = 1
|
||||
|
||||
sudo sysctl -p
|
||||
#保存后执行生效
|
||||
|
||||
进入[https://my.zerotier.com/network](https://my.zerotier.com/network)进入当前的网络id
|
||||
|
||||
找到
|
||||
|
||||

|
||||
|
||||
destination填写你的局域网网段例如192.168.2.0/24 ,via输入分配给你的虚拟局域网地址例如10.147.17.11
|
||||
|
||||
这里的意思就是如果我要访问局域网的其他设备,是要通过via填写的地址转发到目的局域网ip
|
||||
|
||||
此时使用在同一zerotier网络下的其他设备,ping你的局域网其他设备,能ping通即成功
|
||||
@@ -0,0 +1,62 @@
|
||||
---
|
||||
title: 一个NAS用户的UPS求生指南:从断电焦虑到真香体验
|
||||
tags: ["nas"]
|
||||
date: 2025-10-22
|
||||
summary: '作为一个在群租房里"苟活"的绿联NAS用户,这两年我深刻体会到了什么叫"用电如履薄冰"...'
|
||||
---
|
||||
## 第一章:那些年,我们一起经历的断电惊魂
|
||||
|
||||
作为一个在群租房里"苟活"的绿联NAS用户,这两年我深刻体会到了什么叫"用电如履薄冰":
|
||||
|
||||
- 每月一次的断电"保留节目",比大姨妈还准时
|
||||
- 每次断电后重启NAS时的手抖程度,堪比拆炸弹
|
||||
- 硬盘的"咔咔"声在我耳中自动翻译成"给老子等着"
|
||||
|
||||
## 第二章:UPS选购的哲学思考
|
||||
|
||||
在研究了市面上的UPS后,我陷入了当代青年的经典选择困境:
|
||||
|
||||
### 选项A:磷酸铁锂"坦克型"UPS
|
||||
|
||||
- ✅ 安全系数堪比防弹衣
|
||||
- ❌ 体积和噪音堪比小型发电机
|
||||
- ❌ 待机功耗够我多喝两杯奶茶
|
||||
|
||||
### 选项B:锂电池"精灵型"UPS
|
||||
|
||||
- ✅ 体积小巧如充电宝
|
||||
- ✅ 安静得像个美男子
|
||||
- ❓ 安全性...应该也许大概没问题?
|
||||
|
||||
直到某个月黑风高的夜晚,连续两次断电后,我的NAS用数据丢失的方式向我发出最后通牒。
|
||||
|
||||
## 第三章:我与瓦力UPS
|
||||
|
||||
最终入手的瓦力UPS给我的惊喜远超预期:
|
||||
|
||||
### 三大真香体验
|
||||
|
||||
1. **身材管理满分**:120 x 106.7 x 40.3mm放在在NAS上毫无存在感
|
||||
2. **功能强大**:
|
||||
|
||||
- 实时功率监测
|
||||
- 用电统计(终于知道NAS偷吃了多少电)
|
||||
- 智能关机保护
|
||||
- mac地址网络唤醒
|
||||
3. **零噪音**:存在感比我的前任还低
|
||||
|
||||
*每天看功率成了新的解压方式*
|
||||

|
||||
*每日详细电量消耗*
|
||||

|
||||
|
||||
## 第四章:给同病相怜者的建议
|
||||
|
||||
1. 别等数据火葬场才想起UPS这个"后悔药"
|
||||
2. 租房党优先考虑体积和噪音(除非你想体验噪音的关爱)
|
||||
3. 锂电池UPS没想象中可怕,毕竟手机天天放床头不是?
|
||||
4. 记得定期测试,别让UPS变成"装饰品"
|
||||
|
||||
## 终极感悟
|
||||
|
||||
从最初的"应该不用买UPS吧",到现在的"怎么没早点买",真香定律再次胜利。现在我的NAS终于可以安心地说:"我要稳稳的幸福~"(而我的钱包说:你开心就好)
|
||||
@@ -0,0 +1,71 @@
|
||||
---
|
||||
title: 把Kindle变成信息屏!越狱+自动更换新闻壁纸全攻略 | 附开源代码
|
||||
tags: ["学习"]
|
||||
date: 2025-10-01
|
||||
summary: "前些日子翻出尘封两年的KPW4,本想重拾阅读初心,却发现亚马逊中国早已物是人非。正当想着要不要给它闲鱼出手时转卖时,B站刷到Kindle全机型都支持越狱了。"
|
||||
---
|
||||
|
||||
前些日子翻出尘封两年的KPW4,本想重拾阅读初心,却发现亚马逊中国早已物是人非。
|
||||
正当想着要不要给它闲鱼出手时转卖时,B站刷到Kindle全机型都支持越狱了。
|
||||
|
||||
- 书伴网的详细图文教程[2025 Kindle 越狱教程:不限 Kindle 型号,不限固件版本](https://bookfere.com/post/1145.html)
|
||||
|
||||
瞬间燃起折腾欲,一直没有给kindle越狱过,想着就算要出手也要越狱折腾看看。
|
||||
|
||||
## kindle越狱
|
||||
|
||||
参考书伴网的教程[2025 Kindle 越狱教程:不限 Kindle 型号,不限固件版本](https://bookfere.com/post/1145.html)
|
||||
跟着教程一步一步进行即可,这一步我就不再详细说明了。
|
||||
|
||||
越狱后的kindle安装了koreader,传书变得方便了,不需要再使用数据线进行拷贝,可以链接webdav服务器进行下载,确实方便多了,也重燃起我的阅读兴趣。
|
||||
遂想着还有什么可折腾的,想起没越狱之前,一直想着把kindle的壁纸给换掉,现在越狱了应该可以实现了。
|
||||
|
||||
## 实践
|
||||
|
||||
整理一下我的需求
|
||||
|
||||
- 自动化更换kindle壁纸
|
||||
- 图片内容为新闻排行榜
|
||||
- 自动化生成壁纸图片
|
||||
|
||||
根据需求我大概去网上看了一下有没有相同想法的小伙伴,但是看到的大多是使用git上传管理自己的图片,不是自动化生成一些壁纸
|
||||
[读书|通过 Git 管理 Kindle 屏保图片,一键自动同步](https://blog.csdn.net/mzlogin/article/details/132960326)
|
||||
这是链接大家也可以参考一下。
|
||||
|
||||
基于没有现成的,我根据需求大概整理了一下实现的思路
|
||||
|
||||
1. github仓库python代码爬取新闻网站信息,整理好生成壁纸,需要适配一下kindle屏幕大小和黑白色,使用github action自动化执行仓库内py脚本每隔30分钟爬取生成一张图片,自动覆盖原图片。
|
||||
2. kindle写一个sh脚本自动下载图片到指定的目录,使用cron定时任务设置定时下载覆盖
|
||||
|
||||
### github
|
||||
|
||||

|
||||
我的github项目地址[8butubb/kindlepic](https://github.com/8butubb/kindlepic)
|
||||
信息来源是[今日热榜](https://tophub.today)
|
||||
不知道爬哪个网站的同学可以看看这个网站,信息聚合
|
||||
|
||||
### kindle
|
||||
|
||||
kindle上壁纸目录是可以使用koreader进行指定,指定或者默认目录,
|
||||
写一个sh脚本用来下载图片
|
||||
|
||||
```sh
|
||||
#!/bin/sh
|
||||
|
||||
# 目标壁纸文件名(需固定名称以覆盖旧文件)
|
||||
WALLPAPER_NAME="custom_wallpaper.png"
|
||||
# 壁纸下载链接(替换为你的实际图片URL)
|
||||
IMAGE_URL="https://example.com/your-image.png"
|
||||
# 目标路径
|
||||
TARGET_DIR="/mnt/us/koreader/screensaver"
|
||||
|
||||
# 使用 curl 下载并覆盖文件
|
||||
curl -L -o "${TARGET_DIR}/${WALLPAPER_NAME}" "${IMAGE_URL}"
|
||||
```
|
||||
|
||||
chmod +x download_wallpaper.sh 给个脚本执行权限
|
||||
写完可以执行一次试试,没有问题的话使用cron设置一下定时任务即可
|
||||
|
||||
## 进阶
|
||||
|
||||
- 可以在添加天气信息和一些其他自定义信息,这里大家就可以发挥想象力了
|
||||
@@ -0,0 +1,9 @@
|
||||
---
|
||||
title: 重新用回macos
|
||||
tags: ["日常","mac"]
|
||||
date: 2025-12-01
|
||||
summary: ""
|
||||
---
|
||||
|
||||
最近几天,我重新用回了去年使用的macbookpro,屏幕有一条黑线,使用的是外接显示器
|
||||
深感还是mac系统简洁好用,没有windows那么多的莫名其妙的bug
|
||||
@@ -1,12 +1,12 @@
|
||||
baseURL = 'https://8butubb.github.io/'
|
||||
languageCode = 'zh-cn'
|
||||
title = '我的博客'
|
||||
title = '日志'
|
||||
theme = 'PaperMod'
|
||||
|
||||
[params]
|
||||
defaultTheme = "auto"
|
||||
# 内联表必须写在一行内
|
||||
homeInfoParams = { Title = "你好,我是butubb", Content = "欢迎来到我的博客主页:个人 / 博客 / 教程" }
|
||||
homeInfoParams = { Title = "你好!我是butubb,安徽人,现工作居住在苏州。", Content = "喜欢互联网冲浪🏄♂️,折腾机器💻,看电影🎥,编程🧑💻,听音乐🎶等" }
|
||||
|
||||
|
||||
[taxonomies]
|
||||
@@ -15,16 +15,21 @@ theme = 'PaperMod'
|
||||
category = "categories"
|
||||
|
||||
[[menu.main]]
|
||||
name = "个人"
|
||||
url = "/posts"
|
||||
name = "首页"
|
||||
url = "/"
|
||||
weight = 1
|
||||
|
||||
[[menu.main]]
|
||||
name = "教程"
|
||||
url = "/docs"
|
||||
name = "博文"
|
||||
url = "/posts"
|
||||
weight = 2
|
||||
|
||||
[[menu.main]]
|
||||
name = "标签"
|
||||
url = "/tags"
|
||||
weight = 3
|
||||
|
||||
[[menu.main]]
|
||||
name = "学习"
|
||||
url = "/study"
|
||||
weight = 3
|
||||
weight = 4
|
||||
Reference in New Issue
Block a user