Update nexus: fix conflicts and sync local changes
This commit is contained in:
@@ -1,137 +1,137 @@
|
||||
---
|
||||
title: 3X-UI Xray on BandwagonVPS
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: []
|
||||
---
|
||||
|
||||
# 3X-UI Xray on BandwagonVPS
|
||||
|
||||
```table-of-contents
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 1. 服务器信息
|
||||
|
||||
| 项目 | 值 |
|
||||
|------|-----|
|
||||
| 服务器 | VPS2 (Bandwagon) |
|
||||
| IP | 104.194.92.188 |
|
||||
| 域名 | kiwi.ishenwei.online |
|
||||
| SSH | `ssh vps2` |
|
||||
| Web管理 | https://kiwi.ishenwei.online:2053/ |
|
||||
| 用户名 | d96nRBgFUL |
|
||||
| 密码 | er9XU0VsF1 |
|
||||
|
||||
---
|
||||
|
||||
## 2. 安装 3X-UI
|
||||
|
||||
### 一键安装命令
|
||||
|
||||
```bash
|
||||
bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh)
|
||||
```
|
||||
|
||||
### 命令行管理
|
||||
|
||||
```bash
|
||||
ssh vps2
|
||||
x-ui
|
||||
```
|
||||
|
||||
### 管理菜单说明
|
||||
|
||||
```
|
||||
╔────────────────────────────────────────────────╗
|
||||
║ 3X-UI Panel Management Script ║
|
||||
║ 0. Exit Script ║
|
||||
────────────────────────────────────────────────║
|
||||
║ 1. Install ║
|
||||
║ 2. Update ║
|
||||
║ 3. Update Menu ║
|
||||
║ 4. Legacy Version ║
|
||||
║ 5. Uninstall ║
|
||||
────────────────────────────────────────────────║
|
||||
║ 6. Reset Username & Password ║
|
||||
║ 7. Reset Web Base Path ║
|
||||
║ 8. Reset Settings ║
|
||||
║ 9. Change Port ║
|
||||
║ 10. View Current Settings ║
|
||||
────────────────────────────────────────────────║
|
||||
║ 11. Start ║
|
||||
║ 12. Stop ║
|
||||
║ 13. Restart ║
|
||||
║ 14. Check Status ║
|
||||
║ 15. Logs Management ║
|
||||
────────────────────────────────────────────────║
|
||||
║ 16. Enable Autostart ║
|
||||
║ 17. Disable Autostart ║
|
||||
────────────────────────────────────────────────║
|
||||
║ 18. SSL Certificate Management ║
|
||||
║ 19. Cloudflare SSL Certificate ║
|
||||
║ 20. IP Limit Management ║
|
||||
║ 21. Firewall Management ║
|
||||
║ 22. SSH Port Forwarding Management ║
|
||||
────────────────────────────────────────────────║
|
||||
║ 23. Enable BBR ║
|
||||
║ 24. Update Geo Files ║
|
||||
║ 25. Speedtest by Ookla ║
|
||||
╚────────────────────────────────────────────────╝
|
||||
```
|
||||
|
||||
### 常用操作
|
||||
|
||||
| 操作 | 命令 |
|
||||
|------|------|
|
||||
| 启动 | `x-ui` → 输入 `11` |
|
||||
| 停止 | `x-ui` → 输入 `12` |
|
||||
| 重启 | `x-ui` → 输入 `13` |
|
||||
| 查看状态 | `x-ui` → 输入 `14` |
|
||||
| 更新Geo文件 | `x-ui` → 输入 `24` |
|
||||
| 启用BBR | `x-ui` → 输入 `23` |
|
||||
|
||||
### 当前状态
|
||||
|
||||
- Panel state: Running ✅
|
||||
- xray state: Running ✅
|
||||
- Autostart: Enabled ✅
|
||||
|
||||
---
|
||||
|
||||
## 3. 配置入站规则
|
||||
|
||||
### Web 管理地址
|
||||
|
||||
- 地址: https://104.194.92.188:18888/2atA1GaPdNBMyRRGWi
|
||||
- 用户名: d96nRBgFUL
|
||||
- 密码: er9XU0VsF1
|
||||
|
||||
### 配置策略
|
||||
|
||||
使用 VLESS+Reality 方式配置,需要产生公钥和私钥。
|
||||
![[IMG-20260210125706904.png]]
|
||||
![[IMG-20260210125706904.png]]
|
||||
|
||||
---
|
||||
|
||||
## 4. 本地客户端
|
||||
|
||||
### Windows/Linux
|
||||
|
||||
客户端: [v2rayN](https://github.com/2dust/v2rayN)
|
||||
|
||||
### Android
|
||||
|
||||
客户端: [v2rayNG](https://github.com/2dust/v2rayNG)
|
||||
|
||||
---
|
||||
|
||||
## 5. 网络测试
|
||||
|
||||
- 国内访问直连: ✅ 200
|
||||
- 国外访问直连: ✅ 200
|
||||
---
|
||||
title: 3X-UI Xray on BandwagonVPS
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: []
|
||||
---
|
||||
|
||||
# 3X-UI Xray on BandwagonVPS
|
||||
|
||||
```table-of-contents
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 1. 服务器信息
|
||||
|
||||
| 项目 | 值 |
|
||||
|------|-----|
|
||||
| 服务器 | VPS2 (Bandwagon) |
|
||||
| IP | 104.194.92.188 |
|
||||
| 域名 | kiwi.ishenwei.online |
|
||||
| SSH | `ssh vps2` |
|
||||
| Web管理 | https://kiwi.ishenwei.online:2053/ |
|
||||
| 用户名 | d96nRBgFUL |
|
||||
| 密码 | er9XU0VsF1 |
|
||||
|
||||
---
|
||||
|
||||
## 2. 安装 3X-UI
|
||||
|
||||
### 一键安装命令
|
||||
|
||||
```bash
|
||||
bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh)
|
||||
```
|
||||
|
||||
### 命令行管理
|
||||
|
||||
```bash
|
||||
ssh vps2
|
||||
x-ui
|
||||
```
|
||||
|
||||
### 管理菜单说明
|
||||
|
||||
```
|
||||
╔────────────────────────────────────────────────╗
|
||||
║ 3X-UI Panel Management Script ║
|
||||
║ 0. Exit Script ║
|
||||
────────────────────────────────────────────────║
|
||||
║ 1. Install ║
|
||||
║ 2. Update ║
|
||||
║ 3. Update Menu ║
|
||||
║ 4. Legacy Version ║
|
||||
║ 5. Uninstall ║
|
||||
────────────────────────────────────────────────║
|
||||
║ 6. Reset Username & Password ║
|
||||
║ 7. Reset Web Base Path ║
|
||||
║ 8. Reset Settings ║
|
||||
║ 9. Change Port ║
|
||||
║ 10. View Current Settings ║
|
||||
────────────────────────────────────────────────║
|
||||
║ 11. Start ║
|
||||
║ 12. Stop ║
|
||||
║ 13. Restart ║
|
||||
║ 14. Check Status ║
|
||||
║ 15. Logs Management ║
|
||||
────────────────────────────────────────────────║
|
||||
║ 16. Enable Autostart ║
|
||||
║ 17. Disable Autostart ║
|
||||
────────────────────────────────────────────────║
|
||||
║ 18. SSL Certificate Management ║
|
||||
║ 19. Cloudflare SSL Certificate ║
|
||||
║ 20. IP Limit Management ║
|
||||
║ 21. Firewall Management ║
|
||||
║ 22. SSH Port Forwarding Management ║
|
||||
────────────────────────────────────────────────║
|
||||
║ 23. Enable BBR ║
|
||||
║ 24. Update Geo Files ║
|
||||
║ 25. Speedtest by Ookla ║
|
||||
╚────────────────────────────────────────────────╝
|
||||
```
|
||||
|
||||
### 常用操作
|
||||
|
||||
| 操作 | 命令 |
|
||||
|------|------|
|
||||
| 启动 | `x-ui` → 输入 `11` |
|
||||
| 停止 | `x-ui` → 输入 `12` |
|
||||
| 重启 | `x-ui` → 输入 `13` |
|
||||
| 查看状态 | `x-ui` → 输入 `14` |
|
||||
| 更新Geo文件 | `x-ui` → 输入 `24` |
|
||||
| 启用BBR | `x-ui` → 输入 `23` |
|
||||
|
||||
### 当前状态
|
||||
|
||||
- Panel state: Running ✅
|
||||
- xray state: Running ✅
|
||||
- Autostart: Enabled ✅
|
||||
|
||||
---
|
||||
|
||||
## 3. 配置入站规则
|
||||
|
||||
### Web 管理地址
|
||||
|
||||
- 地址: https://104.194.92.188:18888/2atA1GaPdNBMyRRGWi
|
||||
- 用户名: d96nRBgFUL
|
||||
- 密码: er9XU0VsF1
|
||||
|
||||
### 配置策略
|
||||
|
||||
使用 VLESS+Reality 方式配置,需要产生公钥和私钥。
|
||||
![[IMG-20260210125706904.png]]
|
||||
![[IMG-20260210125706904.png]]
|
||||
|
||||
---
|
||||
|
||||
## 4. 本地客户端
|
||||
|
||||
### Windows/Linux
|
||||
|
||||
客户端: [v2rayN](https://github.com/2dust/v2rayN)
|
||||
|
||||
### Android
|
||||
|
||||
客户端: [v2rayNG](https://github.com/2dust/v2rayNG)
|
||||
|
||||
---
|
||||
|
||||
## 5. 网络测试
|
||||
|
||||
- 国内访问直连: ✅ 200
|
||||
- 国外访问直连: ✅ 200
|
||||
|
||||
@@ -1,121 +1,121 @@
|
||||
---
|
||||
title: Building your Quartz
|
||||
source: https://quartz.jzhao.xyz/build
|
||||
author:
|
||||
published: 2026-03-04
|
||||
created: 2026-04-17
|
||||
description: "Once you’ve initialized Quartz, let’s see what it looks like locally: npx quartz build --serve This will start a local web server to run your Quartz on your computer."
|
||||
tags:
|
||||
- clippings
|
||||
- quartz
|
||||
- obsidian
|
||||
---
|
||||
Once you’ve [initialized](https://quartz.jzhao.xyz/#-get-started) Quartz, let’s see what it looks like locally:
|
||||
|
||||
```bash
|
||||
npx quartz build --directory /Users/weishen/Workspace/nexus/wiki --output /Users/weishen/Workspace/quartz --serve
|
||||
```
|
||||
|
||||
This will start a local web server to run your Quartz on your computer. Open a web browser and visit `http://localhost:8080/` to view it.
|
||||
|
||||
> Flags and options
|
||||
>
|
||||
> For full help options, you can run `npx quartz build --help`.
|
||||
>
|
||||
> Most of these have sensible defaults but you can override them if you have a custom setup:
|
||||
>
|
||||
> - `-d` or `--directory`: the content folder. This is normally just `content`
|
||||
> - `-v` or `--verbose`: print out extra logging information
|
||||
> - `-o` or `--output`: the output folder. This is normally just `public`
|
||||
> - `--serve`: run a local hot-reloading server to preview your Quartz
|
||||
> - `--port`: what port to run the local preview server on
|
||||
> - `--concurrency`: how many threads to use to parse notes
|
||||
|
||||
> Not to be used for production
|
||||
>
|
||||
> Serve mode is intended for local previews only. For production workloads, see the page on [hosting](https://quartz.jzhao.xyz/hosting).
|
||||
|
||||
---
|
||||
|
||||
Building your Quartz
|
||||
|
||||
Quartz effectively turns your Markdown files and other resources into a bundle of HTML, JS, and CSS files (a website!).
|
||||
|
||||
However, if you’d like to publish your site to the world, you need a way to host it online. This guide will detail how to deploy with common hosting providers but any service that allows you to deploy static HTML should work as well.
|
||||
|
||||
> Warning
|
||||
>
|
||||
> The rest of this guide assumes that you’ve already created your own GitHub repository for Quartz. If you haven’t already, [make sure you do so](https://quartz.jzhao.xyz/setting-up-your-GitHub-repository).
|
||||
|
||||
> Hint
|
||||
>
|
||||
> Some Quartz features (like [RSS Feed](https://quartz.jzhao.xyz/features/RSS-Feed) and sitemap generation) require `baseUrl` to be configured properly in your [configuration](https://quartz.jzhao.xyz/configuration) to work properly. Make sure you set this before deploying!
|
||||
|
||||
|
||||
## Self-Hosting
|
||||
|
||||
Copy the `public` directory to your web server and configure it to serve the files. You can use any web server to host your site. Since Quartz generates links that do not include the `.html` extension, you need to let your web server know how to deal with it.
|
||||
|
||||
### Using Nginx
|
||||
|
||||
Here’s an example of how to do this with Nginx:
|
||||
|
||||
nginx.conf
|
||||
|
||||
```nginx
|
||||
server {
|
||||
listen 80;
|
||||
server_name example.com;
|
||||
root /path/to/quartz/public;
|
||||
index index.html;
|
||||
error_page 404 /404.html;
|
||||
|
||||
location / {
|
||||
try_files $uri $uri.html $uri/ =404;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Using Apache
|
||||
|
||||
Here’s an example of how to do this with Apache:
|
||||
|
||||
.htaccess
|
||||
|
||||
```apache
|
||||
RewriteEngine On
|
||||
|
||||
ErrorDocument 404 /404.html
|
||||
|
||||
# Rewrite rule for .html extension removal (with directory check)
|
||||
RewriteCond %{REQUEST_FILENAME} !-f
|
||||
RewriteCond %{REQUEST_FILENAME} !-d
|
||||
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_URI}.html -f
|
||||
RewriteRule ^(.*)$ $1.html [L]
|
||||
|
||||
# Handle directory requests explicitly
|
||||
RewriteCond %{REQUEST_FILENAME} -d
|
||||
RewriteRule ^(.*)/$ $1/index.html [L]
|
||||
```
|
||||
|
||||
Don’t forget to activate brotli / gzip compression.
|
||||
|
||||
### Using Caddy
|
||||
|
||||
Here’s and example of how to do this with Caddy:
|
||||
|
||||
Caddyfile
|
||||
|
||||
```caddy
|
||||
example.com {
|
||||
root * /path/to/quartz/public
|
||||
try_files {path} {path}.html {path}/ =404
|
||||
file_server
|
||||
encode gzip
|
||||
|
||||
handle_errors {
|
||||
rewrite * /{err.status_code}.html
|
||||
file_server
|
||||
}
|
||||
}
|
||||
---
|
||||
title: Building your Quartz
|
||||
source: https://quartz.jzhao.xyz/build
|
||||
author:
|
||||
published: 2026-03-04
|
||||
created: 2026-04-17
|
||||
description: "Once you’ve initialized Quartz, let’s see what it looks like locally: npx quartz build --serve This will start a local web server to run your Quartz on your computer."
|
||||
tags:
|
||||
- clippings
|
||||
- quartz
|
||||
- obsidian
|
||||
---
|
||||
Once you’ve [initialized](https://quartz.jzhao.xyz/#-get-started) Quartz, let’s see what it looks like locally:
|
||||
|
||||
```bash
|
||||
npx quartz build --directory /Users/weishen/Workspace/nexus/wiki --output /Users/weishen/Workspace/quartz --serve
|
||||
```
|
||||
|
||||
This will start a local web server to run your Quartz on your computer. Open a web browser and visit `http://localhost:8080/` to view it.
|
||||
|
||||
> Flags and options
|
||||
>
|
||||
> For full help options, you can run `npx quartz build --help`.
|
||||
>
|
||||
> Most of these have sensible defaults but you can override them if you have a custom setup:
|
||||
>
|
||||
> - `-d` or `--directory`: the content folder. This is normally just `content`
|
||||
> - `-v` or `--verbose`: print out extra logging information
|
||||
> - `-o` or `--output`: the output folder. This is normally just `public`
|
||||
> - `--serve`: run a local hot-reloading server to preview your Quartz
|
||||
> - `--port`: what port to run the local preview server on
|
||||
> - `--concurrency`: how many threads to use to parse notes
|
||||
|
||||
> Not to be used for production
|
||||
>
|
||||
> Serve mode is intended for local previews only. For production workloads, see the page on [hosting](https://quartz.jzhao.xyz/hosting).
|
||||
|
||||
---
|
||||
|
||||
Building your Quartz
|
||||
|
||||
Quartz effectively turns your Markdown files and other resources into a bundle of HTML, JS, and CSS files (a website!).
|
||||
|
||||
However, if you’d like to publish your site to the world, you need a way to host it online. This guide will detail how to deploy with common hosting providers but any service that allows you to deploy static HTML should work as well.
|
||||
|
||||
> Warning
|
||||
>
|
||||
> The rest of this guide assumes that you’ve already created your own GitHub repository for Quartz. If you haven’t already, [make sure you do so](https://quartz.jzhao.xyz/setting-up-your-GitHub-repository).
|
||||
|
||||
> Hint
|
||||
>
|
||||
> Some Quartz features (like [RSS Feed](https://quartz.jzhao.xyz/features/RSS-Feed) and sitemap generation) require `baseUrl` to be configured properly in your [configuration](https://quartz.jzhao.xyz/configuration) to work properly. Make sure you set this before deploying!
|
||||
|
||||
|
||||
## Self-Hosting
|
||||
|
||||
Copy the `public` directory to your web server and configure it to serve the files. You can use any web server to host your site. Since Quartz generates links that do not include the `.html` extension, you need to let your web server know how to deal with it.
|
||||
|
||||
### Using Nginx
|
||||
|
||||
Here’s an example of how to do this with Nginx:
|
||||
|
||||
nginx.conf
|
||||
|
||||
```nginx
|
||||
server {
|
||||
listen 80;
|
||||
server_name example.com;
|
||||
root /path/to/quartz/public;
|
||||
index index.html;
|
||||
error_page 404 /404.html;
|
||||
|
||||
location / {
|
||||
try_files $uri $uri.html $uri/ =404;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Using Apache
|
||||
|
||||
Here’s an example of how to do this with Apache:
|
||||
|
||||
.htaccess
|
||||
|
||||
```apache
|
||||
RewriteEngine On
|
||||
|
||||
ErrorDocument 404 /404.html
|
||||
|
||||
# Rewrite rule for .html extension removal (with directory check)
|
||||
RewriteCond %{REQUEST_FILENAME} !-f
|
||||
RewriteCond %{REQUEST_FILENAME} !-d
|
||||
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_URI}.html -f
|
||||
RewriteRule ^(.*)$ $1.html [L]
|
||||
|
||||
# Handle directory requests explicitly
|
||||
RewriteCond %{REQUEST_FILENAME} -d
|
||||
RewriteRule ^(.*)/$ $1/index.html [L]
|
||||
```
|
||||
|
||||
Don’t forget to activate brotli / gzip compression.
|
||||
|
||||
### Using Caddy
|
||||
|
||||
Here’s and example of how to do this with Caddy:
|
||||
|
||||
Caddyfile
|
||||
|
||||
```caddy
|
||||
example.com {
|
||||
root * /path/to/quartz/public
|
||||
try_files {path} {path}.html {path}/ =404
|
||||
file_server
|
||||
encode gzip
|
||||
|
||||
handle_errors {
|
||||
rewrite * /{err.status_code}.html
|
||||
file_server
|
||||
}
|
||||
}
|
||||
```
|
||||
@@ -1,100 +1,100 @@
|
||||
---
|
||||
title:
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [backup, clonezilla, nas, rufus, ubuntu]
|
||||
---
|
||||
|
||||
|
||||
#clonezilla #ubuntu #backup #nas #rufus
|
||||
|
||||
```table-of-contents
|
||||
```
|
||||
|
||||
既然你已经准备好使用 **Clonezilla (再生龙)** 来实现类似 Ghost 的全盘镜像备份,以下是针对你**旧笔记本(源机)**备份到 **NAS(存储端)**的详细手把手步骤。
|
||||
|
||||
## 制作Clonezilla启动盘
|
||||
- **下载 ISO 镜像:** 访问 [Clonezilla 官网下载页](https://clonezilla.org/downloads.php)。
|
||||
- **CPU 架构:** 选择 `amd64`。
|
||||
- **发行版类型:** 选择 `debian`(更稳定)。
|
||||
- **文件类型:** 选择 `iso`。
|
||||
- **准备 U 盘:** 至少 1GB 容量,请提前备份 U 盘内数据,制作过程会**格式化** U 盘。
|
||||
- **启动 Rufus:** 插入 U 盘并运行 Rufus 软件。
|
||||
- **选择设备:** 在“设备”下拉菜单中确认选中了你的 U 盘。
|
||||
- **选择镜像:** 点击右侧的“选择”按钮,找到你下载好的 `clonezilla-live-xxxx-amd64.iso` 文件。
|
||||
- **分区方案与目标系统类型(关键):**
|
||||
- **针对较新的笔记本:** 分区方案选 `GPT`,目标系统选 `UEFI (非 CSM)`。
|
||||
- **针对很老的笔记本:** 如果你的笔记本不支持 UEFI,分区方案选 `MBR`,目标系统选 `BIOS (或 UEFI-CSM)`。
|
||||
- _建议:如果不确定,先尝试 GPT。_
|
||||
- **文件系统:** 保持默认的 `FAT32`(这是 UEFI 启动的标准格式)。
|
||||
- **开始制作:** 点击“开始”。
|
||||
- **模式选择(重点):**
|
||||
- Rufus 可能会弹出“检测到 ISOHybrid 镜像”的提示。
|
||||
- **请务必选择:“以 ISO 镜像模式写入 (推荐)”**。
|
||||
- 如果制作后无法启动,再尝试使用“DD 镜像模式”重新制作。
|
||||
10. **等待完成:** 进度条显示“准备就绪”后,即可拔掉 U 盘。
|
||||
|
||||
|
||||
> [!NOTE] 蓝色U盘
|
||||
> 蓝色U盘 32G 安装了Clonezilla
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 在旧笔记本上启动 Clonezilla
|
||||
|
||||
### 1. 启动与环境准备
|
||||
|
||||
1. 将制作好的 Rufus U 盘插入笔记本,重启并进入 **F9** (HP ZBook 常用) 启动菜单,选择 U 盘启动。
|
||||
2. 在 Clonezilla 初始菜单选择:`Clonezilla live (Default settings, VGA 800x600)`。
|
||||
3. **语言选择**:建议选择 `en_US.UTF-8 English` (英文界面更稳,报错容易查) 或 `zh_CN.UTF-8`。
|
||||
4. **键盘布局**:保持默认 `Keep default keyboard layout`。
|
||||
5. **启动 Clonezilla**:选择 `Start_Clonezilla`。
|
||||
|
||||
---
|
||||
|
||||
### 2. 设置备份模式
|
||||
|
||||
1. **模式选择**:选择 `device-image` (将硬盘备份为一个镜像文件,存放在 NAS 或外置硬盘上)。
|
||||
2. **挂载备份目录 (Mounting the repo)**:
|
||||
- 如果你使用 **NAS**:选择 `nfs_server` (推荐,Linux 兼容性最好)
|
||||
- 如果你使用 **外置硬盘**:插上硬盘,选择 `local_dev`。
|
||||
|
||||
---
|
||||
|
||||
### 3. 连接 NAS (以 NFS 为例)
|
||||
|
||||
如果你选择了 `nfs_server`,接下来的填空非常关键:
|
||||
1. **网卡配置**:选择 `dhcp` (确保笔记本连了网线)。
|
||||
2. **NFS 服务器 IP**:输入你 NAS 的 IP 地址 (例如 `192.168.3.17`)。
|
||||
3. **挂载路径**:输入你 NAS 上共享文件夹的绝对路径 (例如 `/volume2/backups`)。
|
||||
4. **确认挂载**:挂载成功后,你会看到磁盘空间信息。按下 **Enter** 继续。
|
||||
|
||||
---
|
||||
|
||||
### 4. 配置备份参数
|
||||
1. **向导模式**:选择 `Beginner` (初学者模式,默认参数已足够)。
|
||||
2. **具体操作**:选择 `savedisk` (保存整个本地磁盘)。
|
||||
3. **镜像名称**:它会自动生成一个日期格式的名称,你可以修改为 `Ubuntu_Server_Ghost_20251220`。
|
||||
4. **选择源磁盘**:选中你笔记本的内置硬盘 (通常是 `sda` 或 `nvme0n1`)。
|
||||
5. **压缩选项**:选择 `-z1p` (默认的高压缩率,适合节省 NAS 空间)。
|
||||
6. **文件系统检查**:选择 `-sfsck` (跳过检查,节省时间)。
|
||||
7. **备份后操作**:选择 `Choose` (备份完后让你选重启还是关机)。
|
||||
|
||||
---
|
||||
|
||||
### 5. 开始克隆 (Ghost 进度条)
|
||||
1. Clonezilla 会在终端显示一大段确认信息。
|
||||
2. 输入 **y** 并回车 (确认开始)。
|
||||
3. 输入 **y** 并回车 (确认再次确认)。
|
||||
4. **等待**:此时会出现蓝红色的进度条,显示传输速度和剩余时间。
|
||||
|
||||
---
|
||||
### 6. 灾难恢复 (恢复步骤)
|
||||
如果哪天硬盘坏了,步骤几乎一样,只需在 **第 4 步** 的“具体操作”中:
|
||||
- 选择 `restoredisk` (还原镜像到磁盘)。
|
||||
- 选中你存在 NAS 上的那个镜像文件夹。
|
||||
---
|
||||
title:
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [backup, clonezilla, nas, rufus, ubuntu]
|
||||
---
|
||||
|
||||
|
||||
#clonezilla #ubuntu #backup #nas #rufus
|
||||
|
||||
```table-of-contents
|
||||
```
|
||||
|
||||
既然你已经准备好使用 **Clonezilla (再生龙)** 来实现类似 Ghost 的全盘镜像备份,以下是针对你**旧笔记本(源机)**备份到 **NAS(存储端)**的详细手把手步骤。
|
||||
|
||||
## 制作Clonezilla启动盘
|
||||
- **下载 ISO 镜像:** 访问 [Clonezilla 官网下载页](https://clonezilla.org/downloads.php)。
|
||||
- **CPU 架构:** 选择 `amd64`。
|
||||
- **发行版类型:** 选择 `debian`(更稳定)。
|
||||
- **文件类型:** 选择 `iso`。
|
||||
- **准备 U 盘:** 至少 1GB 容量,请提前备份 U 盘内数据,制作过程会**格式化** U 盘。
|
||||
- **启动 Rufus:** 插入 U 盘并运行 Rufus 软件。
|
||||
- **选择设备:** 在“设备”下拉菜单中确认选中了你的 U 盘。
|
||||
- **选择镜像:** 点击右侧的“选择”按钮,找到你下载好的 `clonezilla-live-xxxx-amd64.iso` 文件。
|
||||
- **分区方案与目标系统类型(关键):**
|
||||
- **针对较新的笔记本:** 分区方案选 `GPT`,目标系统选 `UEFI (非 CSM)`。
|
||||
- **针对很老的笔记本:** 如果你的笔记本不支持 UEFI,分区方案选 `MBR`,目标系统选 `BIOS (或 UEFI-CSM)`。
|
||||
- _建议:如果不确定,先尝试 GPT。_
|
||||
- **文件系统:** 保持默认的 `FAT32`(这是 UEFI 启动的标准格式)。
|
||||
- **开始制作:** 点击“开始”。
|
||||
- **模式选择(重点):**
|
||||
- Rufus 可能会弹出“检测到 ISOHybrid 镜像”的提示。
|
||||
- **请务必选择:“以 ISO 镜像模式写入 (推荐)”**。
|
||||
- 如果制作后无法启动,再尝试使用“DD 镜像模式”重新制作。
|
||||
10. **等待完成:** 进度条显示“准备就绪”后,即可拔掉 U 盘。
|
||||
|
||||
|
||||
> [!NOTE] 蓝色U盘
|
||||
> 蓝色U盘 32G 安装了Clonezilla
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 在旧笔记本上启动 Clonezilla
|
||||
|
||||
### 1. 启动与环境准备
|
||||
|
||||
1. 将制作好的 Rufus U 盘插入笔记本,重启并进入 **F9** (HP ZBook 常用) 启动菜单,选择 U 盘启动。
|
||||
2. 在 Clonezilla 初始菜单选择:`Clonezilla live (Default settings, VGA 800x600)`。
|
||||
3. **语言选择**:建议选择 `en_US.UTF-8 English` (英文界面更稳,报错容易查) 或 `zh_CN.UTF-8`。
|
||||
4. **键盘布局**:保持默认 `Keep default keyboard layout`。
|
||||
5. **启动 Clonezilla**:选择 `Start_Clonezilla`。
|
||||
|
||||
---
|
||||
|
||||
### 2. 设置备份模式
|
||||
|
||||
1. **模式选择**:选择 `device-image` (将硬盘备份为一个镜像文件,存放在 NAS 或外置硬盘上)。
|
||||
2. **挂载备份目录 (Mounting the repo)**:
|
||||
- 如果你使用 **NAS**:选择 `nfs_server` (推荐,Linux 兼容性最好)
|
||||
- 如果你使用 **外置硬盘**:插上硬盘,选择 `local_dev`。
|
||||
|
||||
---
|
||||
|
||||
### 3. 连接 NAS (以 NFS 为例)
|
||||
|
||||
如果你选择了 `nfs_server`,接下来的填空非常关键:
|
||||
1. **网卡配置**:选择 `dhcp` (确保笔记本连了网线)。
|
||||
2. **NFS 服务器 IP**:输入你 NAS 的 IP 地址 (例如 `192.168.3.17`)。
|
||||
3. **挂载路径**:输入你 NAS 上共享文件夹的绝对路径 (例如 `/volume2/backups`)。
|
||||
4. **确认挂载**:挂载成功后,你会看到磁盘空间信息。按下 **Enter** 继续。
|
||||
|
||||
---
|
||||
|
||||
### 4. 配置备份参数
|
||||
1. **向导模式**:选择 `Beginner` (初学者模式,默认参数已足够)。
|
||||
2. **具体操作**:选择 `savedisk` (保存整个本地磁盘)。
|
||||
3. **镜像名称**:它会自动生成一个日期格式的名称,你可以修改为 `Ubuntu_Server_Ghost_20251220`。
|
||||
4. **选择源磁盘**:选中你笔记本的内置硬盘 (通常是 `sda` 或 `nvme0n1`)。
|
||||
5. **压缩选项**:选择 `-z1p` (默认的高压缩率,适合节省 NAS 空间)。
|
||||
6. **文件系统检查**:选择 `-sfsck` (跳过检查,节省时间)。
|
||||
7. **备份后操作**:选择 `Choose` (备份完后让你选重启还是关机)。
|
||||
|
||||
---
|
||||
|
||||
### 5. 开始克隆 (Ghost 进度条)
|
||||
1. Clonezilla 会在终端显示一大段确认信息。
|
||||
2. 输入 **y** 并回车 (确认开始)。
|
||||
3. 输入 **y** 并回车 (确认再次确认)。
|
||||
4. **等待**:此时会出现蓝红色的进度条,显示传输速度和剩余时间。
|
||||
|
||||
---
|
||||
### 6. 灾难恢复 (恢复步骤)
|
||||
如果哪天硬盘坏了,步骤几乎一样,只需在 **第 4 步** 的“具体操作”中:
|
||||
- 选择 `restoredisk` (还原镜像到磁盘)。
|
||||
- 选中你存在 NAS 上的那个镜像文件夹。
|
||||
- 确认后,它会覆盖新硬盘的所有数据,完成后系统即刻复活。
|
||||
@@ -1,36 +1,36 @@
|
||||
---
|
||||
title:
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [apache, bi, docker, mysql, superset]
|
||||
---
|
||||
|
||||
#docker #superset #apache #mysql #bi
|
||||
|
||||
``` bash
|
||||
docker pull apache/superset:GHA-19524015706
|
||||
```
|
||||
|
||||
``` bash
|
||||
docker run -d -p 8777:8088 -e "SUPERSET_SECRET_KEY=mysuperset" --name superset apache/superset:GHA-19524015706
|
||||
```
|
||||
|
||||
``` bash
|
||||
docker exec -it superset superset fab create-admin --username admin --firstname Superset --lastname Admin --email admin@superset.com --password admin
|
||||
```
|
||||
|
||||
``` bash
|
||||
docker exec -it superset superset db upgrade
|
||||
```
|
||||
|
||||
``` bash
|
||||
docker exec -it superset superset load_examples
|
||||
```
|
||||
|
||||
``` bash
|
||||
docker exec -it superset superset init
|
||||
```
|
||||
|
||||
---
|
||||
title:
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [apache, bi, docker, mysql, superset]
|
||||
---
|
||||
|
||||
#docker #superset #apache #mysql #bi
|
||||
|
||||
``` bash
|
||||
docker pull apache/superset:GHA-19524015706
|
||||
```
|
||||
|
||||
``` bash
|
||||
docker run -d -p 8777:8088 -e "SUPERSET_SECRET_KEY=mysuperset" --name superset apache/superset:GHA-19524015706
|
||||
```
|
||||
|
||||
``` bash
|
||||
docker exec -it superset superset fab create-admin --username admin --firstname Superset --lastname Admin --email admin@superset.com --password admin
|
||||
```
|
||||
|
||||
``` bash
|
||||
docker exec -it superset superset db upgrade
|
||||
```
|
||||
|
||||
``` bash
|
||||
docker exec -it superset superset load_examples
|
||||
```
|
||||
|
||||
``` bash
|
||||
docker exec -it superset superset init
|
||||
```
|
||||
|
||||
|
||||
@@ -1,198 +1,198 @@
|
||||
---
|
||||
title: "Install WSL"
|
||||
source: "https://learn.microsoft.com/en-us/windows/wsl/install"
|
||||
author:
|
||||
- "[[GrantMeStrength]]"
|
||||
published:
|
||||
created: 2026-04-18
|
||||
description: "Install Windows Subsystem for Linux with the command, wsl --install. Use a Bash terminal on your Windows machine run by your preferred Linux distribution - Ubuntu, Debian, SUSE, Kali, Fedora, Pengwin, Alpine, and more are available."
|
||||
tags:
|
||||
- "clippings"
|
||||
---
|
||||
#wsl #ubuntu #windows
|
||||
## How to install Linux on Windows with WSL
|
||||
|
||||
Developers can access the power of both Windows and Linux at the same time on a Windows machine. The Windows Subsystem for Linux (WSL) lets developers install a Linux distribution (such as Ubuntu, OpenSUSE, Kali, Debian, Arch Linux, etc) and use Linux applications, utilities, and Bash command-line tools directly on Windows, unmodified, without the overhead of a traditional virtual machine or dualboot setup.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
You must be running Windows 10 version 2004 and higher (Build 19041 and higher) or Windows 11 to use the commands below. If you are on earlier versions please see [the manual install page](https://learn.microsoft.com/en-us/windows/wsl/install-manual).
|
||||
|
||||
## Install WSL command
|
||||
|
||||
You can now install everything you need to run WSL with a single command. Open PowerShell in **administrator** mode by right-clicking and selecting "Run as administrator", enter the wsl --install command, then restart your machine.
|
||||
|
||||
PowerShell
|
||||
|
||||
```powershell
|
||||
wsl --install
|
||||
```
|
||||
|
||||
This command will enable the features necessary to run WSL and install the Ubuntu distribution of Linux. ([This default distribution can be changed](https://learn.microsoft.com/en-us/windows/wsl/basic-commands#install)).
|
||||
|
||||
If you're running an older build, or just prefer not to use the install command and would like step-by-step directions, see **[WSL manual installation steps for older versions](https://learn.microsoft.com/en-us/windows/wsl/install-manual)**.
|
||||
|
||||
The first time you launch a newly installed Linux distribution, a console window will open and you'll be asked to wait for files to de-compress and be stored on your machine. All future launches should take less than a second.
|
||||
|
||||
## Change the default Linux distribution installed
|
||||
|
||||
By default, the installed Linux distribution will be Ubuntu. This can be changed using the `-d` flag.
|
||||
|
||||
- To change the distribution installed, enter:
|
||||
```powershell
|
||||
wsl.exe --install [Distro]
|
||||
```
|
||||
Replace `[Distro]` with the name of the distribution you would like to install.
|
||||
- To see a list of available Linux distributions available for download through the online store, enter:
|
||||
```powershell
|
||||
wsl.exe --list --online
|
||||
```
|
||||
|
||||
If you run into an issue during the install process, check the [installation section of the troubleshooting guide](https://learn.microsoft.com/en-us/windows/wsl/troubleshooting#installation-issues).
|
||||
|
||||
To install a Linux distribution that is not listed as available, you can [import any Linux distribution](https://learn.microsoft.com/en-us/windows/wsl/use-custom-distro) using a TAR file. Or in some cases you can install using an `.appx` file. You can also create your own [custom Linux distribution](https://learn.microsoft.com/en-us/windows/wsl/build-custom-distro) to use with WSL.
|
||||
|
||||
## Set up your Linux user info
|
||||
|
||||
Once you have installed WSL, you will need to create a user account and password for your newly installed Linux distribution. See the [Best practices for setting up a WSL development environment](https://learn.microsoft.com/en-us/windows/wsl/setup/environment#set-up-your-linux-username-and-password) guide to learn more.
|
||||
|
||||
## Set up and best practices
|
||||
|
||||
We recommend following our [Best practices for setting up a WSL development environment](https://learn.microsoft.com/en-us/windows/wsl/setup/environment) guide for a step-by-step walk-through of how to set up a user name and password for your installed Linux distribution(s), using basic WSL commands, installing and customizing Windows Terminal, set up for Git version control, code editing and debugging using the VS Code remote server, good practices for file storage, setting up a database, mounting an external drive, setting up GPU acceleration, and more.
|
||||
|
||||
## Check which version of WSL you are running
|
||||
|
||||
You can list your installed Linux distributions and check the version of WSL each is set to by entering the command:
|
||||
|
||||
PowerShell
|
||||
|
||||
```powershell
|
||||
wsl.exe --list --verbose
|
||||
```
|
||||
|
||||
To set the default version to WSL 1 or WSL 2 when a new Linux distribution is installed, use the command:
|
||||
|
||||
PowerShell
|
||||
|
||||
```powershell
|
||||
wsl.exe --set-default-version <1|2>
|
||||
```
|
||||
|
||||
To set the default Linux distribution used with the `wsl` command, enter:
|
||||
|
||||
PowerShell
|
||||
|
||||
```powershell
|
||||
wsl.exe --set-default <Distro>
|
||||
```
|
||||
|
||||
Replacing `<Distro>` with the name of the Linux distribution you would like to use. For example, from PowerShell, enter: `wsl -s Debian` to set the default distribution to Debian. Now running `wsl npm init` from Powershell will run the `npm init` command in Debian.
|
||||
|
||||
To run a specific wsl distribution from within PowerShell without changing your default distribution, use the command:
|
||||
|
||||
PowerShell
|
||||
|
||||
```powershell
|
||||
wsl.exe --distribution <DistroName>
|
||||
```
|
||||
|
||||
Replacing `<DistroName>` with the name of the distribution you want to use.
|
||||
|
||||
Learn more in the guide to [Basic commands for WSL](https://learn.microsoft.com/en-us/windows/wsl/basic-commands).
|
||||
|
||||
## Upgrade version from WSL 1 to WSL 2
|
||||
|
||||
New Linux installations, installed using the `wsl --install` command, will be set to WSL 2 by default.
|
||||
|
||||
To see whether your Linux distribution is set to WSL 1 or WSL 2, use the command: `wsl -l -v`. Upgrading from WSL 1 to WSL 2 or downgrading from WSL 2 to WSL 1 can be done using the following command:
|
||||
|
||||
PowerShell
|
||||
|
||||
```powershell
|
||||
wsl.exe --set-version <Distro> <1|2>
|
||||
```
|
||||
|
||||
Replacing `<Distro>` with the name of the Linux distribution that you want to update. For example, `wsl --set-version Ubuntu 2` will set your Ubuntu distribution to use WSL 2.
|
||||
|
||||
If you manually installed WSL prior to the `wsl --install` command being available, you may also need to [enable the virtual machine optional component](https://learn.microsoft.com/en-us/windows/wsl/install-manual#step-3---enable-virtual-machine-feature) used by WSL 2 and [install the kernel package](https://learn.microsoft.com/en-us/windows/wsl/install-manual#step-4---download-the-linux-kernel-update-package) if you haven't already done so.
|
||||
|
||||
To learn more, see the [Command reference for WSL](https://learn.microsoft.com/en-us/windows/wsl/basic-commands) for a list of WSL commands, [Comparing WSL 1 and WSL 2](https://learn.microsoft.com/en-us/windows/wsl/compare-versions) for guidance on which to use for your work scenario, or [Best practices for setting up a WSL development environment](https://learn.microsoft.com/en-us/windows/wsl/setup/environment) for general guidance on setting up a good development workflow with WSL.
|
||||
|
||||
## Ways to run multiple Linux distributions with WSL
|
||||
|
||||
WSL supports running as many different Linux distributions as you would like to install. This can include choosing distributions from the [Microsoft Store](ms-windows-store://collection?CollectionId=LinuxDistros), [importing a custom distribution](https://learn.microsoft.com/en-us/windows/wsl/use-custom-distro), or [building your own custom distribution](https://learn.microsoft.com/en-us/windows/wsl/build-custom-distro).
|
||||
|
||||
There are several ways to run your Linux distributions once installed:
|
||||
|
||||
- [From Windows Terminal](https://learn.microsoft.com/en-us/windows/terminal/install) ***(Recommended)*** Using Windows Terminal supports as many command lines as you would like to install and enables you to open them in multiple tabs or window panes and quickly switch between multiple Linux distributions or other command lines (PowerShell, Command Prompt, Azure CLI, etc). You can fully customize your terminal with unique color schemes, font styles, sizes, background images, and custom keyboard shortcuts. [Learn more.](https://learn.microsoft.com/en-us/windows/terminal)
|
||||
- You can directly open your Linux distribution by visiting the Windows Start menu and typing the name of your installed distributions. For example: "Ubuntu". This will open Ubuntu in its own console window.
|
||||
- From PowerShell, you can enter the name of your installed distribution. For example: `ubuntu`
|
||||
- From PowerShell, you can open your default Linux distribution inside your current command line, by entering: `wsl.exe`.
|
||||
- From PowerShell, you can use your default Linux distribution inside your current command line, without entering a new one, by entering:`wsl [command]`. Replacing `[command]` with a WSL command, such as: `wsl -l -v` to list installed distributions or `wsl pwd` to see where the current directory path is mounted in wsl. From PowerShell, the command `Get-Date` will provide the date from the Windows file system and `wsl date` will provide the date from the Linux file system.
|
||||
|
||||
The method you select should depend on what you're doing. If you've opened a WSL command line within a PowerShell window and want to exit, enter the command: `exit`.
|
||||
|
||||
## Want to try the latest WSL preview features?
|
||||
|
||||
Try the most recent features or updates to WSL by joining the [Windows Insiders Program](https://www.microsoft.com/windowsinsider/getting-started). Once you have joined Windows Insiders, you can choose the channel you would like to receive preview builds from inside the Windows settings menu to automatically receive any WSL updates or preview features associated with that build. You can choose from:
|
||||
|
||||
- Canary Channel:
|
||||
- Ideal for highly technical users.
|
||||
- Preview the latest platform changes early in the development cycle.
|
||||
- These builds can be unstable and are released with limited to no documentation.
|
||||
- Dev Channel:
|
||||
- Ideal for enthusiasts.
|
||||
- Access the latest Windows 11 preview builds as we incubate new ideas and develop long lead features.
|
||||
- There will be some rough edges and low stability.
|
||||
- Beta Channel:
|
||||
- Ideal for early adopters.
|
||||
- Preview and provide feedback on pre-release features for Windows 11 in a stable environment.
|
||||
- Release Preview Channel:
|
||||
- Ideal if you want to preview fixes and certain key features, plus get optional access to the next version of Windows before it’s generally available to the world.
|
||||
- This channel is also recommended for commercial users.
|
||||
|
||||
If you prefer not switching your Windows installation to a preview channel, you can still test the latest preview of WSL by issuing the command:
|
||||
|
||||
PowerShell
|
||||
|
||||
```powershell
|
||||
wsl.exe --update --pre-release
|
||||
```
|
||||
|
||||
For more information check the [WSL Releases page on GitHub](https://github.com/microsoft/WSL/releases).
|
||||
|
||||
## Next Steps
|
||||
|
||||
Let's explore the basic commands of WSL next.
|
||||
|
||||
[Basic WSL commands](https://learn.microsoft.com/en-us/windows/wsl/basic-commands)
|
||||
|
||||
## Offline install
|
||||
|
||||
To install WSL offline, you need to do these steps:
|
||||
|
||||
- Download and install latest WSL MSI package from [the GitHub releases page](https://github.com/microsoft/wsl/releases)
|
||||
- Open a PowerShell window with admin privileges and run `dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart` to enable the Virtual Machine Platform optional component. You will likely need to restart your computer for this to take effect.
|
||||
- Install a distribution via a.wsl file. You can find URLs to download these files at [DistributionInfo.json](https://github.com/microsoft/WSL/blob/master/distributions/DistributionInfo.json) for your chosen distro.
|
||||
|
||||
## Additional resources
|
||||
|
||||
- [Windows Command Line Blog: Install WSL with a single command now available in Windows 10 version 2004 and higher](https://devblogs.microsoft.com/commandline/install-wsl-with-a-single-command-now-available-in-windows-10-version-2004-and-higher/)
|
||||
|
||||
---
|
||||
|
||||
## Additional resources
|
||||
|
||||
Training
|
||||
|
||||
Module
|
||||
|
||||
[Developing in the Windows Subsystem for Linux with Visual Studio Code - Training](https://learn.microsoft.com/en-us/training/modules/developing-in-wsl/?source=recommendations)
|
||||
|
||||
In this module, you learn how to use the Windows Subsystem for Linux (WSL) with Visual Studio Code (VS Code). We explore the installation process and the basics of using WSL. Additionally, we install and utilize the Visual Studio Code WSL extension. Finally, we demonstrate how to debug and run Python code in VS Code within our WSL environment.
|
||||
|
||||
Certification
|
||||
|
||||
[Microsoft Certified: Windows Server Hybrid Administrator Associate - Certifications](https://learn.microsoft.com/en-us/credentials/certifications/windows-server-hybrid-administrator/?source=recommendations)
|
||||
|
||||
---
|
||||
title: "Install WSL"
|
||||
source: "https://learn.microsoft.com/en-us/windows/wsl/install"
|
||||
author:
|
||||
- "[[GrantMeStrength]]"
|
||||
published:
|
||||
created: 2026-04-18
|
||||
description: "Install Windows Subsystem for Linux with the command, wsl --install. Use a Bash terminal on your Windows machine run by your preferred Linux distribution - Ubuntu, Debian, SUSE, Kali, Fedora, Pengwin, Alpine, and more are available."
|
||||
tags:
|
||||
- "clippings"
|
||||
---
|
||||
#wsl #ubuntu #windows
|
||||
## How to install Linux on Windows with WSL
|
||||
|
||||
Developers can access the power of both Windows and Linux at the same time on a Windows machine. The Windows Subsystem for Linux (WSL) lets developers install a Linux distribution (such as Ubuntu, OpenSUSE, Kali, Debian, Arch Linux, etc) and use Linux applications, utilities, and Bash command-line tools directly on Windows, unmodified, without the overhead of a traditional virtual machine or dualboot setup.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
You must be running Windows 10 version 2004 and higher (Build 19041 and higher) or Windows 11 to use the commands below. If you are on earlier versions please see [the manual install page](https://learn.microsoft.com/en-us/windows/wsl/install-manual).
|
||||
|
||||
## Install WSL command
|
||||
|
||||
You can now install everything you need to run WSL with a single command. Open PowerShell in **administrator** mode by right-clicking and selecting "Run as administrator", enter the wsl --install command, then restart your machine.
|
||||
|
||||
PowerShell
|
||||
|
||||
```powershell
|
||||
wsl --install
|
||||
```
|
||||
|
||||
This command will enable the features necessary to run WSL and install the Ubuntu distribution of Linux. ([This default distribution can be changed](https://learn.microsoft.com/en-us/windows/wsl/basic-commands#install)).
|
||||
|
||||
If you're running an older build, or just prefer not to use the install command and would like step-by-step directions, see **[WSL manual installation steps for older versions](https://learn.microsoft.com/en-us/windows/wsl/install-manual)**.
|
||||
|
||||
The first time you launch a newly installed Linux distribution, a console window will open and you'll be asked to wait for files to de-compress and be stored on your machine. All future launches should take less than a second.
|
||||
|
||||
## Change the default Linux distribution installed
|
||||
|
||||
By default, the installed Linux distribution will be Ubuntu. This can be changed using the `-d` flag.
|
||||
|
||||
- To change the distribution installed, enter:
|
||||
```powershell
|
||||
wsl.exe --install [Distro]
|
||||
```
|
||||
Replace `[Distro]` with the name of the distribution you would like to install.
|
||||
- To see a list of available Linux distributions available for download through the online store, enter:
|
||||
```powershell
|
||||
wsl.exe --list --online
|
||||
```
|
||||
|
||||
If you run into an issue during the install process, check the [installation section of the troubleshooting guide](https://learn.microsoft.com/en-us/windows/wsl/troubleshooting#installation-issues).
|
||||
|
||||
To install a Linux distribution that is not listed as available, you can [import any Linux distribution](https://learn.microsoft.com/en-us/windows/wsl/use-custom-distro) using a TAR file. Or in some cases you can install using an `.appx` file. You can also create your own [custom Linux distribution](https://learn.microsoft.com/en-us/windows/wsl/build-custom-distro) to use with WSL.
|
||||
|
||||
## Set up your Linux user info
|
||||
|
||||
Once you have installed WSL, you will need to create a user account and password for your newly installed Linux distribution. See the [Best practices for setting up a WSL development environment](https://learn.microsoft.com/en-us/windows/wsl/setup/environment#set-up-your-linux-username-and-password) guide to learn more.
|
||||
|
||||
## Set up and best practices
|
||||
|
||||
We recommend following our [Best practices for setting up a WSL development environment](https://learn.microsoft.com/en-us/windows/wsl/setup/environment) guide for a step-by-step walk-through of how to set up a user name and password for your installed Linux distribution(s), using basic WSL commands, installing and customizing Windows Terminal, set up for Git version control, code editing and debugging using the VS Code remote server, good practices for file storage, setting up a database, mounting an external drive, setting up GPU acceleration, and more.
|
||||
|
||||
## Check which version of WSL you are running
|
||||
|
||||
You can list your installed Linux distributions and check the version of WSL each is set to by entering the command:
|
||||
|
||||
PowerShell
|
||||
|
||||
```powershell
|
||||
wsl.exe --list --verbose
|
||||
```
|
||||
|
||||
To set the default version to WSL 1 or WSL 2 when a new Linux distribution is installed, use the command:
|
||||
|
||||
PowerShell
|
||||
|
||||
```powershell
|
||||
wsl.exe --set-default-version <1|2>
|
||||
```
|
||||
|
||||
To set the default Linux distribution used with the `wsl` command, enter:
|
||||
|
||||
PowerShell
|
||||
|
||||
```powershell
|
||||
wsl.exe --set-default <Distro>
|
||||
```
|
||||
|
||||
Replacing `<Distro>` with the name of the Linux distribution you would like to use. For example, from PowerShell, enter: `wsl -s Debian` to set the default distribution to Debian. Now running `wsl npm init` from Powershell will run the `npm init` command in Debian.
|
||||
|
||||
To run a specific wsl distribution from within PowerShell without changing your default distribution, use the command:
|
||||
|
||||
PowerShell
|
||||
|
||||
```powershell
|
||||
wsl.exe --distribution <DistroName>
|
||||
```
|
||||
|
||||
Replacing `<DistroName>` with the name of the distribution you want to use.
|
||||
|
||||
Learn more in the guide to [Basic commands for WSL](https://learn.microsoft.com/en-us/windows/wsl/basic-commands).
|
||||
|
||||
## Upgrade version from WSL 1 to WSL 2
|
||||
|
||||
New Linux installations, installed using the `wsl --install` command, will be set to WSL 2 by default.
|
||||
|
||||
To see whether your Linux distribution is set to WSL 1 or WSL 2, use the command: `wsl -l -v`. Upgrading from WSL 1 to WSL 2 or downgrading from WSL 2 to WSL 1 can be done using the following command:
|
||||
|
||||
PowerShell
|
||||
|
||||
```powershell
|
||||
wsl.exe --set-version <Distro> <1|2>
|
||||
```
|
||||
|
||||
Replacing `<Distro>` with the name of the Linux distribution that you want to update. For example, `wsl --set-version Ubuntu 2` will set your Ubuntu distribution to use WSL 2.
|
||||
|
||||
If you manually installed WSL prior to the `wsl --install` command being available, you may also need to [enable the virtual machine optional component](https://learn.microsoft.com/en-us/windows/wsl/install-manual#step-3---enable-virtual-machine-feature) used by WSL 2 and [install the kernel package](https://learn.microsoft.com/en-us/windows/wsl/install-manual#step-4---download-the-linux-kernel-update-package) if you haven't already done so.
|
||||
|
||||
To learn more, see the [Command reference for WSL](https://learn.microsoft.com/en-us/windows/wsl/basic-commands) for a list of WSL commands, [Comparing WSL 1 and WSL 2](https://learn.microsoft.com/en-us/windows/wsl/compare-versions) for guidance on which to use for your work scenario, or [Best practices for setting up a WSL development environment](https://learn.microsoft.com/en-us/windows/wsl/setup/environment) for general guidance on setting up a good development workflow with WSL.
|
||||
|
||||
## Ways to run multiple Linux distributions with WSL
|
||||
|
||||
WSL supports running as many different Linux distributions as you would like to install. This can include choosing distributions from the [Microsoft Store](ms-windows-store://collection?CollectionId=LinuxDistros), [importing a custom distribution](https://learn.microsoft.com/en-us/windows/wsl/use-custom-distro), or [building your own custom distribution](https://learn.microsoft.com/en-us/windows/wsl/build-custom-distro).
|
||||
|
||||
There are several ways to run your Linux distributions once installed:
|
||||
|
||||
- [From Windows Terminal](https://learn.microsoft.com/en-us/windows/terminal/install) ***(Recommended)*** Using Windows Terminal supports as many command lines as you would like to install and enables you to open them in multiple tabs or window panes and quickly switch between multiple Linux distributions or other command lines (PowerShell, Command Prompt, Azure CLI, etc). You can fully customize your terminal with unique color schemes, font styles, sizes, background images, and custom keyboard shortcuts. [Learn more.](https://learn.microsoft.com/en-us/windows/terminal)
|
||||
- You can directly open your Linux distribution by visiting the Windows Start menu and typing the name of your installed distributions. For example: "Ubuntu". This will open Ubuntu in its own console window.
|
||||
- From PowerShell, you can enter the name of your installed distribution. For example: `ubuntu`
|
||||
- From PowerShell, you can open your default Linux distribution inside your current command line, by entering: `wsl.exe`.
|
||||
- From PowerShell, you can use your default Linux distribution inside your current command line, without entering a new one, by entering:`wsl [command]`. Replacing `[command]` with a WSL command, such as: `wsl -l -v` to list installed distributions or `wsl pwd` to see where the current directory path is mounted in wsl. From PowerShell, the command `Get-Date` will provide the date from the Windows file system and `wsl date` will provide the date from the Linux file system.
|
||||
|
||||
The method you select should depend on what you're doing. If you've opened a WSL command line within a PowerShell window and want to exit, enter the command: `exit`.
|
||||
|
||||
## Want to try the latest WSL preview features?
|
||||
|
||||
Try the most recent features or updates to WSL by joining the [Windows Insiders Program](https://www.microsoft.com/windowsinsider/getting-started). Once you have joined Windows Insiders, you can choose the channel you would like to receive preview builds from inside the Windows settings menu to automatically receive any WSL updates or preview features associated with that build. You can choose from:
|
||||
|
||||
- Canary Channel:
|
||||
- Ideal for highly technical users.
|
||||
- Preview the latest platform changes early in the development cycle.
|
||||
- These builds can be unstable and are released with limited to no documentation.
|
||||
- Dev Channel:
|
||||
- Ideal for enthusiasts.
|
||||
- Access the latest Windows 11 preview builds as we incubate new ideas and develop long lead features.
|
||||
- There will be some rough edges and low stability.
|
||||
- Beta Channel:
|
||||
- Ideal for early adopters.
|
||||
- Preview and provide feedback on pre-release features for Windows 11 in a stable environment.
|
||||
- Release Preview Channel:
|
||||
- Ideal if you want to preview fixes and certain key features, plus get optional access to the next version of Windows before it’s generally available to the world.
|
||||
- This channel is also recommended for commercial users.
|
||||
|
||||
If you prefer not switching your Windows installation to a preview channel, you can still test the latest preview of WSL by issuing the command:
|
||||
|
||||
PowerShell
|
||||
|
||||
```powershell
|
||||
wsl.exe --update --pre-release
|
||||
```
|
||||
|
||||
For more information check the [WSL Releases page on GitHub](https://github.com/microsoft/WSL/releases).
|
||||
|
||||
## Next Steps
|
||||
|
||||
Let's explore the basic commands of WSL next.
|
||||
|
||||
[Basic WSL commands](https://learn.microsoft.com/en-us/windows/wsl/basic-commands)
|
||||
|
||||
## Offline install
|
||||
|
||||
To install WSL offline, you need to do these steps:
|
||||
|
||||
- Download and install latest WSL MSI package from [the GitHub releases page](https://github.com/microsoft/wsl/releases)
|
||||
- Open a PowerShell window with admin privileges and run `dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart` to enable the Virtual Machine Platform optional component. You will likely need to restart your computer for this to take effect.
|
||||
- Install a distribution via a.wsl file. You can find URLs to download these files at [DistributionInfo.json](https://github.com/microsoft/WSL/blob/master/distributions/DistributionInfo.json) for your chosen distro.
|
||||
|
||||
## Additional resources
|
||||
|
||||
- [Windows Command Line Blog: Install WSL with a single command now available in Windows 10 version 2004 and higher](https://devblogs.microsoft.com/commandline/install-wsl-with-a-single-command-now-available-in-windows-10-version-2004-and-higher/)
|
||||
|
||||
---
|
||||
|
||||
## Additional resources
|
||||
|
||||
Training
|
||||
|
||||
Module
|
||||
|
||||
[Developing in the Windows Subsystem for Linux with Visual Studio Code - Training](https://learn.microsoft.com/en-us/training/modules/developing-in-wsl/?source=recommendations)
|
||||
|
||||
In this module, you learn how to use the Windows Subsystem for Linux (WSL) with Visual Studio Code (VS Code). We explore the installation process and the basics of using WSL. Additionally, we install and utilize the Visual Studio Code WSL extension. Finally, we demonstrate how to debug and run Python code in VS Code within our WSL environment.
|
||||
|
||||
Certification
|
||||
|
||||
[Microsoft Certified: Windows Server Hybrid Administrator Associate - Certifications](https://learn.microsoft.com/en-us/credentials/certifications/windows-server-hybrid-administrator/?source=recommendations)
|
||||
|
||||
As a Windows Server hybrid administrator, you integrate Windows Server environments with Azure services and manage Windows Server in on-premises networks.
|
||||
@@ -1,205 +1,205 @@
|
||||
---
|
||||
title: Linux 运维必会的 150 个命令,不熟练早晚得出事?
|
||||
source: https://mp.weixin.qq.com/s/_h2eTqPvduZctE0YarQtWw
|
||||
author: shenwei
|
||||
published:
|
||||
created: 2025-09-29
|
||||
description: 最全总结
|
||||
tags: [linux]
|
||||
---
|
||||
|
||||
|
||||
#linux
|
||||
|
||||
|
||||
|
||||
Linux 命令是对 Linux 系统进行管理的命令。对于 Linux 系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件, Linux 系统管理的命令是它正常运行的核心,与之前的 DOS 命令类似。
|
||||
|
||||
Linux 命令在系统中有两种类型:内置 Shell 命令和 Linux 命令。
|
||||
|
||||
| 命令 | 功能说明 |
|
||||
| ------------------------------- | -------------------------------------------------------------- |
|
||||
| **线上查询及帮助命令 (2 个)** | |
|
||||
| **man** | 查看命令帮助,命令的词典,更复杂的还有 info,但不常用。 |
|
||||
| **help** | 查看 Linux 内置命令的帮助,比如 cd 命令。 |
|
||||
| **文件和目录操作命令 (18 个)** | |
|
||||
| **ls** | 全拼 list,功能是列出目录的内容及其内容属性信息。 |
|
||||
| **cd** | 全拼 change directory,功能是从当前工作目录切换到指定的工作目录。 |
|
||||
| **cp** | 全拼 copy,其功能为复制文件或目录。 |
|
||||
| **find** | 查找的意思,用于查找目录及目录下的文件。 |
|
||||
| **mkdir** | 全拼 make directories,其功能是创建目录。 |
|
||||
| **mv** | 全拼 move,其功能是移动或重命名文件。 |
|
||||
| **pwd** | 全拼 print working directory,其功能是显示当前工作目录的绝对路径。 |
|
||||
| **rename** | 用于重命名文件。 |
|
||||
| **rm** | 全拼 remove,其功能是删除一个或多个文件或目录。 |
|
||||
| **rmdir** | 全拼 remove empty directories,功能是删除空目录。 |
|
||||
| **touch** | 创建新的空文件,改变已有文件的时间戳属性。 |
|
||||
| **tree** | 功能是以树形结构显示目录下的内容。 |
|
||||
| **basename** | 显示文件名或目录名。 |
|
||||
| **dirname** | 显示文件或目录路径。 |
|
||||
| **chattr** | 改变文件的扩展属性。 |
|
||||
| **lsattr** | 查看文件扩展属性。 |
|
||||
| **file** | 显示文件的类型。 |
|
||||
| **md5sum** | 计算和校验文件的 MD5 值。 |
|
||||
| **查看文件及内容处理命令(21 个)** | |
|
||||
| **cat** | 全拼 concatenate,功能是用于连接多个文件并且打印到屏幕输出或重定向到指定文件中。 |
|
||||
| **tac** | tac 是 cat 的反向拼写,因此命令的功能为反向显示文件内容。 |
|
||||
| **more** | 分页显示文件内容。 |
|
||||
| **less** | 分页显示文件内容,more 命令的相反用法。 |
|
||||
| **head** | 显示文件内容的头部。 |
|
||||
| **tail** | 显示文件内容的尾部。 |
|
||||
| **cut** | 将文件的每一行按指定分隔符分割并输出。 |
|
||||
| **split** | 分割文件为不同的小片段。 |
|
||||
| **paste** | 按行合并文件内容。 |
|
||||
| **sort** | 对文件的文本内容排序。 |
|
||||
| **uniq** | 去除重复行。oldboy |
|
||||
| **wc** | 统计文件的行数、单词数或字节数。 |
|
||||
| **iconv** | 转换文件的编码格式。 |
|
||||
| **dos2unix** | 将 DOS 格式文件转换成 UNIX 格式。 |
|
||||
| **diff** | 全拼 difference,比较文件的差异,常用于文本文件。 |
|
||||
| **vimdiff** | 命令行可视化文件比较工具,常用于文本文件。 |
|
||||
| **rev** | 反向输出文件内容。 |
|
||||
| **grep/egrep** | 过滤字符串,三剑客老三。 |
|
||||
| **join** | 按两个文件的相同字段合并。 |
|
||||
| **tr** | 替换或删除字符。 |
|
||||
| **vi/vim** | 命令行文本编辑器。 |
|
||||
| **文件压缩及解压缩命令(4 个)** | |
|
||||
| **tar** | 打包压缩。oldboy |
|
||||
| **unzip** | 解压文件。 |
|
||||
| **gzip** | gzip 压缩工具。 |
|
||||
| **zip** | 压缩工具。 |
|
||||
| **信息显示命令(11 个)** | |
|
||||
| **uname** | 显示操作系统相关信息的命令。 |
|
||||
| **hostname** | 显示或者设置当前系统的主机名。 |
|
||||
| **dmesg** | 显示开机信息,用于诊断系统故障。 |
|
||||
| **uptime** | 显示系统运行时间及负载。 |
|
||||
| **stat** | 显示文件或文件系统的状态。 |
|
||||
| **du** | 计算磁盘空间使用情况。 |
|
||||
| **df** | 报告文件系统磁盘空间的使用情况。 |
|
||||
| **top** | 实时显示系统资源使用情况。 |
|
||||
| **free** | 查看系统内存。 |
|
||||
| **date** | 显示与设置系统时间。 |
|
||||
| **cal** | 查看日历等时间信息。 |
|
||||
| **搜索文件命令(4 个)** | |
|
||||
| **which** | 查找二进制命令,按环境变量 PATH 路径查找。 |
|
||||
| **find** | 从磁盘遍历查找文件或目录。另外,搜索公众号GitHub猿后台回复“赚钱”,获取一份惊喜礼包。 |
|
||||
| **whereis** | 查找二进制命令,按环境变量 PATH 路径查找。 |
|
||||
| **locate** | 从数据库 (/var/lib/mlocate/mlocate.db) 查找命令,使用 updatedb 更新库。 |
|
||||
| **用户管理命令(10 个)** | |
|
||||
| **useradd** | 添加用户。 |
|
||||
| **usermod** | 修改系统已经存在的用户属性。 |
|
||||
| **userdel** | 删除用户。 |
|
||||
| **groupadd** | 添加用户组。 |
|
||||
| **passwd** | 修改用户密码。 |
|
||||
| **chage** | 修改用户密码有效期限。 |
|
||||
| **id** | 查看用户的 uid,gid 及归属的用户组。 |
|
||||
| **su** | 切换用户身份。 |
|
||||
| **visudo** | 编辑 / etc/sudoers 文件的专属命令。 |
|
||||
| **sudo** | 以另外一个用户身份(默认 root 用户)执行事先在 sudoers 文件允许的命令。 |
|
||||
| **基础网络操作命令(11 个)** | |
|
||||
| **telnet** | 使用 TELNET 协议远程登录。 |
|
||||
| **ssh** | 使用 SSH 加密协议远程登录。 |
|
||||
| **scp** | 全拼 secure copy,用于不同主机之间复制文件。 |
|
||||
| **wget** | 命令行下载文件。 |
|
||||
| **ping** | 测试主机之间网络的连通性。 |
|
||||
| **route** | 显示和设置 linux 系统的路由表。 |
|
||||
| **ifconfig** | 查看、配置、启用或禁用网络接口的命令。 |
|
||||
| **ifup** | 启动网卡。 |
|
||||
| **ifdown** | 关闭网卡。 |
|
||||
| **netstat** | 查看网络状态。 |
|
||||
| **ss** | 查看网络状态。 |
|
||||
| **深入网络操作命令(9 个)** | |
|
||||
| **nmap** | 网络扫描命令。 |
|
||||
| **lsof** | 全名 list open files,也就是列举系统中已经被打开的文件。 |
|
||||
| **mail** | 发送和接收邮件。 |
|
||||
| **mutt** | 邮件管理命令。 |
|
||||
| **nslookup** | 交互式查询互联网 DNS 服务器的命令。 |
|
||||
| **dig** | 查找 DNS 解析过程。 |
|
||||
| **host** | 查询 DNS 的命令。 |
|
||||
| **traceroute** | 追踪数据传输路由状况。 |
|
||||
| **tcpdump** | 命令行的抓包工具。 |
|
||||
| **有关磁盘与文件系统的命令(16 个)** | |
|
||||
| **mount** | 挂载文件系统。 |
|
||||
| **umount** | 卸载文件系统。 |
|
||||
| **fsck** | 检查并修复 Linux 文件系统。 |
|
||||
| **dd** | 转换或复制文件。 |
|
||||
| **dumpe2fs** | 导出 ext2/ext3/ext4 文件系统信息。 |
|
||||
| **dump** | ext2/3/4 文件系统备份工具。 |
|
||||
| **fdisk** | 磁盘分区命令,适用于 2TB 以下磁盘分区。 |
|
||||
| **parted** | 磁盘分区命令,没有磁盘大小限制,常用于 2TB 以下磁盘分区。 |
|
||||
| **mkfs** | 格式化创建 Linux 文件系统。 |
|
||||
| **partprobe** | 更新内核的硬盘分区表信息。 |
|
||||
| **e2fsck** | 检查 ext2/ext3/ext4 类型文件系统。 |
|
||||
| **mkswap** | 创建 Linux 交换分区。 |
|
||||
| **swapon** | 启用交换分区。 |
|
||||
| **swapoff** | 关闭交换分区。 |
|
||||
| **sync** | 将内存缓冲区内的数据写入磁盘。 |
|
||||
| **resize2fs** | 调整 ext2/ext3/ext4 文件系统大小。 |
|
||||
| **系统权限及用户授权相关命令(4 个)** | |
|
||||
| **chmod** | 改变文件或目录权限。 |
|
||||
| **chown** | 改变文件或目录的属主和属组。 |
|
||||
| **chgrp** | 更改文件用户组。 |
|
||||
| **umask** | 显示或设置权限掩码。 |
|
||||
| **查看系统用户登陆信息的命令(7 个)** | |
|
||||
| **whoami** | 显示当前有效的用户名称,相当于执行 id -un 命令。 |
|
||||
| **who** | 显示目前登录系统的用户信息。 |
|
||||
| **w** | 显示已经登陆系统的用户列表,并显示用户正在执行的指令。 |
|
||||
| **last** | 显示登入系统的用户。 |
|
||||
| **lastlog** | 显示系统中所有用户最近一次登录信息。 |
|
||||
| **users** | 显示当前登录系统的所有用户的用户列表。 |
|
||||
| **finger** | 查找并显示用户信息。 |
|
||||
| **内置命令及其它(19 个)** | |
|
||||
| **echo** | 打印变量,或直接输出指定的字符串 |
|
||||
| **printf** | 将结果格式化输出到标准输出。 |
|
||||
| **rpm** | 管理 rpm 包的命令。 |
|
||||
| **yum** | 自动化简单化地管理 rpm 包的命令。 |
|
||||
| **watch** | 周期性的执行给定的命令,并将命令的输出以全屏方式显示。 |
|
||||
| **alias** | 设置系统别名。 |
|
||||
| **unalias** | 取消系统别名。 |
|
||||
| **date** | 查看或设置系统时间。 |
|
||||
| **clear** | 清除屏幕,简称清屏。 |
|
||||
| **history** | 查看命令执行的历史纪录。 |
|
||||
| **eject** | 弹出光驱。 |
|
||||
| **time** | 计算命令执行时间。 |
|
||||
| **nc** | 功能强大的网络工具。 |
|
||||
| **xargs** | 将标准输入转换成命令行参数。 |
|
||||
| **exec** | 调用并执行指令的命令。 |
|
||||
| **export** | 设置或者显示环境变量。 |
|
||||
| **unset** | 删除变量或函数。 |
|
||||
| **type** | 用于判断另外一个命令是否是内置命令。 |
|
||||
| **bc** | 命令行科学计算器 |
|
||||
| **系统管理与性能监视命令 (9 个)** | ``` 牛逼啊!接私活必备的 N 个开源项目!赶快收藏 ``` |
|
||||
| **chkconfig** | 管理 Linux 系统开机启动项。 |
|
||||
| **vmstat** | 虚拟内存统计。 |
|
||||
| **mpstat** | 显示各个可用 CPU 的状态统计。 |
|
||||
| **iostat** | 统计系统 IO。 |
|
||||
| **sar** | 全面地获取系统的 CPU、运行队列、磁盘 I/O、分页(交换区)、内存、 CPU 中断和网络等性能数据。 |
|
||||
| **ipcs** | 用于报告 Linux 中进程间通信设施的状态,显示的信息包括消息列表、共享内存和信号量的信息。 |
|
||||
| **ipcrm** | 用来删除一个或更多的消息队列、信号量集或者共享内存标识。 |
|
||||
| **strace** | 用于诊断、调试 Linux 用户空间跟踪器。我们用它来监控用户空间进程和内核的交互,比如系统调用、信号传递、进程状态变更等。 |
|
||||
| **ltrace** | 命令会跟踪进程的库函数调用, 它会显现出哪个库函数被调用。 |
|
||||
| **关机 / 重启 / 注销和查看系统信息的命令(6 个)** | |
|
||||
| **shutdown** | 关机。 |
|
||||
| **halt** | 关机。 |
|
||||
| **poweroff** | 关闭电源。 |
|
||||
| **logout** | 退出当前登录的 Shell。 |
|
||||
| **exit** | 退出当前登录的 Shell。 |
|
||||
| **Ctrl+d** | 退出当前登录的 Shell 的快捷键。 |
|
||||
| **进程管理相关命令(15 个)** | |
|
||||
| **bg** | 将一个在后台暂停的命令,变成继续执行 (在后台执行)。 |
|
||||
| **fg** | 将后台中的命令调至前台继续运行。 |
|
||||
| **jobs** | 查看当前有多少在后台运行的命令。 |
|
||||
| **kill** | 终止进程。 |
|
||||
| **killall** | 通过进程名终止进程。 |
|
||||
| **pkill** | 通过进程名终止进程。 |
|
||||
| **crontab** | 定时任务命令。 |
|
||||
| **ps** | 显示进程的快照。 |
|
||||
| **pstree** | 树形显示进程。 |
|
||||
| **nice/renice** | 调整程序运行的优先级。 |
|
||||
| **nohup** | 忽略挂起信号运行指定的命令。 |
|
||||
| **pgrep** | 查找匹配条件的进程。 |
|
||||
| **runlevel** | 查看系统当前运行级别。 |
|
||||
| **init** | 切换运行级别。 |
|
||||
| **service** | 启动、停止、重新启动和关闭系统服务,还可以显示所有系统服务的当前状态。 |
|
||||
|
||||
---
|
||||
title: Linux 运维必会的 150 个命令,不熟练早晚得出事?
|
||||
source: https://mp.weixin.qq.com/s/_h2eTqPvduZctE0YarQtWw
|
||||
author: shenwei
|
||||
published:
|
||||
created: 2025-09-29
|
||||
description: 最全总结
|
||||
tags: [linux]
|
||||
---
|
||||
|
||||
|
||||
#linux
|
||||
|
||||
|
||||
|
||||
Linux 命令是对 Linux 系统进行管理的命令。对于 Linux 系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件, Linux 系统管理的命令是它正常运行的核心,与之前的 DOS 命令类似。
|
||||
|
||||
Linux 命令在系统中有两种类型:内置 Shell 命令和 Linux 命令。
|
||||
|
||||
| 命令 | 功能说明 |
|
||||
| ------------------------------- | -------------------------------------------------------------- |
|
||||
| **线上查询及帮助命令 (2 个)** | |
|
||||
| **man** | 查看命令帮助,命令的词典,更复杂的还有 info,但不常用。 |
|
||||
| **help** | 查看 Linux 内置命令的帮助,比如 cd 命令。 |
|
||||
| **文件和目录操作命令 (18 个)** | |
|
||||
| **ls** | 全拼 list,功能是列出目录的内容及其内容属性信息。 |
|
||||
| **cd** | 全拼 change directory,功能是从当前工作目录切换到指定的工作目录。 |
|
||||
| **cp** | 全拼 copy,其功能为复制文件或目录。 |
|
||||
| **find** | 查找的意思,用于查找目录及目录下的文件。 |
|
||||
| **mkdir** | 全拼 make directories,其功能是创建目录。 |
|
||||
| **mv** | 全拼 move,其功能是移动或重命名文件。 |
|
||||
| **pwd** | 全拼 print working directory,其功能是显示当前工作目录的绝对路径。 |
|
||||
| **rename** | 用于重命名文件。 |
|
||||
| **rm** | 全拼 remove,其功能是删除一个或多个文件或目录。 |
|
||||
| **rmdir** | 全拼 remove empty directories,功能是删除空目录。 |
|
||||
| **touch** | 创建新的空文件,改变已有文件的时间戳属性。 |
|
||||
| **tree** | 功能是以树形结构显示目录下的内容。 |
|
||||
| **basename** | 显示文件名或目录名。 |
|
||||
| **dirname** | 显示文件或目录路径。 |
|
||||
| **chattr** | 改变文件的扩展属性。 |
|
||||
| **lsattr** | 查看文件扩展属性。 |
|
||||
| **file** | 显示文件的类型。 |
|
||||
| **md5sum** | 计算和校验文件的 MD5 值。 |
|
||||
| **查看文件及内容处理命令(21 个)** | |
|
||||
| **cat** | 全拼 concatenate,功能是用于连接多个文件并且打印到屏幕输出或重定向到指定文件中。 |
|
||||
| **tac** | tac 是 cat 的反向拼写,因此命令的功能为反向显示文件内容。 |
|
||||
| **more** | 分页显示文件内容。 |
|
||||
| **less** | 分页显示文件内容,more 命令的相反用法。 |
|
||||
| **head** | 显示文件内容的头部。 |
|
||||
| **tail** | 显示文件内容的尾部。 |
|
||||
| **cut** | 将文件的每一行按指定分隔符分割并输出。 |
|
||||
| **split** | 分割文件为不同的小片段。 |
|
||||
| **paste** | 按行合并文件内容。 |
|
||||
| **sort** | 对文件的文本内容排序。 |
|
||||
| **uniq** | 去除重复行。oldboy |
|
||||
| **wc** | 统计文件的行数、单词数或字节数。 |
|
||||
| **iconv** | 转换文件的编码格式。 |
|
||||
| **dos2unix** | 将 DOS 格式文件转换成 UNIX 格式。 |
|
||||
| **diff** | 全拼 difference,比较文件的差异,常用于文本文件。 |
|
||||
| **vimdiff** | 命令行可视化文件比较工具,常用于文本文件。 |
|
||||
| **rev** | 反向输出文件内容。 |
|
||||
| **grep/egrep** | 过滤字符串,三剑客老三。 |
|
||||
| **join** | 按两个文件的相同字段合并。 |
|
||||
| **tr** | 替换或删除字符。 |
|
||||
| **vi/vim** | 命令行文本编辑器。 |
|
||||
| **文件压缩及解压缩命令(4 个)** | |
|
||||
| **tar** | 打包压缩。oldboy |
|
||||
| **unzip** | 解压文件。 |
|
||||
| **gzip** | gzip 压缩工具。 |
|
||||
| **zip** | 压缩工具。 |
|
||||
| **信息显示命令(11 个)** | |
|
||||
| **uname** | 显示操作系统相关信息的命令。 |
|
||||
| **hostname** | 显示或者设置当前系统的主机名。 |
|
||||
| **dmesg** | 显示开机信息,用于诊断系统故障。 |
|
||||
| **uptime** | 显示系统运行时间及负载。 |
|
||||
| **stat** | 显示文件或文件系统的状态。 |
|
||||
| **du** | 计算磁盘空间使用情况。 |
|
||||
| **df** | 报告文件系统磁盘空间的使用情况。 |
|
||||
| **top** | 实时显示系统资源使用情况。 |
|
||||
| **free** | 查看系统内存。 |
|
||||
| **date** | 显示与设置系统时间。 |
|
||||
| **cal** | 查看日历等时间信息。 |
|
||||
| **搜索文件命令(4 个)** | |
|
||||
| **which** | 查找二进制命令,按环境变量 PATH 路径查找。 |
|
||||
| **find** | 从磁盘遍历查找文件或目录。另外,搜索公众号GitHub猿后台回复“赚钱”,获取一份惊喜礼包。 |
|
||||
| **whereis** | 查找二进制命令,按环境变量 PATH 路径查找。 |
|
||||
| **locate** | 从数据库 (/var/lib/mlocate/mlocate.db) 查找命令,使用 updatedb 更新库。 |
|
||||
| **用户管理命令(10 个)** | |
|
||||
| **useradd** | 添加用户。 |
|
||||
| **usermod** | 修改系统已经存在的用户属性。 |
|
||||
| **userdel** | 删除用户。 |
|
||||
| **groupadd** | 添加用户组。 |
|
||||
| **passwd** | 修改用户密码。 |
|
||||
| **chage** | 修改用户密码有效期限。 |
|
||||
| **id** | 查看用户的 uid,gid 及归属的用户组。 |
|
||||
| **su** | 切换用户身份。 |
|
||||
| **visudo** | 编辑 / etc/sudoers 文件的专属命令。 |
|
||||
| **sudo** | 以另外一个用户身份(默认 root 用户)执行事先在 sudoers 文件允许的命令。 |
|
||||
| **基础网络操作命令(11 个)** | |
|
||||
| **telnet** | 使用 TELNET 协议远程登录。 |
|
||||
| **ssh** | 使用 SSH 加密协议远程登录。 |
|
||||
| **scp** | 全拼 secure copy,用于不同主机之间复制文件。 |
|
||||
| **wget** | 命令行下载文件。 |
|
||||
| **ping** | 测试主机之间网络的连通性。 |
|
||||
| **route** | 显示和设置 linux 系统的路由表。 |
|
||||
| **ifconfig** | 查看、配置、启用或禁用网络接口的命令。 |
|
||||
| **ifup** | 启动网卡。 |
|
||||
| **ifdown** | 关闭网卡。 |
|
||||
| **netstat** | 查看网络状态。 |
|
||||
| **ss** | 查看网络状态。 |
|
||||
| **深入网络操作命令(9 个)** | |
|
||||
| **nmap** | 网络扫描命令。 |
|
||||
| **lsof** | 全名 list open files,也就是列举系统中已经被打开的文件。 |
|
||||
| **mail** | 发送和接收邮件。 |
|
||||
| **mutt** | 邮件管理命令。 |
|
||||
| **nslookup** | 交互式查询互联网 DNS 服务器的命令。 |
|
||||
| **dig** | 查找 DNS 解析过程。 |
|
||||
| **host** | 查询 DNS 的命令。 |
|
||||
| **traceroute** | 追踪数据传输路由状况。 |
|
||||
| **tcpdump** | 命令行的抓包工具。 |
|
||||
| **有关磁盘与文件系统的命令(16 个)** | |
|
||||
| **mount** | 挂载文件系统。 |
|
||||
| **umount** | 卸载文件系统。 |
|
||||
| **fsck** | 检查并修复 Linux 文件系统。 |
|
||||
| **dd** | 转换或复制文件。 |
|
||||
| **dumpe2fs** | 导出 ext2/ext3/ext4 文件系统信息。 |
|
||||
| **dump** | ext2/3/4 文件系统备份工具。 |
|
||||
| **fdisk** | 磁盘分区命令,适用于 2TB 以下磁盘分区。 |
|
||||
| **parted** | 磁盘分区命令,没有磁盘大小限制,常用于 2TB 以下磁盘分区。 |
|
||||
| **mkfs** | 格式化创建 Linux 文件系统。 |
|
||||
| **partprobe** | 更新内核的硬盘分区表信息。 |
|
||||
| **e2fsck** | 检查 ext2/ext3/ext4 类型文件系统。 |
|
||||
| **mkswap** | 创建 Linux 交换分区。 |
|
||||
| **swapon** | 启用交换分区。 |
|
||||
| **swapoff** | 关闭交换分区。 |
|
||||
| **sync** | 将内存缓冲区内的数据写入磁盘。 |
|
||||
| **resize2fs** | 调整 ext2/ext3/ext4 文件系统大小。 |
|
||||
| **系统权限及用户授权相关命令(4 个)** | |
|
||||
| **chmod** | 改变文件或目录权限。 |
|
||||
| **chown** | 改变文件或目录的属主和属组。 |
|
||||
| **chgrp** | 更改文件用户组。 |
|
||||
| **umask** | 显示或设置权限掩码。 |
|
||||
| **查看系统用户登陆信息的命令(7 个)** | |
|
||||
| **whoami** | 显示当前有效的用户名称,相当于执行 id -un 命令。 |
|
||||
| **who** | 显示目前登录系统的用户信息。 |
|
||||
| **w** | 显示已经登陆系统的用户列表,并显示用户正在执行的指令。 |
|
||||
| **last** | 显示登入系统的用户。 |
|
||||
| **lastlog** | 显示系统中所有用户最近一次登录信息。 |
|
||||
| **users** | 显示当前登录系统的所有用户的用户列表。 |
|
||||
| **finger** | 查找并显示用户信息。 |
|
||||
| **内置命令及其它(19 个)** | |
|
||||
| **echo** | 打印变量,或直接输出指定的字符串 |
|
||||
| **printf** | 将结果格式化输出到标准输出。 |
|
||||
| **rpm** | 管理 rpm 包的命令。 |
|
||||
| **yum** | 自动化简单化地管理 rpm 包的命令。 |
|
||||
| **watch** | 周期性的执行给定的命令,并将命令的输出以全屏方式显示。 |
|
||||
| **alias** | 设置系统别名。 |
|
||||
| **unalias** | 取消系统别名。 |
|
||||
| **date** | 查看或设置系统时间。 |
|
||||
| **clear** | 清除屏幕,简称清屏。 |
|
||||
| **history** | 查看命令执行的历史纪录。 |
|
||||
| **eject** | 弹出光驱。 |
|
||||
| **time** | 计算命令执行时间。 |
|
||||
| **nc** | 功能强大的网络工具。 |
|
||||
| **xargs** | 将标准输入转换成命令行参数。 |
|
||||
| **exec** | 调用并执行指令的命令。 |
|
||||
| **export** | 设置或者显示环境变量。 |
|
||||
| **unset** | 删除变量或函数。 |
|
||||
| **type** | 用于判断另外一个命令是否是内置命令。 |
|
||||
| **bc** | 命令行科学计算器 |
|
||||
| **系统管理与性能监视命令 (9 个)** | ``` 牛逼啊!接私活必备的 N 个开源项目!赶快收藏 ``` |
|
||||
| **chkconfig** | 管理 Linux 系统开机启动项。 |
|
||||
| **vmstat** | 虚拟内存统计。 |
|
||||
| **mpstat** | 显示各个可用 CPU 的状态统计。 |
|
||||
| **iostat** | 统计系统 IO。 |
|
||||
| **sar** | 全面地获取系统的 CPU、运行队列、磁盘 I/O、分页(交换区)、内存、 CPU 中断和网络等性能数据。 |
|
||||
| **ipcs** | 用于报告 Linux 中进程间通信设施的状态,显示的信息包括消息列表、共享内存和信号量的信息。 |
|
||||
| **ipcrm** | 用来删除一个或更多的消息队列、信号量集或者共享内存标识。 |
|
||||
| **strace** | 用于诊断、调试 Linux 用户空间跟踪器。我们用它来监控用户空间进程和内核的交互,比如系统调用、信号传递、进程状态变更等。 |
|
||||
| **ltrace** | 命令会跟踪进程的库函数调用, 它会显现出哪个库函数被调用。 |
|
||||
| **关机 / 重启 / 注销和查看系统信息的命令(6 个)** | |
|
||||
| **shutdown** | 关机。 |
|
||||
| **halt** | 关机。 |
|
||||
| **poweroff** | 关闭电源。 |
|
||||
| **logout** | 退出当前登录的 Shell。 |
|
||||
| **exit** | 退出当前登录的 Shell。 |
|
||||
| **Ctrl+d** | 退出当前登录的 Shell 的快捷键。 |
|
||||
| **进程管理相关命令(15 个)** | |
|
||||
| **bg** | 将一个在后台暂停的命令,变成继续执行 (在后台执行)。 |
|
||||
| **fg** | 将后台中的命令调至前台继续运行。 |
|
||||
| **jobs** | 查看当前有多少在后台运行的命令。 |
|
||||
| **kill** | 终止进程。 |
|
||||
| **killall** | 通过进程名终止进程。 |
|
||||
| **pkill** | 通过进程名终止进程。 |
|
||||
| **crontab** | 定时任务命令。 |
|
||||
| **ps** | 显示进程的快照。 |
|
||||
| **pstree** | 树形显示进程。 |
|
||||
| **nice/renice** | 调整程序运行的优先级。 |
|
||||
| **nohup** | 忽略挂起信号运行指定的命令。 |
|
||||
| **pgrep** | 查找匹配条件的进程。 |
|
||||
| **runlevel** | 查看系统当前运行级别。 |
|
||||
| **init** | 切换运行级别。 |
|
||||
| **service** | 启动、停止、重新启动和关闭系统服务,还可以显示所有系统服务的当前状态。 |
|
||||
|
||||
[[🟠如何判别你的Linux 服务器是 x64(也就是 x86_64)还是 ARM64]]
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,112 +1,112 @@
|
||||
---
|
||||
title: Mac Mini 服务器配置:防止自动锁屏与睡眠
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: []
|
||||
---
|
||||
|
||||
# Mac Mini 服务器配置:防止自动锁屏与睡眠
|
||||
|
||||
本文档记录如何配置 Mac Mini 作为服务器使用时,防止自动锁屏和睡眠,确保可以通过远程桌面(如 RustDesk)持续访问。
|
||||
|
||||
## 问题描述
|
||||
|
||||
Mac Mini 作为服务器使用时,关闭显示器后会自动锁屏或进入睡眠状态,导致远程访问软件(如 RustDesk、VNC)无法连接,需要物理到主机上输入密码解锁。
|
||||
|
||||
## 解决方案
|
||||
|
||||
### 方法:关闭所有自动睡眠与锁屏设置
|
||||
|
||||
在终端中运行以下命令:
|
||||
|
||||
```bash
|
||||
sudo pmset -a sleep 0
|
||||
sudo pmset -a displaysleep 0
|
||||
sudo pmset -a standby 0
|
||||
sudo pmset -a hibernatemode 0
|
||||
sudo pmset -a womp 1
|
||||
```
|
||||
|
||||
#### 命令解释
|
||||
|
||||
| 命令 | 作用 |
|
||||
|------|------|
|
||||
| `pmset -a sleep 0` | 禁止系统睡眠 |
|
||||
| `pmset -a displaysleep 0` | 禁止显示器关闭 |
|
||||
| `pmset -a standby 0` | 禁止待机模式 |
|
||||
| `pmset -a hibernatemode 0` | 禁止休眠(内存保存到磁盘) |
|
||||
| `pmset -a womp 1` | 启用网络唤醒(WOL) |
|
||||
|
||||
#### 参数说明
|
||||
|
||||
- `-a`:应用于所有电源模式(电池和电源适配器)
|
||||
- `-b`:仅电池模式
|
||||
- `-c`:仅电源适配器模式
|
||||
|
||||
---
|
||||
|
||||
## 可选:使用 caffeinate 保持唤醒
|
||||
|
||||
如果需要临时保持唤醒状态(不修改系统设置),可以使用 `caffeinate` 工具:
|
||||
|
||||
### 安装
|
||||
|
||||
```bash
|
||||
brew install caffeinate
|
||||
```
|
||||
|
||||
### 使用
|
||||
|
||||
```bash
|
||||
# 保持唤醒(按 Ctrl+C 停止)
|
||||
caffeinate -d -i -s
|
||||
```
|
||||
|
||||
#### 参数说明
|
||||
|
||||
| 参数 | 作用 |
|
||||
|------|------|
|
||||
| `-d` | 防止显示器睡眠 |
|
||||
| `-i` | 防止系统空闲时睡眠 |
|
||||
| `-s` | 防止系统睡眠 |
|
||||
| `-u` | 模拟用户活动(防止睡眠) |
|
||||
|
||||
---
|
||||
|
||||
## 验证当前电源设置
|
||||
|
||||
查看当前电源管理设置:
|
||||
|
||||
```bash
|
||||
pmset -g
|
||||
```
|
||||
|
||||
查看具体睡眠设置:
|
||||
|
||||
```bash
|
||||
pmset -g sleep
|
||||
pmset -g displaysleep
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. **sudo 权限**:运行 pmset 命令需要管理员权限
|
||||
2. **功耗**:关闭睡眠会增加功耗,适合始终接电的服务器场景
|
||||
3. **网络唤醒**:启用 WOL 后,可以通过其他设备远程唤醒 Mac Mini
|
||||
4. **安全性**:如果 Mac Mini 放在不安全的地方,建议设置强密码和防火墙
|
||||
|
||||
---
|
||||
|
||||
## 相关链接
|
||||
|
||||
- Apple pmset 官方文档:https://support.apple.com/zh-cn/HT201685
|
||||
|
||||
---
|
||||
|
||||
*文档创建日期:2026-03-15*
|
||||
*最后更新:2026-03-15*
|
||||
---
|
||||
title: Mac Mini 服务器配置:防止自动锁屏与睡眠
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: []
|
||||
---
|
||||
|
||||
# Mac Mini 服务器配置:防止自动锁屏与睡眠
|
||||
|
||||
本文档记录如何配置 Mac Mini 作为服务器使用时,防止自动锁屏和睡眠,确保可以通过远程桌面(如 RustDesk)持续访问。
|
||||
|
||||
## 问题描述
|
||||
|
||||
Mac Mini 作为服务器使用时,关闭显示器后会自动锁屏或进入睡眠状态,导致远程访问软件(如 RustDesk、VNC)无法连接,需要物理到主机上输入密码解锁。
|
||||
|
||||
## 解决方案
|
||||
|
||||
### 方法:关闭所有自动睡眠与锁屏设置
|
||||
|
||||
在终端中运行以下命令:
|
||||
|
||||
```bash
|
||||
sudo pmset -a sleep 0
|
||||
sudo pmset -a displaysleep 0
|
||||
sudo pmset -a standby 0
|
||||
sudo pmset -a hibernatemode 0
|
||||
sudo pmset -a womp 1
|
||||
```
|
||||
|
||||
#### 命令解释
|
||||
|
||||
| 命令 | 作用 |
|
||||
|------|------|
|
||||
| `pmset -a sleep 0` | 禁止系统睡眠 |
|
||||
| `pmset -a displaysleep 0` | 禁止显示器关闭 |
|
||||
| `pmset -a standby 0` | 禁止待机模式 |
|
||||
| `pmset -a hibernatemode 0` | 禁止休眠(内存保存到磁盘) |
|
||||
| `pmset -a womp 1` | 启用网络唤醒(WOL) |
|
||||
|
||||
#### 参数说明
|
||||
|
||||
- `-a`:应用于所有电源模式(电池和电源适配器)
|
||||
- `-b`:仅电池模式
|
||||
- `-c`:仅电源适配器模式
|
||||
|
||||
---
|
||||
|
||||
## 可选:使用 caffeinate 保持唤醒
|
||||
|
||||
如果需要临时保持唤醒状态(不修改系统设置),可以使用 `caffeinate` 工具:
|
||||
|
||||
### 安装
|
||||
|
||||
```bash
|
||||
brew install caffeinate
|
||||
```
|
||||
|
||||
### 使用
|
||||
|
||||
```bash
|
||||
# 保持唤醒(按 Ctrl+C 停止)
|
||||
caffeinate -d -i -s
|
||||
```
|
||||
|
||||
#### 参数说明
|
||||
|
||||
| 参数 | 作用 |
|
||||
|------|------|
|
||||
| `-d` | 防止显示器睡眠 |
|
||||
| `-i` | 防止系统空闲时睡眠 |
|
||||
| `-s` | 防止系统睡眠 |
|
||||
| `-u` | 模拟用户活动(防止睡眠) |
|
||||
|
||||
---
|
||||
|
||||
## 验证当前电源设置
|
||||
|
||||
查看当前电源管理设置:
|
||||
|
||||
```bash
|
||||
pmset -g
|
||||
```
|
||||
|
||||
查看具体睡眠设置:
|
||||
|
||||
```bash
|
||||
pmset -g sleep
|
||||
pmset -g displaysleep
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. **sudo 权限**:运行 pmset 命令需要管理员权限
|
||||
2. **功耗**:关闭睡眠会增加功耗,适合始终接电的服务器场景
|
||||
3. **网络唤醒**:启用 WOL 后,可以通过其他设备远程唤醒 Mac Mini
|
||||
4. **安全性**:如果 Mac Mini 放在不安全的地方,建议设置强密码和防火墙
|
||||
|
||||
---
|
||||
|
||||
## 相关链接
|
||||
|
||||
- Apple pmset 官方文档:https://support.apple.com/zh-cn/HT201685
|
||||
|
||||
---
|
||||
|
||||
*文档创建日期:2026-03-15*
|
||||
*最后更新:2026-03-15*
|
||||
|
||||
@@ -1,35 +1,35 @@
|
||||
# Mac 必装软件清单
|
||||
|
||||
> 来源:Telegram频道「Hermes爱马仕&🦞OpenClaw小龙虾」
|
||||
> 作者:Claw小龙虾 @openclaw1024
|
||||
> 日期:2026-04-17
|
||||
|
||||
用最少的软件,达到最高的效率。
|
||||
|
||||
## 推荐清单
|
||||
|
||||
| # | 软件 | 分类 | 推荐理由 |
|
||||
|---|------|------|---------|
|
||||
| 1 | Claude | AI | AI时代人手必备,桌面版Cowork功能专为文字工作者打造 |
|
||||
| 2 | Obsidian | 知识管理 | 搭配Claudian插件,打造AI驱动的终极个人知识库 |
|
||||
| 3 | Chrome | 浏览器 | 比Safari更好用,Gmail用户的不二之选 |
|
||||
| 4 | Rectangle | 效率工具 | 免费分屏神器,大屏办公必备,从Windows转Mac必装 |
|
||||
| 5 | iShot | 截图录屏 | 简洁免费的截图工具,支持圆角截图,五年老用户推荐 |
|
||||
| 6 | Lemon | 系统清理 | 轻量清理工具,多任务卡顿时清一清缓存很管用 |
|
||||
| 7 | Raycast | 效率工具 | 替代Spotlight的万能启动器,计算器和剪贴板超好用 |
|
||||
| 8 | Homebrew | 开发工具 | Mac包管理器,用Claude Code搭Agent的前置依赖 |
|
||||
|
||||
## 原文摘要
|
||||
|
||||
1. **Claude** — AI时代人手必备,桌面版Cowork功能为文字工作者设计
|
||||
2. **Obsidian** — 搭配Claudian插件,终极个人知识库
|
||||
3. **Chrome** — 比Safari更好用,适合Gmail用户
|
||||
4. **Rectangle** — 免费分屏软件,大屏办公必备
|
||||
5. **iShot** — 简洁免费截图,支持圆角截图,五年老用户推荐
|
||||
6. **Lemon** — 内存小硬盘小的Mac必备,多任务卡顿时清理缓存
|
||||
7. **Raycast** — 替代Spotlight的万能启动器,剪贴板历史超好用
|
||||
8. **Homebrew** — 偏技术向,Mac包管理器,Claude Code搭Agent的前置依赖
|
||||
|
||||
## 标签
|
||||
|
||||
#Mac #效率工具 #软件推荐 #知识管理 #AI
|
||||
# Mac 必装软件清单
|
||||
|
||||
> 来源:Telegram频道「Hermes爱马仕&🦞OpenClaw小龙虾」
|
||||
> 作者:Claw小龙虾 @openclaw1024
|
||||
> 日期:2026-04-17
|
||||
|
||||
用最少的软件,达到最高的效率。
|
||||
|
||||
## 推荐清单
|
||||
|
||||
| # | 软件 | 分类 | 推荐理由 |
|
||||
|---|------|------|---------|
|
||||
| 1 | Claude | AI | AI时代人手必备,桌面版Cowork功能专为文字工作者打造 |
|
||||
| 2 | Obsidian | 知识管理 | 搭配Claudian插件,打造AI驱动的终极个人知识库 |
|
||||
| 3 | Chrome | 浏览器 | 比Safari更好用,Gmail用户的不二之选 |
|
||||
| 4 | Rectangle | 效率工具 | 免费分屏神器,大屏办公必备,从Windows转Mac必装 |
|
||||
| 5 | iShot | 截图录屏 | 简洁免费的截图工具,支持圆角截图,五年老用户推荐 |
|
||||
| 6 | Lemon | 系统清理 | 轻量清理工具,多任务卡顿时清一清缓存很管用 |
|
||||
| 7 | Raycast | 效率工具 | 替代Spotlight的万能启动器,计算器和剪贴板超好用 |
|
||||
| 8 | Homebrew | 开发工具 | Mac包管理器,用Claude Code搭Agent的前置依赖 |
|
||||
|
||||
## 原文摘要
|
||||
|
||||
1. **Claude** — AI时代人手必备,桌面版Cowork功能为文字工作者设计
|
||||
2. **Obsidian** — 搭配Claudian插件,终极个人知识库
|
||||
3. **Chrome** — 比Safari更好用,适合Gmail用户
|
||||
4. **Rectangle** — 免费分屏软件,大屏办公必备
|
||||
5. **iShot** — 简洁免费截图,支持圆角截图,五年老用户推荐
|
||||
6. **Lemon** — 内存小硬盘小的Mac必备,多任务卡顿时清理缓存
|
||||
7. **Raycast** — 替代Spotlight的万能启动器,剪贴板历史超好用
|
||||
8. **Homebrew** — 偏技术向,Mac包管理器,Claude Code搭Agent的前置依赖
|
||||
|
||||
## 标签
|
||||
|
||||
#Mac #效率工具 #软件推荐 #知识管理 #AI
|
||||
|
||||
@@ -1,392 +1,392 @@
|
||||
#nas #minio #zipline #docker #synology #n8n #image
|
||||
```table-of-contents
|
||||
```
|
||||
|
||||
内容覆盖:
|
||||
|
||||
1. 架构概念
|
||||
2. 前置准备(DSM 设置)
|
||||
3. 如何通过 DSM 的 GUI 创建 MinIO / PostgreSQL / Zipline
|
||||
4. 如何在 MinIO 创建 Bucket 和权限
|
||||
5. Zipline 初始化与 API Token
|
||||
6. n8n 如何接入
|
||||
7. 文件持久化(防止 NAS 重启丢失)
|
||||
8. 进阶部署选项(可选)
|
||||
|
||||
---
|
||||
|
||||
# 1. 架构图(Synology 专用)
|
||||
|
||||
```
|
||||
[DSM Docker UI]
|
||||
│
|
||||
├── MinIO (9000 API, 9001 Console)
|
||||
│ └── /volume1/docker/zipline-stack/minio/minio_data
|
||||
│
|
||||
├── PostgreSQL (Zipline DB)
|
||||
│ └── /volume1/docker/zipline-stack/zipline/pg_data
|
||||
│
|
||||
└── Zipline (暴露 3333)
|
||||
├── 前端上传 UI
|
||||
└── n8n API 上传
|
||||
```
|
||||
|
||||
Zipline → MinIO(S3) → NAS 存储
|
||||
![[IMG-20251229190624349.png]]
|
||||
|
||||
---
|
||||
|
||||
# 2. 前置准备
|
||||
|
||||
## 2.1 确保 DSM 已安装
|
||||
|
||||
- **Container Manager**(DSM 7.2+ 自带,替代 Docker)
|
||||
- **Docker**(DSM 7.1 及更早)
|
||||
|
||||
|
||||
## 2.2 创建存储位置目录
|
||||
|
||||
DSM → File Station → 创建:
|
||||
```
|
||||
/volume1/docker/zipline-stack/minio/minio_data
|
||||
/volume1/docker/zipline-stack/zipline/pg_data
|
||||
```
|
||||
|
||||
---
|
||||
## 2.3 **docker-compose.yml(可直接复制)**
|
||||
|
||||
``` bash
|
||||
version: "3.9"
|
||||
|
||||
services:
|
||||
minio:
|
||||
image: minio/minio:latest
|
||||
container_name: minio
|
||||
command: server /data --console-address ":9001"
|
||||
environment:
|
||||
MINIO_ROOT_USER: admin
|
||||
MINIO_ROOT_PASSWORD: Abcd_1234
|
||||
ports:
|
||||
- "9000:9000"
|
||||
- "9001:9001"
|
||||
volumes:
|
||||
# 保留你精心组织的绝对路径
|
||||
- /volume1/docker/zipline-stack/minio/minio_data:/data
|
||||
restart: unless-stopped
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
# [已移除 CPU 限制以修复报错]
|
||||
memory: 1G
|
||||
reservations:
|
||||
memory: 256M
|
||||
healthcheck:
|
||||
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
|
||||
interval: 30s
|
||||
timeout: 20s
|
||||
retries: 3
|
||||
|
||||
postgres:
|
||||
image: postgres:16
|
||||
container_name: zipline_postgres
|
||||
environment:
|
||||
POSTGRES_USER: zipline
|
||||
POSTGRES_PASSWORD: zipline
|
||||
POSTGRES_DB: zipline
|
||||
volumes:
|
||||
# 保留你精心组织的绝对路径
|
||||
- /volume1/docker/zipline-stack/zipline/pg_data:/var/lib/postgresql/data
|
||||
restart: unless-stopped
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
# [已移除 CPU 限制以修复报错]
|
||||
memory: 512M
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready -U zipline"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
zipline:
|
||||
image: ghcr.io/diced/zipline:latest
|
||||
container_name: zipline
|
||||
depends_on:
|
||||
minio:
|
||||
condition: service_healthy
|
||||
postgres:
|
||||
condition: service_healthy
|
||||
environment:
|
||||
DATABASE_URL: postgres://zipline:zipline@postgres:5432/zipline
|
||||
CORE_SECRET: 22d5d3159d5ed51743bc8c8ef007f836
|
||||
ZPLINE_ADMIN_USERNAME: admin
|
||||
ZPLINE_ADMIN_PASSWORD: Abcd_1234
|
||||
STORAGE_ENGINE: s3
|
||||
S3_BUCKET: zipline-bucket
|
||||
S3_ENDPOINT: http://minio:9000
|
||||
S3_ACCESS_KEY: admin
|
||||
S3_SECRET_KEY: Abcd_1234
|
||||
S3_REGION: us-east-1
|
||||
S3_FORCE_PATH_STYLE: "true"
|
||||
PORT: 3000
|
||||
ports:
|
||||
- "3333:3000"
|
||||
restart: unless-stopped
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
# [已移除 CPU 限制以修复报错]
|
||||
memory: 512M
|
||||
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# 3. 你需要初始化 MinIO bucket(一次性)
|
||||
|
||||
进入 MinIO 控制台(浏览器):
|
||||
```
|
||||
http://192.168.3.17:9001/login
|
||||
```
|
||||
|
||||
登录 → 创建 S3 Bucket:
|
||||
```
|
||||
zipline-bucket
|
||||
```
|
||||
|
||||
设置为 public(否则图片无法直接访问):
|
||||
- Buckets → zipline-bucket → _Access Rules_ →
|
||||
Policy: **public read**
|
||||
|
||||
## 正确设置 Public Bucket(CE 下可行方案)
|
||||
|
||||
### 方法 :使用 `mc` 命令行(推荐)
|
||||
|
||||
1. 下载 MinIO CLI `mc` 到你的 DSM 或本地 PC:
|
||||
```
|
||||
wget https://dl.min.io/client/mc/release/linux-amd64/mc chmod +x mc
|
||||
```
|
||||
|
||||
2. 添加 alias:
|
||||
```
|
||||
mc alias set local http://192.168.3.17:9000 admin StrongPasswordHere
|
||||
```
|
||||
|
||||
3. 创建 public-read bucket:
|
||||
```
|
||||
mc mb local/zipline-bucket
|
||||
```
|
||||
|
||||
4. 赋予匿名读写权限:
|
||||
```
|
||||
mc anonymous set public local/zipline-bucket
|
||||
```
|
||||
|
||||
5. 测试:
|
||||
```
|
||||
mc ls local/zipline-bucket
|
||||
```
|
||||
|
||||
现在这个 bucket 的对象就可以**被公开访问**了。
|
||||
|
||||
#### a、`mc`(MinIO Client)文档 &命令参考
|
||||
|
||||
- `mc anonymous` 命令:管理匿名(unauthenticated)访问策略。 [min.io+2min.io+2](https://min.io/docs/minio/linux/reference/minio-mc/mc-anonymous.html?utm_source=chatgpt.com)
|
||||
- 支持子命令(`get` / `list` / `set` / `set-json` 等): [min.io](https://min.io/docs/minio/linux/reference/minio-mc/mc-anonymous.html?utm_source=chatgpt.com)
|
||||
- `mc anonymous set` 语法(设置预定义策略):`none`, `download`, `upload`, `public` 四种选项可用。 [min.io+2min-io.cn+2](https://min.io/docs/minio/linux/reference/minio-mc/mc-anonymous-set.html?utm_source=chatgpt.com)
|
||||
- `mc anonymous set-json`:可以提供一个自定义的 IAM JSON policy 来配置更细粒度权限。 [min.io](https://min.io/docs/minio/linux/reference/minio-mc/mc-anonymous-set-json.html?utm_source=chatgpt.com)
|
||||
- `mc anonymous list`:查看某个 bucket 或前缀的匿名策略。 [min.io](https://min.io/docs/minio/linux/reference/minio-mc/mc-anonymous-list.html?utm_source=chatgpt.com)
|
||||
|
||||
#### b、可以设置的权限类型(匿名访问策略)
|
||||
|
||||
- `download`:只允许匿名用户下载对象(GET 操作)。 [min.io+1](https://min.io/docs/minio/linux/reference/minio-mc/mc-anonymous-set.html?utm_source=chatgpt.com)
|
||||
- `upload`:只允许匿名用户上传对象(PUT 操作)。 [min.io+1](https://min.io/docs/minio/linux/reference/minio-mc/mc-anonymous-set.html?utm_source=chatgpt.com)
|
||||
- `public`:既允许上传,也允许下载(等于读写权限)。 [min-io.cn+1](https://min-io.cn/docs/minio/linux/reference/minio-mc/mc-anonymous-set.html?utm_source=chatgpt.com)
|
||||
- `none`:禁用匿名访问(恢复私有)。 [min.io](https://min.io/docs/minio/linux/reference/minio-mc/mc-anonymous-set.html?utm_source=chatgpt.com)
|
||||
#### c、使用示例
|
||||
假设你的 MinIO alias 是 `local`,bucket 名为 `mybucket`,你想:
|
||||
|
||||
- **设置 public(读写)权限**:
|
||||
`mc anonymous set public local/mybucket`
|
||||
- **设置只读(下载)权限**:
|
||||
`mc anonymous set download local/mybucket`
|
||||
- **设置只写(仅上传)权限**:
|
||||
`mc anonymous set upload local/mybucket`
|
||||
- **禁用匿名访问**:
|
||||
`mc anonymous set none local/mybucket`
|
||||
|
||||
---
|
||||
|
||||
# 4. Zipline 初始化
|
||||
|
||||
访问:
|
||||
``` bash
|
||||
http://192.168.3.17:3333/dashboard
|
||||
```
|
||||
|
||||
首次登陆使用:
|
||||
- Username: `admin`
|
||||
- Password: 你在 docker-compose的environment 中设置的
|
||||
|
||||
> [!NOTE] Docker Compose Environment Settings:
|
||||
> S3_ACCESS_KEY: admin
|
||||
> S3_SECRET_KEY: Abcd_1234
|
||||
|
||||
然后你可以:
|
||||
- 生成 API Token(给 n8n)
|
||||
- 设置上传规则
|
||||
- 配置返回 URL(默认即可)
|
||||
|
||||
---
|
||||
|
||||
# 5. n8n 调用 Zipline 上传示例(最小可用)
|
||||
|
||||
https://zipline.diced.sh/docs/api
|
||||
https://zipline.diced.sh/docs/api/upload
|
||||
|
||||
---
|
||||
|
||||
# 6. 性能分析(NAS 场景)
|
||||
|
||||
| 项目 | MinIO | Zipline |
|
||||
| -------- | ---------------- | ----------------------- |
|
||||
| 存储性能 | 只受 NAS 硬盘/SSD 限制 | 仅处理 metadata |
|
||||
| 并发 | 高(S3 原生并行) | 中等(单 Node.js 进程) |
|
||||
| 数据库 | 无(内置 KV) | PostgreSQL/SQLite,需要 DB |
|
||||
| 扩展性 | 可横向扩容 | 单实例 → 前端微服务即可 |
|
||||
| REST API | 完备 | 完备(适合 n8n) |
|
||||
|
||||
# 7. 备份策略
|
||||
|
||||
这是一个涉及**分布式存储系统一致性**的经典运维话题。由于 Zipline 将元数据存在 Postgres,将文件实体存在 MinIO,你的备份方案必须确保这两者在时间点上是(尽可能)一致的。
|
||||
|
||||
针对 Synology NAS 环境,我为你设计了两种方案。考虑到你的技术背景,我强烈推荐**热备份 + 增量归档**,这是企业级运维的标准做法。
|
||||
## 核心挑战:由于“脑体分离”导致的一致性问题
|
||||
- **大脑 (Postgres)**:记录了“文件A的ID是123,位于MinIO的/bucket/a.jpg”。
|
||||
- **身体 (MinIO)**:实际存储了 `a.jpg`。
|
||||
- **风险**:如果你在 10:00 备份了数据库,10:05 备份了 MinIO,但这 5 分钟内你上传了新文件,恢复时就会出现“数据库找不到文件”或“文件没记录”的幽灵数据。
|
||||
|
||||
---
|
||||
## 方案:基于脚本的逻辑热备份
|
||||
|
||||
这种方案利用数据库自带的工具导出数据,结合文件系统的增量备份。
|
||||
|
||||
### 1. 工作原理
|
||||
|
||||
1. **数据库**:不停止服务,使用 `pg_dump` 命令将 Postgres 内存中的数据导出为一个 `.sql` 文件。这是“逻辑备份”。
|
||||
2. **MinIO**:MinIO 的数据存储在物理磁盘上就是普通文件。
|
||||
3. **归档**:使用 Synology Hyper Backup 将 `.sql` 文件和 `MinIO 数据目录` 一起备份到远端(云端、USB 硬盘或其他 NAS)。
|
||||
### 2. 利弊分析
|
||||
- **优点**:
|
||||
- **零停机**:服务全程在线,不影响业务。
|
||||
- **数据安全**:`pg_dump` 导出的 SQL 文件是纯文本,不依赖特定的 Postgres 版本或 CPU 架构(x86/ARM),**迁移能力极强**。
|
||||
- **原生支持**:完美契合 Synology Hyper Backup 的增量备份机制。
|
||||
- **缺点**:
|
||||
- **微小的不一致性**:如果在导出 SQL 的几秒钟内恰好有文件上传,可能存在极小的时间差(对于个人/中小企业可忽略)。
|
||||
- **配置门槛**:需要编写一个简单的 Shell 脚本。
|
||||
|
||||
### 3. 实施步骤
|
||||
**第一步:创建备份存放目录** 在你的 NAS 上创建一个专门存放数据库备份文件的目录,例如: `/volume1/docker/zipline-stack/backups`
|
||||
**第二步:编写自动备份脚本** 我为你写好了一个健壮的脚本,包含日志记录和旧备份自动清理功能。
|
||||
请在 NAS 上创建一个文件,例如 `/volume1/docker/zipline-stack/backup_script.sh`,内容如下:
|
||||
|
||||
Bash
|
||||
|
||||
``` bash
|
||||
#!/bin/bash
|
||||
|
||||
# ================= 配置区域 =================
|
||||
# 备份保存路径
|
||||
BACKUP_DIR="/volume1/docker/zipline-stack/backups"---
|
||||
title: 1. 架构图(Synology 专用)
|
||||
author: shenwei
|
||||
tags: [docker, image, minio, n8n, nas, synology, zipline]
|
||||
---
|
||||
---
|
||||
title: 1. 架构图(Synology 专用)
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [docker, image, minio, n8n, nas, synology, zipline]
|
||||
---
|
||||
|
||||
# Postgres 容器名称 (需与 docker-compose.yml 一致)
|
||||
PG_CONTAINER="zipline_postgres"
|
||||
# 数据库用户和名称
|
||||
PG_USER="zipline"
|
||||
PG_DB="zipline"
|
||||
# 保留多少天的备份
|
||||
RETENTION_DAYS=30
|
||||
# 当前日期
|
||||
DATE=$(date +%Y%m%d_%H%M%S)
|
||||
|
||||
# ================= 执行逻辑 =================
|
||||
mkdir -p "$BACKUP_DIR"
|
||||
|
||||
echo "[$DATE] 开始备份 Postgres..."
|
||||
|
||||
# 1. 执行 pg_dump 导出数据库 (压缩格式)
|
||||
# 注意:这里不直接备份 /var/lib/postgresql/data 目录,因为热备份该目录会导致数据损坏
|
||||
docker exec "$PG_CONTAINER" pg_dump -U "$PG_USER" -d "$PG_DB" | gzip > "$BACKUP_DIR/db_$DATE.sql.gz"
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "[$DATE] 数据库备份成功: db_$DATE.sql.gz"
|
||||
else
|
||||
echo "[$DATE] !!! 数据库备份失败 !!!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 2. 清理旧备份 (删除超过 30 天的文件)
|
||||
find "$BACKUP_DIR" -name "db_*.sql.gz" -mtime +$RETENTION_DAYS -delete
|
||||
echo "[$DATE] 已清理超过 $RETENTION_DAYS 天的旧备份"
|
||||
|
||||
# 3. (可选) 如果你想在这里也把 MinIO 打包,可以用 tar,但建议交给 Hyper Backup 处理
|
||||
# echo "MinIO 数据量较大,建议由 Synology Hyper Backup 直接备份 minio_data 目录"
|
||||
|
||||
echo "[$DATE] 备份流程结束。"
|
||||
```
|
||||
|
||||
**第三步:设置脚本权限** SSH 进入 NAS,给脚本执行权限:
|
||||
|
||||
Bash
|
||||
``` bash
|
||||
chmod +x /volume1/docker/zipline-stack/backup_script.sh
|
||||
```
|
||||
|
||||
**第四步:配置 Synology 任务计划 (Task Scheduler)**
|
||||
|
||||
1. 打开 DSM 控制面板 -> **任务计划**。
|
||||
2. 新增 -> **计划的任务** -> **用户定义的脚本**。
|
||||
3. **常规**:用户账号选择 `root` (必须,否则无法操作 Docker)。
|
||||
4. **计划**:建议每天凌晨 3:00 执行。
|
||||
5. **任务设置** -> 用户定义的脚本框中填入:
|
||||
Bash
|
||||
``` bash
|
||||
bash /volume1/docker/zipline-stack/backup_script.sh >> /volume1/docker/zipline-stack/backup.log 2>&1
|
||||
```
|
||||
![[IMG-20251229190624937.png]]
|
||||
![[IMG-20251229190625061.png]]
|
||||
![[IMG-20251229190625079.png]]
|
||||
|
||||
**第五步:配置 Synology Hyper Backup** 这是最后一道防线。
|
||||
|
||||
1. 打开 **Hyper Backup**。
|
||||
2. 创建一个新的数据备份任务。
|
||||
|
||||
3. **选择备份源**:
|
||||
- 勾选 `/volume1/docker/zipline-stack/backups` (这里有刚才脚本生成的数据库 SQL)。
|
||||
- 勾选 `/volume1/docker/zipline-stack/minio/minio_data` (这是图片实体文件)。
|
||||
|
||||
4. 设置备份目的地(USB、另一台 NAS 或 Synology C2 云)。
|
||||
![[IMG-20251229190625099.png]]
|
||||
![[IMG-20251229190625117.png]]
|
||||
|
||||
# Reference URL
|
||||
|
||||
|
||||
- Docker Volume Documentation: [https://docs.docker.com/storage/volumes/](https://docs.docker.com/storage/volumes/)
|
||||
- MinIO Docker Persistence: [https://min.io/docs/minio/linux/operations/install-deploy-manage/deploy-minio-single-node-single-drive.html](https://min.io/docs/minio/linux/operations/install-deploy-manage/deploy-minio-single-node-single-drive.html)
|
||||
- Synology Docker Permissions Advice: [https://kb.synology.com/en-global/DSM/tutorial/How_to_manage_ACL_settings_on_your_Synology_NAS](https://kb.synology.com/en-global/DSM/tutorial/How_to_manage_ACL_settings_on_your_Synology_NAS)
|
||||
#nas #minio #zipline #docker #synology #n8n #image
|
||||
```table-of-contents
|
||||
```
|
||||
|
||||
内容覆盖:
|
||||
|
||||
1. 架构概念
|
||||
2. 前置准备(DSM 设置)
|
||||
3. 如何通过 DSM 的 GUI 创建 MinIO / PostgreSQL / Zipline
|
||||
4. 如何在 MinIO 创建 Bucket 和权限
|
||||
5. Zipline 初始化与 API Token
|
||||
6. n8n 如何接入
|
||||
7. 文件持久化(防止 NAS 重启丢失)
|
||||
8. 进阶部署选项(可选)
|
||||
|
||||
---
|
||||
|
||||
# 1. 架构图(Synology 专用)
|
||||
|
||||
```
|
||||
[DSM Docker UI]
|
||||
│
|
||||
├── MinIO (9000 API, 9001 Console)
|
||||
│ └── /volume1/docker/zipline-stack/minio/minio_data
|
||||
│
|
||||
├── PostgreSQL (Zipline DB)
|
||||
│ └── /volume1/docker/zipline-stack/zipline/pg_data
|
||||
│
|
||||
└── Zipline (暴露 3333)
|
||||
├── 前端上传 UI
|
||||
└── n8n API 上传
|
||||
```
|
||||
|
||||
Zipline → MinIO(S3) → NAS 存储
|
||||
![[IMG-20251229190624349.png]]
|
||||
|
||||
---
|
||||
|
||||
# 2. 前置准备
|
||||
|
||||
## 2.1 确保 DSM 已安装
|
||||
|
||||
- **Container Manager**(DSM 7.2+ 自带,替代 Docker)
|
||||
- **Docker**(DSM 7.1 及更早)
|
||||
|
||||
|
||||
## 2.2 创建存储位置目录
|
||||
|
||||
DSM → File Station → 创建:
|
||||
```
|
||||
/volume1/docker/zipline-stack/minio/minio_data
|
||||
/volume1/docker/zipline-stack/zipline/pg_data
|
||||
```
|
||||
|
||||
---
|
||||
## 2.3 **docker-compose.yml(可直接复制)**
|
||||
|
||||
``` bash
|
||||
version: "3.9"
|
||||
|
||||
services:
|
||||
minio:
|
||||
image: minio/minio:latest
|
||||
container_name: minio
|
||||
command: server /data --console-address ":9001"
|
||||
environment:
|
||||
MINIO_ROOT_USER: admin
|
||||
MINIO_ROOT_PASSWORD: Abcd_1234
|
||||
ports:
|
||||
- "9000:9000"
|
||||
- "9001:9001"
|
||||
volumes:
|
||||
# 保留你精心组织的绝对路径
|
||||
- /volume1/docker/zipline-stack/minio/minio_data:/data
|
||||
restart: unless-stopped
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
# [已移除 CPU 限制以修复报错]
|
||||
memory: 1G
|
||||
reservations:
|
||||
memory: 256M
|
||||
healthcheck:
|
||||
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
|
||||
interval: 30s
|
||||
timeout: 20s
|
||||
retries: 3
|
||||
|
||||
postgres:
|
||||
image: postgres:16
|
||||
container_name: zipline_postgres
|
||||
environment:
|
||||
POSTGRES_USER: zipline
|
||||
POSTGRES_PASSWORD: zipline
|
||||
POSTGRES_DB: zipline
|
||||
volumes:
|
||||
# 保留你精心组织的绝对路径
|
||||
- /volume1/docker/zipline-stack/zipline/pg_data:/var/lib/postgresql/data
|
||||
restart: unless-stopped
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
# [已移除 CPU 限制以修复报错]
|
||||
memory: 512M
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready -U zipline"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
zipline:
|
||||
image: ghcr.io/diced/zipline:latest
|
||||
container_name: zipline
|
||||
depends_on:
|
||||
minio:
|
||||
condition: service_healthy
|
||||
postgres:
|
||||
condition: service_healthy
|
||||
environment:
|
||||
DATABASE_URL: postgres://zipline:zipline@postgres:5432/zipline
|
||||
CORE_SECRET: 22d5d3159d5ed51743bc8c8ef007f836
|
||||
ZPLINE_ADMIN_USERNAME: admin
|
||||
ZPLINE_ADMIN_PASSWORD: Abcd_1234
|
||||
STORAGE_ENGINE: s3
|
||||
S3_BUCKET: zipline-bucket
|
||||
S3_ENDPOINT: http://minio:9000
|
||||
S3_ACCESS_KEY: admin
|
||||
S3_SECRET_KEY: Abcd_1234
|
||||
S3_REGION: us-east-1
|
||||
S3_FORCE_PATH_STYLE: "true"
|
||||
PORT: 3000
|
||||
ports:
|
||||
- "3333:3000"
|
||||
restart: unless-stopped
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
# [已移除 CPU 限制以修复报错]
|
||||
memory: 512M
|
||||
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# 3. 你需要初始化 MinIO bucket(一次性)
|
||||
|
||||
进入 MinIO 控制台(浏览器):
|
||||
```
|
||||
http://192.168.3.17:9001/login
|
||||
```
|
||||
|
||||
登录 → 创建 S3 Bucket:
|
||||
```
|
||||
zipline-bucket
|
||||
```
|
||||
|
||||
设置为 public(否则图片无法直接访问):
|
||||
- Buckets → zipline-bucket → _Access Rules_ →
|
||||
Policy: **public read**
|
||||
|
||||
## 正确设置 Public Bucket(CE 下可行方案)
|
||||
|
||||
### 方法 :使用 `mc` 命令行(推荐)
|
||||
|
||||
1. 下载 MinIO CLI `mc` 到你的 DSM 或本地 PC:
|
||||
```
|
||||
wget https://dl.min.io/client/mc/release/linux-amd64/mc chmod +x mc
|
||||
```
|
||||
|
||||
2. 添加 alias:
|
||||
```
|
||||
mc alias set local http://192.168.3.17:9000 admin StrongPasswordHere
|
||||
```
|
||||
|
||||
3. 创建 public-read bucket:
|
||||
```
|
||||
mc mb local/zipline-bucket
|
||||
```
|
||||
|
||||
4. 赋予匿名读写权限:
|
||||
```
|
||||
mc anonymous set public local/zipline-bucket
|
||||
```
|
||||
|
||||
5. 测试:
|
||||
```
|
||||
mc ls local/zipline-bucket
|
||||
```
|
||||
|
||||
现在这个 bucket 的对象就可以**被公开访问**了。
|
||||
|
||||
#### a、`mc`(MinIO Client)文档 &命令参考
|
||||
|
||||
- `mc anonymous` 命令:管理匿名(unauthenticated)访问策略。 [min.io+2min.io+2](https://min.io/docs/minio/linux/reference/minio-mc/mc-anonymous.html?utm_source=chatgpt.com)
|
||||
- 支持子命令(`get` / `list` / `set` / `set-json` 等): [min.io](https://min.io/docs/minio/linux/reference/minio-mc/mc-anonymous.html?utm_source=chatgpt.com)
|
||||
- `mc anonymous set` 语法(设置预定义策略):`none`, `download`, `upload`, `public` 四种选项可用。 [min.io+2min-io.cn+2](https://min.io/docs/minio/linux/reference/minio-mc/mc-anonymous-set.html?utm_source=chatgpt.com)
|
||||
- `mc anonymous set-json`:可以提供一个自定义的 IAM JSON policy 来配置更细粒度权限。 [min.io](https://min.io/docs/minio/linux/reference/minio-mc/mc-anonymous-set-json.html?utm_source=chatgpt.com)
|
||||
- `mc anonymous list`:查看某个 bucket 或前缀的匿名策略。 [min.io](https://min.io/docs/minio/linux/reference/minio-mc/mc-anonymous-list.html?utm_source=chatgpt.com)
|
||||
|
||||
#### b、可以设置的权限类型(匿名访问策略)
|
||||
|
||||
- `download`:只允许匿名用户下载对象(GET 操作)。 [min.io+1](https://min.io/docs/minio/linux/reference/minio-mc/mc-anonymous-set.html?utm_source=chatgpt.com)
|
||||
- `upload`:只允许匿名用户上传对象(PUT 操作)。 [min.io+1](https://min.io/docs/minio/linux/reference/minio-mc/mc-anonymous-set.html?utm_source=chatgpt.com)
|
||||
- `public`:既允许上传,也允许下载(等于读写权限)。 [min-io.cn+1](https://min-io.cn/docs/minio/linux/reference/minio-mc/mc-anonymous-set.html?utm_source=chatgpt.com)
|
||||
- `none`:禁用匿名访问(恢复私有)。 [min.io](https://min.io/docs/minio/linux/reference/minio-mc/mc-anonymous-set.html?utm_source=chatgpt.com)
|
||||
#### c、使用示例
|
||||
假设你的 MinIO alias 是 `local`,bucket 名为 `mybucket`,你想:
|
||||
|
||||
- **设置 public(读写)权限**:
|
||||
`mc anonymous set public local/mybucket`
|
||||
- **设置只读(下载)权限**:
|
||||
`mc anonymous set download local/mybucket`
|
||||
- **设置只写(仅上传)权限**:
|
||||
`mc anonymous set upload local/mybucket`
|
||||
- **禁用匿名访问**:
|
||||
`mc anonymous set none local/mybucket`
|
||||
|
||||
---
|
||||
|
||||
# 4. Zipline 初始化
|
||||
|
||||
访问:
|
||||
``` bash
|
||||
http://192.168.3.17:3333/dashboard
|
||||
```
|
||||
|
||||
首次登陆使用:
|
||||
- Username: `admin`
|
||||
- Password: 你在 docker-compose的environment 中设置的
|
||||
|
||||
> [!NOTE] Docker Compose Environment Settings:
|
||||
> S3_ACCESS_KEY: admin
|
||||
> S3_SECRET_KEY: Abcd_1234
|
||||
|
||||
然后你可以:
|
||||
- 生成 API Token(给 n8n)
|
||||
- 设置上传规则
|
||||
- 配置返回 URL(默认即可)
|
||||
|
||||
---
|
||||
|
||||
# 5. n8n 调用 Zipline 上传示例(最小可用)
|
||||
|
||||
https://zipline.diced.sh/docs/api
|
||||
https://zipline.diced.sh/docs/api/upload
|
||||
|
||||
---
|
||||
|
||||
# 6. 性能分析(NAS 场景)
|
||||
|
||||
| 项目 | MinIO | Zipline |
|
||||
| -------- | ---------------- | ----------------------- |
|
||||
| 存储性能 | 只受 NAS 硬盘/SSD 限制 | 仅处理 metadata |
|
||||
| 并发 | 高(S3 原生并行) | 中等(单 Node.js 进程) |
|
||||
| 数据库 | 无(内置 KV) | PostgreSQL/SQLite,需要 DB |
|
||||
| 扩展性 | 可横向扩容 | 单实例 → 前端微服务即可 |
|
||||
| REST API | 完备 | 完备(适合 n8n) |
|
||||
|
||||
# 7. 备份策略
|
||||
|
||||
这是一个涉及**分布式存储系统一致性**的经典运维话题。由于 Zipline 将元数据存在 Postgres,将文件实体存在 MinIO,你的备份方案必须确保这两者在时间点上是(尽可能)一致的。
|
||||
|
||||
针对 Synology NAS 环境,我为你设计了两种方案。考虑到你的技术背景,我强烈推荐**热备份 + 增量归档**,这是企业级运维的标准做法。
|
||||
## 核心挑战:由于“脑体分离”导致的一致性问题
|
||||
- **大脑 (Postgres)**:记录了“文件A的ID是123,位于MinIO的/bucket/a.jpg”。
|
||||
- **身体 (MinIO)**:实际存储了 `a.jpg`。
|
||||
- **风险**:如果你在 10:00 备份了数据库,10:05 备份了 MinIO,但这 5 分钟内你上传了新文件,恢复时就会出现“数据库找不到文件”或“文件没记录”的幽灵数据。
|
||||
|
||||
---
|
||||
## 方案:基于脚本的逻辑热备份
|
||||
|
||||
这种方案利用数据库自带的工具导出数据,结合文件系统的增量备份。
|
||||
|
||||
### 1. 工作原理
|
||||
|
||||
1. **数据库**:不停止服务,使用 `pg_dump` 命令将 Postgres 内存中的数据导出为一个 `.sql` 文件。这是“逻辑备份”。
|
||||
2. **MinIO**:MinIO 的数据存储在物理磁盘上就是普通文件。
|
||||
3. **归档**:使用 Synology Hyper Backup 将 `.sql` 文件和 `MinIO 数据目录` 一起备份到远端(云端、USB 硬盘或其他 NAS)。
|
||||
### 2. 利弊分析
|
||||
- **优点**:
|
||||
- **零停机**:服务全程在线,不影响业务。
|
||||
- **数据安全**:`pg_dump` 导出的 SQL 文件是纯文本,不依赖特定的 Postgres 版本或 CPU 架构(x86/ARM),**迁移能力极强**。
|
||||
- **原生支持**:完美契合 Synology Hyper Backup 的增量备份机制。
|
||||
- **缺点**:
|
||||
- **微小的不一致性**:如果在导出 SQL 的几秒钟内恰好有文件上传,可能存在极小的时间差(对于个人/中小企业可忽略)。
|
||||
- **配置门槛**:需要编写一个简单的 Shell 脚本。
|
||||
|
||||
### 3. 实施步骤
|
||||
**第一步:创建备份存放目录** 在你的 NAS 上创建一个专门存放数据库备份文件的目录,例如: `/volume1/docker/zipline-stack/backups`
|
||||
**第二步:编写自动备份脚本** 我为你写好了一个健壮的脚本,包含日志记录和旧备份自动清理功能。
|
||||
请在 NAS 上创建一个文件,例如 `/volume1/docker/zipline-stack/backup_script.sh`,内容如下:
|
||||
|
||||
Bash
|
||||
|
||||
``` bash
|
||||
#!/bin/bash
|
||||
|
||||
# ================= 配置区域 =================
|
||||
# 备份保存路径
|
||||
BACKUP_DIR="/volume1/docker/zipline-stack/backups"---
|
||||
title: 1. 架构图(Synology 专用)
|
||||
author: shenwei
|
||||
tags: [docker, image, minio, n8n, nas, synology, zipline]
|
||||
---
|
||||
---
|
||||
title: 1. 架构图(Synology 专用)
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [docker, image, minio, n8n, nas, synology, zipline]
|
||||
---
|
||||
|
||||
# Postgres 容器名称 (需与 docker-compose.yml 一致)
|
||||
PG_CONTAINER="zipline_postgres"
|
||||
# 数据库用户和名称
|
||||
PG_USER="zipline"
|
||||
PG_DB="zipline"
|
||||
# 保留多少天的备份
|
||||
RETENTION_DAYS=30
|
||||
# 当前日期
|
||||
DATE=$(date +%Y%m%d_%H%M%S)
|
||||
|
||||
# ================= 执行逻辑 =================
|
||||
mkdir -p "$BACKUP_DIR"
|
||||
|
||||
echo "[$DATE] 开始备份 Postgres..."
|
||||
|
||||
# 1. 执行 pg_dump 导出数据库 (压缩格式)
|
||||
# 注意:这里不直接备份 /var/lib/postgresql/data 目录,因为热备份该目录会导致数据损坏
|
||||
docker exec "$PG_CONTAINER" pg_dump -U "$PG_USER" -d "$PG_DB" | gzip > "$BACKUP_DIR/db_$DATE.sql.gz"
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "[$DATE] 数据库备份成功: db_$DATE.sql.gz"
|
||||
else
|
||||
echo "[$DATE] !!! 数据库备份失败 !!!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 2. 清理旧备份 (删除超过 30 天的文件)
|
||||
find "$BACKUP_DIR" -name "db_*.sql.gz" -mtime +$RETENTION_DAYS -delete
|
||||
echo "[$DATE] 已清理超过 $RETENTION_DAYS 天的旧备份"
|
||||
|
||||
# 3. (可选) 如果你想在这里也把 MinIO 打包,可以用 tar,但建议交给 Hyper Backup 处理
|
||||
# echo "MinIO 数据量较大,建议由 Synology Hyper Backup 直接备份 minio_data 目录"
|
||||
|
||||
echo "[$DATE] 备份流程结束。"
|
||||
```
|
||||
|
||||
**第三步:设置脚本权限** SSH 进入 NAS,给脚本执行权限:
|
||||
|
||||
Bash
|
||||
``` bash
|
||||
chmod +x /volume1/docker/zipline-stack/backup_script.sh
|
||||
```
|
||||
|
||||
**第四步:配置 Synology 任务计划 (Task Scheduler)**
|
||||
|
||||
1. 打开 DSM 控制面板 -> **任务计划**。
|
||||
2. 新增 -> **计划的任务** -> **用户定义的脚本**。
|
||||
3. **常规**:用户账号选择 `root` (必须,否则无法操作 Docker)。
|
||||
4. **计划**:建议每天凌晨 3:00 执行。
|
||||
5. **任务设置** -> 用户定义的脚本框中填入:
|
||||
Bash
|
||||
``` bash
|
||||
bash /volume1/docker/zipline-stack/backup_script.sh >> /volume1/docker/zipline-stack/backup.log 2>&1
|
||||
```
|
||||
![[IMG-20251229190624937.png]]
|
||||
![[IMG-20251229190625061.png]]
|
||||
![[IMG-20251229190625079.png]]
|
||||
|
||||
**第五步:配置 Synology Hyper Backup** 这是最后一道防线。
|
||||
|
||||
1. 打开 **Hyper Backup**。
|
||||
2. 创建一个新的数据备份任务。
|
||||
|
||||
3. **选择备份源**:
|
||||
- 勾选 `/volume1/docker/zipline-stack/backups` (这里有刚才脚本生成的数据库 SQL)。
|
||||
- 勾选 `/volume1/docker/zipline-stack/minio/minio_data` (这是图片实体文件)。
|
||||
|
||||
4. 设置备份目的地(USB、另一台 NAS 或 Synology C2 云)。
|
||||
![[IMG-20251229190625099.png]]
|
||||
![[IMG-20251229190625117.png]]
|
||||
|
||||
# Reference URL
|
||||
|
||||
|
||||
- Docker Volume Documentation: [https://docs.docker.com/storage/volumes/](https://docs.docker.com/storage/volumes/)
|
||||
- MinIO Docker Persistence: [https://min.io/docs/minio/linux/operations/install-deploy-manage/deploy-minio-single-node-single-drive.html](https://min.io/docs/minio/linux/operations/install-deploy-manage/deploy-minio-single-node-single-drive.html)
|
||||
- Synology Docker Permissions Advice: [https://kb.synology.com/en-global/DSM/tutorial/How_to_manage_ACL_settings_on_your_Synology_NAS](https://kb.synology.com/en-global/DSM/tutorial/How_to_manage_ACL_settings_on_your_Synology_NAS)
|
||||
- MinIO mc anonymous https://docs.min.io/enterprise/aistor-object-store/reference/cli/mc-anonymous/
|
||||
@@ -1,101 +1,101 @@
|
||||
---
|
||||
title:
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [database, mariadb, mysql, nas]
|
||||
---
|
||||
|
||||
#nas #mysql #database #mariadb
|
||||
|
||||
```table-of-contents
|
||||
```
|
||||
|
||||
## Internal Access
|
||||
|
||||
| IP | 192.168.3.17 |
|
||||
| -------- | ------------ |
|
||||
| Port | 3307 |
|
||||
| Username | shenwei |
|
||||
| Password | !Abcde12345 |
|
||||
| Username | root |
|
||||
| Password | !Abcde12345 |
|
||||
|
||||
|
||||
## Public Access
|
||||
|
||||
| Domain | mysql.ishenwei.online |
|
||||
| -------- | --------------------- |
|
||||
| Port | 63307 |
|
||||
| Username | shenwei |
|
||||
| Password | !Abcde12345 |
|
||||
| Username | root |
|
||||
| Password | !Abcde12345 |
|
||||
|
||||
## MariaDB新安装后,需要强制创建一个用户用于远程访问(非本机IP访问),本机IP访问仅限root用户
|
||||
|
||||
进入 MariaDB(使用 socket 登陆):
|
||||
```
|
||||
sudo mysql -u root -p -S /run/mysqld/mysqld10.sock
|
||||
|
||||
```
|
||||
|
||||
查看 root 主机权限:
|
||||
``` sql
|
||||
select host, user from mysql.user;
|
||||
```
|
||||
|
||||
``` bash
|
||||
shenwei@SHENWEI_DS718:/usr/local/mariadb10/etc/mysql$ sudo mysql -u root -p -S /run/mysqld/mysqld10.sock
|
||||
Enter password:
|
||||
Welcome to the MariaDB monitor. Commands end with ; or \g.
|
||||
Your MariaDB connection id is 8
|
||||
Server version: 10.11.6-MariaDB Source distribution
|
||||
|
||||
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
|
||||
|
||||
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
|
||||
|
||||
MariaDB [(none)]> select host, user from mysql.user;
|
||||
+-----------+-------------+
|
||||
| Host | User |
|
||||
+-----------+-------------+
|
||||
| | PUBLIC |
|
||||
| localhost | mariadb.sys |
|
||||
| localhost | mysql |
|
||||
| localhost | root |
|
||||
+-----------+-------------+
|
||||
4 rows in set (0.002 sec)
|
||||
|
||||
```
|
||||
|
||||
这里已经看到关键问题了:
|
||||
**你的 MariaDB 只有 `root@localhost`,并没有 `root@%` 或你要连接用的用户账号**。
|
||||
而从你外部客户端连接失败的最常见原因就是:**没有对应的 Host/User 组合 + 缺少权限**。
|
||||
|
||||
你现在的 `mysql.user` 内容:
|
||||
|
||||
``` bash
|
||||
| | PUBLIC |
|
||||
| localhost | mariadb.sys |
|
||||
| localhost | mysql |
|
||||
| localhost | root |
|
||||
|
||||
```
|
||||
|
||||
|
||||
这里唯一能用的账号就是:
|
||||
|
||||
- `root@localhost` → **只能从本机 localhost 登录**
|
||||
这意味着从 **Synology Docker、其他机器、同网段的客户端** 都不能用 root 连接。
|
||||
|
||||
## 创建一个允许远程访问的用户
|
||||
|
||||
``` sql
|
||||
CREATE USER 'shenwei'@'%' IDENTIFIED BY '!Abcde12345';
|
||||
GRANT ALL PRIVILEGES ON *.* TO 'shenwei'@'%' WITH GRANT OPTION;
|
||||
FLUSH PRIVILEGES;
|
||||
|
||||
---
|
||||
title:
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [database, mariadb, mysql, nas]
|
||||
---
|
||||
|
||||
#nas #mysql #database #mariadb
|
||||
|
||||
```table-of-contents
|
||||
```
|
||||
|
||||
## Internal Access
|
||||
|
||||
| IP | 192.168.3.17 |
|
||||
| -------- | ------------ |
|
||||
| Port | 3307 |
|
||||
| Username | shenwei |
|
||||
| Password | !Abcde12345 |
|
||||
| Username | root |
|
||||
| Password | !Abcde12345 |
|
||||
|
||||
|
||||
## Public Access
|
||||
|
||||
| Domain | mysql.ishenwei.online |
|
||||
| -------- | --------------------- |
|
||||
| Port | 63307 |
|
||||
| Username | shenwei |
|
||||
| Password | !Abcde12345 |
|
||||
| Username | root |
|
||||
| Password | !Abcde12345 |
|
||||
|
||||
## MariaDB新安装后,需要强制创建一个用户用于远程访问(非本机IP访问),本机IP访问仅限root用户
|
||||
|
||||
进入 MariaDB(使用 socket 登陆):
|
||||
```
|
||||
sudo mysql -u root -p -S /run/mysqld/mysqld10.sock
|
||||
|
||||
```
|
||||
|
||||
查看 root 主机权限:
|
||||
``` sql
|
||||
select host, user from mysql.user;
|
||||
```
|
||||
|
||||
``` bash
|
||||
shenwei@SHENWEI_DS718:/usr/local/mariadb10/etc/mysql$ sudo mysql -u root -p -S /run/mysqld/mysqld10.sock
|
||||
Enter password:
|
||||
Welcome to the MariaDB monitor. Commands end with ; or \g.
|
||||
Your MariaDB connection id is 8
|
||||
Server version: 10.11.6-MariaDB Source distribution
|
||||
|
||||
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
|
||||
|
||||
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
|
||||
|
||||
MariaDB [(none)]> select host, user from mysql.user;
|
||||
+-----------+-------------+
|
||||
| Host | User |
|
||||
+-----------+-------------+
|
||||
| | PUBLIC |
|
||||
| localhost | mariadb.sys |
|
||||
| localhost | mysql |
|
||||
| localhost | root |
|
||||
+-----------+-------------+
|
||||
4 rows in set (0.002 sec)
|
||||
|
||||
```
|
||||
|
||||
这里已经看到关键问题了:
|
||||
**你的 MariaDB 只有 `root@localhost`,并没有 `root@%` 或你要连接用的用户账号**。
|
||||
而从你外部客户端连接失败的最常见原因就是:**没有对应的 Host/User 组合 + 缺少权限**。
|
||||
|
||||
你现在的 `mysql.user` 内容:
|
||||
|
||||
``` bash
|
||||
| | PUBLIC |
|
||||
| localhost | mariadb.sys |
|
||||
| localhost | mysql |
|
||||
| localhost | root |
|
||||
|
||||
```
|
||||
|
||||
|
||||
这里唯一能用的账号就是:
|
||||
|
||||
- `root@localhost` → **只能从本机 localhost 登录**
|
||||
这意味着从 **Synology Docker、其他机器、同网段的客户端** 都不能用 root 连接。
|
||||
|
||||
## 创建一个允许远程访问的用户
|
||||
|
||||
``` sql
|
||||
CREATE USER 'shenwei'@'%' IDENTIFIED BY '!Abcde12345';
|
||||
GRANT ALL PRIVILEGES ON *.* TO 'shenwei'@'%' WITH GRANT OPTION;
|
||||
FLUSH PRIVILEGES;
|
||||
|
||||
```
|
||||
@@ -1,121 +1,121 @@
|
||||
---
|
||||
title: NodeWarden - 把 Bitwarden 搬上 Cloudflare Workers,彻底告别服务器
|
||||
source: https://www.appinn.com/nodewarden/
|
||||
author: shenwei
|
||||
published: 2026-02-22
|
||||
created: 2026-02-27
|
||||
description: 部署 NodeWarden 之后的效果,就是在无服务器的情况下,也能在手机、电脑上使用 Bitwarden 客户端来保存密码了,支持自动登陆、二次验证之类的功能。
|
||||
tags: []
|
||||
---
|
||||
|
||||
|
||||
Bitwarden 是少数客户端与服务器端都开源的密码管理系统,支持完整自托管部署。@ [Appinn](https://www.appinn.com/nodewarden/)
|
||||
但有人更进一步:直接把服务器端运行在 Cloudflare Workers 上——也就是说,你连 VPS 都可以省了。
|
||||
|
||||

|
||||
|
||||
NodeWarden - 把 Bitwarden 搬上 Cloudflare Workers,彻底告别服务器 1
|
||||
|
||||
部署 NodeWarden 之后的效果,就是在无服务器的情况下,也能在手机、电脑上使用 Bitwarden 客户端来保存密码了,支持自动登陆、二次验证之类的功能。
|
||||
|
||||
## NodeWarden 与 Bitwarden 区别
|
||||
|
||||
| 能力项 | Bitwarden | NodeWarden | 说明 |
|
||||
| --- | --- | --- | --- |
|
||||
| 单用户保管库(登录/笔记/卡片/身份) | ✅ | ✅ | 基于Cloudflare D1 |
|
||||
| 文件夹 / 收藏 | ✅ | ✅ | 常用管理能力可用 |
|
||||
| 全量同步 `/api/sync` | ✅ | ✅ | 已做兼容与性能优化 |
|
||||
| 附件上传/下载 | ✅ | ✅ | 基于 Cloudflare R2 |
|
||||
| 导入功能 | ✅ | ✅ | 覆盖常见导入路径 |
|
||||
| 网站图标代理 | ✅ | ✅ | 通过 `/icons/{hostname}/icon.png` |
|
||||
| passkey、TOTP | ❌ | ✅ | 官方需要会员,我们的不需要 |
|
||||
| 多用户 | ✅ | ❌ | NodeWarden 定位单用户 |
|
||||
| 组织/集合/成员权限 | ✅ | ❌ | 没必要实现 |
|
||||
| 登录 2FA(TOTP/WebAuthn/Duo/Email) | ✅ | ⚠️ 部分支持 | 仅支持 TOTP(通过 `TOTP_SECRET` ) |
|
||||
| SSO / SCIM / 企业目录 | ✅ | ❌ | 没必要实现 |
|
||||
| Send | ✅ | ❌ | 基本没人用 |
|
||||
| 紧急访问 | ✅ | ❌ | 没必要实现 |
|
||||
| 管理后台 / 计费订阅 | ✅ | ❌ | 纯免费 |
|
||||
| 推送通知完整链路 | ✅ | ❌ | 没必要实现 |
|
||||
|
||||
## 必要条件
|
||||
|
||||
1. 你需要有一个 Cloudflare 账号(必须有一个域名和信用卡)
|
||||
2. 一个 GitHub 账号
|
||||
|
||||
## 具体部署步骤
|
||||
|
||||
### fork
|
||||
|
||||
- GitHub: [https://github.com/shuaiplus/NodeWarden](https://github.com/shuaiplus/NodeWarden)
|
||||

|
||||
|
||||
NodeWarden - 把 Bitwarden 搬上 Cloudflare Workers,彻底告别服务器 2
|
||||
|
||||
### 一键部署
|
||||
|
||||
在你自己的 GitHub 页面上,有一个按钮:
|
||||
|
||||

|
||||
|
||||
NodeWarden - 把 Bitwarden 搬上 Cloudflare Workers,彻底告别服务器 3
|
||||
|
||||
这个步骤需要在 Cloudflare 中绑定 GitHub 账号,根据页面提示即可。
|
||||
|
||||
### 设置 NodeWarden
|
||||
|
||||
部署成功之后,Cloudflare 会提供一个临时地址,类似 1nodewarden.apipnn.workers.dev ,用浏览器打开它,如果打不开,就绑定一个你自己的二级域名。
|
||||
|
||||

|
||||
|
||||
NodeWarden - 把 Bitwarden 搬上 Cloudflare Workers,彻底告别服务器 4
|
||||
|
||||
根据页面提示,一步一步进行即可。
|
||||
|
||||
这个步骤主要有:
|
||||
|
||||
1. 设置 JWT\_SECRET
|
||||
2. 设置自动更新 GitHub
|
||||
3. 设置主账号与密码
|
||||
4. 设置启用主账号的二次验证
|
||||

|
||||
|
||||
NodeWarden - 把 Bitwarden 搬上 Cloudflare Workers,彻底告别服务器 5
|
||||
|
||||
最后一步成功之后,还能选择彻底隐藏这个设置页面:
|
||||
|
||||

|
||||
|
||||
NodeWarden - 把 Bitwarden 搬上 Cloudflare Workers,彻底告别服务器 6
|
||||
|
||||
设置完成。
|
||||
|
||||
## 在客户端登录
|
||||
|
||||
打开你的 Bitwarden 官方客户端,在登录的地方选择自托管,并输入 **服务器 URL** :
|
||||
|
||||

|
||||
|
||||
NodeWarden - 把 Bitwarden 搬上 Cloudflare Workers,彻底告别服务器 7
|
||||
|
||||

|
||||
|
||||
NodeWarden - 把 Bitwarden 搬上 Cloudflare Workers,彻底告别服务器 8
|
||||
|
||||
之后,在使用刚刚设置页面设置的用户名和密码(如果设置了二次验证,还会要求输入验证码),就可以正常登录啦:
|
||||
|
||||

|
||||
|
||||
NodeWarden - 把 Bitwarden 搬上 Cloudflare Workers,彻底告别服务器 9
|
||||
|
||||
趁假期最后一天,快去试试吧。
|
||||
|
||||
---
|
||||
|
||||
原文:https://www.appinn.com/nodewarden/
|
||||
|
||||
## 我的NodeWarden
|
||||
|
||||
https://nodewarden.ishenwei.online/
|
||||
|
||||
---
|
||||
title: NodeWarden - 把 Bitwarden 搬上 Cloudflare Workers,彻底告别服务器
|
||||
source: https://www.appinn.com/nodewarden/
|
||||
author: shenwei
|
||||
published: 2026-02-22
|
||||
created: 2026-02-27
|
||||
description: 部署 NodeWarden 之后的效果,就是在无服务器的情况下,也能在手机、电脑上使用 Bitwarden 客户端来保存密码了,支持自动登陆、二次验证之类的功能。
|
||||
tags: []
|
||||
---
|
||||
|
||||
|
||||
Bitwarden 是少数客户端与服务器端都开源的密码管理系统,支持完整自托管部署。@ [Appinn](https://www.appinn.com/nodewarden/)
|
||||
但有人更进一步:直接把服务器端运行在 Cloudflare Workers 上——也就是说,你连 VPS 都可以省了。
|
||||
|
||||

|
||||
|
||||
NodeWarden - 把 Bitwarden 搬上 Cloudflare Workers,彻底告别服务器 1
|
||||
|
||||
部署 NodeWarden 之后的效果,就是在无服务器的情况下,也能在手机、电脑上使用 Bitwarden 客户端来保存密码了,支持自动登陆、二次验证之类的功能。
|
||||
|
||||
## NodeWarden 与 Bitwarden 区别
|
||||
|
||||
| 能力项 | Bitwarden | NodeWarden | 说明 |
|
||||
| --- | --- | --- | --- |
|
||||
| 单用户保管库(登录/笔记/卡片/身份) | ✅ | ✅ | 基于Cloudflare D1 |
|
||||
| 文件夹 / 收藏 | ✅ | ✅ | 常用管理能力可用 |
|
||||
| 全量同步 `/api/sync` | ✅ | ✅ | 已做兼容与性能优化 |
|
||||
| 附件上传/下载 | ✅ | ✅ | 基于 Cloudflare R2 |
|
||||
| 导入功能 | ✅ | ✅ | 覆盖常见导入路径 |
|
||||
| 网站图标代理 | ✅ | ✅ | 通过 `/icons/{hostname}/icon.png` |
|
||||
| passkey、TOTP | ❌ | ✅ | 官方需要会员,我们的不需要 |
|
||||
| 多用户 | ✅ | ❌ | NodeWarden 定位单用户 |
|
||||
| 组织/集合/成员权限 | ✅ | ❌ | 没必要实现 |
|
||||
| 登录 2FA(TOTP/WebAuthn/Duo/Email) | ✅ | ⚠️ 部分支持 | 仅支持 TOTP(通过 `TOTP_SECRET` ) |
|
||||
| SSO / SCIM / 企业目录 | ✅ | ❌ | 没必要实现 |
|
||||
| Send | ✅ | ❌ | 基本没人用 |
|
||||
| 紧急访问 | ✅ | ❌ | 没必要实现 |
|
||||
| 管理后台 / 计费订阅 | ✅ | ❌ | 纯免费 |
|
||||
| 推送通知完整链路 | ✅ | ❌ | 没必要实现 |
|
||||
|
||||
## 必要条件
|
||||
|
||||
1. 你需要有一个 Cloudflare 账号(必须有一个域名和信用卡)
|
||||
2. 一个 GitHub 账号
|
||||
|
||||
## 具体部署步骤
|
||||
|
||||
### fork
|
||||
|
||||
- GitHub: [https://github.com/shuaiplus/NodeWarden](https://github.com/shuaiplus/NodeWarden)
|
||||

|
||||
|
||||
NodeWarden - 把 Bitwarden 搬上 Cloudflare Workers,彻底告别服务器 2
|
||||
|
||||
### 一键部署
|
||||
|
||||
在你自己的 GitHub 页面上,有一个按钮:
|
||||
|
||||

|
||||
|
||||
NodeWarden - 把 Bitwarden 搬上 Cloudflare Workers,彻底告别服务器 3
|
||||
|
||||
这个步骤需要在 Cloudflare 中绑定 GitHub 账号,根据页面提示即可。
|
||||
|
||||
### 设置 NodeWarden
|
||||
|
||||
部署成功之后,Cloudflare 会提供一个临时地址,类似 1nodewarden.apipnn.workers.dev ,用浏览器打开它,如果打不开,就绑定一个你自己的二级域名。
|
||||
|
||||

|
||||
|
||||
NodeWarden - 把 Bitwarden 搬上 Cloudflare Workers,彻底告别服务器 4
|
||||
|
||||
根据页面提示,一步一步进行即可。
|
||||
|
||||
这个步骤主要有:
|
||||
|
||||
1. 设置 JWT\_SECRET
|
||||
2. 设置自动更新 GitHub
|
||||
3. 设置主账号与密码
|
||||
4. 设置启用主账号的二次验证
|
||||

|
||||
|
||||
NodeWarden - 把 Bitwarden 搬上 Cloudflare Workers,彻底告别服务器 5
|
||||
|
||||
最后一步成功之后,还能选择彻底隐藏这个设置页面:
|
||||
|
||||

|
||||
|
||||
NodeWarden - 把 Bitwarden 搬上 Cloudflare Workers,彻底告别服务器 6
|
||||
|
||||
设置完成。
|
||||
|
||||
## 在客户端登录
|
||||
|
||||
打开你的 Bitwarden 官方客户端,在登录的地方选择自托管,并输入 **服务器 URL** :
|
||||
|
||||

|
||||
|
||||
NodeWarden - 把 Bitwarden 搬上 Cloudflare Workers,彻底告别服务器 7
|
||||
|
||||

|
||||
|
||||
NodeWarden - 把 Bitwarden 搬上 Cloudflare Workers,彻底告别服务器 8
|
||||
|
||||
之后,在使用刚刚设置页面设置的用户名和密码(如果设置了二次验证,还会要求输入验证码),就可以正常登录啦:
|
||||
|
||||

|
||||
|
||||
NodeWarden - 把 Bitwarden 搬上 Cloudflare Workers,彻底告别服务器 9
|
||||
|
||||
趁假期最后一天,快去试试吧。
|
||||
|
||||
---
|
||||
|
||||
原文:https://www.appinn.com/nodewarden/
|
||||
|
||||
## 我的NodeWarden
|
||||
|
||||
https://nodewarden.ishenwei.online/
|
||||
|
||||
![[IMG-20260228191730714.png]]
|
||||
@@ -1,24 +1,24 @@
|
||||
---
|
||||
title:
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [clash, merlin-clash, rax50]
|
||||
---
|
||||
|
||||
#rax50 #merlin-clash #clash
|
||||
|
||||
![[IMG-20260304185325682.png]]
|
||||
|
||||
进入RAX50路由器管理界面
|
||||
|
||||
在RAX50的Merlin Clash界面,复制vless url进到小白一键订阅助手,并重命名配置文件比如 kiwi3
|
||||
![[IMG-20260304185325726.png]]
|
||||
|
||||
选择新建的配置文件
|
||||
点保存&启动
|
||||
如果不行,就再点一次快速重启
|
||||
|
||||
---
|
||||
title:
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [clash, merlin-clash, rax50]
|
||||
---
|
||||
|
||||
#rax50 #merlin-clash #clash
|
||||
|
||||
![[IMG-20260304185325682.png]]
|
||||
|
||||
进入RAX50路由器管理界面
|
||||
|
||||
在RAX50的Merlin Clash界面,复制vless url进到小白一键订阅助手,并重命名配置文件比如 kiwi3
|
||||
![[IMG-20260304185325726.png]]
|
||||
|
||||
选择新建的配置文件
|
||||
点保存&启动
|
||||
如果不行,就再点一次快速重启
|
||||
|
||||
![[IMG-20260304185325770.png]]
|
||||
@@ -1,111 +1,111 @@
|
||||
---
|
||||
title: 启动 SSH 服务
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [ssh, ubuntu]
|
||||
---
|
||||
|
||||
|
||||
#ubuntu #ssh
|
||||
|
||||
在 Ubuntu 24.04 中开启 SSH 服务非常简单,但这个版本引入了一个重要的变化:**默认使用 `ssh.socket` 激活机制**(即只有在连接请求进入时才启动 SSH 守护进程),这与旧版本略有不同。
|
||||
|
||||
以下是开启 SSH 的标准步骤:
|
||||
|
||||
### 1. 安装 OpenSSH Server
|
||||
|
||||
首先,你需要确保系统中安装了 SSH 服务端。打开终端并输入:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo apt update
|
||||
sudo apt install openssh-server -y
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 2. 启动并设置开机自启
|
||||
|
||||
在 Ubuntu 24.04 中,你可以使用以下命令来确保服务处于活动状态并随系统启动:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
# 启动 SSH 服务
|
||||
sudo systemctl start ssh
|
||||
|
||||
# 设置开机自启
|
||||
sudo systemctl enable ssh
|
||||
```
|
||||
|
||||
> **注意:** 如果你发现 `systemctl status ssh` 显示服务未运行,别担心。24.04 默认使用 **Socket 激活** 模式。你可以通过 `sudo systemctl status ssh.socket` 检查监听状态。
|
||||
|
||||
---
|
||||
|
||||
### 3. 配置防火墙 (UFW)
|
||||
|
||||
如果你的 Ubuntu 开启了防火墙,你需要手动允许 SSH 流量(默认端口 22):
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo ufw allow ssh
|
||||
# 或者
|
||||
sudo ufw allow 22/tcp
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 4. 验证 SSH 状态
|
||||
|
||||
你可以通过以下命令检查 SSH 是否已经准备就绪:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo systemctl status ssh
|
||||
```
|
||||
|
||||
如果看到 `active (running)` 或者 `ListenStream=22` (针对 socket 模式),说明已经成功开启。
|
||||
|
||||
---
|
||||
|
||||
### 5. 如何从远程连接
|
||||
|
||||
在另一台电脑上,使用你的**用户名**和**局域网 IP** 进行连接:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
ssh username@192.168.x.x
|
||||
```
|
||||
|
||||
_(如果你不知道本机 IP,请使用前面提到的 `hostname -I` 命令查看)_
|
||||
|
||||
---
|
||||
|
||||
### 进阶建议:24.04 的特殊说明
|
||||
|
||||
如果你习惯了旧版本的管理方式,或者需要修改**自定义端口**(例如改为 2222),在 24.04 中你可能需要注意:
|
||||
|
||||
- **修改端口:** 现在推荐通过 `sudo systemctl edit ssh.socket` 来修改监听端口,而不仅仅是修改 `/etc/ssh/sshd_config`。
|
||||
|
||||
- **切换回传统模式:** 如果你希望 SSH 像以前一样一直作为后台进程运行,可以执行:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo systemctl disable --now ssh.socket
|
||||
sudo systemctl enable --now ssh.service
|
||||
```
|
||||
|
||||
|
||||
你想了解如何为 SSH 配置密钥登录以提高安全性吗?
|
||||
|
||||
---
|
||||
|
||||
---
|
||||
title: 启动 SSH 服务
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [ssh, ubuntu]
|
||||
---
|
||||
|
||||
|
||||
#ubuntu #ssh
|
||||
|
||||
在 Ubuntu 24.04 中开启 SSH 服务非常简单,但这个版本引入了一个重要的变化:**默认使用 `ssh.socket` 激活机制**(即只有在连接请求进入时才启动 SSH 守护进程),这与旧版本略有不同。
|
||||
|
||||
以下是开启 SSH 的标准步骤:
|
||||
|
||||
### 1. 安装 OpenSSH Server
|
||||
|
||||
首先,你需要确保系统中安装了 SSH 服务端。打开终端并输入:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo apt update
|
||||
sudo apt install openssh-server -y
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 2. 启动并设置开机自启
|
||||
|
||||
在 Ubuntu 24.04 中,你可以使用以下命令来确保服务处于活动状态并随系统启动:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
# 启动 SSH 服务
|
||||
sudo systemctl start ssh
|
||||
|
||||
# 设置开机自启
|
||||
sudo systemctl enable ssh
|
||||
```
|
||||
|
||||
> **注意:** 如果你发现 `systemctl status ssh` 显示服务未运行,别担心。24.04 默认使用 **Socket 激活** 模式。你可以通过 `sudo systemctl status ssh.socket` 检查监听状态。
|
||||
|
||||
---
|
||||
|
||||
### 3. 配置防火墙 (UFW)
|
||||
|
||||
如果你的 Ubuntu 开启了防火墙,你需要手动允许 SSH 流量(默认端口 22):
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo ufw allow ssh
|
||||
# 或者
|
||||
sudo ufw allow 22/tcp
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 4. 验证 SSH 状态
|
||||
|
||||
你可以通过以下命令检查 SSH 是否已经准备就绪:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo systemctl status ssh
|
||||
```
|
||||
|
||||
如果看到 `active (running)` 或者 `ListenStream=22` (针对 socket 模式),说明已经成功开启。
|
||||
|
||||
---
|
||||
|
||||
### 5. 如何从远程连接
|
||||
|
||||
在另一台电脑上,使用你的**用户名**和**局域网 IP** 进行连接:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
ssh username@192.168.x.x
|
||||
```
|
||||
|
||||
_(如果你不知道本机 IP,请使用前面提到的 `hostname -I` 命令查看)_
|
||||
|
||||
---
|
||||
|
||||
### 进阶建议:24.04 的特殊说明
|
||||
|
||||
如果你习惯了旧版本的管理方式,或者需要修改**自定义端口**(例如改为 2222),在 24.04 中你可能需要注意:
|
||||
|
||||
- **修改端口:** 现在推荐通过 `sudo systemctl edit ssh.socket` 来修改监听端口,而不仅仅是修改 `/etc/ssh/sshd_config`。
|
||||
|
||||
- **切换回传统模式:** 如果你希望 SSH 像以前一样一直作为后台进程运行,可以执行:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo systemctl disable --now ssh.socket
|
||||
sudo systemctl enable --now ssh.service
|
||||
```
|
||||
|
||||
|
||||
你想了解如何为 SSH 配置密钥登录以提高安全性吗?
|
||||
|
||||
---
|
||||
|
||||
[How to Enable SSH on Ubuntu 24.04](https://www.youtube.com/watch?v=F1_fkOYgu8g) 这个视频详细演示了在 Ubuntu 系统中从安装 OpenSSH 到通过防火墙配置的完整操作流程,非常适合新安装系统的用户参考。
|
||||
@@ -1,284 +1,284 @@
|
||||
---
|
||||
title:
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [docker, proxychains, ubuntu, v2rayn]
|
||||
---
|
||||
|
||||
#ubuntu #proxychains #docker #v2rayn
|
||||
|
||||
```table-of-contents
|
||||
```
|
||||
## 安装V2RayN
|
||||
请参考以下文章来安装V2RayN
|
||||
[[🟠3X-UI Xray on BandwagonVPS]]
|
||||
[[🟠安装v2rayN]]
|
||||
![[IMG-20251229190624376.png]]
|
||||
|
||||
|
||||
|
||||
## 验证代理可以科学上网
|
||||
|
||||
### 使用 `curl` 直接测试(最推荐)
|
||||
|
||||
这是最快、最直接的方法。我们可以强制 `curl` 使用 SOCKS5 代理去访问 Google 的状态页。
|
||||
**执行命令:**
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
curl -x socks5h://127.0.0.1:10808 -v https://www.google.com
|
||||
```
|
||||
|
||||
- **参数解释:**
|
||||
|
||||
- `-x socks5h://`:指定使用 SOCKS5 代理。注意加个 `h`,这表示让代理服务器去解析域名(防止本地 DNS 污染导致测试失败)。
|
||||
- `-v`:(Verbose) 显示详细连接过程。
|
||||
|
||||
- **判断标准:**
|
||||
- 如果看到 `HTTP/2 200` 或者大量的 HTML 文本,说明**代理成功**。
|
||||
- 如果显示 `Connection refused` 或 `Timeout`,说明**端口未开放或 V2Ray 未运行**。
|
||||
|
||||
|
||||
|
||||
|
||||
## 配置 ProxyChains
|
||||
|
||||
ProxyChains 是最灵活的工具,它可以让原本不支持代理的终端命令通过代理运行。
|
||||
|
||||
1. **编辑配置文件:**
|
||||
```
|
||||
sudo nano /etc/proxychains4.conf
|
||||
```
|
||||
|
||||
(如果是旧版本可能是 `/etc/proxychains.conf`)
|
||||
|
||||
2. 修改 ProxyList:
|
||||
|
||||
滑动到文件末尾,注释掉默认的 socks4,添加你的 V2Ray 节点信息:
|
||||
|
||||
```
|
||||
[ProxyList]
|
||||
# 格式: 类型 IP 端口
|
||||
socks5 127.0.0.1 10808
|
||||
```
|
||||
|
||||
3. 使用方法:
|
||||
|
||||
在任何命令前加上 proxychains4 即可。例如:
|
||||
|
||||
```
|
||||
proxychains4 curl https://www.google.com
|
||||
``````
|
||||
|
||||
|
||||
使用:
|
||||
``` bash
|
||||
proxychains git clone https://github.com/...
|
||||
proxychains curl https://google.com
|
||||
```
|
||||
|
||||
|
||||
|
||||
## 2. 配置 Git 代理
|
||||
|
||||
Git 不会自动走系统变量,建议为其设置全局配置。
|
||||
|
||||
- **设置 SOCKS5 代理(推荐):**
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
git config --global http.proxy 'socks5://127.0.0.1:10808'
|
||||
git config --global https.proxy 'socks5://127.0.0.1:10808'
|
||||
```
|
||||
|
||||
- **取消设置:**
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
git config --global --unset http.proxy
|
||||
git config --global --unset https.proxy
|
||||
```
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 3. 配置 Docker Pull (Daemon 代理)
|
||||
|
||||
`docker pull` 是由 Docker 守护进程(Daemon)执行的,它不读取普通用户的环境变量。
|
||||
|
||||
1. **创建配置目录:**
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo mkdir -p /etc/systemd/system/docker.service.d
|
||||
```
|
||||
|
||||
2. **创建代理配置文件:**
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo nano /etc/systemd/system/docker.service.d/http-proxy.conf
|
||||
```
|
||||
|
||||
3. **添加以下内容:**
|
||||
|
||||
Ini, TOML
|
||||
|
||||
```
|
||||
[Service]
|
||||
Environment="HTTP_PROXY=http://127.0.0.1:10808/"
|
||||
Environment="HTTPS_PROXY=http://127.0.0.1:10808/"
|
||||
Environment="NO_PROXY=localhost,127.0.0.1,docker-registry.somecorporate.com"
|
||||
```
|
||||
|
||||
_(注:这里通常使用 HTTP 代理端口)_
|
||||
|
||||
4. **重启 Docker 服务:**
|
||||
|
||||
```
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl restart docker
|
||||
```
|
||||
**检查 Docker 守护进程是否加载了代理:**
|
||||
|
||||
**执行命令:**
|
||||
```
|
||||
docker info | grep -i proxy
|
||||
```
|
||||
|
||||
- **预期输出:** 如果你配置成功,你应该能看到类似下面的信息:
|
||||
```
|
||||
HTTP Proxy: http://127.0.0.1:10808
|
||||
HTTPS Proxy: http://127.0.0.1:10808
|
||||
No Proxy: localhost,127.0.0.1
|
||||
```
|
||||
_(注:如果这里没有输出,说明 `/etc/systemd/system/docker.service.d/http-proxy.conf` 配置未生效,请记得执行 `systemctl daemon-reload` 和 `systemctl restart docker`)_
|
||||
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 4. 配置 Docker 容器内应用代理
|
||||
|
||||
#### docker-compose.yml里面直接加 env
|
||||
```
|
||||
`environment:
|
||||
- ALL_PROXY=socks5://172.24.0.1:10808
|
||||
```
|
||||
|
||||
For example:gi
|
||||
```
|
||||
version: "3.9"
|
||||
|
||||
services:
|
||||
homarr:
|
||||
image: ghcr.io/homarr-labs/homarr
|
||||
container_name: homarr
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "7575:7575"
|
||||
volumes:
|
||||
- /home/shenwei/Docker/homarr/appdata:/appdata
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
environment:
|
||||
- SECRET_ENCRYPTION_KEY=4a418def4be700be26672aa57a4c3d4b94abd2cf97021b5c4ecd3c1644c1f071
|
||||
- ALL_PROXY=socks5://172.24.0.1:10808
|
||||
|
||||
```
|
||||
|
||||
2个方法知道如何获取docker network gate IP
|
||||
1. Docker Portainer
|
||||
![[IMG-20251229190624729.png]]
|
||||
2. 获取运行时container的network gateway
|
||||
适用于容器已经在运行的情况。进入容器的交互式 shell:
|
||||
```
|
||||
docker exec -it <container_name_or_id> /bin/bash
|
||||
```
|
||||
- 如果容器没有 `bash`,可以用 `sh`:
|
||||
```
|
||||
docker exec -it <container_name_or_id> sh
|
||||
```
|
||||
|
||||
运行以下命令获取network gateway IP:
|
||||
```
|
||||
ip route | awk '/default/ { print $3 }'
|
||||
```
|
||||
|
||||
For example:
|
||||
``` bash
|
||||
|
||||
root@shenwei-HP-ZBook-01:/home/shenwei/Docker/homarr# docker exec -it homarr /bin/bash
|
||||
23c94b2dfeb5:/app# ip route
|
||||
default via 172.24.0.1 dev eth0
|
||||
172.24.0.0/16 dev eth0 scope link src 172.24.0.2
|
||||
23c94b2dfeb5:/app# ip route | awk '/default/ { print $3 }'
|
||||
172.24.0.1
|
||||
|
||||
|
||||
```
|
||||
|
||||
|
||||
如果你希望容器内部的程序(如 `apt-get`、`pip`)能上网,有两种方案:
|
||||
|
||||
### 方案 A:全局配置(推荐 Docker 17.07+)
|
||||
|
||||
修改当前用户的 Docker 客户端配置文件,这样所有 `docker run` 的容器都会自动带上代理环境变量。
|
||||
|
||||
1. **编辑配置文件:**
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
mkdir -p ~/.docker
|
||||
nano ~/.docker/config.json
|
||||
```
|
||||
|
||||
2. **添加内容:**
|
||||
|
||||
JSON
|
||||
|
||||
```
|
||||
{
|
||||
"proxies": {
|
||||
"default": {
|
||||
"httpProxy": "http://127.0.0.1:1081",
|
||||
"httpsProxy": "http://127.0.0.1:1081",
|
||||
"noProxy": "localhost,127.0.0.1"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**注意:** 如果你的容器使用的是 `bridge` 网络,`127.0.0.1` 指向的是容器内部。你需要将 IP 改为宿主机的虚拟网桥 IP(通常是 `172.17.0.1`)。
|
||||
|
||||
|
||||
### 方案 B:运行时临时指定
|
||||
|
||||
在启动容器时通过 `-e` 参数注入环境变量:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
docker run -e HTTP_PROXY="http://宿主机IP:1081" -e HTTPS_PROXY="http://宿主机IP:1081" my_image
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 总结建议
|
||||
|
||||
|**场景**|**推荐方式**|
|
||||
|---|---|
|
||||
|**临时终端命令**|`proxychains4 <command>`|
|
||||
|**Git 操作**|`git config --global`|
|
||||
|**下载 Docker 镜像**|修改 `systemd/system/docker.service.d`|
|
||||
|**容器内部业务**|修改 `~/.docker/config.json`|
|
||||
|
||||
---
|
||||
title:
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [docker, proxychains, ubuntu, v2rayn]
|
||||
---
|
||||
|
||||
#ubuntu #proxychains #docker #v2rayn
|
||||
|
||||
```table-of-contents
|
||||
```
|
||||
## 安装V2RayN
|
||||
请参考以下文章来安装V2RayN
|
||||
[[🟠3X-UI Xray on BandwagonVPS]]
|
||||
[[🟠安装v2rayN]]
|
||||
![[IMG-20251229190624376.png]]
|
||||
|
||||
|
||||
|
||||
## 验证代理可以科学上网
|
||||
|
||||
### 使用 `curl` 直接测试(最推荐)
|
||||
|
||||
这是最快、最直接的方法。我们可以强制 `curl` 使用 SOCKS5 代理去访问 Google 的状态页。
|
||||
**执行命令:**
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
curl -x socks5h://127.0.0.1:10808 -v https://www.google.com
|
||||
```
|
||||
|
||||
- **参数解释:**
|
||||
|
||||
- `-x socks5h://`:指定使用 SOCKS5 代理。注意加个 `h`,这表示让代理服务器去解析域名(防止本地 DNS 污染导致测试失败)。
|
||||
- `-v`:(Verbose) 显示详细连接过程。
|
||||
|
||||
- **判断标准:**
|
||||
- 如果看到 `HTTP/2 200` 或者大量的 HTML 文本,说明**代理成功**。
|
||||
- 如果显示 `Connection refused` 或 `Timeout`,说明**端口未开放或 V2Ray 未运行**。
|
||||
|
||||
|
||||
|
||||
|
||||
## 配置 ProxyChains
|
||||
|
||||
ProxyChains 是最灵活的工具,它可以让原本不支持代理的终端命令通过代理运行。
|
||||
|
||||
1. **编辑配置文件:**
|
||||
```
|
||||
sudo nano /etc/proxychains4.conf
|
||||
```
|
||||
|
||||
(如果是旧版本可能是 `/etc/proxychains.conf`)
|
||||
|
||||
2. 修改 ProxyList:
|
||||
|
||||
滑动到文件末尾,注释掉默认的 socks4,添加你的 V2Ray 节点信息:
|
||||
|
||||
```
|
||||
[ProxyList]
|
||||
# 格式: 类型 IP 端口
|
||||
socks5 127.0.0.1 10808
|
||||
```
|
||||
|
||||
3. 使用方法:
|
||||
|
||||
在任何命令前加上 proxychains4 即可。例如:
|
||||
|
||||
```
|
||||
proxychains4 curl https://www.google.com
|
||||
``````
|
||||
|
||||
|
||||
使用:
|
||||
``` bash
|
||||
proxychains git clone https://github.com/...
|
||||
proxychains curl https://google.com
|
||||
```
|
||||
|
||||
|
||||
|
||||
## 2. 配置 Git 代理
|
||||
|
||||
Git 不会自动走系统变量,建议为其设置全局配置。
|
||||
|
||||
- **设置 SOCKS5 代理(推荐):**
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
git config --global http.proxy 'socks5://127.0.0.1:10808'
|
||||
git config --global https.proxy 'socks5://127.0.0.1:10808'
|
||||
```
|
||||
|
||||
- **取消设置:**
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
git config --global --unset http.proxy
|
||||
git config --global --unset https.proxy
|
||||
```
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 3. 配置 Docker Pull (Daemon 代理)
|
||||
|
||||
`docker pull` 是由 Docker 守护进程(Daemon)执行的,它不读取普通用户的环境变量。
|
||||
|
||||
1. **创建配置目录:**
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo mkdir -p /etc/systemd/system/docker.service.d
|
||||
```
|
||||
|
||||
2. **创建代理配置文件:**
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo nano /etc/systemd/system/docker.service.d/http-proxy.conf
|
||||
```
|
||||
|
||||
3. **添加以下内容:**
|
||||
|
||||
Ini, TOML
|
||||
|
||||
```
|
||||
[Service]
|
||||
Environment="HTTP_PROXY=http://127.0.0.1:10808/"
|
||||
Environment="HTTPS_PROXY=http://127.0.0.1:10808/"
|
||||
Environment="NO_PROXY=localhost,127.0.0.1,docker-registry.somecorporate.com"
|
||||
```
|
||||
|
||||
_(注:这里通常使用 HTTP 代理端口)_
|
||||
|
||||
4. **重启 Docker 服务:**
|
||||
|
||||
```
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl restart docker
|
||||
```
|
||||
**检查 Docker 守护进程是否加载了代理:**
|
||||
|
||||
**执行命令:**
|
||||
```
|
||||
docker info | grep -i proxy
|
||||
```
|
||||
|
||||
- **预期输出:** 如果你配置成功,你应该能看到类似下面的信息:
|
||||
```
|
||||
HTTP Proxy: http://127.0.0.1:10808
|
||||
HTTPS Proxy: http://127.0.0.1:10808
|
||||
No Proxy: localhost,127.0.0.1
|
||||
```
|
||||
_(注:如果这里没有输出,说明 `/etc/systemd/system/docker.service.d/http-proxy.conf` 配置未生效,请记得执行 `systemctl daemon-reload` 和 `systemctl restart docker`)_
|
||||
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 4. 配置 Docker 容器内应用代理
|
||||
|
||||
#### docker-compose.yml里面直接加 env
|
||||
```
|
||||
`environment:
|
||||
- ALL_PROXY=socks5://172.24.0.1:10808
|
||||
```
|
||||
|
||||
For example:gi
|
||||
```
|
||||
version: "3.9"
|
||||
|
||||
services:
|
||||
homarr:
|
||||
image: ghcr.io/homarr-labs/homarr
|
||||
container_name: homarr
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "7575:7575"
|
||||
volumes:
|
||||
- /home/shenwei/Docker/homarr/appdata:/appdata
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
environment:
|
||||
- SECRET_ENCRYPTION_KEY=4a418def4be700be26672aa57a4c3d4b94abd2cf97021b5c4ecd3c1644c1f071
|
||||
- ALL_PROXY=socks5://172.24.0.1:10808
|
||||
|
||||
```
|
||||
|
||||
2个方法知道如何获取docker network gate IP
|
||||
1. Docker Portainer
|
||||
![[IMG-20251229190624729.png]]
|
||||
2. 获取运行时container的network gateway
|
||||
适用于容器已经在运行的情况。进入容器的交互式 shell:
|
||||
```
|
||||
docker exec -it <container_name_or_id> /bin/bash
|
||||
```
|
||||
- 如果容器没有 `bash`,可以用 `sh`:
|
||||
```
|
||||
docker exec -it <container_name_or_id> sh
|
||||
```
|
||||
|
||||
运行以下命令获取network gateway IP:
|
||||
```
|
||||
ip route | awk '/default/ { print $3 }'
|
||||
```
|
||||
|
||||
For example:
|
||||
``` bash
|
||||
|
||||
root@shenwei-HP-ZBook-01:/home/shenwei/Docker/homarr# docker exec -it homarr /bin/bash
|
||||
23c94b2dfeb5:/app# ip route
|
||||
default via 172.24.0.1 dev eth0
|
||||
172.24.0.0/16 dev eth0 scope link src 172.24.0.2
|
||||
23c94b2dfeb5:/app# ip route | awk '/default/ { print $3 }'
|
||||
172.24.0.1
|
||||
|
||||
|
||||
```
|
||||
|
||||
|
||||
如果你希望容器内部的程序(如 `apt-get`、`pip`)能上网,有两种方案:
|
||||
|
||||
### 方案 A:全局配置(推荐 Docker 17.07+)
|
||||
|
||||
修改当前用户的 Docker 客户端配置文件,这样所有 `docker run` 的容器都会自动带上代理环境变量。
|
||||
|
||||
1. **编辑配置文件:**
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
mkdir -p ~/.docker
|
||||
nano ~/.docker/config.json
|
||||
```
|
||||
|
||||
2. **添加内容:**
|
||||
|
||||
JSON
|
||||
|
||||
```
|
||||
{
|
||||
"proxies": {
|
||||
"default": {
|
||||
"httpProxy": "http://127.0.0.1:1081",
|
||||
"httpsProxy": "http://127.0.0.1:1081",
|
||||
"noProxy": "localhost,127.0.0.1"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**注意:** 如果你的容器使用的是 `bridge` 网络,`127.0.0.1` 指向的是容器内部。你需要将 IP 改为宿主机的虚拟网桥 IP(通常是 `172.17.0.1`)。
|
||||
|
||||
|
||||
### 方案 B:运行时临时指定
|
||||
|
||||
在启动容器时通过 `-e` 参数注入环境变量:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
docker run -e HTTP_PROXY="http://宿主机IP:1081" -e HTTPS_PROXY="http://宿主机IP:1081" my_image
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 总结建议
|
||||
|
||||
|**场景**|**推荐方式**|
|
||||
|---|---|
|
||||
|**临时终端命令**|`proxychains4 <command>`|
|
||||
|**Git 操作**|`git config --global`|
|
||||
|**下载 Docker 镜像**|修改 `systemd/system/docker.service.d`|
|
||||
|**容器内部业务**|修改 `~/.docker/config.json`|
|
||||
|
||||
如果你在配置过程中遇到“连接被拒绝 (Connection Refused)”的问题,请检查 V2Ray 配置文件中是否开启了 HTTP 代理协议,并确认端口号是否正确。
|
||||
@@ -1,424 +1,424 @@
|
||||
---
|
||||
title: Ubuntu 安装 FRP 0.65.0(x86_64)操作笔记
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [frp, frpc, ubuntu]
|
||||
---
|
||||
|
||||
# Ubuntu 安装 FRP 0.65.0(x86_64)操作笔记
|
||||
|
||||
#ubuntu #frp #frpc
|
||||
```table-of-contents
|
||||
```
|
||||
|
||||
- **FRP版本**:0.65.0
|
||||
- **CPU架构**:x86_64 (amd64)
|
||||
- **安装路径**:`/opt/frp/frp_0.65.0_linux_amd64`
|
||||
- **配置文件**:`frpc.toml`
|
||||
- **服务管理**:systemd
|
||||
|
||||
此文档可以直接保存为 **README.md 或运维手册**。
|
||||
|
||||
---
|
||||
|
||||
## 一、环境信息
|
||||
|
||||
| 项目 | 内容 |
|
||||
| ----- | ---------------------------------- |
|
||||
| 系统 | Ubuntu Server 24.04 |
|
||||
| 架构 | x86_64 (amd64) |
|
||||
| 软件 | FRP 0.65.0 |
|
||||
| 安装目录 | `/opt/frp/frp_0.65.0_linux_amd64` |
|
||||
| 客户端程序 | `frpc` |
|
||||
| 配置文件 | `frpc.toml` |
|
||||
| 服务管理 | systemd |
|
||||
|
||||
---
|
||||
|
||||
## 二、创建安装目录
|
||||
|
||||
```bash
|
||||
sudo mkdir -p /opt/frp
|
||||
sudo chown -R $(whoami) /opt/frp
|
||||
```
|
||||
|
||||
进入目录:
|
||||
|
||||
```bash
|
||||
cd /opt/frp
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 三、下载 FRP
|
||||
|
||||
下载 **x86_64 版本**:
|
||||
|
||||
```bash
|
||||
wget https://github.com/fatedier/frp/releases/download/v0.65.0/frp_0.65.0_linux_amd64.tar.gz
|
||||
```
|
||||
|
||||
如果没有 wget:
|
||||
|
||||
```bash
|
||||
sudo apt update
|
||||
sudo apt install -y wget
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 四、解压 FRP
|
||||
|
||||
```bash
|
||||
tar -xzf frp_0.65.0_linux_amd64.tar.gz
|
||||
```
|
||||
|
||||
解压后目录结构:
|
||||
|
||||
```
|
||||
/opt/frp
|
||||
└── frp_0.65.0_linux_amd64
|
||||
├── frpc
|
||||
├── frps
|
||||
├── frpc.toml
|
||||
├── frps.toml
|
||||
└── LICENSE
|
||||
```
|
||||
|
||||
进入目录:
|
||||
|
||||
```bash
|
||||
cd /opt/frp/frp_0.65.0_linux_amd64
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 五、修改 frpc.toml 配置
|
||||
|
||||
编辑配置:
|
||||
|
||||
```bash
|
||||
nano /opt/frp/frp_0.65.0_linux_amd64/frpc.toml
|
||||
```
|
||||
|
||||
示例配置:
|
||||
|
||||
```toml
|
||||
serverAddr = "192.227.222.142"
|
||||
serverPort = 7000
|
||||
|
||||
[auth]
|
||||
token = "your_token_here"
|
||||
|
||||
[[proxies]]
|
||||
name = "ssh"
|
||||
type = "tcp"
|
||||
localIP = "127.0.0.1"
|
||||
localPort = 22
|
||||
remotePort = 6000
|
||||
```
|
||||
|
||||
参数说明:
|
||||
|
||||
|参数|说明|
|
||||
|---|---|
|
||||
|serverAddr|frps服务器地址|
|
||||
|serverPort|frps监听端口|
|
||||
|auth.token|认证token|
|
||||
|localIP|本地服务地址|
|
||||
|localPort|本地端口|
|
||||
|remotePort|frps映射端口|
|
||||
|
||||
---
|
||||
|
||||
## 六、测试运行
|
||||
|
||||
进入目录:
|
||||
|
||||
```bash
|
||||
cd /opt/frp/frp_0.65.0_linux_amd64
|
||||
```
|
||||
|
||||
启动客户端:
|
||||
|
||||
```bash
|
||||
./frpc -c frpc.toml
|
||||
```
|
||||
|
||||
成功日志示例:
|
||||
|
||||
```
|
||||
login to server success
|
||||
proxy added: ssh
|
||||
start proxy success
|
||||
```
|
||||
|
||||
按 `Ctrl + C` 停止测试。
|
||||
|
||||
---
|
||||
|
||||
## 七、systemd 服务管理(推荐)
|
||||
|
||||
### 1 创建 systemd 服务文件
|
||||
|
||||
```bash
|
||||
sudo nano /etc/systemd/system/frpc.service
|
||||
```
|
||||
|
||||
### 2 配置内容
|
||||
|
||||
```ini
|
||||
[Unit]
|
||||
Description=frp client
|
||||
After=network-online.target
|
||||
Wants=network-online.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
ExecStart=/opt/frp/frp_0.65.0_linux_amd64/frpc -c /opt/frp/frp_0.65.0_linux_amd64/frpc.toml
|
||||
Restart=on-failure
|
||||
RestartSec=10
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
```
|
||||
|
||||
### 3 重新加载 systemd
|
||||
|
||||
```bash
|
||||
sudo systemctl daemon-reload
|
||||
```
|
||||
|
||||
### 4 启动 frpc 服务
|
||||
|
||||
```bash
|
||||
sudo systemctl start frpc
|
||||
```
|
||||
|
||||
### 5 设置开机自启
|
||||
|
||||
```bash
|
||||
sudo systemctl enable frpc
|
||||
```
|
||||
|
||||
### 6 查看服务状态
|
||||
|
||||
```bash
|
||||
sudo systemctl status frpc
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 八、常用维护命令
|
||||
|
||||
### 查看 frpc 进程
|
||||
|
||||
```bash
|
||||
ps aux | grep frpc
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 查看日志
|
||||
|
||||
```bash
|
||||
sudo journalctl -u frpc -f
|
||||
```
|
||||
|
||||
或查看历史日志:
|
||||
|
||||
```bash
|
||||
sudo journalctl -u frpc --no-pager -n 50
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 重启 frpc
|
||||
|
||||
```bash
|
||||
sudo systemctl restart frpc
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 停止 frpc
|
||||
|
||||
```bash
|
||||
sudo systemctl stop frpc
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 禁用开机自启
|
||||
|
||||
```bash
|
||||
sudo systemctl disable frpc
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 九、卸载 FRP
|
||||
|
||||
1. 停止服务:
|
||||
|
||||
```bash
|
||||
sudo systemctl stop frpc
|
||||
sudo systemctl disable frpc
|
||||
```
|
||||
|
||||
2. 删除服务文件:
|
||||
|
||||
```bash
|
||||
sudo rm /etc/systemd/system/frpc.service
|
||||
sudo systemctl daemon-reload
|
||||
```
|
||||
|
||||
3. 删除安装目录:
|
||||
|
||||
```bash
|
||||
sudo rm -rf /opt/frp
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 十、升级 FRP
|
||||
|
||||
升级步骤:
|
||||
|
||||
```
|
||||
停止 frpc
|
||||
↓
|
||||
下载新版本
|
||||
↓
|
||||
解压
|
||||
↓
|
||||
替换目录
|
||||
↓
|
||||
重新运行
|
||||
```
|
||||
|
||||
示例:
|
||||
|
||||
```bash
|
||||
sudo systemctl stop frpc
|
||||
cd /opt/frp
|
||||
wget https://github.com/fatedier/frp/releases/download/v0.66.0/frp_0.66.0_linux_amd64.tar.gz
|
||||
tar -xzf frp_0.66.0_linux_amd64.tar.gz
|
||||
# 如果需要可以更新软链接
|
||||
sudo systemctl start frpc
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 十一、最终目录结构
|
||||
|
||||
```
|
||||
/opt/frp
|
||||
└── frp_0.65.0_linux_amd64
|
||||
├── frpc
|
||||
├── frps
|
||||
├── frpc.toml
|
||||
└── frps.toml
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 十二、生产环境最佳实践
|
||||
|
||||
### 1 统一路径
|
||||
|
||||
```
|
||||
/opt/frp/<version>
|
||||
```
|
||||
|
||||
方便版本切换。
|
||||
|
||||
例如:
|
||||
|
||||
```
|
||||
/opt/frp/frp_0.65.0_linux_amd64
|
||||
/opt/frp/frp_0.66.0_linux_amd64
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 2 创建软链接
|
||||
|
||||
```
|
||||
/opt/frp/current
|
||||
```
|
||||
|
||||
示例:
|
||||
|
||||
```bash
|
||||
sudo ln -sfn /opt/frp/frp_0.65.0_linux_amd64 /opt/frp/current
|
||||
```
|
||||
|
||||
启动时(修改 systemd 服务文件):
|
||||
|
||||
```ini
|
||||
ExecStart=/opt/frp/current/frpc -c /opt/frp/current/frpc.toml
|
||||
```
|
||||
|
||||
升级时只需要切换 symlink,无需修改 systemd 配置。
|
||||
|
||||
---
|
||||
|
||||
### 3 日志管理
|
||||
|
||||
建议使用 journald 日志,可通过以下命令查看:
|
||||
|
||||
```bash
|
||||
sudo journalctl -u frpc -f
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 十三、快速启动命令
|
||||
|
||||
日常手动运行(不通过 systemd):
|
||||
|
||||
```bash
|
||||
cd /opt/frp/frp_0.65.0_linux_amd64
|
||||
./frpc -c frpc.toml
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 十四、故障排查
|
||||
|
||||
### 服务启动失败
|
||||
|
||||
1. 检查配置文件语法:
|
||||
|
||||
```bash
|
||||
./frpc validate -c frpc.toml
|
||||
```
|
||||
|
||||
2. 查看详细错误日志:
|
||||
|
||||
```bash
|
||||
sudo journalctl -u frpc -e
|
||||
```
|
||||
|
||||
3. 检查端口是否被占用:
|
||||
|
||||
```bash
|
||||
sudo netstat -tlnp | grep <端口号>
|
||||
```
|
||||
|
||||
### 无法连接 frps 服务器
|
||||
|
||||
1. 检查服务器地址和端口是否正确
|
||||
2. 检查防火墙是否开放相应端口
|
||||
3. 检查 token 是否匹配
|
||||
|
||||
---
|
||||
|
||||
## 十五、相关文档
|
||||
|
||||
- [Mac Mini 安装 FRP 0.65.0(ARM64)操作笔记](🟣Mac%20Mini%20安装%20FRP%200.65.0(ARM64)操作笔记.md)
|
||||
- [通过VPS+内网反向代理实现域名访问内网穿透](通过VPS+内网反向代理实现域名访问内网穿透.md)
|
||||
---
|
||||
title: Ubuntu 安装 FRP 0.65.0(x86_64)操作笔记
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [frp, frpc, ubuntu]
|
||||
---
|
||||
|
||||
# Ubuntu 安装 FRP 0.65.0(x86_64)操作笔记
|
||||
|
||||
#ubuntu #frp #frpc
|
||||
```table-of-contents
|
||||
```
|
||||
|
||||
- **FRP版本**:0.65.0
|
||||
- **CPU架构**:x86_64 (amd64)
|
||||
- **安装路径**:`/opt/frp/frp_0.65.0_linux_amd64`
|
||||
- **配置文件**:`frpc.toml`
|
||||
- **服务管理**:systemd
|
||||
|
||||
此文档可以直接保存为 **README.md 或运维手册**。
|
||||
|
||||
---
|
||||
|
||||
## 一、环境信息
|
||||
|
||||
| 项目 | 内容 |
|
||||
| ----- | ---------------------------------- |
|
||||
| 系统 | Ubuntu Server 24.04 |
|
||||
| 架构 | x86_64 (amd64) |
|
||||
| 软件 | FRP 0.65.0 |
|
||||
| 安装目录 | `/opt/frp/frp_0.65.0_linux_amd64` |
|
||||
| 客户端程序 | `frpc` |
|
||||
| 配置文件 | `frpc.toml` |
|
||||
| 服务管理 | systemd |
|
||||
|
||||
---
|
||||
|
||||
## 二、创建安装目录
|
||||
|
||||
```bash
|
||||
sudo mkdir -p /opt/frp
|
||||
sudo chown -R $(whoami) /opt/frp
|
||||
```
|
||||
|
||||
进入目录:
|
||||
|
||||
```bash
|
||||
cd /opt/frp
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 三、下载 FRP
|
||||
|
||||
下载 **x86_64 版本**:
|
||||
|
||||
```bash
|
||||
wget https://github.com/fatedier/frp/releases/download/v0.65.0/frp_0.65.0_linux_amd64.tar.gz
|
||||
```
|
||||
|
||||
如果没有 wget:
|
||||
|
||||
```bash
|
||||
sudo apt update
|
||||
sudo apt install -y wget
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 四、解压 FRP
|
||||
|
||||
```bash
|
||||
tar -xzf frp_0.65.0_linux_amd64.tar.gz
|
||||
```
|
||||
|
||||
解压后目录结构:
|
||||
|
||||
```
|
||||
/opt/frp
|
||||
└── frp_0.65.0_linux_amd64
|
||||
├── frpc
|
||||
├── frps
|
||||
├── frpc.toml
|
||||
├── frps.toml
|
||||
└── LICENSE
|
||||
```
|
||||
|
||||
进入目录:
|
||||
|
||||
```bash
|
||||
cd /opt/frp/frp_0.65.0_linux_amd64
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 五、修改 frpc.toml 配置
|
||||
|
||||
编辑配置:
|
||||
|
||||
```bash
|
||||
nano /opt/frp/frp_0.65.0_linux_amd64/frpc.toml
|
||||
```
|
||||
|
||||
示例配置:
|
||||
|
||||
```toml
|
||||
serverAddr = "192.227.222.142"
|
||||
serverPort = 7000
|
||||
|
||||
[auth]
|
||||
token = "your_token_here"
|
||||
|
||||
[[proxies]]
|
||||
name = "ssh"
|
||||
type = "tcp"
|
||||
localIP = "127.0.0.1"
|
||||
localPort = 22
|
||||
remotePort = 6000
|
||||
```
|
||||
|
||||
参数说明:
|
||||
|
||||
|参数|说明|
|
||||
|---|---|
|
||||
|serverAddr|frps服务器地址|
|
||||
|serverPort|frps监听端口|
|
||||
|auth.token|认证token|
|
||||
|localIP|本地服务地址|
|
||||
|localPort|本地端口|
|
||||
|remotePort|frps映射端口|
|
||||
|
||||
---
|
||||
|
||||
## 六、测试运行
|
||||
|
||||
进入目录:
|
||||
|
||||
```bash
|
||||
cd /opt/frp/frp_0.65.0_linux_amd64
|
||||
```
|
||||
|
||||
启动客户端:
|
||||
|
||||
```bash
|
||||
./frpc -c frpc.toml
|
||||
```
|
||||
|
||||
成功日志示例:
|
||||
|
||||
```
|
||||
login to server success
|
||||
proxy added: ssh
|
||||
start proxy success
|
||||
```
|
||||
|
||||
按 `Ctrl + C` 停止测试。
|
||||
|
||||
---
|
||||
|
||||
## 七、systemd 服务管理(推荐)
|
||||
|
||||
### 1 创建 systemd 服务文件
|
||||
|
||||
```bash
|
||||
sudo nano /etc/systemd/system/frpc.service
|
||||
```
|
||||
|
||||
### 2 配置内容
|
||||
|
||||
```ini
|
||||
[Unit]
|
||||
Description=frp client
|
||||
After=network-online.target
|
||||
Wants=network-online.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
ExecStart=/opt/frp/frp_0.65.0_linux_amd64/frpc -c /opt/frp/frp_0.65.0_linux_amd64/frpc.toml
|
||||
Restart=on-failure
|
||||
RestartSec=10
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
```
|
||||
|
||||
### 3 重新加载 systemd
|
||||
|
||||
```bash
|
||||
sudo systemctl daemon-reload
|
||||
```
|
||||
|
||||
### 4 启动 frpc 服务
|
||||
|
||||
```bash
|
||||
sudo systemctl start frpc
|
||||
```
|
||||
|
||||
### 5 设置开机自启
|
||||
|
||||
```bash
|
||||
sudo systemctl enable frpc
|
||||
```
|
||||
|
||||
### 6 查看服务状态
|
||||
|
||||
```bash
|
||||
sudo systemctl status frpc
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 八、常用维护命令
|
||||
|
||||
### 查看 frpc 进程
|
||||
|
||||
```bash
|
||||
ps aux | grep frpc
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 查看日志
|
||||
|
||||
```bash
|
||||
sudo journalctl -u frpc -f
|
||||
```
|
||||
|
||||
或查看历史日志:
|
||||
|
||||
```bash
|
||||
sudo journalctl -u frpc --no-pager -n 50
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 重启 frpc
|
||||
|
||||
```bash
|
||||
sudo systemctl restart frpc
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 停止 frpc
|
||||
|
||||
```bash
|
||||
sudo systemctl stop frpc
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 禁用开机自启
|
||||
|
||||
```bash
|
||||
sudo systemctl disable frpc
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 九、卸载 FRP
|
||||
|
||||
1. 停止服务:
|
||||
|
||||
```bash
|
||||
sudo systemctl stop frpc
|
||||
sudo systemctl disable frpc
|
||||
```
|
||||
|
||||
2. 删除服务文件:
|
||||
|
||||
```bash
|
||||
sudo rm /etc/systemd/system/frpc.service
|
||||
sudo systemctl daemon-reload
|
||||
```
|
||||
|
||||
3. 删除安装目录:
|
||||
|
||||
```bash
|
||||
sudo rm -rf /opt/frp
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 十、升级 FRP
|
||||
|
||||
升级步骤:
|
||||
|
||||
```
|
||||
停止 frpc
|
||||
↓
|
||||
下载新版本
|
||||
↓
|
||||
解压
|
||||
↓
|
||||
替换目录
|
||||
↓
|
||||
重新运行
|
||||
```
|
||||
|
||||
示例:
|
||||
|
||||
```bash
|
||||
sudo systemctl stop frpc
|
||||
cd /opt/frp
|
||||
wget https://github.com/fatedier/frp/releases/download/v0.66.0/frp_0.66.0_linux_amd64.tar.gz
|
||||
tar -xzf frp_0.66.0_linux_amd64.tar.gz
|
||||
# 如果需要可以更新软链接
|
||||
sudo systemctl start frpc
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 十一、最终目录结构
|
||||
|
||||
```
|
||||
/opt/frp
|
||||
└── frp_0.65.0_linux_amd64
|
||||
├── frpc
|
||||
├── frps
|
||||
├── frpc.toml
|
||||
└── frps.toml
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 十二、生产环境最佳实践
|
||||
|
||||
### 1 统一路径
|
||||
|
||||
```
|
||||
/opt/frp/<version>
|
||||
```
|
||||
|
||||
方便版本切换。
|
||||
|
||||
例如:
|
||||
|
||||
```
|
||||
/opt/frp/frp_0.65.0_linux_amd64
|
||||
/opt/frp/frp_0.66.0_linux_amd64
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 2 创建软链接
|
||||
|
||||
```
|
||||
/opt/frp/current
|
||||
```
|
||||
|
||||
示例:
|
||||
|
||||
```bash
|
||||
sudo ln -sfn /opt/frp/frp_0.65.0_linux_amd64 /opt/frp/current
|
||||
```
|
||||
|
||||
启动时(修改 systemd 服务文件):
|
||||
|
||||
```ini
|
||||
ExecStart=/opt/frp/current/frpc -c /opt/frp/current/frpc.toml
|
||||
```
|
||||
|
||||
升级时只需要切换 symlink,无需修改 systemd 配置。
|
||||
|
||||
---
|
||||
|
||||
### 3 日志管理
|
||||
|
||||
建议使用 journald 日志,可通过以下命令查看:
|
||||
|
||||
```bash
|
||||
sudo journalctl -u frpc -f
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 十三、快速启动命令
|
||||
|
||||
日常手动运行(不通过 systemd):
|
||||
|
||||
```bash
|
||||
cd /opt/frp/frp_0.65.0_linux_amd64
|
||||
./frpc -c frpc.toml
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 十四、故障排查
|
||||
|
||||
### 服务启动失败
|
||||
|
||||
1. 检查配置文件语法:
|
||||
|
||||
```bash
|
||||
./frpc validate -c frpc.toml
|
||||
```
|
||||
|
||||
2. 查看详细错误日志:
|
||||
|
||||
```bash
|
||||
sudo journalctl -u frpc -e
|
||||
```
|
||||
|
||||
3. 检查端口是否被占用:
|
||||
|
||||
```bash
|
||||
sudo netstat -tlnp | grep <端口号>
|
||||
```
|
||||
|
||||
### 无法连接 frps 服务器
|
||||
|
||||
1. 检查服务器地址和端口是否正确
|
||||
2. 检查防火墙是否开放相应端口
|
||||
3. 检查 token 是否匹配
|
||||
|
||||
---
|
||||
|
||||
## 十五、相关文档
|
||||
|
||||
- [Mac Mini 安装 FRP 0.65.0(ARM64)操作笔记](🟣Mac%20Mini%20安装%20FRP%200.65.0(ARM64)操作笔记.md)
|
||||
- [通过VPS+内网反向代理实现域名访问内网穿透](通过VPS+内网反向代理实现域名访问内网穿透.md)
|
||||
|
||||
@@ -1,361 +1,361 @@
|
||||
|
||||
#ubuntu #rsync #backup #nas
|
||||
|
||||
```table-of-contents
|
||||
```
|
||||
|
||||
既然你已经完成了 **Clonezilla** 的整机镜像备份,现在引入 **rsync** 实现日常的增量备份是构建“工作室级”数据保护体系的最后一步。
|
||||
|
||||
作为技术背景深厚且需要管理 TikTok 业务数据的用户,rsync 的优势在于它可以**不关机**运行,并且只传输**变化过**的文件。
|
||||
|
||||
### 1. 核心逻辑与准备
|
||||
|
||||
**目标**:将 Ubuntu 服务器的实时数据(代码、Docker 配置、业务数据)增量同步到已经挂载好的 NAS 目录(`/mnt/nas_backup`)。
|
||||
|
||||
**挂载检查**: 在开始前,请确保你的 NAS 已经挂载成功(你之前提到 Samba 挂载已经成功):
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
df -h | grep nas_backup
|
||||
```
|
||||
|
||||
_如果输出显示了 NAS 的 IP 和空间信息,则可以继续。_
|
||||
|
||||
### 2. 编写 Rsync 自动化脚本
|
||||
|
||||
不要直接在命令行输入长命令,建议创建一个专门的脚本。
|
||||
|
||||
**创建脚本文件**:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo nano /usr/local/bin/rsync_backup.sh
|
||||
```
|
||||
|
||||
**粘贴以下内容(已根据你的 ZBook 环境优化)**:
|
||||
|
||||
|
||||
> [!NOTE] 此为最终可运行版本
|
||||
|
||||
``` bash
|
||||
#!/bin/bash
|
||||
|
||||
LOCKFILE="/tmp/rsync_backup.lock"
|
||||
if [ -e ${LOCKFILE} ] && kill -0 `cat ${LOCKFILE}`; then
|
||||
echo "备份任务已在运行中,跳过本次执行。"
|
||||
exit
|
||||
fi
|
||||
echo $$ > ${LOCKFILE}
|
||||
trap "rm -f ${LOCKFILE}" EXIT
|
||||
|
||||
# --- 配置区 ---
|
||||
MOUNT_POINT="/mnt/nas_backup"
|
||||
DATE=$(date +%Y-%m-%d)
|
||||
DEST="$MOUNT_POINT/docker_backups/$DATE"
|
||||
LOG="/var/log/rsync_backup.log"
|
||||
|
||||
# --- 1. 挂载检查 ---
|
||||
if ! mountpoint -q "$MOUNT_POINT"; then
|
||||
echo "$(date): [错误] NAS 未挂载" >> "$LOG"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
mkdir -p "$DEST"
|
||||
|
||||
# --- 2. 执行精确备份 ---
|
||||
echo "--- 开始备份 Docker 数据: $(date) ---" >> "$LOG"
|
||||
|
||||
# 优化后的参数:
|
||||
# -v: 显示详情 (方便初次调试)
|
||||
# --exclude: 排除 Python 虚拟环境、__pycache__ 和 git 目录
|
||||
rsync -azR --delete \
|
||||
--exclude="venv/" \
|
||||
--exclude=".venv/" \
|
||||
--exclude="**/__pycache__/" \
|
||||
--exclude=".git/" \
|
||||
/var/lib/docker/volumes/ \
|
||||
/etc/docker/ \
|
||||
/home/shenwei/Docker/ \
|
||||
"$DEST/" >> "$LOG" 2>&1
|
||||
|
||||
# --- 3. 状态检查 ------
|
||||
title: --- 配置区 ---
|
||||
author: shenwei
|
||||
tags: [backup, nas, rsync, ubuntu]
|
||||
---
|
||||
---
|
||||
title: --- 配置区 ---
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [backup, nas, rsync, ubuntu]
|
||||
---
|
||||
|
||||
# rsync 返回 23 表示部分文件由于权限或消失未传输,这在备份正在运行的系统时常见。
|
||||
# 我们重点看是否大部分数据已同步。
|
||||
if [ $? -eq 0 ] || [ $? -eq 23 ] || [ $? -eq 24 ]; then
|
||||
echo "--- 备份完成: $(date) ---" >> "$LOG"
|
||||
else
|
||||
echo "--- 备份异常中止,错误码: $? ---" >> "$LOG"
|
||||
fi
|
||||
```
|
||||
|
||||
**赋予执行权限**:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo chmod +x /usr/local/bin/rsync_backup.sh
|
||||
```
|
||||
|
||||
### 3. 设置定时任务 (Crontab)
|
||||
|
||||
作为跨境电商业务,建议在凌晨 3 点(业务低峰期)执行自动备份。
|
||||
|
||||
1. **打开定时任务配置**:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo crontab -e
|
||||
```
|
||||
|
||||
2. **在文件末尾添加一行**:
|
||||
|
||||
Plaintext
|
||||
|
||||
```
|
||||
0 3 * * * /usr/local/bin/rsync_backup.sh
|
||||
```
|
||||
|
||||
_这代表每天 03:00 自动运行备份脚本。_
|
||||
|
||||
### 4. 关键点:Docker 数据的备份
|
||||
|
||||
由于你使用了大量自动化技术支持 TikTok 业务,**Docker 卷(Volumes)** 是最核心的数据。
|
||||
|
||||
- **路径**:默认在 `/var/lib/docker/volumes`。
|
||||
|
||||
- **一致性**:如果备份的是数据库(如 MySQL),建议在脚本开头加入 `docker exec <容器名> mysqldump ...` 导出 SQL 文件,再由 rsync 同步。因为直接同步正在写入的二进制数据库文件可能导致恢复后无法启动。
|
||||
|
||||
### 5. 如何在灾难时还原?
|
||||
|
||||
- **单个文件丢失**:直接去 `/mnt/nas_backup/daily_sync` 下通过 `cp` 或 `rsync` 拷贝回来。
|
||||
- **系统崩溃但能进 SSH**:反向执行 rsync 命令:
|
||||
Bash
|
||||
```
|
||||
# 注意路径顺序颠倒
|
||||
sudo rsync -aAXz /mnt/nas_backup/daily_sync/ /
|
||||
```
|
||||
- **硬盘彻底坏了**:先用你之前的 **Clonezilla** 镜像恢复整个系统,然后用 **rsync** 将最新的增量数据同步回来,即可实现“时间点恢复”。
|
||||
### 💡 建议
|
||||
|
||||
鉴于你对技术细节的关注,你可以尝试运行一次手动备份来测试性能:
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo nohup /usr/local/bin/rsync_backup.sh > /dev/null 2>&1 &
|
||||
```
|
||||
|
||||
然后查看日志:`tail -f /var/log/rsync_backup.log`。
|
||||
|
||||
|
||||
### 5. 如何实现NFS永久挂载
|
||||
|
||||
在 Linux 系统中,手动执行的 `mount` 命令是**临时性**的,重启后内核会重置所有挂载状态。要实现开机自动挂载,必须将配置写入系统的文件系统表文件 `/etc/fstab`。
|
||||
|
||||
由于你使用的是 **NFS** 协议,且考虑到笔记本在启动时网络初始化可能略慢于磁盘挂载,我们需要加入一些特定的参数来确保稳定性。
|
||||
|
||||
#### 1. 准备凭据(可选但推荐)
|
||||
|
||||
NFS 通常基于 IP 授权,不需要账号密码。如果你之前确认过手动挂载 `sudo mount -t nfs 192.168.3.17:/volume2/backup /mnt/nas_backup` 成功且无需密码,可以跳过此步。
|
||||
|
||||
#### 2. 修改 /etc/fstab 实现永久挂载
|
||||
|
||||
1. **备份原文件**(作为资深管理者,备份配置是标准操作):
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo cp /etc/fstab /etc/fstab.bak
|
||||
```
|
||||
|
||||
2. **编辑文件**:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo nano /etc/fstab
|
||||
```
|
||||
|
||||
3. **在文件末尾添加以下一行**:
|
||||
|
||||
Plaintext
|
||||
|
||||
```
|
||||
192.168.3.17:/volume2/backup /mnt/nas_backup nfs defaults,timeo=900,retrans=5,_netdev 0 0
|
||||
```
|
||||
|
||||
|
||||
#### 参数详解:
|
||||
|
||||
- **`defaults`**: 使用默认的挂载参数(rw, suid, dev, exec, auto, nouser, async)。
|
||||
|
||||
- **`timeo=900`**: 设置超时时间为 90 秒(单位是 1/10 秒)。
|
||||
|
||||
- **`retrans=5`**: 如果超时,尝试重连 5 次。
|
||||
|
||||
- **`_netdev`**: **关键参数**。告诉系统这是一个网络设备,务必等到网络服务完全启动后再尝试挂载,防止开机过程因找不到网络而卡死。
|
||||
|
||||
|
||||
---
|
||||
|
||||
#### 3. 测试配置(非常重要)
|
||||
|
||||
**千万不要直接重启!** 如果 `/etc/fstab` 写错了,系统可能无法正常启动。
|
||||
|
||||
执行以下命令验证:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
# 1. 先卸载当前的挂载(如果当前还挂着的话)
|
||||
sudo umount /mnt/nas_backup
|
||||
|
||||
# 2. 模拟开机自动挂载
|
||||
sudo mount -a
|
||||
|
||||
# 3. 检查是否挂载成功
|
||||
df -h | grep nas_backup
|
||||
```
|
||||
|
||||
**如果 `sudo mount -a` 没有报错,且 `df` 能看到 NAS 空间,那么以后重启服务器,挂载都会自动生效。**
|
||||
|
||||
---
|
||||
|
||||
#### 4. 进阶:针对 Rsync 脚本的安全保护
|
||||
|
||||
在你的 `rsync` 脚本(`/usr/local/bin/rsync_backup.sh`)开头,建议加入一个**挂载检查**。防止在 NAS 掉线或由于某种原因挂载失败时,`rsync` 把备份数据写到了本地硬盘的挂载点目录(会导致笔记本硬盘迅速爆满)。
|
||||
|
||||
在脚本的配置区下方加入这段逻辑:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
# 检查挂载点是否是一个有效的挂载
|
||||
if ! mountpoint -q /mnt/nas_backup; then
|
||||
echo "错误:NAS 未挂载,备份任务取消!" >> /var/log/rsync_backup.log
|
||||
# 在这里可以加入发送通知给你的逻辑
|
||||
exit 1
|
||||
fi
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### 5. 常见问题:重启后仍然失效?
|
||||
|
||||
如果在执行了上述操作后重启依然不生效,通常是因为 Ubuntu 的 `nfs-common` 服务启动慢于 `mount -a` 的执行。
|
||||
|
||||
- **对策**:你可以启动 `Remote File Systems` 目标服务:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo systemctl enable remote-fs.target
|
||||
```
|
||||
|
||||
|
||||
|
||||
### 如何停止rsync进程
|
||||
|
||||
#### 1. 查找并杀死相关的 rsync 进程
|
||||
|
||||
你可以通过 `pgrep` 或 `ps` 命令锁定正在运行的备份任务。
|
||||
|
||||
- **查看当前运行的 rsync 进程:**
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
ps aux | grep rsync
|
||||
```
|
||||
|
||||
- **优雅地停止所有 rsync 进程(推荐):** 发送 `SIGTERM` 信号,允许 `rsync` 完成当前的写入并清理临时文件,防止损坏目标端的数据结构。
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo killall rsync
|
||||
```
|
||||
|
||||
- **强制杀死(如果进程卡死):** 如果执行 `killall` 后进程依然存在(通常是因为网络 I/O 挂起),请使用 `SIGKILL`。
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo killall -9 rsync
|
||||
```
|
||||
|
||||
|
||||
---
|
||||
|
||||
#### 2. 停止后台运行的脚本
|
||||
|
||||
由于你是通过脚本 `rsync_backup.sh` 启动的,有时只杀掉 `rsync` 进程,脚本可能会尝试进入循环或执行后续逻辑。
|
||||
|
||||
- **查找并杀掉备份脚本进程:**
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo pkill -f rsync_backup.sh
|
||||
```
|
||||
|
||||
|
||||
---
|
||||
|
||||
#### 3. 清理残留的临时文件
|
||||
|
||||
`rsync` 在传输过程中会在目标目录(NAS 挂载点)生成以 `.` 开头的临时文件。
|
||||
|
||||
- 如果你强行停止了进程,这些临时文件会残留在 `/mnt/nas_backup/daily_sync/` 中。
|
||||
|
||||
- 下一次运行 `rsync` 时,它通常会自动处理或覆盖这些文件,但如果你想手动清理:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
# 注意:请确保没有 rsync 进程在运行时执行此操作
|
||||
sudo find /mnt/nas_backup/daily_sync/ -name ".*" -type f -delete
|
||||
```
|
||||
|
||||
|
||||
---
|
||||
|
||||
#### 4. 针对日志中 SIGINT/SIGTERM 报错的建议
|
||||
|
||||
从你之前的日志看,系统收到了 `code 20` 错误,这通常就是因为进程被手动中断导致的。
|
||||
|
||||
**为了防止下次备份时再次因为手动关闭终端而中断,建议采用以下两种方式之一运行:**
|
||||
|
||||
1. **使用 `nohup` (你已经在尝试的方式):**
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo nohup /usr/local/bin/rsync_backup.sh > /dev/null 2>&1 &
|
||||
```
|
||||
|
||||
2. **使用 `screen` 或 `tmux` (更专业):**
|
||||
|
||||
- 创建一个新窗口:`screen -S backup`
|
||||
|
||||
- 运行脚本:`sudo /usr/local/bin/rsync_backup.sh`
|
||||
|
||||
- 按下 `Ctrl + A + D` 脱离窗口(脚本继续运行)。
|
||||
|
||||
- 随时回来查看:`screen -r backup`
|
||||
|
||||
#ubuntu #rsync #backup #nas
|
||||
|
||||
```table-of-contents
|
||||
```
|
||||
|
||||
既然你已经完成了 **Clonezilla** 的整机镜像备份,现在引入 **rsync** 实现日常的增量备份是构建“工作室级”数据保护体系的最后一步。
|
||||
|
||||
作为技术背景深厚且需要管理 TikTok 业务数据的用户,rsync 的优势在于它可以**不关机**运行,并且只传输**变化过**的文件。
|
||||
|
||||
### 1. 核心逻辑与准备
|
||||
|
||||
**目标**:将 Ubuntu 服务器的实时数据(代码、Docker 配置、业务数据)增量同步到已经挂载好的 NAS 目录(`/mnt/nas_backup`)。
|
||||
|
||||
**挂载检查**: 在开始前,请确保你的 NAS 已经挂载成功(你之前提到 Samba 挂载已经成功):
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
df -h | grep nas_backup
|
||||
```
|
||||
|
||||
_如果输出显示了 NAS 的 IP 和空间信息,则可以继续。_
|
||||
|
||||
### 2. 编写 Rsync 自动化脚本
|
||||
|
||||
不要直接在命令行输入长命令,建议创建一个专门的脚本。
|
||||
|
||||
**创建脚本文件**:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo nano /usr/local/bin/rsync_backup.sh
|
||||
```
|
||||
|
||||
**粘贴以下内容(已根据你的 ZBook 环境优化)**:
|
||||
|
||||
|
||||
> [!NOTE] 此为最终可运行版本
|
||||
|
||||
``` bash
|
||||
#!/bin/bash
|
||||
|
||||
LOCKFILE="/tmp/rsync_backup.lock"
|
||||
if [ -e ${LOCKFILE} ] && kill -0 `cat ${LOCKFILE}`; then
|
||||
echo "备份任务已在运行中,跳过本次执行。"
|
||||
exit
|
||||
fi
|
||||
echo $$ > ${LOCKFILE}
|
||||
trap "rm -f ${LOCKFILE}" EXIT
|
||||
|
||||
# --- 配置区 ---
|
||||
MOUNT_POINT="/mnt/nas_backup"
|
||||
DATE=$(date +%Y-%m-%d)
|
||||
DEST="$MOUNT_POINT/docker_backups/$DATE"
|
||||
LOG="/var/log/rsync_backup.log"
|
||||
|
||||
# --- 1. 挂载检查 ---
|
||||
if ! mountpoint -q "$MOUNT_POINT"; then
|
||||
echo "$(date): [错误] NAS 未挂载" >> "$LOG"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
mkdir -p "$DEST"
|
||||
|
||||
# --- 2. 执行精确备份 ---
|
||||
echo "--- 开始备份 Docker 数据: $(date) ---" >> "$LOG"
|
||||
|
||||
# 优化后的参数:
|
||||
# -v: 显示详情 (方便初次调试)
|
||||
# --exclude: 排除 Python 虚拟环境、__pycache__ 和 git 目录
|
||||
rsync -azR --delete \
|
||||
--exclude="venv/" \
|
||||
--exclude=".venv/" \
|
||||
--exclude="**/__pycache__/" \
|
||||
--exclude=".git/" \
|
||||
/var/lib/docker/volumes/ \
|
||||
/etc/docker/ \
|
||||
/home/shenwei/Docker/ \
|
||||
"$DEST/" >> "$LOG" 2>&1
|
||||
|
||||
# --- 3. 状态检查 ------
|
||||
title: --- 配置区 ---
|
||||
author: shenwei
|
||||
tags: [backup, nas, rsync, ubuntu]
|
||||
---
|
||||
---
|
||||
title: --- 配置区 ---
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [backup, nas, rsync, ubuntu]
|
||||
---
|
||||
|
||||
# rsync 返回 23 表示部分文件由于权限或消失未传输,这在备份正在运行的系统时常见。
|
||||
# 我们重点看是否大部分数据已同步。
|
||||
if [ $? -eq 0 ] || [ $? -eq 23 ] || [ $? -eq 24 ]; then
|
||||
echo "--- 备份完成: $(date) ---" >> "$LOG"
|
||||
else
|
||||
echo "--- 备份异常中止,错误码: $? ---" >> "$LOG"
|
||||
fi
|
||||
```
|
||||
|
||||
**赋予执行权限**:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo chmod +x /usr/local/bin/rsync_backup.sh
|
||||
```
|
||||
|
||||
### 3. 设置定时任务 (Crontab)
|
||||
|
||||
作为跨境电商业务,建议在凌晨 3 点(业务低峰期)执行自动备份。
|
||||
|
||||
1. **打开定时任务配置**:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo crontab -e
|
||||
```
|
||||
|
||||
2. **在文件末尾添加一行**:
|
||||
|
||||
Plaintext
|
||||
|
||||
```
|
||||
0 3 * * * /usr/local/bin/rsync_backup.sh
|
||||
```
|
||||
|
||||
_这代表每天 03:00 自动运行备份脚本。_
|
||||
|
||||
### 4. 关键点:Docker 数据的备份
|
||||
|
||||
由于你使用了大量自动化技术支持 TikTok 业务,**Docker 卷(Volumes)** 是最核心的数据。
|
||||
|
||||
- **路径**:默认在 `/var/lib/docker/volumes`。
|
||||
|
||||
- **一致性**:如果备份的是数据库(如 MySQL),建议在脚本开头加入 `docker exec <容器名> mysqldump ...` 导出 SQL 文件,再由 rsync 同步。因为直接同步正在写入的二进制数据库文件可能导致恢复后无法启动。
|
||||
|
||||
### 5. 如何在灾难时还原?
|
||||
|
||||
- **单个文件丢失**:直接去 `/mnt/nas_backup/daily_sync` 下通过 `cp` 或 `rsync` 拷贝回来。
|
||||
- **系统崩溃但能进 SSH**:反向执行 rsync 命令:
|
||||
Bash
|
||||
```
|
||||
# 注意路径顺序颠倒
|
||||
sudo rsync -aAXz /mnt/nas_backup/daily_sync/ /
|
||||
```
|
||||
- **硬盘彻底坏了**:先用你之前的 **Clonezilla** 镜像恢复整个系统,然后用 **rsync** 将最新的增量数据同步回来,即可实现“时间点恢复”。
|
||||
### 💡 建议
|
||||
|
||||
鉴于你对技术细节的关注,你可以尝试运行一次手动备份来测试性能:
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo nohup /usr/local/bin/rsync_backup.sh > /dev/null 2>&1 &
|
||||
```
|
||||
|
||||
然后查看日志:`tail -f /var/log/rsync_backup.log`。
|
||||
|
||||
|
||||
### 5. 如何实现NFS永久挂载
|
||||
|
||||
在 Linux 系统中,手动执行的 `mount` 命令是**临时性**的,重启后内核会重置所有挂载状态。要实现开机自动挂载,必须将配置写入系统的文件系统表文件 `/etc/fstab`。
|
||||
|
||||
由于你使用的是 **NFS** 协议,且考虑到笔记本在启动时网络初始化可能略慢于磁盘挂载,我们需要加入一些特定的参数来确保稳定性。
|
||||
|
||||
#### 1. 准备凭据(可选但推荐)
|
||||
|
||||
NFS 通常基于 IP 授权,不需要账号密码。如果你之前确认过手动挂载 `sudo mount -t nfs 192.168.3.17:/volume2/backup /mnt/nas_backup` 成功且无需密码,可以跳过此步。
|
||||
|
||||
#### 2. 修改 /etc/fstab 实现永久挂载
|
||||
|
||||
1. **备份原文件**(作为资深管理者,备份配置是标准操作):
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo cp /etc/fstab /etc/fstab.bak
|
||||
```
|
||||
|
||||
2. **编辑文件**:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo nano /etc/fstab
|
||||
```
|
||||
|
||||
3. **在文件末尾添加以下一行**:
|
||||
|
||||
Plaintext
|
||||
|
||||
```
|
||||
192.168.3.17:/volume2/backup /mnt/nas_backup nfs defaults,timeo=900,retrans=5,_netdev 0 0
|
||||
```
|
||||
|
||||
|
||||
#### 参数详解:
|
||||
|
||||
- **`defaults`**: 使用默认的挂载参数(rw, suid, dev, exec, auto, nouser, async)。
|
||||
|
||||
- **`timeo=900`**: 设置超时时间为 90 秒(单位是 1/10 秒)。
|
||||
|
||||
- **`retrans=5`**: 如果超时,尝试重连 5 次。
|
||||
|
||||
- **`_netdev`**: **关键参数**。告诉系统这是一个网络设备,务必等到网络服务完全启动后再尝试挂载,防止开机过程因找不到网络而卡死。
|
||||
|
||||
|
||||
---
|
||||
|
||||
#### 3. 测试配置(非常重要)
|
||||
|
||||
**千万不要直接重启!** 如果 `/etc/fstab` 写错了,系统可能无法正常启动。
|
||||
|
||||
执行以下命令验证:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
# 1. 先卸载当前的挂载(如果当前还挂着的话)
|
||||
sudo umount /mnt/nas_backup
|
||||
|
||||
# 2. 模拟开机自动挂载
|
||||
sudo mount -a
|
||||
|
||||
# 3. 检查是否挂载成功
|
||||
df -h | grep nas_backup
|
||||
```
|
||||
|
||||
**如果 `sudo mount -a` 没有报错,且 `df` 能看到 NAS 空间,那么以后重启服务器,挂载都会自动生效。**
|
||||
|
||||
---
|
||||
|
||||
#### 4. 进阶:针对 Rsync 脚本的安全保护
|
||||
|
||||
在你的 `rsync` 脚本(`/usr/local/bin/rsync_backup.sh`)开头,建议加入一个**挂载检查**。防止在 NAS 掉线或由于某种原因挂载失败时,`rsync` 把备份数据写到了本地硬盘的挂载点目录(会导致笔记本硬盘迅速爆满)。
|
||||
|
||||
在脚本的配置区下方加入这段逻辑:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
# 检查挂载点是否是一个有效的挂载
|
||||
if ! mountpoint -q /mnt/nas_backup; then
|
||||
echo "错误:NAS 未挂载,备份任务取消!" >> /var/log/rsync_backup.log
|
||||
# 在这里可以加入发送通知给你的逻辑
|
||||
exit 1
|
||||
fi
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### 5. 常见问题:重启后仍然失效?
|
||||
|
||||
如果在执行了上述操作后重启依然不生效,通常是因为 Ubuntu 的 `nfs-common` 服务启动慢于 `mount -a` 的执行。
|
||||
|
||||
- **对策**:你可以启动 `Remote File Systems` 目标服务:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo systemctl enable remote-fs.target
|
||||
```
|
||||
|
||||
|
||||
|
||||
### 如何停止rsync进程
|
||||
|
||||
#### 1. 查找并杀死相关的 rsync 进程
|
||||
|
||||
你可以通过 `pgrep` 或 `ps` 命令锁定正在运行的备份任务。
|
||||
|
||||
- **查看当前运行的 rsync 进程:**
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
ps aux | grep rsync
|
||||
```
|
||||
|
||||
- **优雅地停止所有 rsync 进程(推荐):** 发送 `SIGTERM` 信号,允许 `rsync` 完成当前的写入并清理临时文件,防止损坏目标端的数据结构。
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo killall rsync
|
||||
```
|
||||
|
||||
- **强制杀死(如果进程卡死):** 如果执行 `killall` 后进程依然存在(通常是因为网络 I/O 挂起),请使用 `SIGKILL`。
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo killall -9 rsync
|
||||
```
|
||||
|
||||
|
||||
---
|
||||
|
||||
#### 2. 停止后台运行的脚本
|
||||
|
||||
由于你是通过脚本 `rsync_backup.sh` 启动的,有时只杀掉 `rsync` 进程,脚本可能会尝试进入循环或执行后续逻辑。
|
||||
|
||||
- **查找并杀掉备份脚本进程:**
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo pkill -f rsync_backup.sh
|
||||
```
|
||||
|
||||
|
||||
---
|
||||
|
||||
#### 3. 清理残留的临时文件
|
||||
|
||||
`rsync` 在传输过程中会在目标目录(NAS 挂载点)生成以 `.` 开头的临时文件。
|
||||
|
||||
- 如果你强行停止了进程,这些临时文件会残留在 `/mnt/nas_backup/daily_sync/` 中。
|
||||
|
||||
- 下一次运行 `rsync` 时,它通常会自动处理或覆盖这些文件,但如果你想手动清理:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
# 注意:请确保没有 rsync 进程在运行时执行此操作
|
||||
sudo find /mnt/nas_backup/daily_sync/ -name ".*" -type f -delete
|
||||
```
|
||||
|
||||
|
||||
---
|
||||
|
||||
#### 4. 针对日志中 SIGINT/SIGTERM 报错的建议
|
||||
|
||||
从你之前的日志看,系统收到了 `code 20` 错误,这通常就是因为进程被手动中断导致的。
|
||||
|
||||
**为了防止下次备份时再次因为手动关闭终端而中断,建议采用以下两种方式之一运行:**
|
||||
|
||||
1. **使用 `nohup` (你已经在尝试的方式):**
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo nohup /usr/local/bin/rsync_backup.sh > /dev/null 2>&1 &
|
||||
```
|
||||
|
||||
2. **使用 `screen` 或 `tmux` (更专业):**
|
||||
|
||||
- 创建一个新窗口:`screen -S backup`
|
||||
|
||||
- 运行脚本:`sudo /usr/local/bin/rsync_backup.sh`
|
||||
|
||||
- 按下 `Ctrl + A + D` 脱离窗口(脚本继续运行)。
|
||||
|
||||
- 随时回来查看:`screen -r backup`
|
||||
|
||||
@@ -1,70 +1,70 @@
|
||||
#ubuntu #rustdesk
|
||||
|
||||
```table-of-contents
|
||||
```
|
||||
|
||||
这个问题产生的原因是 Ubuntu 24.04 默认使用了 **Wayland** 显示协议,而 Wayland 出于安全设计,严格限制了外部程序在用户未登录状态下(即 GDM 登录界面)获取屏幕控制权。
|
||||
|
||||
作为一名拥有技术背景的高级经理,你可能更倾向于直接通过修改系统底层配置来彻底解决此问题。最稳妥的方案是将 Ubuntu 的显示管理器回退到兼容性更好的 **X11 (Xorg)**。
|
||||
|
||||
---
|
||||
|
||||
### 解决方案:禁用 Wayland 强制开启 X11
|
||||
|
||||
通过以下步骤,你可以让 Ubuntu 无论在登录前还是登录后都使用 X11 协议,从而允许 RustDesk 在系统启动后立即接管控制权。
|
||||
|
||||
#### 1. 修改 GDM3 配置文件
|
||||
|
||||
打开终端,编辑 GNOME 显示管理器的配置文件:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo nano /etc/gdm3/custom.conf
|
||||
```
|
||||
|
||||
#### 2. 取消注释 Wayland 禁用行
|
||||
|
||||
在文件中找到 `[daemon]` 部分,找到下面这一行: `#WaylandEnable=false`
|
||||
|
||||
将其前面的 **`#`** 删掉,使其生效:
|
||||
|
||||
Plaintext
|
||||
|
||||
```
|
||||
[daemon]---
|
||||
title: Uncoment the line below to force the login screen to use Xorg
|
||||
author: shenwei
|
||||
tags: [rustdesk, ubuntu]
|
||||
---
|
||||
---
|
||||
title: Uncoment the line below to force the login screen to use Xorg
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [rustdesk, ubuntu]
|
||||
---
|
||||
|
||||
# Uncoment the line below to force the login screen to use Xorg
|
||||
WaylandEnable=false
|
||||
```
|
||||
|
||||
#### 3. 保存并重启服务
|
||||
|
||||
按下 `Ctrl + O` 保存,`Enter` 确认,再按 `Ctrl + X` 退出。 最后,重启 GDM 服务(或者直接重启电脑):
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo systemctl restart gdm3
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 为什么这样做能解决问题?
|
||||
|
||||
- **登录前(Login Screen)**:禁用 Wayland 后,Ubuntu 的登录界面将强制使用 X11 加载。RustDesk 的后台服务(Service)能够识别 X11 窗口并与其交互。
|
||||
|
||||
#ubuntu #rustdesk
|
||||
|
||||
```table-of-contents
|
||||
```
|
||||
|
||||
这个问题产生的原因是 Ubuntu 24.04 默认使用了 **Wayland** 显示协议,而 Wayland 出于安全设计,严格限制了外部程序在用户未登录状态下(即 GDM 登录界面)获取屏幕控制权。
|
||||
|
||||
作为一名拥有技术背景的高级经理,你可能更倾向于直接通过修改系统底层配置来彻底解决此问题。最稳妥的方案是将 Ubuntu 的显示管理器回退到兼容性更好的 **X11 (Xorg)**。
|
||||
|
||||
---
|
||||
|
||||
### 解决方案:禁用 Wayland 强制开启 X11
|
||||
|
||||
通过以下步骤,你可以让 Ubuntu 无论在登录前还是登录后都使用 X11 协议,从而允许 RustDesk 在系统启动后立即接管控制权。
|
||||
|
||||
#### 1. 修改 GDM3 配置文件
|
||||
|
||||
打开终端,编辑 GNOME 显示管理器的配置文件:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo nano /etc/gdm3/custom.conf
|
||||
```
|
||||
|
||||
#### 2. 取消注释 Wayland 禁用行
|
||||
|
||||
在文件中找到 `[daemon]` 部分,找到下面这一行: `#WaylandEnable=false`
|
||||
|
||||
将其前面的 **`#`** 删掉,使其生效:
|
||||
|
||||
Plaintext
|
||||
|
||||
```
|
||||
[daemon]---
|
||||
title: Uncoment the line below to force the login screen to use Xorg
|
||||
author: shenwei
|
||||
tags: [rustdesk, ubuntu]
|
||||
---
|
||||
---
|
||||
title: Uncoment the line below to force the login screen to use Xorg
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [rustdesk, ubuntu]
|
||||
---
|
||||
|
||||
# Uncoment the line below to force the login screen to use Xorg
|
||||
WaylandEnable=false
|
||||
```
|
||||
|
||||
#### 3. 保存并重启服务
|
||||
|
||||
按下 `Ctrl + O` 保存,`Enter` 确认,再按 `Ctrl + X` 退出。 最后,重启 GDM 服务(或者直接重启电脑):
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo systemctl restart gdm3
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 为什么这样做能解决问题?
|
||||
|
||||
- **登录前(Login Screen)**:禁用 Wayland 后,Ubuntu 的登录界面将强制使用 X11 加载。RustDesk 的后台服务(Service)能够识别 X11 窗口并与其交互。
|
||||
|
||||
- **登录后(Post-Login)**:虽然 Wayland 在 24.04 上是趋势,但对于需要频繁远程桌面运维(Remote Service Delivery)的场景,X11 的稳定性与权限开放度目前仍优于 Wayland。
|
||||
@@ -1,79 +1,79 @@
|
||||
---
|
||||
title:
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [ubuntu]
|
||||
---
|
||||
|
||||
#ubuntu
|
||||
|
||||
```table-of-contents
|
||||
```
|
||||
|
||||
在 Ubuntu 24.04 中,笔记本合盖休眠的行为是由系统的登录管理器 `systemd-logind` 控制的。要让服务器在合盖后继续运行,你需要修改系统的配置文件。
|
||||
|
||||
以下是具体操作步骤:
|
||||
|
||||
### 1. 修改 `logind.conf` 配置文件
|
||||
|
||||
打开终端(或通过 SSH 连接),使用 `nano` 文本编辑器修改系统配置:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo nano /etc/systemd/logind.conf
|
||||
```
|
||||
|
||||
### 2. 编辑配置项
|
||||
|
||||
在打开的文件中,找到以下几行代码(通常是被注释掉的,即行首有 `#`):
|
||||
|
||||
- `HandleLidSwitch`:合盖时的动作(通常指用电池时)。
|
||||
|
||||
- `HandleLidSwitchExternalPower`:连接外接电源合盖时的动作。
|
||||
|
||||
- `HandleLidSwitchDocked`:连接扩展坞合盖时的动作。
|
||||
|
||||
|
||||
将它们修改为 `ignore` 并**删除行首的 `#`**,修改后的内容应如下所示:
|
||||
|
||||
Plaintext
|
||||
|
||||
```
|
||||
[Login]
|
||||
HandleLidSwitch=ignore
|
||||
HandleLidSwitchExternalPower=ignore
|
||||
HandleLidSwitchDocked=ignore
|
||||
```
|
||||
|
||||
- **ignore**:表示不执行任何操作,即系统继续运行。
|
||||
|
||||
|
||||
### 3. 重启服务使配置生效
|
||||
|
||||
保存并退出(在 nano 中按 `Ctrl + O`,回车,然后按 `Ctrl + X`)。执行以下命令重启服务:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo systemctl restart systemd-logind
|
||||
```
|
||||
|
||||
> **注意:** 在执行此命令时,你的当前会话(包括图形界面或当前的 SSH 连接)可能会短暂断开或重新加载。
|
||||
|
||||
---
|
||||
|
||||
### 进阶:彻底禁用系统的休眠功能(可选)
|
||||
|
||||
如果你希望从内核级别彻底禁止休眠(防止任何情况下的自动待机),可以运行以下命令:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
|
||||
```
|
||||
|
||||
---
|
||||
title:
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [ubuntu]
|
||||
---
|
||||
|
||||
#ubuntu
|
||||
|
||||
```table-of-contents
|
||||
```
|
||||
|
||||
在 Ubuntu 24.04 中,笔记本合盖休眠的行为是由系统的登录管理器 `systemd-logind` 控制的。要让服务器在合盖后继续运行,你需要修改系统的配置文件。
|
||||
|
||||
以下是具体操作步骤:
|
||||
|
||||
### 1. 修改 `logind.conf` 配置文件
|
||||
|
||||
打开终端(或通过 SSH 连接),使用 `nano` 文本编辑器修改系统配置:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo nano /etc/systemd/logind.conf
|
||||
```
|
||||
|
||||
### 2. 编辑配置项
|
||||
|
||||
在打开的文件中,找到以下几行代码(通常是被注释掉的,即行首有 `#`):
|
||||
|
||||
- `HandleLidSwitch`:合盖时的动作(通常指用电池时)。
|
||||
|
||||
- `HandleLidSwitchExternalPower`:连接外接电源合盖时的动作。
|
||||
|
||||
- `HandleLidSwitchDocked`:连接扩展坞合盖时的动作。
|
||||
|
||||
|
||||
将它们修改为 `ignore` 并**删除行首的 `#`**,修改后的内容应如下所示:
|
||||
|
||||
Plaintext
|
||||
|
||||
```
|
||||
[Login]
|
||||
HandleLidSwitch=ignore
|
||||
HandleLidSwitchExternalPower=ignore
|
||||
HandleLidSwitchDocked=ignore
|
||||
```
|
||||
|
||||
- **ignore**:表示不执行任何操作,即系统继续运行。
|
||||
|
||||
|
||||
### 3. 重启服务使配置生效
|
||||
|
||||
保存并退出(在 nano 中按 `Ctrl + O`,回车,然后按 `Ctrl + X`)。执行以下命令重启服务:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo systemctl restart systemd-logind
|
||||
```
|
||||
|
||||
> **注意:** 在执行此命令时,你的当前会话(包括图形界面或当前的 SSH 连接)可能会短暂断开或重新加载。
|
||||
|
||||
---
|
||||
|
||||
### 进阶:彻底禁用系统的休眠功能(可选)
|
||||
|
||||
如果你希望从内核级别彻底禁止休眠(防止任何情况下的自动待机),可以运行以下命令:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
|
||||
```
|
||||
|
||||
_如果以后想恢复,将 `mask` 改为 `unmask` 即可。_
|
||||
@@ -1,139 +1,139 @@
|
||||
---
|
||||
title: WSL2 启动与网络配置指南
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags:
|
||||
---
|
||||
#wsl #ubuntu #windows
|
||||
# WSL2 启动与网络配置指南
|
||||
|
||||
## 一、 WSL2 基础启动操作
|
||||
|
||||
### 1. 首次安装与启用
|
||||
|
||||
- **快速安装命令**(管理员模式 PowerShell):
|
||||
|
||||
PowerShell
|
||||
|
||||
```
|
||||
wsl --install
|
||||
```
|
||||
|
||||
_注:默认安装 Ubuntu,完成后必须重启电脑。_
|
||||
|
||||
|
||||
### 2. 状态检查与版本转换
|
||||
|
||||
- **查看已安装分发版及状态**:
|
||||
|
||||
PowerShell
|
||||
|
||||
```
|
||||
wsl -l -v
|
||||
```
|
||||
|
||||
- **强制将分发版设置为 WSL2**:
|
||||
|
||||
PowerShell
|
||||
|
||||
```
|
||||
wsl --set-version <分发版名称> 2
|
||||
```
|
||||
|
||||
- **日常进入 Linux 终端**:
|
||||
|
||||
PowerShell
|
||||
|
||||
```
|
||||
wsl -d <分发版名称> # 启动指定版本
|
||||
wsl --shutdown # 强制停止所有运行中的 WSL 实例
|
||||
```
|
||||
|
||||
|
||||
## 二、 网络进阶配置(解决 GitHub/海外连接问题)
|
||||
|
||||
由于 WSL2 默认使用 NAT 模式,常会出现“localhost 代理无法镜像”或无法访问海外资源的情况。
|
||||
|
||||
### 1. 启用“镜像网络模式”(推荐方案)
|
||||
|
||||
这是最稳妥的方案,使 WSL2 与 Windows 共享网络堆栈。
|
||||
|
||||
- **操作步骤**:
|
||||
|
||||
1. 打开 Windows 用户目录(`C:\Users\<你的用户名>\`)。
|
||||
|
||||
2. 创建或编辑 `.wslconfig` 文件。
|
||||
|
||||
3. 写入以下配置:
|
||||
|
||||
Ini, TOML
|
||||
|
||||
```
|
||||
[wsl2]
|
||||
networkingMode=mirrored
|
||||
dnsTunneling=true
|
||||
firewall=true
|
||||
autoProxy=true
|
||||
```
|
||||
|
||||
4. 在 PowerShell 执行 `wsl --shutdown` 后重启 WSL。
|
||||
|
||||
|
||||
### 2. 手动配置终端代理
|
||||
|
||||
如果未开启镜像模式,需手动指向 Windows 宿主机 IP:
|
||||
|
||||
- **获取宿主机 IP**:`cat /etc/resolv.conf | grep nameserver`
|
||||
|
||||
- **设置临时变量**(假设端口为 7890):
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
export https_proxy="http://<宿主机IP>:7890"
|
||||
export http_proxy="http://<宿主机IP>:7890"
|
||||
```
|
||||
|
||||
|
||||
### 3. 使用国内镜像加速(针对 Hermes/uv 安装)
|
||||
|
||||
若 GitHub 访问受限,可使用代理地址:
|
||||
|
||||
- **手动安装 uv**:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
curl -LsSf https://mirror.ghproxy.com/https://github.com/astral-sh/uv/releases/latest/download/uv-installer.sh | sh
|
||||
```
|
||||
|
||||
- **使用镜像安装 Hermes Agent**:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
curl -fsSL https://mirror.ghproxy.com/https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash
|
||||
```
|
||||
|
||||
|
||||
## 三、 常见故障排查
|
||||
|
||||
- **错误码 Wsl/Service/WSL_E_VM_MODE_INVALID_STATE**:
|
||||
|
||||
- 通常由于虚拟化未开启或服务死锁。
|
||||
|
||||
- **解决**:检查 BIOS 中的 `Virtualization Technology` 是否为 `Enabled`;在 Windows 功能中勾选“虚拟机平台”。
|
||||
|
||||
- **文件权限问题**:
|
||||
|
||||
- 避免在 `/mnt/c/`(Windows 挂载目录)下执行复杂的 Linux 脚本安装。
|
||||
|
||||
- **建议**:始终先执行 `cd ~` 进入 Linux 原生家目录后再进行环境配置。
|
||||
|
||||
|
||||
---
|
||||
|
||||
---
|
||||
title: WSL2 启动与网络配置指南
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags:
|
||||
---
|
||||
#wsl #ubuntu #windows
|
||||
# WSL2 启动与网络配置指南
|
||||
|
||||
## 一、 WSL2 基础启动操作
|
||||
|
||||
### 1. 首次安装与启用
|
||||
|
||||
- **快速安装命令**(管理员模式 PowerShell):
|
||||
|
||||
PowerShell
|
||||
|
||||
```
|
||||
wsl --install
|
||||
```
|
||||
|
||||
_注:默认安装 Ubuntu,完成后必须重启电脑。_
|
||||
|
||||
|
||||
### 2. 状态检查与版本转换
|
||||
|
||||
- **查看已安装分发版及状态**:
|
||||
|
||||
PowerShell
|
||||
|
||||
```
|
||||
wsl -l -v
|
||||
```
|
||||
|
||||
- **强制将分发版设置为 WSL2**:
|
||||
|
||||
PowerShell
|
||||
|
||||
```
|
||||
wsl --set-version <分发版名称> 2
|
||||
```
|
||||
|
||||
- **日常进入 Linux 终端**:
|
||||
|
||||
PowerShell
|
||||
|
||||
```
|
||||
wsl -d <分发版名称> # 启动指定版本
|
||||
wsl --shutdown # 强制停止所有运行中的 WSL 实例
|
||||
```
|
||||
|
||||
|
||||
## 二、 网络进阶配置(解决 GitHub/海外连接问题)
|
||||
|
||||
由于 WSL2 默认使用 NAT 模式,常会出现“localhost 代理无法镜像”或无法访问海外资源的情况。
|
||||
|
||||
### 1. 启用“镜像网络模式”(推荐方案)
|
||||
|
||||
这是最稳妥的方案,使 WSL2 与 Windows 共享网络堆栈。
|
||||
|
||||
- **操作步骤**:
|
||||
|
||||
1. 打开 Windows 用户目录(`C:\Users\<你的用户名>\`)。
|
||||
|
||||
2. 创建或编辑 `.wslconfig` 文件。
|
||||
|
||||
3. 写入以下配置:
|
||||
|
||||
Ini, TOML
|
||||
|
||||
```
|
||||
[wsl2]
|
||||
networkingMode=mirrored
|
||||
dnsTunneling=true
|
||||
firewall=true
|
||||
autoProxy=true
|
||||
```
|
||||
|
||||
4. 在 PowerShell 执行 `wsl --shutdown` 后重启 WSL。
|
||||
|
||||
|
||||
### 2. 手动配置终端代理
|
||||
|
||||
如果未开启镜像模式,需手动指向 Windows 宿主机 IP:
|
||||
|
||||
- **获取宿主机 IP**:`cat /etc/resolv.conf | grep nameserver`
|
||||
|
||||
- **设置临时变量**(假设端口为 7890):
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
export https_proxy="http://<宿主机IP>:7890"
|
||||
export http_proxy="http://<宿主机IP>:7890"
|
||||
```
|
||||
|
||||
|
||||
### 3. 使用国内镜像加速(针对 Hermes/uv 安装)
|
||||
|
||||
若 GitHub 访问受限,可使用代理地址:
|
||||
|
||||
- **手动安装 uv**:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
curl -LsSf https://mirror.ghproxy.com/https://github.com/astral-sh/uv/releases/latest/download/uv-installer.sh | sh
|
||||
```
|
||||
|
||||
- **使用镜像安装 Hermes Agent**:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
curl -fsSL https://mirror.ghproxy.com/https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash
|
||||
```
|
||||
|
||||
|
||||
## 三、 常见故障排查
|
||||
|
||||
- **错误码 Wsl/Service/WSL_E_VM_MODE_INVALID_STATE**:
|
||||
|
||||
- 通常由于虚拟化未开启或服务死锁。
|
||||
|
||||
- **解决**:检查 BIOS 中的 `Virtualization Technology` 是否为 `Enabled`;在 Windows 功能中勾选“虚拟机平台”。
|
||||
|
||||
- **文件权限问题**:
|
||||
|
||||
- 避免在 `/mnt/c/`(Windows 挂载目录)下执行复杂的 Linux 脚本安装。
|
||||
|
||||
- **建议**:始终先执行 `cd ~` 进入 Linux 原生家目录后再进行环境配置。
|
||||
|
||||
|
||||
---
|
||||
|
||||
_记录日期:2026-04-17_
|
||||
@@ -1,191 +1,191 @@
|
||||
---
|
||||
title: 1 创建 Symbolic Link
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [obsidian, openclaw, symbolic-link]
|
||||
---
|
||||
|
||||
#symbolic-link #obsidian #openclaw
|
||||
|
||||
下面是一份可以直接放进 **Obsidian** 的 Markdown 笔记,用于记录 **macOS 创建 / 解除 Symbolic Link(符号链接)** 的操作。
|
||||
|
||||
## 背景
|
||||
|
||||
OpenClaw 默认使用隐藏目录:
|
||||
|
||||
```
|
||||
~/.openclaw
|
||||
```
|
||||
|
||||
该目录不方便在 **Finder 或 Obsidian** 中直接作为 Vault 使用。
|
||||
|
||||
解决方法是创建一个 **Symbolic Link(符号链接)**,把隐藏目录映射为普通目录:
|
||||
|
||||
```
|
||||
~/openclaw
|
||||
```
|
||||
|
||||
这样:
|
||||
|
||||
- OpenClaw 继续使用 `~/.openclaw`
|
||||
|
||||
- Obsidian 可以使用 `~/openclaw`
|
||||
|
||||
- 两者访问的是 **同一份数据**
|
||||
|
||||
|
||||
---
|
||||
|
||||
# 1 创建 Symbolic Link
|
||||
|
||||
在 Terminal 执行:
|
||||
|
||||
```bash
|
||||
ln -s /Users/weishen/.openclaw /Users/weishen/openclaw
|
||||
```
|
||||
|
||||
或使用 `~`:
|
||||
|
||||
```bash
|
||||
ln -s ~/.openclaw ~/openclaw
|
||||
```
|
||||
|
||||
执行后目录结构变为:
|
||||
|
||||
```
|
||||
~/openclaw -> ~/.openclaw
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# 2 验证 Symbolic Link
|
||||
|
||||
查看链接:
|
||||
|
||||
```bash
|
||||
ls -l ~ | grep openclaw
|
||||
```
|
||||
|
||||
示例输出:
|
||||
|
||||
```
|
||||
openclaw -> /Users/weishen/.openclaw
|
||||
```
|
||||
|
||||
查看链接指向:
|
||||
|
||||
```bash
|
||||
readlink ~/openclaw
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# 3 在 Obsidian 中使用
|
||||
|
||||
打开 Obsidian:
|
||||
|
||||
```
|
||||
Open folder as vault
|
||||
```
|
||||
|
||||
选择:
|
||||
|
||||
```
|
||||
/Users/weishen/openclaw
|
||||
```
|
||||
|
||||
Obsidian 即可访问 OpenClaw 的 Markdown 文件。
|
||||
|
||||
---
|
||||
|
||||
# 4 解除 Symbolic Link(删除映射)
|
||||
|
||||
如果需要取消映射,只需要删除链接:
|
||||
|
||||
```bash
|
||||
rm ~/openclaw
|
||||
```
|
||||
|
||||
或者:
|
||||
|
||||
```bash
|
||||
rm /Users/weishen/openclaw
|
||||
```
|
||||
|
||||
⚠️ 该操作 **只会删除链接文件,不会删除真实目录**。
|
||||
|
||||
---
|
||||
|
||||
# 5 验证解除成功
|
||||
|
||||
检查链接是否存在:
|
||||
|
||||
```bash
|
||||
ls -l ~ | grep openclaw
|
||||
```
|
||||
|
||||
如果没有输出,说明链接已经删除。
|
||||
|
||||
真实目录仍然存在:
|
||||
|
||||
```bash
|
||||
ls ~/.openclaw
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# 6 注意事项
|
||||
|
||||
不要误删真实目录:
|
||||
|
||||
```
|
||||
rm -rf ~/.openclaw
|
||||
```
|
||||
|
||||
该命令会 **删除 OpenClaw 数据目录**。
|
||||
|
||||
---
|
||||
|
||||
# 7 推荐的长期目录结构
|
||||
|
||||
为了更方便管理,可以采用如下结构:
|
||||
|
||||
```
|
||||
~/openclaw
|
||||
│
|
||||
├── agents
|
||||
├── skills
|
||||
├── memory
|
||||
├── prompts
|
||||
├── logs
|
||||
└── docs
|
||||
```
|
||||
|
||||
然后创建反向链接:
|
||||
|
||||
```bash
|
||||
ln -s ~/openclaw ~/.openclaw
|
||||
```
|
||||
|
||||
这样:
|
||||
|
||||
```
|
||||
~/openclaw # 实际目录
|
||||
~/.openclaw -> ~/openclaw
|
||||
```
|
||||
|
||||
优点:
|
||||
|
||||
- Finder / Obsidian 可直接访问
|
||||
|
||||
- OpenClaw 兼容原路径
|
||||
|
||||
- 方便 Git 管理与备份
|
||||
|
||||
|
||||
---
|
||||
|
||||
---
|
||||
title: 1 创建 Symbolic Link
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [obsidian, openclaw, symbolic-link]
|
||||
---
|
||||
|
||||
#symbolic-link #obsidian #openclaw
|
||||
|
||||
下面是一份可以直接放进 **Obsidian** 的 Markdown 笔记,用于记录 **macOS 创建 / 解除 Symbolic Link(符号链接)** 的操作。
|
||||
|
||||
## 背景
|
||||
|
||||
OpenClaw 默认使用隐藏目录:
|
||||
|
||||
```
|
||||
~/.openclaw
|
||||
```
|
||||
|
||||
该目录不方便在 **Finder 或 Obsidian** 中直接作为 Vault 使用。
|
||||
|
||||
解决方法是创建一个 **Symbolic Link(符号链接)**,把隐藏目录映射为普通目录:
|
||||
|
||||
```
|
||||
~/openclaw
|
||||
```
|
||||
|
||||
这样:
|
||||
|
||||
- OpenClaw 继续使用 `~/.openclaw`
|
||||
|
||||
- Obsidian 可以使用 `~/openclaw`
|
||||
|
||||
- 两者访问的是 **同一份数据**
|
||||
|
||||
|
||||
---
|
||||
|
||||
# 1 创建 Symbolic Link
|
||||
|
||||
在 Terminal 执行:
|
||||
|
||||
```bash
|
||||
ln -s /Users/weishen/.openclaw /Users/weishen/openclaw
|
||||
```
|
||||
|
||||
或使用 `~`:
|
||||
|
||||
```bash
|
||||
ln -s ~/.openclaw ~/openclaw
|
||||
```
|
||||
|
||||
执行后目录结构变为:
|
||||
|
||||
```
|
||||
~/openclaw -> ~/.openclaw
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# 2 验证 Symbolic Link
|
||||
|
||||
查看链接:
|
||||
|
||||
```bash
|
||||
ls -l ~ | grep openclaw
|
||||
```
|
||||
|
||||
示例输出:
|
||||
|
||||
```
|
||||
openclaw -> /Users/weishen/.openclaw
|
||||
```
|
||||
|
||||
查看链接指向:
|
||||
|
||||
```bash
|
||||
readlink ~/openclaw
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# 3 在 Obsidian 中使用
|
||||
|
||||
打开 Obsidian:
|
||||
|
||||
```
|
||||
Open folder as vault
|
||||
```
|
||||
|
||||
选择:
|
||||
|
||||
```
|
||||
/Users/weishen/openclaw
|
||||
```
|
||||
|
||||
Obsidian 即可访问 OpenClaw 的 Markdown 文件。
|
||||
|
||||
---
|
||||
|
||||
# 4 解除 Symbolic Link(删除映射)
|
||||
|
||||
如果需要取消映射,只需要删除链接:
|
||||
|
||||
```bash
|
||||
rm ~/openclaw
|
||||
```
|
||||
|
||||
或者:
|
||||
|
||||
```bash
|
||||
rm /Users/weishen/openclaw
|
||||
```
|
||||
|
||||
⚠️ 该操作 **只会删除链接文件,不会删除真实目录**。
|
||||
|
||||
---
|
||||
|
||||
# 5 验证解除成功
|
||||
|
||||
检查链接是否存在:
|
||||
|
||||
```bash
|
||||
ls -l ~ | grep openclaw
|
||||
```
|
||||
|
||||
如果没有输出,说明链接已经删除。
|
||||
|
||||
真实目录仍然存在:
|
||||
|
||||
```bash
|
||||
ls ~/.openclaw
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# 6 注意事项
|
||||
|
||||
不要误删真实目录:
|
||||
|
||||
```
|
||||
rm -rf ~/.openclaw
|
||||
```
|
||||
|
||||
该命令会 **删除 OpenClaw 数据目录**。
|
||||
|
||||
---
|
||||
|
||||
# 7 推荐的长期目录结构
|
||||
|
||||
为了更方便管理,可以采用如下结构:
|
||||
|
||||
```
|
||||
~/openclaw
|
||||
│
|
||||
├── agents
|
||||
├── skills
|
||||
├── memory
|
||||
├── prompts
|
||||
├── logs
|
||||
└── docs
|
||||
```
|
||||
|
||||
然后创建反向链接:
|
||||
|
||||
```bash
|
||||
ln -s ~/openclaw ~/.openclaw
|
||||
```
|
||||
|
||||
这样:
|
||||
|
||||
```
|
||||
~/openclaw # 实际目录
|
||||
~/.openclaw -> ~/openclaw
|
||||
```
|
||||
|
||||
优点:
|
||||
|
||||
- Finder / Obsidian 可直接访问
|
||||
|
||||
- OpenClaw 兼容原路径
|
||||
|
||||
- 方便 Git 管理与备份
|
||||
|
||||
|
||||
---
|
||||
|
||||
如果需要,我还可以帮你整理一套 **OpenClaw + Obsidian 的完整知识库结构(Agent Memory / Skills / Prompts / Runbooks)**,非常适合你现在的 **多服务器 OpenClaw Agent 管理场景**。
|
||||
@@ -1,122 +1,122 @@
|
||||
|
||||
#n8n #docker #http-proxy #https-proxy #telegram #xray #v2ray
|
||||
## 问题描述
|
||||
|
||||
n8n 运行在 Docker 容器内,宿主机已有代理(xray/v2ray 监听 `10808` 端口),但 n8n 的 Telegram 节点无法连接 `api.telegram.org`。
|
||||
|
||||
---
|
||||
|
||||
## 排查过程
|
||||
|
||||
### 1. 宿主机可以访问,容器不行
|
||||
|
||||
宿主机用 proxychains 可以正常访问 Telegram API:
|
||||
|
||||
```bash
|
||||
proxychains4 curl https://api.telegram.org/bot<TOKEN>/getMe
|
||||
# ✅ 返回 bot 信息
|
||||
```
|
||||
|
||||
容器内用 Node.js fetch 测试:
|
||||
|
||||
```bash
|
||||
node -e "fetch('https://api.telegram.org/...').then(r=>r.text()).then(console.log).catch(console.error)"
|
||||
# ❌ ETIMEDOUT
|
||||
```
|
||||
|
||||
### 2. 发现 docker-compose.yml 中代理地址错误
|
||||
|
||||
```yaml
|
||||
# ❌ 错误:容器内的 127.0.0.1 是容器自身,不是宿主机
|
||||
HTTP_PROXY: http://127.0.0.1:10808
|
||||
HTTPS_PROXY: http://127.0.0.1:10808
|
||||
```
|
||||
|
||||
### 3. 修正为 host.docker.internal
|
||||
|
||||
```yaml
|
||||
# ✅ 正确:通过 host.docker.internal 访问宿主机
|
||||
HTTP_PROXY: http://host.docker.internal:10808
|
||||
HTTPS_PROXY: http://host.docker.internal:10808
|
||||
```
|
||||
`host.docker.internal` 能工作的前提是 `docker-compose.yml` 中已有:
|
||||
```yaml
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
```
|
||||
|
||||
### 4. 确认代理端口可达
|
||||
|
||||
在容器内验证连通性:
|
||||
|
||||
```bash
|
||||
node -e "
|
||||
const net = require('net');
|
||||
const s = net.createConnection(10808, 'host.docker.internal', () => {
|
||||
console.log('✅ 代理端口可达');
|
||||
s.destroy();
|
||||
});
|
||||
s.on('error', e => console.log('❌ 失败:', e.message));
|
||||
"
|
||||
# ✅ 代理端口可达
|
||||
```
|
||||
|
||||
宿主机确认代理监听地址:
|
||||
|
||||
```bash
|
||||
ss -tlnp | grep 10808
|
||||
# LISTEN *:10808 ← 监听 0.0.0.0,容器可以访问 ✅
|
||||
```
|
||||
|
||||
### 5. Node.js 原生 fetch 不读代理环境变量
|
||||
|
||||
`node fetch` 不会自动使用 `HTTP_PROXY`/`HTTPS_PROXY`,所以容器内的测试命令显示 ETIMEDOUT 是**测试方法有误**,并非代理没生效。
|
||||
|
||||
**n8n 使用 axios**,axios 会自动读取代理环境变量,所以 n8n 节点内是正常工作的。
|
||||
|
||||
验证方法:直接在 n8n 里用 **HTTP Request 节点** 访问:
|
||||
|
||||
```
|
||||
https://api.telegram.org/bot<TOKEN>/getMe
|
||||
```
|
||||
|
||||
能返回 bot 信息即代理生效 ✅
|
||||
|
||||
---
|
||||
|
||||
## 最终解决方案
|
||||
|
||||
### docker-compose.yml 关键配置
|
||||
|
||||
```yaml
|
||||
services:
|
||||
n8n:
|
||||
environment:
|
||||
HTTP_PROXY: http://host.docker.internal:10808 # 指向宿主机代理
|
||||
HTTPS_PROXY: http://host.docker.internal:10808
|
||||
NO_PROXY: localhost,127.0.0.1 # 内网地址不走代理
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway" # 必须!映射宿主机 IP
|
||||
```
|
||||
|
||||
### 前提条件
|
||||
|
||||
|条件|检查命令|
|
||||
|---|---|
|
||||
|宿主机代理监听 `0.0.0.0`(非 `127.0.0.1`)|`ss -tlnp \| grep 10808`|
|
||||
|docker-compose 有 `extra_hosts` 配置|查看 yml 文件|
|
||||
|
||||
### 重启生效
|
||||
|
||||
```bash
|
||||
docker compose down && docker compose up -d
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 总结
|
||||
|
||||
|问题|原因|解决|
|
||||
|---|---|---|
|
||||
|代理不生效|`127.0.0.1` 在容器内指向容器本身|改为 `host.docker.internal`|
|
||||
|
||||
#n8n #docker #http-proxy #https-proxy #telegram #xray #v2ray
|
||||
## 问题描述
|
||||
|
||||
n8n 运行在 Docker 容器内,宿主机已有代理(xray/v2ray 监听 `10808` 端口),但 n8n 的 Telegram 节点无法连接 `api.telegram.org`。
|
||||
|
||||
---
|
||||
|
||||
## 排查过程
|
||||
|
||||
### 1. 宿主机可以访问,容器不行
|
||||
|
||||
宿主机用 proxychains 可以正常访问 Telegram API:
|
||||
|
||||
```bash
|
||||
proxychains4 curl https://api.telegram.org/bot<TOKEN>/getMe
|
||||
# ✅ 返回 bot 信息
|
||||
```
|
||||
|
||||
容器内用 Node.js fetch 测试:
|
||||
|
||||
```bash
|
||||
node -e "fetch('https://api.telegram.org/...').then(r=>r.text()).then(console.log).catch(console.error)"
|
||||
# ❌ ETIMEDOUT
|
||||
```
|
||||
|
||||
### 2. 发现 docker-compose.yml 中代理地址错误
|
||||
|
||||
```yaml
|
||||
# ❌ 错误:容器内的 127.0.0.1 是容器自身,不是宿主机
|
||||
HTTP_PROXY: http://127.0.0.1:10808
|
||||
HTTPS_PROXY: http://127.0.0.1:10808
|
||||
```
|
||||
|
||||
### 3. 修正为 host.docker.internal
|
||||
|
||||
```yaml
|
||||
# ✅ 正确:通过 host.docker.internal 访问宿主机
|
||||
HTTP_PROXY: http://host.docker.internal:10808
|
||||
HTTPS_PROXY: http://host.docker.internal:10808
|
||||
```
|
||||
`host.docker.internal` 能工作的前提是 `docker-compose.yml` 中已有:
|
||||
```yaml
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
```
|
||||
|
||||
### 4. 确认代理端口可达
|
||||
|
||||
在容器内验证连通性:
|
||||
|
||||
```bash
|
||||
node -e "
|
||||
const net = require('net');
|
||||
const s = net.createConnection(10808, 'host.docker.internal', () => {
|
||||
console.log('✅ 代理端口可达');
|
||||
s.destroy();
|
||||
});
|
||||
s.on('error', e => console.log('❌ 失败:', e.message));
|
||||
"
|
||||
# ✅ 代理端口可达
|
||||
```
|
||||
|
||||
宿主机确认代理监听地址:
|
||||
|
||||
```bash
|
||||
ss -tlnp | grep 10808
|
||||
# LISTEN *:10808 ← 监听 0.0.0.0,容器可以访问 ✅
|
||||
```
|
||||
|
||||
### 5. Node.js 原生 fetch 不读代理环境变量
|
||||
|
||||
`node fetch` 不会自动使用 `HTTP_PROXY`/`HTTPS_PROXY`,所以容器内的测试命令显示 ETIMEDOUT 是**测试方法有误**,并非代理没生效。
|
||||
|
||||
**n8n 使用 axios**,axios 会自动读取代理环境变量,所以 n8n 节点内是正常工作的。
|
||||
|
||||
验证方法:直接在 n8n 里用 **HTTP Request 节点** 访问:
|
||||
|
||||
```
|
||||
https://api.telegram.org/bot<TOKEN>/getMe
|
||||
```
|
||||
|
||||
能返回 bot 信息即代理生效 ✅
|
||||
|
||||
---
|
||||
|
||||
## 最终解决方案
|
||||
|
||||
### docker-compose.yml 关键配置
|
||||
|
||||
```yaml
|
||||
services:
|
||||
n8n:
|
||||
environment:
|
||||
HTTP_PROXY: http://host.docker.internal:10808 # 指向宿主机代理
|
||||
HTTPS_PROXY: http://host.docker.internal:10808
|
||||
NO_PROXY: localhost,127.0.0.1 # 内网地址不走代理
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway" # 必须!映射宿主机 IP
|
||||
```
|
||||
|
||||
### 前提条件
|
||||
|
||||
|条件|检查命令|
|
||||
|---|---|
|
||||
|宿主机代理监听 `0.0.0.0`(非 `127.0.0.1`)|`ss -tlnp \| grep 10808`|
|
||||
|docker-compose 有 `extra_hosts` 配置|查看 yml 文件|
|
||||
|
||||
### 重启生效
|
||||
|
||||
```bash
|
||||
docker compose down && docker compose up -d
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 总结
|
||||
|
||||
|问题|原因|解决|
|
||||
|---|---|---|
|
||||
|代理不生效|`127.0.0.1` 在容器内指向容器本身|改为 `host.docker.internal`|
|
||||
|测试误报 ETIMEDOUT|Node.js 原生 `fetch` 不读代理环境变量|用 n8n HTTP Request 节点直接测试|
|
||||
@@ -1,38 +1,38 @@
|
||||
---
|
||||
title:
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [clouddrive2, nas, synology]
|
||||
---
|
||||
|
||||
#synology #nas #clouddrive2
|
||||
|
||||
|
||||
在套件中心,设置里添加矿神源
|
||||
|
||||
![[IMG-20251229192828271.png]]
|
||||
|
||||
然后在社群里找到CloudDrive2这个应用, 并安装。因为我的DSM是7+版本,所以需要额外在root 下执行一条命令:
|
||||
![[IMG-20251229192828289.png]]
|
||||
|
||||
```docker
|
||||
sudo -i
|
||||
#input NAS admin password
|
||||
|
||||
sudo sed -i 's/package/root/g' /var/packages/CloudDrive2/conf/privilege
|
||||
```
|
||||
|
||||
安装成功后打开CloudDrive进行配置:
|
||||
|
||||
[http://192.168.3.17:19798/](http://192.168.3.17:19798/)
|
||||
|
||||
![[IMG-20251229192828334.png]]
|
||||
|
||||
用阿里云盘app扫描二维码,并授权,请主要,不要授权备份目录,仅资源目录即可
|
||||
![[IMG-20251229192828398.png]]
|
||||
对Aliyun目录进行mount
|
||||
|
||||
|
||||
---
|
||||
title:
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [clouddrive2, nas, synology]
|
||||
---
|
||||
|
||||
#synology #nas #clouddrive2
|
||||
|
||||
|
||||
在套件中心,设置里添加矿神源
|
||||
|
||||
![[IMG-20251229192828271.png]]
|
||||
|
||||
然后在社群里找到CloudDrive2这个应用, 并安装。因为我的DSM是7+版本,所以需要额外在root 下执行一条命令:
|
||||
![[IMG-20251229192828289.png]]
|
||||
|
||||
```docker
|
||||
sudo -i
|
||||
#input NAS admin password
|
||||
|
||||
sudo sed -i 's/package/root/g' /var/packages/CloudDrive2/conf/privilege
|
||||
```
|
||||
|
||||
安装成功后打开CloudDrive进行配置:
|
||||
|
||||
[http://192.168.3.17:19798/](http://192.168.3.17:19798/)
|
||||
|
||||
![[IMG-20251229192828334.png]]
|
||||
|
||||
用阿里云盘app扫描二维码,并授权,请主要,不要授权备份目录,仅资源目录即可
|
||||
![[IMG-20251229192828398.png]]
|
||||
对Aliyun目录进行mount
|
||||
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,33 +1,33 @@
|
||||
---
|
||||
title: How to transfer Docker images and install in another Docker
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created: 2025-03-06
|
||||
description:
|
||||
tags: [docker, nas, synology]
|
||||
---
|
||||
#docker #synology #nas
|
||||
|
||||
Here is a example about transfer Docker images from my work laptop to my Synology NAS Docker
|
||||
|
||||
我在我自己工作的笔记本上安装了DockerDesktop版本,然后正常的pull xiaoya 的image:
|
||||
|
||||
```docker
|
||||
docker pull xiaoyaliu/alist
|
||||
```
|
||||
|
||||
通过以下命令将下载的image打包成tar文件
|
||||
|
||||
```docker
|
||||
docker save -o xiaoya.tar xiaoyaliu/alist
|
||||
```
|
||||
|
||||
我将打包好的xiaoya.tar文件上传到NAS文件系统里去,然后还是通过Putty来运行docker命令将image导入NAS的Docker中去。
|
||||
|
||||
```docker
|
||||
#cd 到xiaoya.tar存放的路径之后运行以下命令
|
||||
docker load < xiaoya.tar
|
||||
```
|
||||
|
||||
---
|
||||
title: How to transfer Docker images and install in another Docker
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created: 2025-03-06
|
||||
description:
|
||||
tags: [docker, nas, synology]
|
||||
---
|
||||
#docker #synology #nas
|
||||
|
||||
Here is a example about transfer Docker images from my work laptop to my Synology NAS Docker
|
||||
|
||||
我在我自己工作的笔记本上安装了DockerDesktop版本,然后正常的pull xiaoya 的image:
|
||||
|
||||
```docker
|
||||
docker pull xiaoyaliu/alist
|
||||
```
|
||||
|
||||
通过以下命令将下载的image打包成tar文件
|
||||
|
||||
```docker
|
||||
docker save -o xiaoya.tar xiaoyaliu/alist
|
||||
```
|
||||
|
||||
我将打包好的xiaoya.tar文件上传到NAS文件系统里去,然后还是通过Putty来运行docker命令将image导入NAS的Docker中去。
|
||||
|
||||
```docker
|
||||
#cd 到xiaoya.tar存放的路径之后运行以下命令
|
||||
docker load < xiaoya.tar
|
||||
```
|
||||
|
||||
然后再进入NAS的Container Manager 界面后在image里就可以看到扫xiaoya/alist这个image了
|
||||
@@ -1,129 +1,129 @@
|
||||
---
|
||||
title: ✅ 最常用:删除旧 Portainer Container + Volume
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [container, docker, portainer, volume]
|
||||
---
|
||||
|
||||
|
||||
#docker #container #volume #portainer
|
||||
|
||||
```table-of-contents
|
||||
```
|
||||
|
||||
# ✅ 最常用:删除旧 Portainer Container + Volume
|
||||
|
||||
### 1. **查看现有 Portainer 容器**
|
||||
```
|
||||
docker ps -a | grep portainer
|
||||
```
|
||||
|
||||
你会看到类似:
|
||||
`bdadf357fb03 portainer/portainer-ce "/portainer" ...`
|
||||
### 2. **停止容器**
|
||||
```
|
||||
docker stop portainer
|
||||
```
|
||||
或者:
|
||||
```
|
||||
docker stop bdadf357fb03
|
||||
```
|
||||
### 3. **删除容器**
|
||||
```
|
||||
docker rm portainer
|
||||
```
|
||||
或:
|
||||
```
|
||||
docker rm -f portainer
|
||||
```
|
||||
|
||||
---
|
||||
# 🧹 清理旧 Volume & Network (可选,但推荐)
|
||||
|
||||
### 4. **删除旧 Volume**
|
||||
|
||||
先查看:
|
||||
```
|
||||
docker volume ls | grep portainer
|
||||
```
|
||||
|
||||
如果你看到:
|
||||
`local portainer_data`
|
||||
|
||||
删除它:
|
||||
```
|
||||
docker volume rm portainer_data
|
||||
```
|
||||
|
||||
> ⚠️ 注意:这会删除 Portainer 所有数据(用户、配置)。
|
||||
> 如果你想保留数据,不要删 volume,只需要在 compose 文件里加:
|
||||
|
||||
`external: true`
|
||||
|
||||
---
|
||||
### 5. **删除旧 Network**
|
||||
|
||||
查看:
|
||||
```
|
||||
docker network ls | grep portainer
|
||||
```
|
||||
|
||||
如果看到:
|
||||
`portainer_network`
|
||||
|
||||
删除:
|
||||
``` bash
|
||||
docker network rm portainer_network
|
||||
```
|
||||
---
|
||||
# 🧹 BONUS:删除整个 Portainer 旧堆栈(如果是用 compose 部署的)
|
||||
|
||||
如果你之前是用 `docker compose` 运行的,可以直接:
|
||||
``` bash
|
||||
docker compose down
|
||||
```
|
||||
如果你的 compose 文件名不是默认 `docker-compose.yml`:
|
||||
|
||||
``` bash
|
||||
docker compose -f portainer-compose.yml down
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# 🚀 最干净的重装流程
|
||||
|
||||
如果你想彻底重来一遍:
|
||||
``` bash
|
||||
docker stop portainer && docker rm portainer
|
||||
docker volume rm portainer_data
|
||||
docker network rm portainer_network
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# 🧠 提前帮你想到:为什么会出现 WARN?
|
||||
|
||||
你看到的两个警告完全正常,原因如下:
|
||||
|
||||
### ✔ **WARN 1:Network 已存在但不是当前项目创建**
|
||||
|
||||
说明你之前用了别的 compose 文件部署过 Portainer。
|
||||
|
||||
解决方案:
|
||||
|
||||
- 要用旧 network → compose 里写 `external: true`
|
||||
|
||||
- 要重建 network → 删除旧 network(上面已写)
|
||||
|
||||
|
||||
---
|
||||
|
||||
### ✔ **WARN 2:Volume 已存在但属于另一个 compose 项目**
|
||||
|
||||
说明你以前用不同 project 名字做过 Portainer。
|
||||
|
||||
---
|
||||
title: ✅ 最常用:删除旧 Portainer Container + Volume
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [container, docker, portainer, volume]
|
||||
---
|
||||
|
||||
|
||||
#docker #container #volume #portainer
|
||||
|
||||
```table-of-contents
|
||||
```
|
||||
|
||||
# ✅ 最常用:删除旧 Portainer Container + Volume
|
||||
|
||||
### 1. **查看现有 Portainer 容器**
|
||||
```
|
||||
docker ps -a | grep portainer
|
||||
```
|
||||
|
||||
你会看到类似:
|
||||
`bdadf357fb03 portainer/portainer-ce "/portainer" ...`
|
||||
### 2. **停止容器**
|
||||
```
|
||||
docker stop portainer
|
||||
```
|
||||
或者:
|
||||
```
|
||||
docker stop bdadf357fb03
|
||||
```
|
||||
### 3. **删除容器**
|
||||
```
|
||||
docker rm portainer
|
||||
```
|
||||
或:
|
||||
```
|
||||
docker rm -f portainer
|
||||
```
|
||||
|
||||
---
|
||||
# 🧹 清理旧 Volume & Network (可选,但推荐)
|
||||
|
||||
### 4. **删除旧 Volume**
|
||||
|
||||
先查看:
|
||||
```
|
||||
docker volume ls | grep portainer
|
||||
```
|
||||
|
||||
如果你看到:
|
||||
`local portainer_data`
|
||||
|
||||
删除它:
|
||||
```
|
||||
docker volume rm portainer_data
|
||||
```
|
||||
|
||||
> ⚠️ 注意:这会删除 Portainer 所有数据(用户、配置)。
|
||||
> 如果你想保留数据,不要删 volume,只需要在 compose 文件里加:
|
||||
|
||||
`external: true`
|
||||
|
||||
---
|
||||
### 5. **删除旧 Network**
|
||||
|
||||
查看:
|
||||
```
|
||||
docker network ls | grep portainer
|
||||
```
|
||||
|
||||
如果看到:
|
||||
`portainer_network`
|
||||
|
||||
删除:
|
||||
``` bash
|
||||
docker network rm portainer_network
|
||||
```
|
||||
---
|
||||
# 🧹 BONUS:删除整个 Portainer 旧堆栈(如果是用 compose 部署的)
|
||||
|
||||
如果你之前是用 `docker compose` 运行的,可以直接:
|
||||
``` bash
|
||||
docker compose down
|
||||
```
|
||||
如果你的 compose 文件名不是默认 `docker-compose.yml`:
|
||||
|
||||
``` bash
|
||||
docker compose -f portainer-compose.yml down
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# 🚀 最干净的重装流程
|
||||
|
||||
如果你想彻底重来一遍:
|
||||
``` bash
|
||||
docker stop portainer && docker rm portainer
|
||||
docker volume rm portainer_data
|
||||
docker network rm portainer_network
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# 🧠 提前帮你想到:为什么会出现 WARN?
|
||||
|
||||
你看到的两个警告完全正常,原因如下:
|
||||
|
||||
### ✔ **WARN 1:Network 已存在但不是当前项目创建**
|
||||
|
||||
说明你之前用了别的 compose 文件部署过 Portainer。
|
||||
|
||||
解决方案:
|
||||
|
||||
- 要用旧 network → compose 里写 `external: true`
|
||||
|
||||
- 要重建 network → 删除旧 network(上面已写)
|
||||
|
||||
|
||||
---
|
||||
|
||||
### ✔ **WARN 2:Volume 已存在但属于另一个 compose 项目**
|
||||
|
||||
说明你以前用不同 project 名字做过 Portainer。
|
||||
|
||||
解决方案同上。
|
||||
@@ -1,63 +1,63 @@
|
||||
---
|
||||
title:
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [linux]
|
||||
---
|
||||
|
||||
|
||||
#linux
|
||||
|
||||
要判别你的 Linux 服务器是 x64(也就是 x86_64)还是 ARM64,可以通过多种方式,以下是最常用的方法:
|
||||
|
||||
---
|
||||
|
||||
### 1. 使用 `uname` 命令
|
||||
``` bash
|
||||
uname -m
|
||||
```
|
||||
|
||||
- 输出结果示例:
|
||||
|
||||
- `x86_64` → 表示 **64位 x86(Intel/AMD)架构**
|
||||
- `aarch64` → 表示 **64位 ARM 架构**
|
||||
- `armv7l` → 表示 **32位 ARM 架构**
|
||||
|
||||
---
|
||||
|
||||
### 2. 使用 `lscpu` 命令
|
||||
``` bash
|
||||
lscpu
|
||||
```
|
||||
- 会输出详细 CPU 架构信息,例如:
|
||||
``` bash
|
||||
Architecture: x86_64
|
||||
CPU op-mode(s): 32-bit, 64-bit
|
||||
Byte Order: Little Endian
|
||||
```
|
||||
|
||||
- `Architecture` 字段直接告诉你 CPU 类型。
|
||||
---
|
||||
|
||||
### 3. 查看 `/proc/cpuinfo`
|
||||
```
|
||||
cat /proc/cpuinfo
|
||||
```
|
||||
|
||||
- x86_64 CPU 会有 `model name` 类似 “Intel(R) Xeon(R) CPU …”
|
||||
- ARM64 CPU 会显示 `AArch64` 或 `ARMv8` 等信息。
|
||||
---
|
||||
|
||||
### 4. 使用 `file` 命令检测可执行文件
|
||||
```
|
||||
file /bin/bash
|
||||
```
|
||||
|
||||
- 输出示例:
|
||||
- `/bin/bash: ELF 64-bit LSB executable, x86-64` → x64
|
||||
- `/bin/bash: ELF 64-bit LSB executable, ARM aarch64` → ARM64
|
||||
|
||||
---
|
||||
title:
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [linux]
|
||||
---
|
||||
|
||||
|
||||
#linux
|
||||
|
||||
要判别你的 Linux 服务器是 x64(也就是 x86_64)还是 ARM64,可以通过多种方式,以下是最常用的方法:
|
||||
|
||||
---
|
||||
|
||||
### 1. 使用 `uname` 命令
|
||||
``` bash
|
||||
uname -m
|
||||
```
|
||||
|
||||
- 输出结果示例:
|
||||
|
||||
- `x86_64` → 表示 **64位 x86(Intel/AMD)架构**
|
||||
- `aarch64` → 表示 **64位 ARM 架构**
|
||||
- `armv7l` → 表示 **32位 ARM 架构**
|
||||
|
||||
---
|
||||
|
||||
### 2. 使用 `lscpu` 命令
|
||||
``` bash
|
||||
lscpu
|
||||
```
|
||||
- 会输出详细 CPU 架构信息,例如:
|
||||
``` bash
|
||||
Architecture: x86_64
|
||||
CPU op-mode(s): 32-bit, 64-bit
|
||||
Byte Order: Little Endian
|
||||
```
|
||||
|
||||
- `Architecture` 字段直接告诉你 CPU 类型。
|
||||
---
|
||||
|
||||
### 3. 查看 `/proc/cpuinfo`
|
||||
```
|
||||
cat /proc/cpuinfo
|
||||
```
|
||||
|
||||
- x86_64 CPU 会有 `model name` 类似 “Intel(R) Xeon(R) CPU …”
|
||||
- ARM64 CPU 会显示 `AArch64` 或 `ARMv8` 等信息。
|
||||
---
|
||||
|
||||
### 4. 使用 `file` 命令检测可执行文件
|
||||
```
|
||||
file /bin/bash
|
||||
```
|
||||
|
||||
- 输出示例:
|
||||
- `/bin/bash: ELF 64-bit LSB executable, x86-64` → x64
|
||||
- `/bin/bash: ELF 64-bit LSB executable, ARM aarch64` → ARM64
|
||||
|
||||
[[🟠Linux 运维必会的 150 个命令]]
|
||||
@@ -1,179 +1,179 @@
|
||||
---
|
||||
title: 1. 先卸载当前的挂载(如果当前还挂着的话)
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [nas, nfs, synology, unbuntu]
|
||||
---
|
||||
|
||||
|
||||
#unbuntu #nfs #synology #nas
|
||||
|
||||
```table-of-contents
|
||||
```
|
||||
|
||||
## Synology NAS配置
|
||||
|
||||
### 1. NAS 端新增 NFS 规则的具体步骤
|
||||
|
||||
1. **登录 DSM 控制面板**:打开浏览器,登录你的群晖 NAS 管理界面。
|
||||
2. **进入共享文件夹设置**:点击 **“控制面板” (Control Panel)** -> **“共享文件夹” (Shared Folder)**。
|
||||
3. **定位目标文件夹**:在列表中选中你的备份文件夹 `backup`(即位于 `volume2` 下的那个)。
|
||||
4. **打开编辑界面**:点击上方的 **“编辑” (Edit)** 按钮。
|
||||
5. **切换至 NFS 权限页签**:在弹出的窗口中,点击最右侧的 **“NFS 权限” (NFS Permissions)** 选项卡。
|
||||
6. **新增规则**:点击左下角的 **“新增” (Create)**,在弹出的窗口中填入你提到的参数:
|
||||
- **主机名或 IP**:输入你的 Ubuntu 服务器静态 IP(例如 `192.168.3.47`)。如果想让工作室同网段设备都能访问,也可以填 `192.168.3.0/24`。
|
||||
- **权限**:选择 **“可读写” (Read/Write)**。
|
||||
- **Squash (最重要)**:选择 **“映射所有用户为 admin” (Map all users to admin)**。
|
||||
> **技术要点**:这会将 Ubuntu 端 root 发起的备份请求,在 NAS 端统一以 `admin` 身份执行,从而绕过复杂的 Linux 权限校验。
|
||||
- **安全性**:选择 **“sys”**。
|
||||
- **额外勾选**:勾选下方所有的复选框,包括 **“允许来自非特权端口的连接”** 和 **“允许用户访问已挂载的子文件夹”**。
|
||||
![[IMG-20251229190624379.png]]
|
||||
---
|
||||
|
||||
### 2. 获取准确的挂载路径
|
||||
|
||||
保存设置后,请留意“NFS 权限”页签**左下角**显示的一行小字,标明了 **“挂载路径:”**。
|
||||
- 通常路径为:`/volume2/backup`。
|
||||
- 请务必记住这个完整路径,稍后在 Ubuntu 命令中需要用到。
|
||||
|
||||
|
||||
## Ubuntu Server配置
|
||||
|
||||
在 Linux 世界中,备份服务器到 NAS 的标准做法是使用 **NFS**。
|
||||
|
||||
**NFS 的优势:**
|
||||
1. **原生权限支持**:Samba 会丢失 Linux 的文件所有权信息,导致恢复 Docker 卷时权限报错。NFS 则能完美保留。
|
||||
2. **无协议协商陷阱**:没有像 `vers=3.0` 这种复杂的方言(Dialect)冲突。
|
||||
3. **性能更强**:在处理大量小文件(如 Docker 配置)时,NFS 效率远高于 Samba。
|
||||
|
||||
#### NFS 挂载 3 步走:
|
||||
|
||||
1. **NAS 端配置** (参考以上)
|
||||
2. **Ubuntu 挂载**:
|
||||
Bash
|
||||
``` bash
|
||||
# 安装客户端
|
||||
sudo apt install nfs-common -y
|
||||
# 执行挂载 (注意:NFS 使用冒号连接路径)
|
||||
sudo mount -t nfs 192.168.3.17:/volume2/backup /mnt/nas_backup
|
||||
```
|
||||
3. **验证**:
|
||||
Bash
|
||||
``` bash
|
||||
df -h | grep nas_backup
|
||||
|
||||
|
||||
root@shenwei-HP-ZBook-01:/mnt/nas_backup# df -h | grep nas_backup
|
||||
192.168.3.17:/volume2/backup 3.5T 1.9T 1.7T 54% /mnt/nas_backup
|
||||
```
|
||||
|
||||
|
||||
### 3. 实现NFS永久挂载
|
||||
|
||||
在 Linux 系统中,手动执行的 `mount` 命令是**临时性**的,重启后内核会重置所有挂载状态。要实现开机自动挂载,必须将配置写入系统的文件系统表文件 `/etc/fstab`。
|
||||
|
||||
由于你使用的是 **NFS** 协议,且考虑到笔记本在启动时网络初始化可能略慢于磁盘挂载,我们需要加入一些特定的参数来确保稳定性。
|
||||
|
||||
#### 1. 准备凭据(可选但推荐)
|
||||
|
||||
NFS 通常基于 IP 授权,不需要账号密码。如果你之前确认过手动挂载 `sudo mount -t nfs 192.168.3.17:/volume2/backup /mnt/nas_backup` 成功且无需密码,可以跳过此步。
|
||||
|
||||
#### 2. 修改 /etc/fstab 实现永久挂载
|
||||
|
||||
1. **备份原文件**(作为资深管理者,备份配置是标准操作):
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo cp /etc/fstab /etc/fstab.bak
|
||||
```
|
||||
|
||||
2. **编辑文件**:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo nano /etc/fstab
|
||||
```
|
||||
|
||||
3. **在文件末尾添加以下一行**:
|
||||
|
||||
Plaintext
|
||||
|
||||
```
|
||||
192.168.3.17:/volume2/backup /mnt/nas_backup nfs defaults,timeo=900,retrans=5,_netdev 0 0
|
||||
```
|
||||
|
||||
|
||||
#### 参数详解:
|
||||
|
||||
- **`defaults`**: 使用默认的挂载参数(rw, suid, dev, exec, auto, nouser, async)。
|
||||
|
||||
- **`timeo=900`**: 设置超时时间为 90 秒(单位是 1/10 秒)。
|
||||
|
||||
- **`retrans=5`**: 如果超时,尝试重连 5 次。
|
||||
|
||||
- **`_netdev`**: **关键参数**。告诉系统这是一个网络设备,务必等到网络服务完全启动后再尝试挂载,防止开机过程因找不到网络而卡死。
|
||||
|
||||
|
||||
---
|
||||
|
||||
#### 3. 测试配置(非常重要)
|
||||
|
||||
**千万不要直接重启!** 如果 `/etc/fstab` 写错了,系统可能无法正常启动。
|
||||
|
||||
执行以下命令验证:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
# 1. 先卸载当前的挂载(如果当前还挂着的话)
|
||||
sudo umount /mnt/nas_backup
|
||||
|
||||
# 2. 模拟开机自动挂载
|
||||
sudo mount -a
|
||||
|
||||
# 3. 检查是否挂载成功
|
||||
df -h | grep nas_backup
|
||||
```
|
||||
|
||||
**如果 `sudo mount -a` 没有报错,且 `df` 能看到 NAS 空间,那么以后重启服务器,挂载都会自动生效。**
|
||||
|
||||
---
|
||||
|
||||
#### 4. 进阶:针对 Rsync 脚本的安全保护
|
||||
|
||||
在你的 `rsync` 脚本(`/usr/local/bin/rsync_backup.sh`)开头,建议加入一个**挂载检查**。防止在 NAS 掉线或由于某种原因挂载失败时,`rsync` 把备份数据写到了本地硬盘的挂载点目录(会导致笔记本硬盘迅速爆满)。
|
||||
|
||||
在脚本的配置区下方加入这段逻辑:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
# 检查挂载点是否是一个有效的挂载
|
||||
if ! mountpoint -q /mnt/nas_backup; then
|
||||
echo "错误:NAS 未挂载,备份任务取消!" >> /var/log/rsync_backup.log
|
||||
# 在这里可以加入发送通知给你的逻辑
|
||||
exit 1
|
||||
fi
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### 5. 常见问题:重启后仍然失效?
|
||||
|
||||
如果在执行了上述操作后重启依然不生效,通常是因为 Ubuntu 的 `nfs-common` 服务启动慢于 `mount -a` 的执行。
|
||||
|
||||
- **对策**:你可以启动 `Remote File Systems` 目标服务:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo systemctl enable remote-fs.target
|
||||
```
|
||||
|
||||
|
||||
---
|
||||
title: 1. 先卸载当前的挂载(如果当前还挂着的话)
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [nas, nfs, synology, unbuntu]
|
||||
---
|
||||
|
||||
|
||||
#unbuntu #nfs #synology #nas
|
||||
|
||||
```table-of-contents
|
||||
```
|
||||
|
||||
## Synology NAS配置
|
||||
|
||||
### 1. NAS 端新增 NFS 规则的具体步骤
|
||||
|
||||
1. **登录 DSM 控制面板**:打开浏览器,登录你的群晖 NAS 管理界面。
|
||||
2. **进入共享文件夹设置**:点击 **“控制面板” (Control Panel)** -> **“共享文件夹” (Shared Folder)**。
|
||||
3. **定位目标文件夹**:在列表中选中你的备份文件夹 `backup`(即位于 `volume2` 下的那个)。
|
||||
4. **打开编辑界面**:点击上方的 **“编辑” (Edit)** 按钮。
|
||||
5. **切换至 NFS 权限页签**:在弹出的窗口中,点击最右侧的 **“NFS 权限” (NFS Permissions)** 选项卡。
|
||||
6. **新增规则**:点击左下角的 **“新增” (Create)**,在弹出的窗口中填入你提到的参数:
|
||||
- **主机名或 IP**:输入你的 Ubuntu 服务器静态 IP(例如 `192.168.3.47`)。如果想让工作室同网段设备都能访问,也可以填 `192.168.3.0/24`。
|
||||
- **权限**:选择 **“可读写” (Read/Write)**。
|
||||
- **Squash (最重要)**:选择 **“映射所有用户为 admin” (Map all users to admin)**。
|
||||
> **技术要点**:这会将 Ubuntu 端 root 发起的备份请求,在 NAS 端统一以 `admin` 身份执行,从而绕过复杂的 Linux 权限校验。
|
||||
- **安全性**:选择 **“sys”**。
|
||||
- **额外勾选**:勾选下方所有的复选框,包括 **“允许来自非特权端口的连接”** 和 **“允许用户访问已挂载的子文件夹”**。
|
||||
![[IMG-20251229190624379.png]]
|
||||
---
|
||||
|
||||
### 2. 获取准确的挂载路径
|
||||
|
||||
保存设置后,请留意“NFS 权限”页签**左下角**显示的一行小字,标明了 **“挂载路径:”**。
|
||||
- 通常路径为:`/volume2/backup`。
|
||||
- 请务必记住这个完整路径,稍后在 Ubuntu 命令中需要用到。
|
||||
|
||||
|
||||
## Ubuntu Server配置
|
||||
|
||||
在 Linux 世界中,备份服务器到 NAS 的标准做法是使用 **NFS**。
|
||||
|
||||
**NFS 的优势:**
|
||||
1. **原生权限支持**:Samba 会丢失 Linux 的文件所有权信息,导致恢复 Docker 卷时权限报错。NFS 则能完美保留。
|
||||
2. **无协议协商陷阱**:没有像 `vers=3.0` 这种复杂的方言(Dialect)冲突。
|
||||
3. **性能更强**:在处理大量小文件(如 Docker 配置)时,NFS 效率远高于 Samba。
|
||||
|
||||
#### NFS 挂载 3 步走:
|
||||
|
||||
1. **NAS 端配置** (参考以上)
|
||||
2. **Ubuntu 挂载**:
|
||||
Bash
|
||||
``` bash
|
||||
# 安装客户端
|
||||
sudo apt install nfs-common -y
|
||||
# 执行挂载 (注意:NFS 使用冒号连接路径)
|
||||
sudo mount -t nfs 192.168.3.17:/volume2/backup /mnt/nas_backup
|
||||
```
|
||||
3. **验证**:
|
||||
Bash
|
||||
``` bash
|
||||
df -h | grep nas_backup
|
||||
|
||||
|
||||
root@shenwei-HP-ZBook-01:/mnt/nas_backup# df -h | grep nas_backup
|
||||
192.168.3.17:/volume2/backup 3.5T 1.9T 1.7T 54% /mnt/nas_backup
|
||||
```
|
||||
|
||||
|
||||
### 3. 实现NFS永久挂载
|
||||
|
||||
在 Linux 系统中,手动执行的 `mount` 命令是**临时性**的,重启后内核会重置所有挂载状态。要实现开机自动挂载,必须将配置写入系统的文件系统表文件 `/etc/fstab`。
|
||||
|
||||
由于你使用的是 **NFS** 协议,且考虑到笔记本在启动时网络初始化可能略慢于磁盘挂载,我们需要加入一些特定的参数来确保稳定性。
|
||||
|
||||
#### 1. 准备凭据(可选但推荐)
|
||||
|
||||
NFS 通常基于 IP 授权,不需要账号密码。如果你之前确认过手动挂载 `sudo mount -t nfs 192.168.3.17:/volume2/backup /mnt/nas_backup` 成功且无需密码,可以跳过此步。
|
||||
|
||||
#### 2. 修改 /etc/fstab 实现永久挂载
|
||||
|
||||
1. **备份原文件**(作为资深管理者,备份配置是标准操作):
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo cp /etc/fstab /etc/fstab.bak
|
||||
```
|
||||
|
||||
2. **编辑文件**:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo nano /etc/fstab
|
||||
```
|
||||
|
||||
3. **在文件末尾添加以下一行**:
|
||||
|
||||
Plaintext
|
||||
|
||||
```
|
||||
192.168.3.17:/volume2/backup /mnt/nas_backup nfs defaults,timeo=900,retrans=5,_netdev 0 0
|
||||
```
|
||||
|
||||
|
||||
#### 参数详解:
|
||||
|
||||
- **`defaults`**: 使用默认的挂载参数(rw, suid, dev, exec, auto, nouser, async)。
|
||||
|
||||
- **`timeo=900`**: 设置超时时间为 90 秒(单位是 1/10 秒)。
|
||||
|
||||
- **`retrans=5`**: 如果超时,尝试重连 5 次。
|
||||
|
||||
- **`_netdev`**: **关键参数**。告诉系统这是一个网络设备,务必等到网络服务完全启动后再尝试挂载,防止开机过程因找不到网络而卡死。
|
||||
|
||||
|
||||
---
|
||||
|
||||
#### 3. 测试配置(非常重要)
|
||||
|
||||
**千万不要直接重启!** 如果 `/etc/fstab` 写错了,系统可能无法正常启动。
|
||||
|
||||
执行以下命令验证:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
# 1. 先卸载当前的挂载(如果当前还挂着的话)
|
||||
sudo umount /mnt/nas_backup
|
||||
|
||||
# 2. 模拟开机自动挂载
|
||||
sudo mount -a
|
||||
|
||||
# 3. 检查是否挂载成功
|
||||
df -h | grep nas_backup
|
||||
```
|
||||
|
||||
**如果 `sudo mount -a` 没有报错,且 `df` 能看到 NAS 空间,那么以后重启服务器,挂载都会自动生效。**
|
||||
|
||||
---
|
||||
|
||||
#### 4. 进阶:针对 Rsync 脚本的安全保护
|
||||
|
||||
在你的 `rsync` 脚本(`/usr/local/bin/rsync_backup.sh`)开头,建议加入一个**挂载检查**。防止在 NAS 掉线或由于某种原因挂载失败时,`rsync` 把备份数据写到了本地硬盘的挂载点目录(会导致笔记本硬盘迅速爆满)。
|
||||
|
||||
在脚本的配置区下方加入这段逻辑:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
# 检查挂载点是否是一个有效的挂载
|
||||
if ! mountpoint -q /mnt/nas_backup; then
|
||||
echo "错误:NAS 未挂载,备份任务取消!" >> /var/log/rsync_backup.log
|
||||
# 在这里可以加入发送通知给你的逻辑
|
||||
exit 1
|
||||
fi
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### 5. 常见问题:重启后仍然失效?
|
||||
|
||||
如果在执行了上述操作后重启依然不生效,通常是因为 Ubuntu 的 `nfs-common` 服务启动慢于 `mount -a` 的执行。
|
||||
|
||||
- **对策**:你可以启动 `Remote File Systems` 目标服务:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo systemctl enable remote-fs.target
|
||||
```
|
||||
|
||||
|
||||
**你现在已经修改并测试过 `sudo mount -a` 了吗?如果运行这个命令有报错,请把错误信息发给我。**
|
||||
@@ -1,141 +1,141 @@
|
||||
---
|
||||
title:
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [docker, ubuntu]
|
||||
---
|
||||
|
||||
|
||||
#docker #ubuntu
|
||||
|
||||
|
||||
```table-of-contents
|
||||
```
|
||||
Installing **Docker** and **Docker Compose** on **Ubuntu** involves a few straightforward steps. It's generally best to install from Docker's official repositories to ensure you have the latest version.
|
||||
|
||||
---
|
||||
|
||||
## 🐋 Step 1: Uninstall Old Versions (If Applicable)
|
||||
|
||||
First, remove any existing, potentially conflicting Docker packages:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
for pkg in docker.io docker-engine docker-ce docker.io docker-compose docker-compose-v2; do sudo apt-get remove $pkg; done
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🛠️ Step 2: Set Up Docker's Repository
|
||||
|
||||
You need to set up the repository to allow `apt` to use a repository over HTTPS:
|
||||
|
||||
1. **Update the `apt` package index:**
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo apt-get update
|
||||
```
|
||||
|
||||
2. **Install necessary packages:**
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo apt-get install ca-certificates curl
|
||||
```
|
||||
|
||||
3. **Add Docker's official GPG key:**
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo install -m 0755 -d /etc/apt/keyrings
|
||||
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
|
||||
sudo chmod a+r /etc/apt/keyrings/docker.asc
|
||||
```
|
||||
|
||||
4. **Add the repository to `apt` sources:**
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
echo \
|
||||
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
|
||||
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
|
||||
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
|
||||
```
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Step 3: Install Docker Engine
|
||||
|
||||
Now that the repository is set up, you can install the Docker Engine packages:
|
||||
|
||||
1. **Update the `apt` package index again:**
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo apt-get update
|
||||
```
|
||||
|
||||
2. **Install the Docker packages:**
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
|
||||
```
|
||||
|
||||
(Note: The `docker-compose-plugin` installs **Docker Compose V2**, which is used via the command `docker compose` instead of `docker-compose`).
|
||||
|
||||
|
||||
---
|
||||
|
||||
## ✅ Step 4: Verify the Installation
|
||||
|
||||
Check that the Docker Engine is running and that the installation was successful by running the test image:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo docker run hello-world
|
||||
```
|
||||
|
||||
If successful, this command downloads a test image and runs it, printing an informational message before exiting.
|
||||
|
||||
---
|
||||
|
||||
## 👤 Step 5: Manage Docker as a Non-Root User (Recommended)
|
||||
|
||||
By default, running Docker commands requires `sudo`. To run Docker without `sudo`, you can add your user to the **`docker` group**:
|
||||
|
||||
1. **Add your user to the `docker` group:**
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo usermod -aG docker $USER
|
||||
```
|
||||
|
||||
2. **Log out and log back in** (or restart your terminal session, or run `newgrp docker`) for the changes to take effect.
|
||||
|
||||
3. **Verify without `sudo`:**
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
docker run hello-world
|
||||
```
|
||||
|
||||
|
||||
You should now have **Docker Engine** and **Docker Compose (V2)** installed and ready to use!
|
||||
|
||||
---
|
||||
title:
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [docker, ubuntu]
|
||||
---
|
||||
|
||||
|
||||
#docker #ubuntu
|
||||
|
||||
|
||||
```table-of-contents
|
||||
```
|
||||
Installing **Docker** and **Docker Compose** on **Ubuntu** involves a few straightforward steps. It's generally best to install from Docker's official repositories to ensure you have the latest version.
|
||||
|
||||
---
|
||||
|
||||
## 🐋 Step 1: Uninstall Old Versions (If Applicable)
|
||||
|
||||
First, remove any existing, potentially conflicting Docker packages:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
for pkg in docker.io docker-engine docker-ce docker.io docker-compose docker-compose-v2; do sudo apt-get remove $pkg; done
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🛠️ Step 2: Set Up Docker's Repository
|
||||
|
||||
You need to set up the repository to allow `apt` to use a repository over HTTPS:
|
||||
|
||||
1. **Update the `apt` package index:**
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo apt-get update
|
||||
```
|
||||
|
||||
2. **Install necessary packages:**
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo apt-get install ca-certificates curl
|
||||
```
|
||||
|
||||
3. **Add Docker's official GPG key:**
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo install -m 0755 -d /etc/apt/keyrings
|
||||
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
|
||||
sudo chmod a+r /etc/apt/keyrings/docker.asc
|
||||
```
|
||||
|
||||
4. **Add the repository to `apt` sources:**
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
echo \
|
||||
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
|
||||
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
|
||||
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
|
||||
```
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Step 3: Install Docker Engine
|
||||
|
||||
Now that the repository is set up, you can install the Docker Engine packages:
|
||||
|
||||
1. **Update the `apt` package index again:**
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo apt-get update
|
||||
```
|
||||
|
||||
2. **Install the Docker packages:**
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
|
||||
```
|
||||
|
||||
(Note: The `docker-compose-plugin` installs **Docker Compose V2**, which is used via the command `docker compose` instead of `docker-compose`).
|
||||
|
||||
|
||||
---
|
||||
|
||||
## ✅ Step 4: Verify the Installation
|
||||
|
||||
Check that the Docker Engine is running and that the installation was successful by running the test image:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo docker run hello-world
|
||||
```
|
||||
|
||||
If successful, this command downloads a test image and runs it, printing an informational message before exiting.
|
||||
|
||||
---
|
||||
|
||||
## 👤 Step 5: Manage Docker as a Non-Root User (Recommended)
|
||||
|
||||
By default, running Docker commands requires `sudo`. To run Docker without `sudo`, you can add your user to the **`docker` group**:
|
||||
|
||||
1. **Add your user to the `docker` group:**
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo usermod -aG docker $USER
|
||||
```
|
||||
|
||||
2. **Log out and log back in** (or restart your terminal session, or run `newgrp docker`) for the changes to take effect.
|
||||
|
||||
3. **Verify without `sudo`:**
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
docker run hello-world
|
||||
```
|
||||
|
||||
|
||||
You should now have **Docker Engine** and **Docker Compose (V2)** installed and ready to use!
|
||||
|
||||
Would you like to know some basic **Docker commands** or learn how to write a simple **`docker-compose.yml`** file?
|
||||
@@ -1,131 +1,131 @@
|
||||
---
|
||||
title: 如何用指纹浏览器安全注册并订阅Claude Pro会员全攻略
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [adspower, claude, ip, pingme]
|
||||
---
|
||||
|
||||
#claude #pingme #ip #adspower
|
||||
|
||||
```table-of-contents
|
||||
```
|
||||
|
||||
# 如何用指纹浏览器安全注册并订阅Claude Pro会员全攻略
|
||||
|
||||
## 概览 📝
|
||||
本视频主要讲解了如何通过安装和使用指纹浏览器,配合高质量代理IP,在避免账号被封的情况下,顺利注册并订阅AI聊天工具Claude的Pro版本。讲解层层递进,细节丰富,涵盖从工具下载安装、IP设置、账号注册、验证码获取到付费订阅的完整流程。整个内容注重实操与技巧,确保即使是初学者也能跟着操作,降低封号风险。视频内容重点突出“IP一致性与纯净度检测”,“指纹浏览器隔离环境使用技巧”,以及“海外虚拟信用卡支付解决方案”,极具实用价值。
|
||||
|
||||
## Youtube视频
|
||||
https://www.youtube.com/watch?v=vvD2jUZYPgI
|
||||
|
||||
## 章节知识点总结 ⏰
|
||||
|
||||
#### 指纹浏览器安装与环境配置**
|
||||
- 推荐使用AdsPower指纹浏览器,支持谷歌授权登录,提供客户端体验完整功能。 AdsPower指纹浏览器:[https://share.adspower.net]
|
||||
- 创建新的浏览器环境时,选择最新Chrome版本及操作系统,设置用户代理。关键步骤是配置代理类型为socks5,并通过系统网络设置复制本机代理地址与端口填入指纹浏览器,确保代理与当地网络真实一致。
|
||||
![[IMG-20251231145927286.png]]
|
||||
![[IMG-20251231145927318.png]]
|
||||
- 代理设置成功后,用检查代理功能确认IP归属地为美国,实现代理连接成功。 https://ip111.cn/
|
||||
![[IMG-20251231145927365.png]]
|
||||
|
||||
|
||||
#### IP一致性与纯净度检测技巧**
|
||||
- 通过访问多个IP检测网站,确认测试点国内、国外和谷歌三处IP保持高度一致,保证IP稳定性。
|
||||
![[IMG-20251231145927401.png]]
|
||||
- 重要的IP风险评估,理想纯净度为“低风险”,数值越低越安全。中等风险或以上可能被封号。 https://scamalytics.com/
|
||||
![[IMG-20251231145927426.png]]
|
||||
- 多次测试刷新代理,确定IP高纯净度后才能大大降低账号被封概率。
|
||||
|
||||
#### Claude账号注册与手机号验证码接收方法**
|
||||
- 推荐用谷歌账号登录Claude进行注册。
|
||||
- 手机验证码推荐用新兴接码平台“PingMe”,支持中文界面,需下载App,用手机号注册并充值最低2美元。 [https://messages.pingme.tel/]
|
||||
- 选择美国区Claude验证码,订阅后可稳定获取短信验证码,避免一次性号码限制。
|
||||
```
|
||||
(+1)9145775122
|
||||
```
|
||||
- 绑定短信验证码完成注册,避免手机号重复带来的封号风险,同时演示成功登录Claude 3.5 Sonnet模型确认账号正常。
|
||||
```
|
||||
Claude Account:
|
||||
Google Login: billyshen2000@gmail.com
|
||||
```
|
||||
|
||||
#### 多账户注册与指纹浏览器多环境管理**
|
||||
- 可继续创建多套浏览器环境(不同Chrome版本和操作系统),分别配置独立代理,维护账号隔离。
|
||||
- 普通用户免费可使用5个指纹浏览器环境,满足大多数需求。
|
||||
- 重点强调IP稳定性及独立性,防止账号关联封号。
|
||||
|
||||
#### Claude Pro会员订阅及支付方案【关键难点】**
|
||||
- 国内信用卡无法支付,推荐使用WildCard虚拟信用卡解决跨境支付难题。 [https://yeka.ai/i/UPHSP]
|
||||
- 注册WildCard账号简易,仅需手机号验证,支持支付宝充值。
|
||||
- 充值后购买Claude Pro套餐(最低20美元/月),绑定信用卡信息完成升级。
|
||||
- 支付流程细节详解,确保用户能顺利订阅Pro服务。
|
||||
|
||||
## 重点术语和定义 📚
|
||||
|
||||
- **指纹浏览器**:一种可模拟不同设备、网络环境的多账号浏览器,隔离使用环境,减少账号关联风险。
|
||||
- **Socks5代理**:一种网络代理协议,支持灵活的传输隧道,有助于隐匿真实IP和地理位置。
|
||||
- **IP纯净度**:评定某IP是否安全可靠的风险等级,低风险代表良好的信誉和较少异常,避免被平台标记。
|
||||
- **虚拟信用卡(WildCard)**:不依赖实体卡的线上信用支付工具,方便海外支付等场景。
|
||||
- **验证码接收平台(PingMe)**:提供短信接码服务的应用或网站,支持接收短消息以完成注册或验证。
|
||||
|
||||
## 推理结构解析 ⚙️
|
||||
|
||||
1. **问题识别**:Claude账号易被封,传统注册方式难以持续使用。
|
||||
2. **解决方案提出**:通过指纹浏览器创建独立环境+高纯净度美国代理,隐藏真实身份及网络特征。
|
||||
3. **关键步骤拆解**:
|
||||
- 安装客户端及指纹浏览器环境配置。
|
||||
- 代理设置与IP一致性及纯净度检测。
|
||||
- 使用稳定收费接码平台接收验证码。
|
||||
- 使用虚拟信用卡实现付费订阅。
|
||||
4. **结论验证**:注册成功且账号稳定不被封,可以升级Pro套餐正常使用。
|
||||
|
||||
## 典型示例及应用 🌟
|
||||
|
||||
- 使用AdsPower指纹浏览器,设置Chrome 131版本,系统选Windows操作系统,通过系统代理端口配置,实现美国IP环境。
|
||||
- 复制测试获得的IP地址至多个检测网站,确认国内外IP一致且纯净度低风险,成功解决多IP不匹配问题。
|
||||
- 用PingMe平台接收短信,避免一次性号码封号,订单长期生效。
|
||||
- 绑定WildCard虚拟信用卡完成支付,成功开通Claude Pro会员,保障AI服务使用无阻。
|
||||
|
||||
## 易错点解析 ⚠️
|
||||
|
||||
- **误区1:使用本地浏览器直接访问Claude导致账号识别关联,易封号。**
|
||||
正确做法:必须使用指纹浏览器隔离环境操作。
|
||||
|
||||
- **误区2:代理IP设置不一致导致IP地址在不同测试网站中不匹配,从而被平台判定异常。**
|
||||
正确做法:确保代理全局生效,且检查三处IP测试点完全一致。
|
||||
|
||||
- **误区3:忽视IP纯净度检测,使用“中等风险”或更高风险IP注册,会大幅增加封号风险。**
|
||||
正确做法:切换代理,确保纯净度极低,数值越低越安全。
|
||||
|
||||
- **误区4:使用一次性接码号码注册,短信验证不稳定或被拦截,导致账号绑定失败。**
|
||||
正确做法:用订阅制的接码平台,获取长期可靠验证码服务。
|
||||
|
||||
- **误区5:未使用支持海外支付的虚拟信用卡,导致无法充值Pro会员。**
|
||||
正确做法:使用WildCard等虚拟信用卡完成支付。
|
||||
|
||||
## 速记复习小贴士与自测题 ✅
|
||||
|
||||
- **复习提示(无答案)**
|
||||
- 什么是指纹浏览器,它为什么能降低账号封禁风险?
|
||||
- 如何测试IP一致性及纯净度,为什么它们重要?
|
||||
- 请说出配置代理时socks5代理的关键数据来源。
|
||||
- 为什么要使用PingMe平台代替传统短信接码平台?
|
||||
- 如何利用虚拟信用卡完成海外AI服务付费?
|
||||
|
||||
- **自测试题(含答案)**
|
||||
1. 指纹浏览器中的“新建浏览器环境”为什么不能使用本地浏览器?
|
||||
- 答:本地浏览器和指纹浏览器的环境互不干涉,使用本地浏览器会暴露设备和IP特征,易被关联封号。
|
||||
2. IP纯净度为中等风险,能否保证注册的Claude账号长期不被封?
|
||||
- 答:不能,中等风险IP易被平台标记导致封号,应使用低风险IP。
|
||||
3. 代理配置中“主机”和“端口”的来源是哪里?
|
||||
- 答:从系统“代理”设置中复制本机网络代理地址和端口。
|
||||
4. 为什么视频推荐使用“PingMe”而不是其他接码平台?
|
||||
- 答:PingMe提供订阅制的美国地区稳定号码,避免一次性号码被封,且充值灵活。
|
||||
5. 如何完成Claude Pro会员的支付?
|
||||
- 答:使用支持海外支付的虚拟信用卡(如WildCard)充值后,绑定信用卡信息完成订阅。
|
||||
|
||||
## 总结回顾 🎯
|
||||
---
|
||||
title: 如何用指纹浏览器安全注册并订阅Claude Pro会员全攻略
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [adspower, claude, ip, pingme]
|
||||
---
|
||||
|
||||
#claude #pingme #ip #adspower
|
||||
|
||||
```table-of-contents
|
||||
```
|
||||
|
||||
# 如何用指纹浏览器安全注册并订阅Claude Pro会员全攻略
|
||||
|
||||
## 概览 📝
|
||||
本视频主要讲解了如何通过安装和使用指纹浏览器,配合高质量代理IP,在避免账号被封的情况下,顺利注册并订阅AI聊天工具Claude的Pro版本。讲解层层递进,细节丰富,涵盖从工具下载安装、IP设置、账号注册、验证码获取到付费订阅的完整流程。整个内容注重实操与技巧,确保即使是初学者也能跟着操作,降低封号风险。视频内容重点突出“IP一致性与纯净度检测”,“指纹浏览器隔离环境使用技巧”,以及“海外虚拟信用卡支付解决方案”,极具实用价值。
|
||||
|
||||
## Youtube视频
|
||||
https://www.youtube.com/watch?v=vvD2jUZYPgI
|
||||
|
||||
## 章节知识点总结 ⏰
|
||||
|
||||
#### 指纹浏览器安装与环境配置**
|
||||
- 推荐使用AdsPower指纹浏览器,支持谷歌授权登录,提供客户端体验完整功能。 AdsPower指纹浏览器:[https://share.adspower.net]
|
||||
- 创建新的浏览器环境时,选择最新Chrome版本及操作系统,设置用户代理。关键步骤是配置代理类型为socks5,并通过系统网络设置复制本机代理地址与端口填入指纹浏览器,确保代理与当地网络真实一致。
|
||||
![[IMG-20251231145927286.png]]
|
||||
![[IMG-20251231145927318.png]]
|
||||
- 代理设置成功后,用检查代理功能确认IP归属地为美国,实现代理连接成功。 https://ip111.cn/
|
||||
![[IMG-20251231145927365.png]]
|
||||
|
||||
|
||||
#### IP一致性与纯净度检测技巧**
|
||||
- 通过访问多个IP检测网站,确认测试点国内、国外和谷歌三处IP保持高度一致,保证IP稳定性。
|
||||
![[IMG-20251231145927401.png]]
|
||||
- 重要的IP风险评估,理想纯净度为“低风险”,数值越低越安全。中等风险或以上可能被封号。 https://scamalytics.com/
|
||||
![[IMG-20251231145927426.png]]
|
||||
- 多次测试刷新代理,确定IP高纯净度后才能大大降低账号被封概率。
|
||||
|
||||
#### Claude账号注册与手机号验证码接收方法**
|
||||
- 推荐用谷歌账号登录Claude进行注册。
|
||||
- 手机验证码推荐用新兴接码平台“PingMe”,支持中文界面,需下载App,用手机号注册并充值最低2美元。 [https://messages.pingme.tel/]
|
||||
- 选择美国区Claude验证码,订阅后可稳定获取短信验证码,避免一次性号码限制。
|
||||
```
|
||||
(+1)9145775122
|
||||
```
|
||||
- 绑定短信验证码完成注册,避免手机号重复带来的封号风险,同时演示成功登录Claude 3.5 Sonnet模型确认账号正常。
|
||||
```
|
||||
Claude Account:
|
||||
Google Login: billyshen2000@gmail.com
|
||||
```
|
||||
|
||||
#### 多账户注册与指纹浏览器多环境管理**
|
||||
- 可继续创建多套浏览器环境(不同Chrome版本和操作系统),分别配置独立代理,维护账号隔离。
|
||||
- 普通用户免费可使用5个指纹浏览器环境,满足大多数需求。
|
||||
- 重点强调IP稳定性及独立性,防止账号关联封号。
|
||||
|
||||
#### Claude Pro会员订阅及支付方案【关键难点】**
|
||||
- 国内信用卡无法支付,推荐使用WildCard虚拟信用卡解决跨境支付难题。 [https://yeka.ai/i/UPHSP]
|
||||
- 注册WildCard账号简易,仅需手机号验证,支持支付宝充值。
|
||||
- 充值后购买Claude Pro套餐(最低20美元/月),绑定信用卡信息完成升级。
|
||||
- 支付流程细节详解,确保用户能顺利订阅Pro服务。
|
||||
|
||||
## 重点术语和定义 📚
|
||||
|
||||
- **指纹浏览器**:一种可模拟不同设备、网络环境的多账号浏览器,隔离使用环境,减少账号关联风险。
|
||||
- **Socks5代理**:一种网络代理协议,支持灵活的传输隧道,有助于隐匿真实IP和地理位置。
|
||||
- **IP纯净度**:评定某IP是否安全可靠的风险等级,低风险代表良好的信誉和较少异常,避免被平台标记。
|
||||
- **虚拟信用卡(WildCard)**:不依赖实体卡的线上信用支付工具,方便海外支付等场景。
|
||||
- **验证码接收平台(PingMe)**:提供短信接码服务的应用或网站,支持接收短消息以完成注册或验证。
|
||||
|
||||
## 推理结构解析 ⚙️
|
||||
|
||||
1. **问题识别**:Claude账号易被封,传统注册方式难以持续使用。
|
||||
2. **解决方案提出**:通过指纹浏览器创建独立环境+高纯净度美国代理,隐藏真实身份及网络特征。
|
||||
3. **关键步骤拆解**:
|
||||
- 安装客户端及指纹浏览器环境配置。
|
||||
- 代理设置与IP一致性及纯净度检测。
|
||||
- 使用稳定收费接码平台接收验证码。
|
||||
- 使用虚拟信用卡实现付费订阅。
|
||||
4. **结论验证**:注册成功且账号稳定不被封,可以升级Pro套餐正常使用。
|
||||
|
||||
## 典型示例及应用 🌟
|
||||
|
||||
- 使用AdsPower指纹浏览器,设置Chrome 131版本,系统选Windows操作系统,通过系统代理端口配置,实现美国IP环境。
|
||||
- 复制测试获得的IP地址至多个检测网站,确认国内外IP一致且纯净度低风险,成功解决多IP不匹配问题。
|
||||
- 用PingMe平台接收短信,避免一次性号码封号,订单长期生效。
|
||||
- 绑定WildCard虚拟信用卡完成支付,成功开通Claude Pro会员,保障AI服务使用无阻。
|
||||
|
||||
## 易错点解析 ⚠️
|
||||
|
||||
- **误区1:使用本地浏览器直接访问Claude导致账号识别关联,易封号。**
|
||||
正确做法:必须使用指纹浏览器隔离环境操作。
|
||||
|
||||
- **误区2:代理IP设置不一致导致IP地址在不同测试网站中不匹配,从而被平台判定异常。**
|
||||
正确做法:确保代理全局生效,且检查三处IP测试点完全一致。
|
||||
|
||||
- **误区3:忽视IP纯净度检测,使用“中等风险”或更高风险IP注册,会大幅增加封号风险。**
|
||||
正确做法:切换代理,确保纯净度极低,数值越低越安全。
|
||||
|
||||
- **误区4:使用一次性接码号码注册,短信验证不稳定或被拦截,导致账号绑定失败。**
|
||||
正确做法:用订阅制的接码平台,获取长期可靠验证码服务。
|
||||
|
||||
- **误区5:未使用支持海外支付的虚拟信用卡,导致无法充值Pro会员。**
|
||||
正确做法:使用WildCard等虚拟信用卡完成支付。
|
||||
|
||||
## 速记复习小贴士与自测题 ✅
|
||||
|
||||
- **复习提示(无答案)**
|
||||
- 什么是指纹浏览器,它为什么能降低账号封禁风险?
|
||||
- 如何测试IP一致性及纯净度,为什么它们重要?
|
||||
- 请说出配置代理时socks5代理的关键数据来源。
|
||||
- 为什么要使用PingMe平台代替传统短信接码平台?
|
||||
- 如何利用虚拟信用卡完成海外AI服务付费?
|
||||
|
||||
- **自测试题(含答案)**
|
||||
1. 指纹浏览器中的“新建浏览器环境”为什么不能使用本地浏览器?
|
||||
- 答:本地浏览器和指纹浏览器的环境互不干涉,使用本地浏览器会暴露设备和IP特征,易被关联封号。
|
||||
2. IP纯净度为中等风险,能否保证注册的Claude账号长期不被封?
|
||||
- 答:不能,中等风险IP易被平台标记导致封号,应使用低风险IP。
|
||||
3. 代理配置中“主机”和“端口”的来源是哪里?
|
||||
- 答:从系统“代理”设置中复制本机网络代理地址和端口。
|
||||
4. 为什么视频推荐使用“PingMe”而不是其他接码平台?
|
||||
- 答:PingMe提供订阅制的美国地区稳定号码,避免一次性号码被封,且充值灵活。
|
||||
5. 如何完成Claude Pro会员的支付?
|
||||
- 答:使用支持海外支付的虚拟信用卡(如WildCard)充值后,绑定信用卡信息完成订阅。
|
||||
|
||||
## 总结回顾 🎯
|
||||
本期视频详细演示了如何借助指纹浏览器及高纯净度代理,结合订阅制接码平台和虚拟信用卡,实现了稳定注册、登录及订阅Claude Pro会员的全过程。重点在于环境的隔离、IP的稳定和安全性核验,以及支付环节的国际化解决方案。掌握了这些步骤与技巧,用户能有效降低账号封禁风险,畅享高质量AI服务。该内容面向实操,兼具理论与细节,极具推广实用价值,是用户提升AI工具使用体验的必备指南。
|
||||
@@ -1,233 +1,233 @@
|
||||
---
|
||||
title: 将 0005 (Ubuntu) 放在启动顺序的首位
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [hp, rufus, ubuntu, zbook]
|
||||
---
|
||||
|
||||
|
||||
#ubuntu #hp #zbook #rufus
|
||||
|
||||
```table-of-contents
|
||||
```
|
||||
|
||||
## 1. 准备工作
|
||||
|
||||
- **硬件**:一个容量至少为 **8GB** 的 U 盘。
|
||||
- **软件**:下载并运行最新版的 **Rufus**。
|
||||
- **数据提醒**:制作过程会清空 U 盘内的所有数据,请提前备份。
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 2. Rufus 设置步骤
|
||||
|
||||
请按照以下顺序配置 Rufus 界面:
|
||||
|
||||
1. **设备 (Device)**:选中你插入的 U 盘。
|
||||
|
||||
2. **引导类型选择 (Boot selection)**:点击右侧的“选择”,找到你电脑里的 `ubuntu-24.04.2-desktop-amd64.iso`。
|
||||
|
||||
3. **分区方案 (Partition scheme)**:
|
||||
|
||||
- **选择 `GPT`**。对于 HP ZBook 这种较新的工作站,务必使用 GPT 配合 UEFI 启动。
|
||||
|
||||
4. **目标系统类型 (Target system)**:
|
||||
|
||||
- 会自动变为 `UEFI (non CSM)`。
|
||||
|
||||
5. **文件系统 (File system)**:
|
||||
|
||||
- 保持默认的 `FAT32`(这是 UEFI 启动的标准格式)。
|
||||
|
||||
6. **开始 (Start)**:点击底部按钮。
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 3. 关键弹窗选择
|
||||
|
||||
点击“开始”后,Rufus 通常会弹出两个重要的提示:
|
||||
|
||||
- **检测到 ISOHybrid 镜像**:
|
||||
- **推荐选择**:“以 **ISO 镜像模式**写入”。
|
||||
- _说明:如果稍后无法启动,才考虑重新制作并选择“DD 模式”。_
|
||||
- **下载额外文件**:
|
||||
- 如果提示需要下载 `ldlinux.sys` 或 `ldlinux.bss`,点击“是”,让 Rufus 自动下载以确保引导成功。
|
||||
|
||||
---
|
||||
## 4. HP ZBook 分区格式化
|
||||
|
||||
对于 **HP ZBook** 这种高性能工作站安装 Ubuntu 24.04,为了充分发挥其 NVMe 固态硬盘的性能并确保 UEFI 引导的稳定性,分区和格式化建议遵循以下专业标准:
|
||||
### 1. 硬盘分区表 (Partition Table)
|
||||
- **必须选择 GPT (GUID Partition Table)**:HP ZBook 属于现代 UEFI 设备,不再建议使用过时的 MBR 分区。GPT 支持 2TB 以上硬盘,且与 UEFI 引导完美兼容。
|
||||
- **在 Rufus 制作时设置**:请确保在制作启动盘时,分区方案选为 **GPT**。
|
||||
### 2. 核心分区建议 (手动分区模式)
|
||||
|
||||
如果你在安装时选择“手动分区 (Something else)”,建议按以下规格配置
|
||||
|
||||
|**分区挂载点**|**建议大小**|**文件系统**|**说明**|
|
||||
|---|---|---|---|
|
||||
|**/boot/efi**|**512MB - 1GB**|**FAT32**|**必须项**。用于存储 UEFI 引导程序。|
|
||||
|**/** (根目录)|**100GB - 200GB**|**ext4**|存放系统文件、Docker 镜像和应用程序。|
|
||||
|**/home**|**剩余所有空间**|**ext4**|**强烈建议独立分区**。即使重装系统,你的 TikTok 运营数据和个人配置也能保留。|
|
||||
|**swap** (交换空间)|**8GB - 32GB**|**swap**|根据内存大小决定。如果经常跑大量 Docker 容器,建议设为内存的 1 倍。|
|
||||
|
||||
### 3. 文件系统格式选择
|
||||
|
||||
- **ext4 (推荐)**:最成熟、稳定的 Linux 文件系统,适合绝大多数工作室场景。
|
||||
- **ZFS / Btrfs**:虽然 Ubuntu 24.04 支持这些高级文件系统(支持快照功能),但对于 HP ZBook 上的 Docker 环境,**ext4** 的兼容性和性能表现最预测。
|
||||
|
||||
### 4. HP ZBook 特有的 BIOS/UEFI 设置
|
||||
|
||||
在格式化安装前,请进入 BIOS(开机反复按 **F10**)检查:
|
||||
|
||||
1. **Storage (存储)**:确保 SATA 模式(如果是混合硬盘)设置为 **AHCI**,而不是 RAID/Intel RST(Ubuntu 对 RST 兼容性较差)。
|
||||
2. **Secure Boot (安全启动)**:建议 **关闭 (Disabled)**。虽然 Ubuntu 支持安全启动,但关闭它能避免后续安装第三方驱动(如 Nvidia 显卡、特定的备份驱动)时遇到麻烦。
|
||||
3. **Fast Boot**:建议 **关闭**,以确保 U 盘能顺利引导。
|
||||
### 5. 格式化时的特别提醒
|
||||
|
||||
- **NVMe 优化**:Ubuntu 24.04 会自动识别 ZBook 的 NVMe 硬盘并进行对齐优化。手动分区时,请确保分区起始位置是默认推荐的数值(通常是 2048 扇区)。
|
||||
- **保留恢复分区?**:如果你想彻底抹除 Windows,请在安装向导中选择 **“Erase disk and install Ubuntu”**。这会自动为你创建最优的 GPT 分区结构,省去手动操作的麻烦。
|
||||
|
||||
---
|
||||
## 5 引导 HP ZBook 进入安装程序
|
||||
|
||||
制作完成后,拔下 U 盘插到你的笔记本上,按以下步骤启动:
|
||||
|
||||
1. **重启电脑**:在看到 HP Logo 之前,连续按下 **F9** 键(这是 HP 典型的启动菜单快捷键)。
|
||||
2. **选择引导设备**:在菜单中选择带有 **UEFI: USB Storage Device** 字样的选项。
|
||||
3. **进入 GRUB 菜单**:选择第一项 `Try or Install Ubuntu`。
|
||||
|
||||
---
|
||||
|
||||
## 6. 高级建议:自动化与备份
|
||||
|
||||
作为工作室负责人,为了避免以后反复重装,建议你:
|
||||
|
||||
- **安装完成后立即执行 Rsync**:当你装好系统并配置好网络后,立即将 NAS 上的旧数据通过 `rsync` 还原回来。
|
||||
- **制作“母版”镜像**:等你的 Ubuntu 系统、Docker、TikTok 运营环境全部配置完美后,参考我之前教你的方法,用 **Clonezilla** 给整个硬盘做个镜像存到 NAS 上。
|
||||
|
||||
|
||||
## 7. 排查重启后不能进入Ubuntu的问题
|
||||
|
||||
### 强制将 EFI 文件复制到“默认路径”
|
||||
|
||||
HP BIOS 有时非常固执,它只会寻找磁盘上默认的启动文件(`/EFI/BOOT/BOOTX64.EFI`)。如果它不保存你的自定义项,我们可以通过在 Ubuntu 内将 `shimx64.efi` 伪装成默认文件来“欺骗” BIOS。
|
||||
|
||||
1. 通过 F9 手动进入 Ubuntu。
|
||||
|
||||
2. 打开终端,执行以下命令:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
# 检查 EFI 分区挂载点
|
||||
sudo mkdir -p /boot/efi/EFI/BOOT
|
||||
|
||||
# 将 ubuntu 的引导文件复制并重命名为 BIOS 默认寻找的文件
|
||||
sudo cp /boot/efi/EFI/ubuntu/shimx64.efi /boot/efi/EFI/BOOT/BOOTX64.EFI
|
||||
sudo cp /boot/efi/EFI/ubuntu/grubx64.efi /boot/efi/EFI/BOOT/grubx64.efi
|
||||
```
|
||||
|
||||
1. 重启电脑。此时 BIOS 会在找不到其他引导项时,自动加载这个“默认”路径。
|
||||
|
||||
### 使用 `efibootmgr` 手动写入 NVRAM
|
||||
|
||||
既然你是技术背景,可以直接在 Linux 系统层面对 BIOS 存储(NVRAM)进行强制写入,这通常比在图形界面操作更有效。
|
||||
|
||||
1. 在 Ubuntu 终端输入:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
# 查看当前的引导列表
|
||||
sudo efibootmgr
|
||||
```
|
||||
|
||||
2. 找到你的 Ubuntu 对应的编号(比如 `Boot0001`)。
|
||||
|
||||
3. 假设 Ubuntu 是 `0001`,强制设置它为首选:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo efibootmgr -o 0001
|
||||
```
|
||||
|
||||
4. 如果列表里没有 Ubuntu,手动添加一个(假设硬盘是 `/dev/nvme0n1`,分区 1 是 EFI):
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo efibootmgr -c -d /dev/nvme0n1 -p 1 -L "Ubuntu_Force" -l "\EFI\ubuntu\shimx64.efi"
|
||||
```
|
||||
|
||||
根据你提供的 `efibootmgr` 输出,我发现了问题的核心原因:虽然 **Boot0005 (Ubuntu)** 已经成功注册到了 NVRAM 中,但它**不在 `BootOrder` (启动顺序)** 的名单里。
|
||||
|
||||
目前的 `BootOrder` 只有 `0000, 0001, 0002, 0003`,这意味着 BIOS 启动时会完全忽略 `0005`。我们需要手动将 `0005` 强制加入并排在第一位。
|
||||
|
||||
---
|
||||
|
||||
### 核心修复:强制重写启动顺序
|
||||
|
||||
在 Ubuntu 终端(root 权限下)执行以下命令:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
# 将 0005 (Ubuntu) 放在启动顺序的首位
|
||||
sudo efibootmgr -o 0005,0000,0001,0002,0003
|
||||
```
|
||||
|
||||
**验证结果:** 再次输入 `sudo efibootmgr`,确认第一行显示的 `BootOrder` 已经变成了 `0005,0000,...`。
|
||||
|
||||
---
|
||||
|
||||
### 备用方案:防止 HP BIOS 重置顺序(伪装大法)
|
||||
|
||||
HP 的旧款 ZBook 有个“坏习惯”:如果它在 NVRAM 里找不到它认为“标准”的启动项,它会重置 BootOrder。我们可以把 Ubuntu 的引导文件复制到磁盘的**默认备用路径**。这样即使 BIOS 抽风忽略了 NVRAM,也会因为在磁盘上找到了文件而启动。
|
||||
|
||||
执行以下命令:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
# 1. 创建默认引导目录
|
||||
sudo mkdir -p /boot/efi/EFI/BOOT
|
||||
|
||||
# 2. 将 Ubuntu 的引导程序复制并重命名为“万能默认名”
|
||||
sudo cp /boot/efi/EFI/ubuntu/shimx64.efi /boot/efi/EFI/BOOT/BOOTX64.EFI
|
||||
sudo cp /boot/efi/EFI/ubuntu/grubx64.efi /boot/efi/EFI/BOOT/grubx64.efi
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### BIOS 端的最后检查
|
||||
|
||||
执行完上述 Linux 命令后,重启进入 BIOS (**F10**),检查以下两个细节:
|
||||
|
||||
1. **Fast Boot (快速启动)**:务必将其设为 **Disabled**。开启它会导致 BIOS 跳过很多 EFI 检测逻辑。
|
||||
|
||||
|
||||
> [!NOTE] 执行了以下操作后可以正常启动!!!
|
||||
1. **Legacy Support (传统支持)**:确保设置为 **Disabled** (或者选择 **UEFI Without Legacy**)。从你的输出看,你现在有大量的 `BBS` (Legacy) 启动项,这会干扰 UEFI 的识别。
|
||||
|
||||
|
||||
---
|
||||
> [!NOTE] 最终解决方案!!!
|
||||
### 为什么会有这么多 `BBS` 项?
|
||||
|
||||
你的输出中 `Boot0000` 到 `Boot0004` 全是 `BBS` 类型的条目,这说明你的 BIOS 目前处于 **混合模式 (Hybrid)** 或 **传统模式 (Legacy)**。
|
||||
|
||||
- **建议**:在 BIOS 的 `Boot Options` 中,找到 **"Boot Mode"**,将其从 `Legacy` 或 `Hybrid` 切换为 **"UEFI Only"**。
|
||||
|
||||
- 一旦切换为 **UEFI Only**,那些无效的 `0000-0004` 就会消失,BIOS 将被迫只看 `0005` (Ubuntu)。
|
||||
|
||||
[[🟠Ubuntu 24.04 enable SSH]]
|
||||
[[🟠Ubuntu禁用合盖休眠]]
|
||||
[[🟠Ubuntu Server科学上网]]
|
||||
---
|
||||
title: 将 0005 (Ubuntu) 放在启动顺序的首位
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [hp, rufus, ubuntu, zbook]
|
||||
---
|
||||
|
||||
|
||||
#ubuntu #hp #zbook #rufus
|
||||
|
||||
```table-of-contents
|
||||
```
|
||||
|
||||
## 1. 准备工作
|
||||
|
||||
- **硬件**:一个容量至少为 **8GB** 的 U 盘。
|
||||
- **软件**:下载并运行最新版的 **Rufus**。
|
||||
- **数据提醒**:制作过程会清空 U 盘内的所有数据,请提前备份。
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 2. Rufus 设置步骤
|
||||
|
||||
请按照以下顺序配置 Rufus 界面:
|
||||
|
||||
1. **设备 (Device)**:选中你插入的 U 盘。
|
||||
|
||||
2. **引导类型选择 (Boot selection)**:点击右侧的“选择”,找到你电脑里的 `ubuntu-24.04.2-desktop-amd64.iso`。
|
||||
|
||||
3. **分区方案 (Partition scheme)**:
|
||||
|
||||
- **选择 `GPT`**。对于 HP ZBook 这种较新的工作站,务必使用 GPT 配合 UEFI 启动。
|
||||
|
||||
4. **目标系统类型 (Target system)**:
|
||||
|
||||
- 会自动变为 `UEFI (non CSM)`。
|
||||
|
||||
5. **文件系统 (File system)**:
|
||||
|
||||
- 保持默认的 `FAT32`(这是 UEFI 启动的标准格式)。
|
||||
|
||||
6. **开始 (Start)**:点击底部按钮。
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 3. 关键弹窗选择
|
||||
|
||||
点击“开始”后,Rufus 通常会弹出两个重要的提示:
|
||||
|
||||
- **检测到 ISOHybrid 镜像**:
|
||||
- **推荐选择**:“以 **ISO 镜像模式**写入”。
|
||||
- _说明:如果稍后无法启动,才考虑重新制作并选择“DD 模式”。_
|
||||
- **下载额外文件**:
|
||||
- 如果提示需要下载 `ldlinux.sys` 或 `ldlinux.bss`,点击“是”,让 Rufus 自动下载以确保引导成功。
|
||||
|
||||
---
|
||||
## 4. HP ZBook 分区格式化
|
||||
|
||||
对于 **HP ZBook** 这种高性能工作站安装 Ubuntu 24.04,为了充分发挥其 NVMe 固态硬盘的性能并确保 UEFI 引导的稳定性,分区和格式化建议遵循以下专业标准:
|
||||
### 1. 硬盘分区表 (Partition Table)
|
||||
- **必须选择 GPT (GUID Partition Table)**:HP ZBook 属于现代 UEFI 设备,不再建议使用过时的 MBR 分区。GPT 支持 2TB 以上硬盘,且与 UEFI 引导完美兼容。
|
||||
- **在 Rufus 制作时设置**:请确保在制作启动盘时,分区方案选为 **GPT**。
|
||||
### 2. 核心分区建议 (手动分区模式)
|
||||
|
||||
如果你在安装时选择“手动分区 (Something else)”,建议按以下规格配置
|
||||
|
||||
|**分区挂载点**|**建议大小**|**文件系统**|**说明**|
|
||||
|---|---|---|---|
|
||||
|**/boot/efi**|**512MB - 1GB**|**FAT32**|**必须项**。用于存储 UEFI 引导程序。|
|
||||
|**/** (根目录)|**100GB - 200GB**|**ext4**|存放系统文件、Docker 镜像和应用程序。|
|
||||
|**/home**|**剩余所有空间**|**ext4**|**强烈建议独立分区**。即使重装系统,你的 TikTok 运营数据和个人配置也能保留。|
|
||||
|**swap** (交换空间)|**8GB - 32GB**|**swap**|根据内存大小决定。如果经常跑大量 Docker 容器,建议设为内存的 1 倍。|
|
||||
|
||||
### 3. 文件系统格式选择
|
||||
|
||||
- **ext4 (推荐)**:最成熟、稳定的 Linux 文件系统,适合绝大多数工作室场景。
|
||||
- **ZFS / Btrfs**:虽然 Ubuntu 24.04 支持这些高级文件系统(支持快照功能),但对于 HP ZBook 上的 Docker 环境,**ext4** 的兼容性和性能表现最预测。
|
||||
|
||||
### 4. HP ZBook 特有的 BIOS/UEFI 设置
|
||||
|
||||
在格式化安装前,请进入 BIOS(开机反复按 **F10**)检查:
|
||||
|
||||
1. **Storage (存储)**:确保 SATA 模式(如果是混合硬盘)设置为 **AHCI**,而不是 RAID/Intel RST(Ubuntu 对 RST 兼容性较差)。
|
||||
2. **Secure Boot (安全启动)**:建议 **关闭 (Disabled)**。虽然 Ubuntu 支持安全启动,但关闭它能避免后续安装第三方驱动(如 Nvidia 显卡、特定的备份驱动)时遇到麻烦。
|
||||
3. **Fast Boot**:建议 **关闭**,以确保 U 盘能顺利引导。
|
||||
### 5. 格式化时的特别提醒
|
||||
|
||||
- **NVMe 优化**:Ubuntu 24.04 会自动识别 ZBook 的 NVMe 硬盘并进行对齐优化。手动分区时,请确保分区起始位置是默认推荐的数值(通常是 2048 扇区)。
|
||||
- **保留恢复分区?**:如果你想彻底抹除 Windows,请在安装向导中选择 **“Erase disk and install Ubuntu”**。这会自动为你创建最优的 GPT 分区结构,省去手动操作的麻烦。
|
||||
|
||||
---
|
||||
## 5 引导 HP ZBook 进入安装程序
|
||||
|
||||
制作完成后,拔下 U 盘插到你的笔记本上,按以下步骤启动:
|
||||
|
||||
1. **重启电脑**:在看到 HP Logo 之前,连续按下 **F9** 键(这是 HP 典型的启动菜单快捷键)。
|
||||
2. **选择引导设备**:在菜单中选择带有 **UEFI: USB Storage Device** 字样的选项。
|
||||
3. **进入 GRUB 菜单**:选择第一项 `Try or Install Ubuntu`。
|
||||
|
||||
---
|
||||
|
||||
## 6. 高级建议:自动化与备份
|
||||
|
||||
作为工作室负责人,为了避免以后反复重装,建议你:
|
||||
|
||||
- **安装完成后立即执行 Rsync**:当你装好系统并配置好网络后,立即将 NAS 上的旧数据通过 `rsync` 还原回来。
|
||||
- **制作“母版”镜像**:等你的 Ubuntu 系统、Docker、TikTok 运营环境全部配置完美后,参考我之前教你的方法,用 **Clonezilla** 给整个硬盘做个镜像存到 NAS 上。
|
||||
|
||||
|
||||
## 7. 排查重启后不能进入Ubuntu的问题
|
||||
|
||||
### 强制将 EFI 文件复制到“默认路径”
|
||||
|
||||
HP BIOS 有时非常固执,它只会寻找磁盘上默认的启动文件(`/EFI/BOOT/BOOTX64.EFI`)。如果它不保存你的自定义项,我们可以通过在 Ubuntu 内将 `shimx64.efi` 伪装成默认文件来“欺骗” BIOS。
|
||||
|
||||
1. 通过 F9 手动进入 Ubuntu。
|
||||
|
||||
2. 打开终端,执行以下命令:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
# 检查 EFI 分区挂载点
|
||||
sudo mkdir -p /boot/efi/EFI/BOOT
|
||||
|
||||
# 将 ubuntu 的引导文件复制并重命名为 BIOS 默认寻找的文件
|
||||
sudo cp /boot/efi/EFI/ubuntu/shimx64.efi /boot/efi/EFI/BOOT/BOOTX64.EFI
|
||||
sudo cp /boot/efi/EFI/ubuntu/grubx64.efi /boot/efi/EFI/BOOT/grubx64.efi
|
||||
```
|
||||
|
||||
1. 重启电脑。此时 BIOS 会在找不到其他引导项时,自动加载这个“默认”路径。
|
||||
|
||||
### 使用 `efibootmgr` 手动写入 NVRAM
|
||||
|
||||
既然你是技术背景,可以直接在 Linux 系统层面对 BIOS 存储(NVRAM)进行强制写入,这通常比在图形界面操作更有效。
|
||||
|
||||
1. 在 Ubuntu 终端输入:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
# 查看当前的引导列表
|
||||
sudo efibootmgr
|
||||
```
|
||||
|
||||
2. 找到你的 Ubuntu 对应的编号(比如 `Boot0001`)。
|
||||
|
||||
3. 假设 Ubuntu 是 `0001`,强制设置它为首选:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo efibootmgr -o 0001
|
||||
```
|
||||
|
||||
4. 如果列表里没有 Ubuntu,手动添加一个(假设硬盘是 `/dev/nvme0n1`,分区 1 是 EFI):
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo efibootmgr -c -d /dev/nvme0n1 -p 1 -L "Ubuntu_Force" -l "\EFI\ubuntu\shimx64.efi"
|
||||
```
|
||||
|
||||
根据你提供的 `efibootmgr` 输出,我发现了问题的核心原因:虽然 **Boot0005 (Ubuntu)** 已经成功注册到了 NVRAM 中,但它**不在 `BootOrder` (启动顺序)** 的名单里。
|
||||
|
||||
目前的 `BootOrder` 只有 `0000, 0001, 0002, 0003`,这意味着 BIOS 启动时会完全忽略 `0005`。我们需要手动将 `0005` 强制加入并排在第一位。
|
||||
|
||||
---
|
||||
|
||||
### 核心修复:强制重写启动顺序
|
||||
|
||||
在 Ubuntu 终端(root 权限下)执行以下命令:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
# 将 0005 (Ubuntu) 放在启动顺序的首位
|
||||
sudo efibootmgr -o 0005,0000,0001,0002,0003
|
||||
```
|
||||
|
||||
**验证结果:** 再次输入 `sudo efibootmgr`,确认第一行显示的 `BootOrder` 已经变成了 `0005,0000,...`。
|
||||
|
||||
---
|
||||
|
||||
### 备用方案:防止 HP BIOS 重置顺序(伪装大法)
|
||||
|
||||
HP 的旧款 ZBook 有个“坏习惯”:如果它在 NVRAM 里找不到它认为“标准”的启动项,它会重置 BootOrder。我们可以把 Ubuntu 的引导文件复制到磁盘的**默认备用路径**。这样即使 BIOS 抽风忽略了 NVRAM,也会因为在磁盘上找到了文件而启动。
|
||||
|
||||
执行以下命令:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
# 1. 创建默认引导目录
|
||||
sudo mkdir -p /boot/efi/EFI/BOOT
|
||||
|
||||
# 2. 将 Ubuntu 的引导程序复制并重命名为“万能默认名”
|
||||
sudo cp /boot/efi/EFI/ubuntu/shimx64.efi /boot/efi/EFI/BOOT/BOOTX64.EFI
|
||||
sudo cp /boot/efi/EFI/ubuntu/grubx64.efi /boot/efi/EFI/BOOT/grubx64.efi
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### BIOS 端的最后检查
|
||||
|
||||
执行完上述 Linux 命令后,重启进入 BIOS (**F10**),检查以下两个细节:
|
||||
|
||||
1. **Fast Boot (快速启动)**:务必将其设为 **Disabled**。开启它会导致 BIOS 跳过很多 EFI 检测逻辑。
|
||||
|
||||
|
||||
> [!NOTE] 执行了以下操作后可以正常启动!!!
|
||||
1. **Legacy Support (传统支持)**:确保设置为 **Disabled** (或者选择 **UEFI Without Legacy**)。从你的输出看,你现在有大量的 `BBS` (Legacy) 启动项,这会干扰 UEFI 的识别。
|
||||
|
||||
|
||||
---
|
||||
> [!NOTE] 最终解决方案!!!
|
||||
### 为什么会有这么多 `BBS` 项?
|
||||
|
||||
你的输出中 `Boot0000` 到 `Boot0004` 全是 `BBS` 类型的条目,这说明你的 BIOS 目前处于 **混合模式 (Hybrid)** 或 **传统模式 (Legacy)**。
|
||||
|
||||
- **建议**:在 BIOS 的 `Boot Options` 中,找到 **"Boot Mode"**,将其从 `Legacy` 或 `Hybrid` 切换为 **"UEFI Only"**。
|
||||
|
||||
- 一旦切换为 **UEFI Only**,那些无效的 `0000-0004` 就会消失,BIOS 将被迫只看 `0005` (Ubuntu)。
|
||||
|
||||
[[🟠Ubuntu 24.04 enable SSH]]
|
||||
[[🟠Ubuntu禁用合盖休眠]]
|
||||
[[🟠Ubuntu Server科学上网]]
|
||||
[[🟠Ubuntu用RustDesk远程登录出现不能使用Wayland登录的错误]]
|
||||
@@ -1,104 +1,104 @@
|
||||
---
|
||||
title:
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [linux, v2rayn, windows]
|
||||
---
|
||||
|
||||
|
||||
#linux #v2rayn #windows
|
||||
### 通用说明
|
||||
|
||||
[](https://github.com/2dust/v2rayN/wiki/Release-files-introduction#%E9%80%9A%E7%94%A8%E8%AF%B4%E6%98%8E)
|
||||
|
||||
1. 发布包中含部分 Core 文件(`Xray`,`sing-box`, `mihomo`),方便使用;其他 Core 需要自己去下载,[支持的核心列表](https://github.com/2dust/v2rayN/wiki/List-of-supported-cores)
|
||||
2. `zip`格式包为便携版,解压缩到文件夹后直接可以运行,存储文件位置为本文件夹;可以复制多份互相独立
|
||||
|
||||
### Windows
|
||||
|
||||
[](https://github.com/2dust/v2rayN/wiki/Release-files-introduction#windows)
|
||||
|
||||
1. 支持的系统版本
|
||||
|
||||
```
|
||||
Windows 10+
|
||||
```
|
||||
|
||||
|
||||
#### Windows x64
|
||||
|
||||
[](https://github.com/2dust/v2rayN/wiki/Release-files-introduction#windows-x64)
|
||||
|
||||
- `v2rayN-windows-64.zip` WPF实现的界面,需要安装 [Microsoft .NET 8.0 Desktop Runtime]
|
||||
- `v2rayN-windows-64-SelfContained.zip` WPF实现的界面
|
||||
- `v2rayN-windows-64-desktop.zip` Avalonia UI 实现的界面
|
||||
- 其他 Core 你可以从 [这里](https://github.com/2dust/v2rayN-core-bin/blob/master/v2rayN-windows-64-other-bins.zip) 下载后放入 bin 文件夹
|
||||
|
||||
#### Windows arm64
|
||||
|
||||
[](https://github.com/2dust/v2rayN/wiki/Release-files-introduction#windows-arm64)
|
||||
|
||||
- [在 Windows arm64 下能使用吗?](https://github.com/2dust/v2rayN/wiki/Faq#%E5%9C%A8-windows-arm64-%E4%B8%8B%E8%83%BD%E4%BD%BF%E7%94%A8%E5%90%97)
|
||||
- `v2rayN-windows-arm64.zip` WPF实现的界面,需要安装 [Microsoft .NET 8.0 Desktop Runtime]
|
||||
- `v2rayN-windows-arm64-desktop.zip` Avalonia UI 实现的界面
|
||||
|
||||
### Linux
|
||||
|
||||
[](https://github.com/2dust/v2rayN/wiki/Release-files-introduction#linux)
|
||||
|
||||
1. 非`zip`格式包为安装版,存储文件位置为系统规定的用户文件中
|
||||
2. deb 适用于 Debian/Ubuntu,rpm 适用于 Fedora/Redhat
|
||||
3. 支持的发行版
|
||||
|
||||
```
|
||||
Debian 12 +
|
||||
Ubuntu 22.04 +
|
||||
Fedora 36 +
|
||||
Redhat 9 +
|
||||
```
|
||||
|
||||
|
||||
#### Linux x64
|
||||
|
||||
[](https://github.com/2dust/v2rayN/wiki/Release-files-introduction#linux-x64)
|
||||
|
||||
- `v2rayN-linux-64.zip` 执行: `chmod +x v2rayN` 普通用户运行 `./v2rayN`
|
||||
- `v2rayN-linux-64.deb` 安装:`sudo apt install -y ./v2rayN-linux-64.deb`
|
||||
- `v2rayN-linux-rhel-x64.rpm` 安装:`sudo dnf install -y ./v2rayN-linux-rhel-x64.rpm`
|
||||
|
||||
#### Linux arm64
|
||||
|
||||
[](https://github.com/2dust/v2rayN/wiki/Release-files-introduction#linux-arm64)
|
||||
|
||||
- `v2rayN-linux-arm64.zip` 执行: `chmod +x v2rayN` 普通用户运行 `./v2rayN`
|
||||
- `v2rayN-linux-arm64.deb` 安装:`sudo apt install -y ./v2rayN-linux-arm64.deb`
|
||||
- `v2rayN-linux-rhel-arm64.rpm` 安装:`sudo dnf install -y ./v2rayN-linux-rhel-arm64.rpm`
|
||||
|
||||
### macOS
|
||||
|
||||
[](https://github.com/2dust/v2rayN/wiki/Release-files-introduction#macos)
|
||||
|
||||
1. 非`zip`格式包为安装版,存储文件位置为系统规定的用户文件中
|
||||
2. 支持的系统版本
|
||||
|
||||
```
|
||||
macOS 12+
|
||||
```
|
||||
|
||||
|
||||
#### macOS x64
|
||||
|
||||
[](https://github.com/2dust/v2rayN/wiki/Release-files-introduction#macos-x64)
|
||||
|
||||
- `v2rayN-macos-64.zip` 执行:`chmod +x v2rayN` 普通用户运行 `./v2rayN`
|
||||
- `v2rayN-macos-64.dmg` 由于安装包没有签名,会提示应用已损坏;安装后需要运行:`xattr -cr /Applications/v2rayN.app`
|
||||
|
||||
#### macOS arm64
|
||||
|
||||
[](https://github.com/2dust/v2rayN/wiki/Release-files-introduction#macos-arm64)
|
||||
|
||||
- `v2rayN-macos-arm64.zip` 执行:`chmod +x v2rayN` 普通用户运行 `./v2rayN`
|
||||
---
|
||||
title:
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [linux, v2rayn, windows]
|
||||
---
|
||||
|
||||
|
||||
#linux #v2rayn #windows
|
||||
### 通用说明
|
||||
|
||||
[](https://github.com/2dust/v2rayN/wiki/Release-files-introduction#%E9%80%9A%E7%94%A8%E8%AF%B4%E6%98%8E)
|
||||
|
||||
1. 发布包中含部分 Core 文件(`Xray`,`sing-box`, `mihomo`),方便使用;其他 Core 需要自己去下载,[支持的核心列表](https://github.com/2dust/v2rayN/wiki/List-of-supported-cores)
|
||||
2. `zip`格式包为便携版,解压缩到文件夹后直接可以运行,存储文件位置为本文件夹;可以复制多份互相独立
|
||||
|
||||
### Windows
|
||||
|
||||
[](https://github.com/2dust/v2rayN/wiki/Release-files-introduction#windows)
|
||||
|
||||
1. 支持的系统版本
|
||||
|
||||
```
|
||||
Windows 10+
|
||||
```
|
||||
|
||||
|
||||
#### Windows x64
|
||||
|
||||
[](https://github.com/2dust/v2rayN/wiki/Release-files-introduction#windows-x64)
|
||||
|
||||
- `v2rayN-windows-64.zip` WPF实现的界面,需要安装 [Microsoft .NET 8.0 Desktop Runtime]
|
||||
- `v2rayN-windows-64-SelfContained.zip` WPF实现的界面
|
||||
- `v2rayN-windows-64-desktop.zip` Avalonia UI 实现的界面
|
||||
- 其他 Core 你可以从 [这里](https://github.com/2dust/v2rayN-core-bin/blob/master/v2rayN-windows-64-other-bins.zip) 下载后放入 bin 文件夹
|
||||
|
||||
#### Windows arm64
|
||||
|
||||
[](https://github.com/2dust/v2rayN/wiki/Release-files-introduction#windows-arm64)
|
||||
|
||||
- [在 Windows arm64 下能使用吗?](https://github.com/2dust/v2rayN/wiki/Faq#%E5%9C%A8-windows-arm64-%E4%B8%8B%E8%83%BD%E4%BD%BF%E7%94%A8%E5%90%97)
|
||||
- `v2rayN-windows-arm64.zip` WPF实现的界面,需要安装 [Microsoft .NET 8.0 Desktop Runtime]
|
||||
- `v2rayN-windows-arm64-desktop.zip` Avalonia UI 实现的界面
|
||||
|
||||
### Linux
|
||||
|
||||
[](https://github.com/2dust/v2rayN/wiki/Release-files-introduction#linux)
|
||||
|
||||
1. 非`zip`格式包为安装版,存储文件位置为系统规定的用户文件中
|
||||
2. deb 适用于 Debian/Ubuntu,rpm 适用于 Fedora/Redhat
|
||||
3. 支持的发行版
|
||||
|
||||
```
|
||||
Debian 12 +
|
||||
Ubuntu 22.04 +
|
||||
Fedora 36 +
|
||||
Redhat 9 +
|
||||
```
|
||||
|
||||
|
||||
#### Linux x64
|
||||
|
||||
[](https://github.com/2dust/v2rayN/wiki/Release-files-introduction#linux-x64)
|
||||
|
||||
- `v2rayN-linux-64.zip` 执行: `chmod +x v2rayN` 普通用户运行 `./v2rayN`
|
||||
- `v2rayN-linux-64.deb` 安装:`sudo apt install -y ./v2rayN-linux-64.deb`
|
||||
- `v2rayN-linux-rhel-x64.rpm` 安装:`sudo dnf install -y ./v2rayN-linux-rhel-x64.rpm`
|
||||
|
||||
#### Linux arm64
|
||||
|
||||
[](https://github.com/2dust/v2rayN/wiki/Release-files-introduction#linux-arm64)
|
||||
|
||||
- `v2rayN-linux-arm64.zip` 执行: `chmod +x v2rayN` 普通用户运行 `./v2rayN`
|
||||
- `v2rayN-linux-arm64.deb` 安装:`sudo apt install -y ./v2rayN-linux-arm64.deb`
|
||||
- `v2rayN-linux-rhel-arm64.rpm` 安装:`sudo dnf install -y ./v2rayN-linux-rhel-arm64.rpm`
|
||||
|
||||
### macOS
|
||||
|
||||
[](https://github.com/2dust/v2rayN/wiki/Release-files-introduction#macos)
|
||||
|
||||
1. 非`zip`格式包为安装版,存储文件位置为系统规定的用户文件中
|
||||
2. 支持的系统版本
|
||||
|
||||
```
|
||||
macOS 12+
|
||||
```
|
||||
|
||||
|
||||
#### macOS x64
|
||||
|
||||
[](https://github.com/2dust/v2rayN/wiki/Release-files-introduction#macos-x64)
|
||||
|
||||
- `v2rayN-macos-64.zip` 执行:`chmod +x v2rayN` 普通用户运行 `./v2rayN`
|
||||
- `v2rayN-macos-64.dmg` 由于安装包没有签名,会提示应用已损坏;安装后需要运行:`xattr -cr /Applications/v2rayN.app`
|
||||
|
||||
#### macOS arm64
|
||||
|
||||
[](https://github.com/2dust/v2rayN/wiki/Release-files-introduction#macos-arm64)
|
||||
|
||||
- `v2rayN-macos-arm64.zip` 执行:`chmod +x v2rayN` 普通用户运行 `./v2rayN`
|
||||
- `v2rayN-macos-arm64.dmg` 由于安装包没有签名,会提示应用已损坏;安装后需要运行:`xattr -cr /Applications/v2rayN.app`
|
||||
@@ -1,76 +1,76 @@
|
||||
|
||||
#rsshub #youtube #http-proxy #https-proxy
|
||||
|
||||
## 实战笔记:本地部署 RSSHub 并获取 YouTube 订阅
|
||||
|
||||
### 一、 核心架构
|
||||
|
||||
- **宿主机**:Ubuntu Server (`192.168.3.45`)。
|
||||
- **部署工具**:Docker Compose。
|
||||
- **关键组件**:需要配置 `YOUTUBE_KEY` 避开网页爬虫限制,并通过 `PROXY_URL` 实现容器内科学上网。
|
||||
---
|
||||
|
||||
### 二、 核心步骤:申请 YouTube Data API Key
|
||||
|
||||
这是解决 YouTube 订阅最稳定的方案,每月有足够的免费额度供个人使用。
|
||||
|
||||
1. **创建项目**:
|
||||
- 访问 [Google Cloud Console](https://console.cloud.google.com/)。
|
||||
- 点击顶部项目选择框,选择 **"新建项目" (New Project)**,命名为 `My-RSSHub`。
|
||||
2. **启用 API**:
|
||||
- 在左侧导航栏选择 **"API 和服务" > "库" (Library)**。
|
||||
- 搜索 `YouTube Data API v3`,点击进入并点击 **"启用" (Enable)**。
|
||||
3. **生成凭据 (Key)**:
|
||||
- 回到 **"API 和服务" > "凭据" (Credentials)** 页面。
|
||||
- 点击 **"+ 创建凭据" > "API 密钥" (API Key)**。
|
||||
- 系统会弹出一个字符串(如 `AIzaSy...`),这就是你的 `YOUTUBE_KEY`,请立即复制保存。
|
||||
4. **(可选)设置限制**:
|
||||
- 为了安全,建议点击该 Key 进行编辑,在 "API 限制" 中选择 "限制密钥",并勾选 `YouTube Data API v3`。这样即使 Key 泄露,也只能用于 YouTube 抓取。
|
||||
|
||||
|
||||
---
|
||||
|
||||
### 三、 部署与配置
|
||||
|
||||
#### 1. 编辑 `docker-compose.yml`
|
||||
在你的 Ubuntu 宿主机上,确保环境变量包含以下内容:
|
||||
YAML
|
||||
|
||||
```
|
||||
services:
|
||||
rsshub:
|
||||
image: diygod/rsshub
|
||||
network_mode: host
|
||||
environment:
|
||||
- YOUTUBE_KEY=AIzaSyDWi_y8m2zJI8G-cOl4A8TWPBb9o2m_geU
|
||||
- PORT=1200
|
||||
- HTTP_PROXY=http://127.0.0.1:10808
|
||||
- HTTPS_PROXY=http://127.0.0.1:10808
|
||||
- NO_PROXY=localhost,127.0.0.1
|
||||
volumes:
|
||||
- /etc/ssl/certs/ca-certificates.crt:/etc/ssl/certs/ca-certificates.crt:ro
|
||||
restart: unless-stopped
|
||||
```
|
||||
|
||||
#### 2. 解决防火墙问题
|
||||
|
||||
如果局域网仍无法访问 `192.168.3.45:1200`,请在 Ubuntu 上运行:
|
||||
`sudo ufw allow 1200/tcp`
|
||||
|
||||
---
|
||||
### 四、 订阅转化与自动化思路
|
||||
|
||||
- **URL 转换格式**:
|
||||
- **频道**:`http://192.168.3.45:1200/youtube/channel/频道ID`
|
||||
- **用户**:`http://192.168.3.45:1200/youtube/user/用户名`
|
||||
---
|
||||
|
||||
### 五、 验证测试
|
||||
|
||||
配置完成后,重启容器:`docker-compose up -d`。
|
||||
|
||||
访问:`http://192.168.3.45:1200/youtube/channel/UC4JX40jDee_tINbkjycV4Sg`。
|
||||
|
||||
如果页面能正常显示 XML 列表且没有 `fetch failed` 错误,说明配置成功。
|
||||
|
||||
|
||||
#rsshub #youtube #http-proxy #https-proxy
|
||||
|
||||
## 实战笔记:本地部署 RSSHub 并获取 YouTube 订阅
|
||||
|
||||
### 一、 核心架构
|
||||
|
||||
- **宿主机**:Ubuntu Server (`192.168.3.45`)。
|
||||
- **部署工具**:Docker Compose。
|
||||
- **关键组件**:需要配置 `YOUTUBE_KEY` 避开网页爬虫限制,并通过 `PROXY_URL` 实现容器内科学上网。
|
||||
---
|
||||
|
||||
### 二、 核心步骤:申请 YouTube Data API Key
|
||||
|
||||
这是解决 YouTube 订阅最稳定的方案,每月有足够的免费额度供个人使用。
|
||||
|
||||
1. **创建项目**:
|
||||
- 访问 [Google Cloud Console](https://console.cloud.google.com/)。
|
||||
- 点击顶部项目选择框,选择 **"新建项目" (New Project)**,命名为 `My-RSSHub`。
|
||||
2. **启用 API**:
|
||||
- 在左侧导航栏选择 **"API 和服务" > "库" (Library)**。
|
||||
- 搜索 `YouTube Data API v3`,点击进入并点击 **"启用" (Enable)**。
|
||||
3. **生成凭据 (Key)**:
|
||||
- 回到 **"API 和服务" > "凭据" (Credentials)** 页面。
|
||||
- 点击 **"+ 创建凭据" > "API 密钥" (API Key)**。
|
||||
- 系统会弹出一个字符串(如 `AIzaSy...`),这就是你的 `YOUTUBE_KEY`,请立即复制保存。
|
||||
4. **(可选)设置限制**:
|
||||
- 为了安全,建议点击该 Key 进行编辑,在 "API 限制" 中选择 "限制密钥",并勾选 `YouTube Data API v3`。这样即使 Key 泄露,也只能用于 YouTube 抓取。
|
||||
|
||||
|
||||
---
|
||||
|
||||
### 三、 部署与配置
|
||||
|
||||
#### 1. 编辑 `docker-compose.yml`
|
||||
在你的 Ubuntu 宿主机上,确保环境变量包含以下内容:
|
||||
YAML
|
||||
|
||||
```
|
||||
services:
|
||||
rsshub:
|
||||
image: diygod/rsshub
|
||||
network_mode: host
|
||||
environment:
|
||||
- YOUTUBE_KEY=AIzaSyDWi_y8m2zJI8G-cOl4A8TWPBb9o2m_geU
|
||||
- PORT=1200
|
||||
- HTTP_PROXY=http://127.0.0.1:10808
|
||||
- HTTPS_PROXY=http://127.0.0.1:10808
|
||||
- NO_PROXY=localhost,127.0.0.1
|
||||
volumes:
|
||||
- /etc/ssl/certs/ca-certificates.crt:/etc/ssl/certs/ca-certificates.crt:ro
|
||||
restart: unless-stopped
|
||||
```
|
||||
|
||||
#### 2. 解决防火墙问题
|
||||
|
||||
如果局域网仍无法访问 `192.168.3.45:1200`,请在 Ubuntu 上运行:
|
||||
`sudo ufw allow 1200/tcp`
|
||||
|
||||
---
|
||||
### 四、 订阅转化与自动化思路
|
||||
|
||||
- **URL 转换格式**:
|
||||
- **频道**:`http://192.168.3.45:1200/youtube/channel/频道ID`
|
||||
- **用户**:`http://192.168.3.45:1200/youtube/user/用户名`
|
||||
---
|
||||
|
||||
### 五、 验证测试
|
||||
|
||||
配置完成后,重启容器:`docker-compose up -d`。
|
||||
|
||||
访问:`http://192.168.3.45:1200/youtube/channel/UC4JX40jDee_tINbkjycV4Sg`。
|
||||
|
||||
如果页面能正常显示 XML 列表且没有 `fetch failed` 错误,说明配置成功。
|
||||
|
||||
这个 API 申请流程通常几分钟就能搞定。你在 Google Cloud 控制台操作时,如果有哪个菜单找不到,随时告诉我。
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,232 +1,232 @@
|
||||
---
|
||||
title: 家庭网络环境概览
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [home-office, nas, synology, ubuntu, vps]
|
||||
---
|
||||
|
||||
#vps #nas #synology #ubuntu #home-office
|
||||
|
||||
```table-of-contents
|
||||
```
|
||||
# 家庭网络环境概览
|
||||
|
||||
> 📅 文档更新日期: 2026-04-03
|
||||
> 📝 更新内容: Docker 应用列表、FRP 端口映射、域名映射表
|
||||
|
||||
---
|
||||
|
||||
## 公网VPS1 (RackNerd)
|
||||
|
||||
| 公网IP | 公共域名 | SSH enabled? |
|
||||
| --------------- | ------------------- | ------------ |
|
||||
| 192.227.222.142 | vps.ishenwei.online | Yes (ssh vps1) |
|
||||
|
||||
### 安装的应用
|
||||
|
||||
| Name | Docker? | Note | Public Address |
|
||||
| ---------- | ------- | ---------------------------------------------------- | ------------------------- |
|
||||
| Caddy | No | 现代化 Web 服务器,自带 HTTPS 自动化证书申请,常作为前置反向代理处理业务流量。 | 通过 *.ishenwei.online 域名访问 |
|
||||
| FRP Server | No | 高性能内网穿透服务端(frps),负责将内网 NAS 或本地开发环境的服务暴露至公网访问。端口 7000 | |
|
||||
|
||||
---
|
||||
|
||||
## Mac Mini M4 (主控节点)
|
||||
|
||||
| 内网IP | 公共域名 | SSH enabled |
|
||||
| ------------ | ------------------- | ----------- |
|
||||
| 192.168.3.189 | macmini.ishenwei.online | Yes |
|
||||
|
||||
### 安装的应用
|
||||
|
||||
| Name | Docker? | Note | Internal Address | Public Address |
|
||||
| ------------- | ------ | -------------------------------------------- | -------------------------------- | ------------------------------------- |
|
||||
| OpenClaw | No | AI 助手框架,星曜的运行环境 | http://192.168.3.189:8080/ | |
|
||||
| vaultwarden | Yes | 轻量级 Bitwarden 服务端 | http://192.168.3.189:5151/ | https://vaultwarden.ishenwei.online/ |
|
||||
| stq_nginx | Yes | STQ 项目管理系统反向代理 | http://192.168.3.189:7777/ | https://stq.ishenwei.online/ |
|
||||
| stq_frontend | Yes | STQ 项目前端 | http://192.168.3.189:5173/ | |
|
||||
| stq_web | Yes | STQ Web 服务 | http://192.168.3.189:8000/ | |
|
||||
| stq_mariadb | Yes | STQ MySQL 数据库 | http://192.168.3.189:3306/ | |
|
||||
| stq-n8n | Yes | STQ 专用 n8n 工作流 | http://192.168.3.189:62000/ | |
|
||||
| portainer | Yes | Docker 容器可视化管理界面(历史版本,已废弃) | http://192.168.3.189:9000/ | 已废弃,使用各服务器本地 portainer |
|
||||
|
||||
### FRP 端口映射
|
||||
|
||||
| 名称 | 类型 | localPort | remotePort |
|
||||
|------|------|------------|------------|
|
||||
| macmini-ssh | tcp | 22 | 60026 |
|
||||
| vaultwarden | tcp | 5151 | 15151 |
|
||||
|
||||
> ⚠️ 注: n8n 已迁移至 Ubuntu2,Mac Mini 不再暴露 n8n 端口
|
||||
|
||||
---
|
||||
|
||||
## 内网Synology NAS DS718
|
||||
|
||||
| 内网IP | 公共域名 | SSH enabled |
|
||||
| ------------ | ------------------- | ----------- |
|
||||
| 192.168.3.17 | nas.ishenwei.online | Yes |
|
||||
|
||||
### 安装的应用
|
||||
|
||||
| Name | Docker? | Note | Internal Address | Public Address |
|
||||
| ------------------------- | ------ | ------------------------------------------------ | ---------------------------------------- | ------------------------------------------------ |
|
||||
| Synology NAS DSM | No | 系统的核心管理界面 | http://192.168.3.17:5000/ | https://nas.ishenwei.online/ |
|
||||
| Calibre | Yes | 强大的电子书库管理工具 | http://192.168.3.17:8083/ | https://calibre.ishenwei.online/ |
|
||||
| MinIO | Yes | 高性能对象存储 | http://192.168.3.17:9001/ | |
|
||||
| Zipline | Yes | 轻量级文件分享与图床服务 | http://192.168.3.17:3333/ | https://zipline.ishenwei.online/ |
|
||||
| navidrome | Yes | 轻量级自建音乐流媒体服务 | http://192.168.3.17:4533/ | https://navidrome.ishenwei.online/ |
|
||||
| jellyfin | Yes | 媒体服务器 | http://192.168.3.17:8096/ | https://jellyfin.ishenwei.online/ |
|
||||
| prometheus | Yes | 时序数据库监控系统 | http://192.168.3.17:9090/ | |
|
||||
| alertmanager | Yes | 告警中心 | http://192.168.3.17:9093/ | |
|
||||
| node_exporter | Yes | 硬件监控探针 | http://192.168.3.17:9100/ | |
|
||||
| v2raya | Yes | V2Ray 图形化代理客户端 | http://192.168.3.17:2017/ | |
|
||||
| vaultwarden (NAS版) | Yes | 密码管理器 | http://192.168.3.17:5151/ | |
|
||||
| portainer | Yes | Docker 容器管理 | http://192.168.3.17:9443/ | |
|
||||
| CloudDrive2 | No | 多云盘挂载工具 | http://192.168.3.17:19798/ | |
|
||||
| zipline_postgres | Yes | Zipline 的后端数据库 | http://192.168.3.17:5432/ | |
|
||||
| FRP Client | No | 内网穿透客户端 | /opt/frp/frp_0.65.0_linux_amd64 | |
|
||||
|
||||
### FRP 端口映射 (通过其他服务器暴露)
|
||||
|
||||
| 服务 | 来源服务器 | remotePort |
|
||||
|------|-----------|------------|
|
||||
| nas.ishenwei.online | VPS直连 | 15000 |
|
||||
| navidrome | NAS | 14533 |
|
||||
| calibre | NAS | 18083 |
|
||||
| jellyfin | NAS | 18096 |
|
||||
| zipline | NAS | 13333 |
|
||||
| miniflux | NAS | 18080 |
|
||||
|
||||
---
|
||||
|
||||
## 内网Ubuntu Server 1
|
||||
|
||||
| 内网IP | 公共域名 | SSH enabled |
|
||||
| ------------ | ----------------------- | ----------- |
|
||||
| 192.168.3.47 | ubuntu1.ishenwei.online | Yes |
|
||||
|
||||
### 安装的应用
|
||||
|
||||
| Name | Docker? | Note | Internal Address | Public Address |
|
||||
| ------------------- | ------- | ----------------------------- | ------------------------------- | ------------------------------------- |
|
||||
| glances | Yes | 轻量级服务器监控工具 | http://192.168.3.47:9089/ | |
|
||||
| prometheus | Yes | 时序数据库监控系统 | http://192.168.3.47:9090/ | |
|
||||
| grafana | Yes | 数据可视化看板 | http://192.168.3.47:3000/ | https://grafana.ishenwei.online/ |
|
||||
| alertmanager | Yes | 处理 Prometheus 告警策略 | http://192.168.3.47:9093/ | |
|
||||
| blackbox | Yes | 网络探测工具 | http://192.168.3.47:9115/ | |
|
||||
| node_exporter | Yes | 收集主机性能指标 | http://192.168.3.47:9100/ | |
|
||||
| cadvisor | Yes | 容器监控 | http://192.168.3.47:8080/ | |
|
||||
| homarr | Yes | 个人导航页面板 | http://192.168.3.47:7575/ | https://dashboard.ishenwei.online/ |
|
||||
| superset | Yes | 商业智能 (BI) 平台 | http://192.168.3.47:8777/ | https://superset.ishenwei.online/ |
|
||||
| tiktok_pm_nginx | Yes | TikTok 项目管理系统前端反向代理 | | |
|
||||
| tiktok_pm_web | Yes | TikTok 项目管理系统 Web 服务 | http://192.168.3.47:8888/ | https://tk.ishenwei.online/ |
|
||||
| tiktok_pm_worker | Yes | TikTok 项目异步任务 | | |
|
||||
| transmission | Yes | BitTorrent 下载客户端 | http://192.168.3.47:9091/ | https://transmission.ishenwei.online/ |
|
||||
| portainer | Yes | Docker 容器管理 | http://192.168.3.47:9000/ | https://portainer1.ishenwei.online/ |
|
||||
| it-tools | Yes | 开发者在线工具箱 | http://192.168.3.47:8999/ | https://it-tools.ishenwei.online/ |
|
||||
| nginx-proxy-manager | Yes | 反向代理管理 | http://192.168.3.47:81/ | |
|
||||
| FRP Client | No | 内网穿透客户端 | /opt/frp/frp_0.65.0_linux_amd64 | |
|
||||
|
||||
### FRP 端口映射
|
||||
|
||||
| 名称 | 类型 | localPort | remotePort |
|
||||
|------|------|------------|------------|
|
||||
| ubuntu1-ssh | tcp | 22 | 60022 |
|
||||
| transmission | tcp | 9091 | 19091 |
|
||||
| grafana | tcp | 3000 | 13000 |
|
||||
| homarr | tcp | 7575 | 17575 |
|
||||
| superset | tcp | 8777 | 18777 |
|
||||
| tk | tcp | 8888 | 18888 |
|
||||
| ubuntu1-portainer | tcp | 9000 | 19443 |
|
||||
| it-tools | tcp | 8999 | 18999 |
|
||||
| stq | tcp | 5173 | 15173 |
|
||||
| stq-admin | tcp | 7777 | 17000 |
|
||||
| stq-n8n | tcp | 62000 | 15678 |
|
||||
|
||||
---
|
||||
|
||||
## 内网Ubuntu Server 2
|
||||
|
||||
| 内网IP | 公共域名 | SSH enabled |
|
||||
| ------------ | ----------------------- | ----------- |
|
||||
| 192.168.3.45 | ubuntu2.ishenwei.online | Yes |
|
||||
|
||||
### 安装的应用
|
||||
|
||||
| Name | Docker? | Note | Internal Address | Public Address |
|
||||
| ------------------- | ------ | --------------------------------------------------------------------------------- | --------------------------------- | ------------------------------------- |
|
||||
| glances | Yes | 轻量级服务器监控工具 | http://192.168.3.45:9089/ | |
|
||||
| n8n | Yes | 工作流自动化平台 | http://192.168.3.45:5678/ | |
|
||||
| n8n_postgres | Yes | n8n PostgreSQL 数据库 | http://192.168.3.45:5432/ | |
|
||||
| drawio | Yes | 在线图表编辑器 | http://192.168.3.45:8085/ | https://drawio.ishenwei.online/ |
|
||||
| it-tools | Yes | 开发者在线工具箱(同步版本) | http://192.168.3.45:8999/ | |
|
||||
| gitea | Yes | 自建 Git 服务 | http://192.168.3.45:3000/ | |
|
||||
| portainer | Yes | Docker 容器管理界面 | http://192.168.3.45:8000/ | |
|
||||
| md | Yes | Markdown 文档转换工具 | http://192.168.3.45:8989/ | |
|
||||
| n8n-workflows-docs | Yes | n8n 工作流文档服务 | http://192.168.3.45:8001/ | |
|
||||
| tiktok_pm_mariadb | Yes | TikTok 项目 MySQL 数据库 | http://192.168.3.45:3306/ | |
|
||||
| tiktok_pm_nginx | Yes | TikTok 项目管理系统(DEV)前端反向代理 | | |
|
||||
| tiktok_pm_web | Yes | TikTok 项目管理系统(DEV) Web 服务 | http://192.168.3.45:8888/ | https://tk-dev.ishenwei.online/ |
|
||||
| tiktok_pm_worker | Yes | TikTok 项目(DEV)异步任务 | | |
|
||||
| FRP Client | No | 内网穿透客户端 | /opt/frp/frp_0.65.0_linux_amd64 | |
|
||||
|
||||
### FRP 端口映射
|
||||
|
||||
| 名称 | 类型 | localPort | remotePort |
|
||||
|------|------|------------|------------|
|
||||
| ubuntu2-ssh | tcp | 22 | 60024 |
|
||||
| tk-dev | tcp | 8888 | 18889 |
|
||||
| n8n | tcp | 5678 | 15679 |
|
||||
| it-tools | tcp | 8999 | 18999 |
|
||||
| drawio | tcp | 8085 | 18085 |
|
||||
|
||||
---
|
||||
|
||||
## 域名映射表 (Caddy)
|
||||
|
||||
| 域名 | → 端口 | 映射服务器 | 服务 |
|
||||
| -------------------------------- | ----- | ------- | ------------ |
|
||||
| vaultwarden.ishenwei.online | 15151 | macmini | vaultwarden |
|
||||
| n8n.ishenwei.online | 15679 | ubuntu2 | n8n |
|
||||
| it-tools.ishenwei.online | 18999 | ubuntu1 | it-tools |
|
||||
| drawio.ishenwei.online | 18085 | ubuntu2 | drawio |
|
||||
| transmission.ishenwei.online | 19091 | ubuntu1 | transmission |
|
||||
| grafana.ishenwei.online | 13000 | ubuntu1 | grafana |
|
||||
| nas.ishenwei.online | 15000 | NAS | DSM |
|
||||
| navidrome.ishenwei.online | 14533 | NAS | navidrome |
|
||||
| calibre.ishenwei.online | 18083 | NAS | calibre-web |
|
||||
| dashboard.ishenwei.online | 17575 | ubuntu1 | homarr |
|
||||
| miniflux.ishenwei.online | 18080 | NAS | miniflux |
|
||||
| zipline.ishenwei.online | 13333 | NAS | zipline |
|
||||
| superset.ishenwei.online | 18777 | ubuntu1 | superset |
|
||||
| tk.ishenwei.online | 18888 | ubuntu1 | tiktok_pm |
|
||||
| tk-dev.ishenwei.online | 18889 | ubuntu2 | tiktok_pm_dev |
|
||||
| jellyfin.ishenwei.online | 18096 | NAS | jellyfin |
|
||||
| portainer1.ishenwei.online | 19443 | ubuntu1 | portainer |
|
||||
| stq.ishenwei.online | 15173 | ubuntu1 | stq |
|
||||
| stq-admin.ishenwei.online | 17000 | ubuntu1 | stq-admin |
|
||||
| stq-n8n.ishenwei.online | 15678 | ubuntu1 | stq-n8n |
|
||||
|
||||
---
|
||||
|
||||
## 科学上网代理端口
|
||||
|
||||
| 服务器 | 代理地址 | 状态 |
|
||||
|--------|----------|------|
|
||||
| macmini | socks5://127.0.0.1:10808 | ✅ 正常 |
|
||||
| ubuntu1 | socks5://127.0.0.1:10808 | ✅ 正常 |
|
||||
| ubuntu2 | socks5://127.0.0.1:10808 | ✅ 正常 |
|
||||
| NAS | socks5://127.0.0.1:20170 | ❌ 仅本机监听 |
|
||||
|
||||
---
|
||||
|
||||
## Cloudflare
|
||||
|
||||
> 域名 DNS 托管于 Cloudflare,提供免费 CDN 与 SSL 证书。
|
||||
|
||||
|
||||
---
|
||||
title: 家庭网络环境概览
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [home-office, nas, synology, ubuntu, vps]
|
||||
---
|
||||
|
||||
#vps #nas #synology #ubuntu #home-office
|
||||
|
||||
```table-of-contents
|
||||
```
|
||||
# 家庭网络环境概览
|
||||
|
||||
> 📅 文档更新日期: 2026-04-03
|
||||
> 📝 更新内容: Docker 应用列表、FRP 端口映射、域名映射表
|
||||
|
||||
---
|
||||
|
||||
## 公网VPS1 (RackNerd)
|
||||
|
||||
| 公网IP | 公共域名 | SSH enabled? |
|
||||
| --------------- | ------------------- | ------------ |
|
||||
| 192.227.222.142 | vps.ishenwei.online | Yes (ssh vps1) |
|
||||
|
||||
### 安装的应用
|
||||
|
||||
| Name | Docker? | Note | Public Address |
|
||||
| ---------- | ------- | ---------------------------------------------------- | ------------------------- |
|
||||
| Caddy | No | 现代化 Web 服务器,自带 HTTPS 自动化证书申请,常作为前置反向代理处理业务流量。 | 通过 *.ishenwei.online 域名访问 |
|
||||
| FRP Server | No | 高性能内网穿透服务端(frps),负责将内网 NAS 或本地开发环境的服务暴露至公网访问。端口 7000 | |
|
||||
|
||||
---
|
||||
|
||||
## Mac Mini M4 (主控节点)
|
||||
|
||||
| 内网IP | 公共域名 | SSH enabled |
|
||||
| ------------ | ------------------- | ----------- |
|
||||
| 192.168.3.189 | macmini.ishenwei.online | Yes |
|
||||
|
||||
### 安装的应用
|
||||
|
||||
| Name | Docker? | Note | Internal Address | Public Address |
|
||||
| ------------- | ------ | -------------------------------------------- | -------------------------------- | ------------------------------------- |
|
||||
| OpenClaw | No | AI 助手框架,星曜的运行环境 | http://192.168.3.189:8080/ | |
|
||||
| vaultwarden | Yes | 轻量级 Bitwarden 服务端 | http://192.168.3.189:5151/ | https://vaultwarden.ishenwei.online/ |
|
||||
| stq_nginx | Yes | STQ 项目管理系统反向代理 | http://192.168.3.189:7777/ | https://stq.ishenwei.online/ |
|
||||
| stq_frontend | Yes | STQ 项目前端 | http://192.168.3.189:5173/ | |
|
||||
| stq_web | Yes | STQ Web 服务 | http://192.168.3.189:8000/ | |
|
||||
| stq_mariadb | Yes | STQ MySQL 数据库 | http://192.168.3.189:3306/ | |
|
||||
| stq-n8n | Yes | STQ 专用 n8n 工作流 | http://192.168.3.189:62000/ | |
|
||||
| portainer | Yes | Docker 容器可视化管理界面(历史版本,已废弃) | http://192.168.3.189:9000/ | 已废弃,使用各服务器本地 portainer |
|
||||
|
||||
### FRP 端口映射
|
||||
|
||||
| 名称 | 类型 | localPort | remotePort |
|
||||
|------|------|------------|------------|
|
||||
| macmini-ssh | tcp | 22 | 60026 |
|
||||
| vaultwarden | tcp | 5151 | 15151 |
|
||||
|
||||
> ⚠️ 注: n8n 已迁移至 Ubuntu2,Mac Mini 不再暴露 n8n 端口
|
||||
|
||||
---
|
||||
|
||||
## 内网Synology NAS DS718
|
||||
|
||||
| 内网IP | 公共域名 | SSH enabled |
|
||||
| ------------ | ------------------- | ----------- |
|
||||
| 192.168.3.17 | nas.ishenwei.online | Yes |
|
||||
|
||||
### 安装的应用
|
||||
|
||||
| Name | Docker? | Note | Internal Address | Public Address |
|
||||
| ------------------------- | ------ | ------------------------------------------------ | ---------------------------------------- | ------------------------------------------------ |
|
||||
| Synology NAS DSM | No | 系统的核心管理界面 | http://192.168.3.17:5000/ | https://nas.ishenwei.online/ |
|
||||
| Calibre | Yes | 强大的电子书库管理工具 | http://192.168.3.17:8083/ | https://calibre.ishenwei.online/ |
|
||||
| MinIO | Yes | 高性能对象存储 | http://192.168.3.17:9001/ | |
|
||||
| Zipline | Yes | 轻量级文件分享与图床服务 | http://192.168.3.17:3333/ | https://zipline.ishenwei.online/ |
|
||||
| navidrome | Yes | 轻量级自建音乐流媒体服务 | http://192.168.3.17:4533/ | https://navidrome.ishenwei.online/ |
|
||||
| jellyfin | Yes | 媒体服务器 | http://192.168.3.17:8096/ | https://jellyfin.ishenwei.online/ |
|
||||
| prometheus | Yes | 时序数据库监控系统 | http://192.168.3.17:9090/ | |
|
||||
| alertmanager | Yes | 告警中心 | http://192.168.3.17:9093/ | |
|
||||
| node_exporter | Yes | 硬件监控探针 | http://192.168.3.17:9100/ | |
|
||||
| v2raya | Yes | V2Ray 图形化代理客户端 | http://192.168.3.17:2017/ | |
|
||||
| vaultwarden (NAS版) | Yes | 密码管理器 | http://192.168.3.17:5151/ | |
|
||||
| portainer | Yes | Docker 容器管理 | http://192.168.3.17:9443/ | |
|
||||
| CloudDrive2 | No | 多云盘挂载工具 | http://192.168.3.17:19798/ | |
|
||||
| zipline_postgres | Yes | Zipline 的后端数据库 | http://192.168.3.17:5432/ | |
|
||||
| FRP Client | No | 内网穿透客户端 | /opt/frp/frp_0.65.0_linux_amd64 | |
|
||||
|
||||
### FRP 端口映射 (通过其他服务器暴露)
|
||||
|
||||
| 服务 | 来源服务器 | remotePort |
|
||||
|------|-----------|------------|
|
||||
| nas.ishenwei.online | VPS直连 | 15000 |
|
||||
| navidrome | NAS | 14533 |
|
||||
| calibre | NAS | 18083 |
|
||||
| jellyfin | NAS | 18096 |
|
||||
| zipline | NAS | 13333 |
|
||||
| miniflux | NAS | 18080 |
|
||||
|
||||
---
|
||||
|
||||
## 内网Ubuntu Server 1
|
||||
|
||||
| 内网IP | 公共域名 | SSH enabled |
|
||||
| ------------ | ----------------------- | ----------- |
|
||||
| 192.168.3.47 | ubuntu1.ishenwei.online | Yes |
|
||||
|
||||
### 安装的应用
|
||||
|
||||
| Name | Docker? | Note | Internal Address | Public Address |
|
||||
| ------------------- | ------- | ----------------------------- | ------------------------------- | ------------------------------------- |
|
||||
| glances | Yes | 轻量级服务器监控工具 | http://192.168.3.47:9089/ | |
|
||||
| prometheus | Yes | 时序数据库监控系统 | http://192.168.3.47:9090/ | |
|
||||
| grafana | Yes | 数据可视化看板 | http://192.168.3.47:3000/ | https://grafana.ishenwei.online/ |
|
||||
| alertmanager | Yes | 处理 Prometheus 告警策略 | http://192.168.3.47:9093/ | |
|
||||
| blackbox | Yes | 网络探测工具 | http://192.168.3.47:9115/ | |
|
||||
| node_exporter | Yes | 收集主机性能指标 | http://192.168.3.47:9100/ | |
|
||||
| cadvisor | Yes | 容器监控 | http://192.168.3.47:8080/ | |
|
||||
| homarr | Yes | 个人导航页面板 | http://192.168.3.47:7575/ | https://dashboard.ishenwei.online/ |
|
||||
| superset | Yes | 商业智能 (BI) 平台 | http://192.168.3.47:8777/ | https://superset.ishenwei.online/ |
|
||||
| tiktok_pm_nginx | Yes | TikTok 项目管理系统前端反向代理 | | |
|
||||
| tiktok_pm_web | Yes | TikTok 项目管理系统 Web 服务 | http://192.168.3.47:8888/ | https://tk.ishenwei.online/ |
|
||||
| tiktok_pm_worker | Yes | TikTok 项目异步任务 | | |
|
||||
| transmission | Yes | BitTorrent 下载客户端 | http://192.168.3.47:9091/ | https://transmission.ishenwei.online/ |
|
||||
| portainer | Yes | Docker 容器管理 | http://192.168.3.47:9000/ | https://portainer1.ishenwei.online/ |
|
||||
| it-tools | Yes | 开发者在线工具箱 | http://192.168.3.47:8999/ | https://it-tools.ishenwei.online/ |
|
||||
| nginx-proxy-manager | Yes | 反向代理管理 | http://192.168.3.47:81/ | |
|
||||
| FRP Client | No | 内网穿透客户端 | /opt/frp/frp_0.65.0_linux_amd64 | |
|
||||
|
||||
### FRP 端口映射
|
||||
|
||||
| 名称 | 类型 | localPort | remotePort |
|
||||
|------|------|------------|------------|
|
||||
| ubuntu1-ssh | tcp | 22 | 60022 |
|
||||
| transmission | tcp | 9091 | 19091 |
|
||||
| grafana | tcp | 3000 | 13000 |
|
||||
| homarr | tcp | 7575 | 17575 |
|
||||
| superset | tcp | 8777 | 18777 |
|
||||
| tk | tcp | 8888 | 18888 |
|
||||
| ubuntu1-portainer | tcp | 9000 | 19443 |
|
||||
| it-tools | tcp | 8999 | 18999 |
|
||||
| stq | tcp | 5173 | 15173 |
|
||||
| stq-admin | tcp | 7777 | 17000 |
|
||||
| stq-n8n | tcp | 62000 | 15678 |
|
||||
|
||||
---
|
||||
|
||||
## 内网Ubuntu Server 2
|
||||
|
||||
| 内网IP | 公共域名 | SSH enabled |
|
||||
| ------------ | ----------------------- | ----------- |
|
||||
| 192.168.3.45 | ubuntu2.ishenwei.online | Yes |
|
||||
|
||||
### 安装的应用
|
||||
|
||||
| Name | Docker? | Note | Internal Address | Public Address |
|
||||
| ------------------- | ------ | --------------------------------------------------------------------------------- | --------------------------------- | ------------------------------------- |
|
||||
| glances | Yes | 轻量级服务器监控工具 | http://192.168.3.45:9089/ | |
|
||||
| n8n | Yes | 工作流自动化平台 | http://192.168.3.45:5678/ | |
|
||||
| n8n_postgres | Yes | n8n PostgreSQL 数据库 | http://192.168.3.45:5432/ | |
|
||||
| drawio | Yes | 在线图表编辑器 | http://192.168.3.45:8085/ | https://drawio.ishenwei.online/ |
|
||||
| it-tools | Yes | 开发者在线工具箱(同步版本) | http://192.168.3.45:8999/ | |
|
||||
| gitea | Yes | 自建 Git 服务 | http://192.168.3.45:3000/ | |
|
||||
| portainer | Yes | Docker 容器管理界面 | http://192.168.3.45:8000/ | |
|
||||
| md | Yes | Markdown 文档转换工具 | http://192.168.3.45:8989/ | |
|
||||
| n8n-workflows-docs | Yes | n8n 工作流文档服务 | http://192.168.3.45:8001/ | |
|
||||
| tiktok_pm_mariadb | Yes | TikTok 项目 MySQL 数据库 | http://192.168.3.45:3306/ | |
|
||||
| tiktok_pm_nginx | Yes | TikTok 项目管理系统(DEV)前端反向代理 | | |
|
||||
| tiktok_pm_web | Yes | TikTok 项目管理系统(DEV) Web 服务 | http://192.168.3.45:8888/ | https://tk-dev.ishenwei.online/ |
|
||||
| tiktok_pm_worker | Yes | TikTok 项目(DEV)异步任务 | | |
|
||||
| FRP Client | No | 内网穿透客户端 | /opt/frp/frp_0.65.0_linux_amd64 | |
|
||||
|
||||
### FRP 端口映射
|
||||
|
||||
| 名称 | 类型 | localPort | remotePort |
|
||||
|------|------|------------|------------|
|
||||
| ubuntu2-ssh | tcp | 22 | 60024 |
|
||||
| tk-dev | tcp | 8888 | 18889 |
|
||||
| n8n | tcp | 5678 | 15679 |
|
||||
| it-tools | tcp | 8999 | 18999 |
|
||||
| drawio | tcp | 8085 | 18085 |
|
||||
|
||||
---
|
||||
|
||||
## 域名映射表 (Caddy)
|
||||
|
||||
| 域名 | → 端口 | 映射服务器 | 服务 |
|
||||
| -------------------------------- | ----- | ------- | ------------ |
|
||||
| vaultwarden.ishenwei.online | 15151 | macmini | vaultwarden |
|
||||
| n8n.ishenwei.online | 15679 | ubuntu2 | n8n |
|
||||
| it-tools.ishenwei.online | 18999 | ubuntu1 | it-tools |
|
||||
| drawio.ishenwei.online | 18085 | ubuntu2 | drawio |
|
||||
| transmission.ishenwei.online | 19091 | ubuntu1 | transmission |
|
||||
| grafana.ishenwei.online | 13000 | ubuntu1 | grafana |
|
||||
| nas.ishenwei.online | 15000 | NAS | DSM |
|
||||
| navidrome.ishenwei.online | 14533 | NAS | navidrome |
|
||||
| calibre.ishenwei.online | 18083 | NAS | calibre-web |
|
||||
| dashboard.ishenwei.online | 17575 | ubuntu1 | homarr |
|
||||
| miniflux.ishenwei.online | 18080 | NAS | miniflux |
|
||||
| zipline.ishenwei.online | 13333 | NAS | zipline |
|
||||
| superset.ishenwei.online | 18777 | ubuntu1 | superset |
|
||||
| tk.ishenwei.online | 18888 | ubuntu1 | tiktok_pm |
|
||||
| tk-dev.ishenwei.online | 18889 | ubuntu2 | tiktok_pm_dev |
|
||||
| jellyfin.ishenwei.online | 18096 | NAS | jellyfin |
|
||||
| portainer1.ishenwei.online | 19443 | ubuntu1 | portainer |
|
||||
| stq.ishenwei.online | 15173 | ubuntu1 | stq |
|
||||
| stq-admin.ishenwei.online | 17000 | ubuntu1 | stq-admin |
|
||||
| stq-n8n.ishenwei.online | 15678 | ubuntu1 | stq-n8n |
|
||||
|
||||
---
|
||||
|
||||
## 科学上网代理端口
|
||||
|
||||
| 服务器 | 代理地址 | 状态 |
|
||||
|--------|----------|------|
|
||||
| macmini | socks5://127.0.0.1:10808 | ✅ 正常 |
|
||||
| ubuntu1 | socks5://127.0.0.1:10808 | ✅ 正常 |
|
||||
| ubuntu2 | socks5://127.0.0.1:10808 | ✅ 正常 |
|
||||
| NAS | socks5://127.0.0.1:20170 | ❌ 仅本机监听 |
|
||||
|
||||
---
|
||||
|
||||
## Cloudflare
|
||||
|
||||
> 域名 DNS 托管于 Cloudflare,提供免费 CDN 与 SSL 证书。
|
||||
|
||||
|
||||
![[IMG-20260403182706525.png]]
|
||||
@@ -1,44 +1,44 @@
|
||||
---
|
||||
title:
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [docker, music, navidrome]
|
||||
---
|
||||
|
||||
#docker #navidrome #music
|
||||
|
||||
``` yaml
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
navidrome:
|
||||
image: deluan/navidrome:latest
|
||||
container_name: navidrome
|
||||
user: "1026:100"
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "4533:4533"
|
||||
volumes:
|
||||
- /volume1/music:/music:ro"
|
||||
- /volume1/docker/navidrome/data:/data
|
||||
environment:
|
||||
# 开启详细日志,便于排查流媒体传输问题
|
||||
- ND_LOGLEVEL=info
|
||||
# 启用转码配置界面
|
||||
- ND_ENABLETRANSCODINGCONFIG=true
|
||||
# 自动根据客户端需求转码下载
|
||||
- ND_AUTOTRANSCODEDOWNLOAD=true
|
||||
# 限制转码缓存大小,保护磁盘空间
|
||||
- ND_TRANSCODINGCACHESIZE=200MB
|
||||
```
|
||||
|
||||
## Reference:
|
||||
### Navidrome Doc
|
||||
https://www.navidrome.org/docs/
|
||||
|
||||
### Navidrome FAQ
|
||||
https://www.navidrome.org/docs/faq/
|
||||
|
||||
---
|
||||
title:
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [docker, music, navidrome]
|
||||
---
|
||||
|
||||
#docker #navidrome #music
|
||||
|
||||
``` yaml
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
navidrome:
|
||||
image: deluan/navidrome:latest
|
||||
container_name: navidrome
|
||||
user: "1026:100"
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "4533:4533"
|
||||
volumes:
|
||||
- /volume1/music:/music:ro"
|
||||
- /volume1/docker/navidrome/data:/data
|
||||
environment:
|
||||
# 开启详细日志,便于排查流媒体传输问题
|
||||
- ND_LOGLEVEL=info
|
||||
# 启用转码配置界面
|
||||
- ND_ENABLETRANSCODINGCONFIG=true
|
||||
# 自动根据客户端需求转码下载
|
||||
- ND_AUTOTRANSCODEDOWNLOAD=true
|
||||
# 限制转码缓存大小,保护磁盘空间
|
||||
- ND_TRANSCODINGCACHESIZE=200MB
|
||||
```
|
||||
|
||||
## Reference:
|
||||
### Navidrome Doc
|
||||
https://www.navidrome.org/docs/
|
||||
|
||||
### Navidrome FAQ
|
||||
https://www.navidrome.org/docs/faq/
|
||||
|
||||
|
||||
@@ -1,41 +1,41 @@
|
||||
---
|
||||
title: Install Apache Superset
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [apache, bi, docker, mysql, superset]
|
||||
link:
|
||||
kanban-plugin:
|
||||
aliases:
|
||||
cssclasses:
|
||||
---
|
||||
|
||||
|
||||
#docker #superset #apache #mysql #bi
|
||||
|
||||
```
|
||||
docker pull apache/superset:GHA-19524015706
|
||||
```
|
||||
|
||||
```
|
||||
docker run -d -p 8777:8088 -e "SUPERSET_SECRET_KEY=mysuperset" --name superset apache/superset:GHA-19524015706
|
||||
```
|
||||
|
||||
```
|
||||
docker exec -it superset superset fab create-admin --username admin --firstname Superset --lastname Admin --email admin@superset.com --password admin
|
||||
```
|
||||
|
||||
```
|
||||
docker exec -it superset superset db upgrade
|
||||
```
|
||||
|
||||
```
|
||||
docker exec -it superset superset load_examples
|
||||
```
|
||||
|
||||
```
|
||||
docker exec -it superset superset init
|
||||
```
|
||||
|
||||
---
|
||||
title: Install Apache Superset
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [apache, bi, docker, mysql, superset]
|
||||
link:
|
||||
kanban-plugin:
|
||||
aliases:
|
||||
cssclasses:
|
||||
---
|
||||
|
||||
|
||||
#docker #superset #apache #mysql #bi
|
||||
|
||||
```
|
||||
docker pull apache/superset:GHA-19524015706
|
||||
```
|
||||
|
||||
```
|
||||
docker run -d -p 8777:8088 -e "SUPERSET_SECRET_KEY=mysuperset" --name superset apache/superset:GHA-19524015706
|
||||
```
|
||||
|
||||
```
|
||||
docker exec -it superset superset fab create-admin --username admin --firstname Superset --lastname Admin --email admin@superset.com --password admin
|
||||
```
|
||||
|
||||
```
|
||||
docker exec -it superset superset db upgrade
|
||||
```
|
||||
|
||||
```
|
||||
docker exec -it superset superset load_examples
|
||||
```
|
||||
|
||||
```
|
||||
docker exec -it superset superset init
|
||||
```
|
||||
|
||||
|
||||
@@ -1,34 +1,34 @@
|
||||
---
|
||||
title:
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [docker, homarr]
|
||||
---
|
||||
|
||||
|
||||
#homarr #docker
|
||||
|
||||
docker-compose.yml
|
||||
|
||||
``` yaml
|
||||
version: "3.9"
|
||||
|
||||
services:
|
||||
homarr:
|
||||
image: ghcr.io/homarr-labs/homarr
|
||||
container_name: homarr
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "7575:7575"
|
||||
volumes:
|
||||
- /home/shenwei/Docker/homarr/appdata:/appdata
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
environment:
|
||||
- SECRET_ENCRYPTION_KEY=4a418def4be700be26672aa57a4c3d4b94abd2cf97021b5c4ecd3c1644c1f071
|
||||
- ALL_PROXY=socks5://172.24.0.1:10808
|
||||
|
||||
```
|
||||
|
||||
---
|
||||
title:
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [docker, homarr]
|
||||
---
|
||||
|
||||
|
||||
#homarr #docker
|
||||
|
||||
docker-compose.yml
|
||||
|
||||
``` yaml
|
||||
version: "3.9"
|
||||
|
||||
services:
|
||||
homarr:
|
||||
image: ghcr.io/homarr-labs/homarr
|
||||
container_name: homarr
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "7575:7575"
|
||||
volumes:
|
||||
- /home/shenwei/Docker/homarr/appdata:/appdata
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
environment:
|
||||
- SECRET_ENCRYPTION_KEY=4a418def4be700be26672aa57a4c3d4b94abd2cf97021b5c4ecd3c1644c1f071
|
||||
- ALL_PROXY=socks5://172.24.0.1:10808
|
||||
|
||||
```
|
||||
|
||||
|
||||
@@ -1,40 +1,40 @@
|
||||
---
|
||||
title:
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [docker, jellyfin, movie, nas, synology, tv-show]
|
||||
---
|
||||
|
||||
|
||||
#jellyfin #docker #synology #nas #movie #tv-show
|
||||
|
||||
|
||||
``` yaml
|
||||
services:
|
||||
jellyfin:
|
||||
image: nyanmisaka/jellyfin:latest
|
||||
container_name: jellyfin
|
||||
# 群晖建议使用具体的 UID:GID
|
||||
user: "1026:100"
|
||||
ports:
|
||||
- 8096:8096/tcp
|
||||
- 7359:7359/udp
|
||||
volumes:
|
||||
- /volume1/docker/jellyfin/config:/config
|
||||
- /volume1/docker/jellyfin/cache:/cache
|
||||
- /volume2/movie:/media
|
||||
- "/volume1/TV shows:/media2"
|
||||
- /volume1/docker/jellyfin/fonts:/usr/local/share/fonts/custom:ro
|
||||
environment:
|
||||
- JELLYFIN_PublishedServerUrl=http://jellyfin.ishenwei.online
|
||||
- TZ=Asia/Shanghai
|
||||
# 核心优化:挂载硬件渲染设备以实现 Intel QuickSync 转码
|
||||
devices:
|
||||
- /dev/dri:/dev/dri
|
||||
restart: unless-stopped
|
||||
extra_hosts:
|
||||
- 'host.docker.internal:host-gateway'
|
||||
---
|
||||
title:
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [docker, jellyfin, movie, nas, synology, tv-show]
|
||||
---
|
||||
|
||||
|
||||
#jellyfin #docker #synology #nas #movie #tv-show
|
||||
|
||||
|
||||
``` yaml
|
||||
services:
|
||||
jellyfin:
|
||||
image: nyanmisaka/jellyfin:latest
|
||||
container_name: jellyfin
|
||||
# 群晖建议使用具体的 UID:GID
|
||||
user: "1026:100"
|
||||
ports:
|
||||
- 8096:8096/tcp
|
||||
- 7359:7359/udp
|
||||
volumes:
|
||||
- /volume1/docker/jellyfin/config:/config
|
||||
- /volume1/docker/jellyfin/cache:/cache
|
||||
- /volume2/movie:/media
|
||||
- "/volume1/TV shows:/media2"
|
||||
- /volume1/docker/jellyfin/fonts:/usr/local/share/fonts/custom:ro
|
||||
environment:
|
||||
- JELLYFIN_PublishedServerUrl=http://jellyfin.ishenwei.online
|
||||
- TZ=Asia/Shanghai
|
||||
# 核心优化:挂载硬件渲染设备以实现 Intel QuickSync 转码
|
||||
devices:
|
||||
- /dev/dri:/dev/dri
|
||||
restart: unless-stopped
|
||||
extra_hosts:
|
||||
- 'host.docker.internal:host-gateway'
|
||||
```
|
||||
@@ -1,45 +1,45 @@
|
||||
---
|
||||
title:
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [docker, portainer]
|
||||
---
|
||||
|
||||
|
||||
#docker #portainer
|
||||
|
||||
## portainer
|
||||
|
||||
create docker-compose.yml
|
||||
```
|
||||
services:
|
||||
portainer:
|
||||
container_name: portainer
|
||||
image: portainer/portainer-ce:lts
|
||||
restart: always
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
- portainer_data:/data
|
||||
ports:
|
||||
- 9443:9443
|
||||
- 8000:8000 # Remove if you do not intend to use Edge Agents
|
||||
|
||||
volumes:
|
||||
portainer_data:
|
||||
name: portainer_data
|
||||
|
||||
networks:
|
||||
default:
|
||||
name: portainer_network
|
||||
```
|
||||
|
||||
```
|
||||
docker-compose run -d
|
||||
```
|
||||
|
||||
|
||||
|
||||
---
|
||||
title:
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [docker, portainer]
|
||||
---
|
||||
|
||||
|
||||
#docker #portainer
|
||||
|
||||
## portainer
|
||||
|
||||
create docker-compose.yml
|
||||
```
|
||||
services:
|
||||
portainer:
|
||||
container_name: portainer
|
||||
image: portainer/portainer-ce:lts
|
||||
restart: always
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
- portainer_data:/data
|
||||
ports:
|
||||
- 9443:9443
|
||||
- 8000:8000 # Remove if you do not intend to use Edge Agents
|
||||
|
||||
volumes:
|
||||
portainer_data:
|
||||
name: portainer_data
|
||||
|
||||
networks:
|
||||
default:
|
||||
name: portainer_network
|
||||
```
|
||||
|
||||
```
|
||||
docker-compose run -d
|
||||
```
|
||||
|
||||
|
||||
|
||||
[[🟠如何删除旧的废弃的docker container +volume]]
|
||||
@@ -1,32 +1,32 @@
|
||||
---
|
||||
title:
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [docker, it-tools]
|
||||
---
|
||||
|
||||
#it-tools #docker
|
||||
|
||||
|
||||
``` yaml
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
it-tools:
|
||||
image: corentinth/it-tools:latest
|
||||
container_name: it-tools
|
||||
restart: unless-stopped
|
||||
# 交互模式配置
|
||||
stdin_open: true # 对应 -i
|
||||
tty: true # 对应 -t
|
||||
ports:
|
||||
- "8999:80"
|
||||
# 资源限制(可选建议)
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
memory: 128M
|
||||
---
|
||||
title:
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [docker, it-tools]
|
||||
---
|
||||
|
||||
#it-tools #docker
|
||||
|
||||
|
||||
``` yaml
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
it-tools:
|
||||
image: corentinth/it-tools:latest
|
||||
container_name: it-tools
|
||||
restart: unless-stopped
|
||||
# 交互模式配置
|
||||
stdin_open: true # 对应 -i
|
||||
tty: true # 对应 -t
|
||||
ports:
|
||||
- "8999:80"
|
||||
# 资源限制(可选建议)
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
memory: 128M
|
||||
```
|
||||
@@ -1,36 +1,36 @@
|
||||
---
|
||||
title:
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [docker, transmission]
|
||||
---
|
||||
|
||||
#docker #transmission
|
||||
|
||||
``` yaml
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
transmission:
|
||||
image: lscr.io/linuxserver/transmission:latest
|
||||
container_name: transmission
|
||||
restart: unless-stopped
|
||||
network_mode: bridge
|
||||
ports:
|
||||
- "9091:9091" # Web UI 访问端口
|
||||
- "51413:51413" # Peer 监听端口 (TCP)
|
||||
- "51413:51413/udp" # Peer 监听端口 (UDP)
|
||||
environment:
|
||||
- PUID=1000
|
||||
- PGID=1000
|
||||
- TZ=Etc/UTC
|
||||
- USER=shenwei # 可选:设置 Web UI 用户名
|
||||
- PASS=zmkm99zmkm00 # 可选:设置 Web UI 密码
|
||||
volumes:
|
||||
- /home/shenwei/Docker/transmission/data:/config
|
||||
- /home/shenwei/Downloads:/downloads
|
||||
|
||||
---
|
||||
title:
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [docker, transmission]
|
||||
---
|
||||
|
||||
#docker #transmission
|
||||
|
||||
``` yaml
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
transmission:
|
||||
image: lscr.io/linuxserver/transmission:latest
|
||||
container_name: transmission
|
||||
restart: unless-stopped
|
||||
network_mode: bridge
|
||||
ports:
|
||||
- "9091:9091" # Web UI 访问端口
|
||||
- "51413:51413" # Peer 监听端口 (TCP)
|
||||
- "51413:51413/udp" # Peer 监听端口 (UDP)
|
||||
environment:
|
||||
- PUID=1000
|
||||
- PGID=1000
|
||||
- TZ=Etc/UTC
|
||||
- USER=shenwei # 可选:设置 Web UI 用户名
|
||||
- PASS=zmkm99zmkm00 # 可选:设置 Web UI 密码
|
||||
volumes:
|
||||
- /home/shenwei/Docker/transmission/data:/config
|
||||
- /home/shenwei/Downloads:/downloads
|
||||
|
||||
```
|
||||
@@ -1,106 +1,106 @@
|
||||
---
|
||||
title:
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [clash, merlin-clash, rax50]
|
||||
---
|
||||
|
||||
|
||||
#rax50 #merlin-clash #clash
|
||||
|
||||
```table-of-contents
|
||||
```
|
||||
|
||||
## 网件RAX50路由器刷梅林固件与科学上网插件安装教程
|
||||
|
||||
|
||||
https://www.youtube.com/watch?v=FhHgXnLoOC0
|
||||
### 概述 🔧
|
||||
本视频围绕如何使用网件RAX50路由器刷入梅林固件,并安装科学上网(翻墙)插件展开详细讲解。整体流程从登录原厂后台、下载固件、刷机、恢复设置,到安装及配置科学上网插件,逐步带领观众完成路由器的翻墙功能设置。讲解方式结合实操演示与官方文档指引,特别强调操作细节和注意事项,帮助用户建立清晰的固件刷入及翻墙插件配置知识体系。
|
||||
|
||||
### 核心知识点总结 ⏰
|
||||
- **00:00–00:52 | 网件RAX50路由器登录与原厂固件介绍**
|
||||
通过电脑连接网件路由器网络,浏览器输入192.168.1.1登录后台,需输入初始设置的用户名和密码。登录成功后确认路由器与本地网络正常连接,访问国内网络无障碍。
|
||||
|
||||
- **00:52–02:21 | 固件类型与下载选择说明**
|
||||
介绍两种固件类型:`.chk`为网件刷梅林的过渡固件,`.w`为梅林版本固件。前往KoolCenter固件下载服务器找到对应型号RAX50,下载`.chk`固件先进行第一步刷机,然后再刷`.w`固件完成稳定版本的安装。建议使用谷歌内核浏览器操作。
|
||||
|
||||
- **02:21–05:14 | 第一次刷机操作演示**
|
||||
演示连接新设的WiFi,登录后台,上传`.chk`固件完成过渡刷机。成功后界面变为梅林风格,说明已刷入梅林固件。
|
||||
|
||||
- **05:14–07:27 | 第二次刷机及恢复梅林固件出厂设置**
|
||||
上传`.w`结尾的梅林固件进行第二次刷机确保稳定性。刷机后恢复梅林固件的出厂设置,重新配置WiFi名称和登录密码,并进行JFFS双清操作以清理旧缓存,重启路由器完成大约60%刷机进度。
|
||||
|
||||
- **07:27–08:35 | 科学上网插件安装准备**
|
||||
进入梅林的软件中心,检查并更新软件中心版本,确保与在线版本同步,避免异常。原版没有任何插件,需要手动安装科学上网插件。
|
||||
|
||||
- **08:35–15:54 | MerlinClash插件安装与策略组配置**
|
||||
下载安装MerlinClash插件(小猫咪插件),通过Telegram鲁猫云频道获取最新插件版本。上传插件并安装成功后,导入订阅地址(机场节点)。介绍免费机场试用过程,手动及自动订阅配置文件。
|
||||
配置策略组实现节点自动延迟测试与故障转移,灵活切换线路(如香港、台湾、美国节点等),分流不同应用流量(如Netflix、YouTube、国内外网站),实现精准科学上网。设置定时自动更新订阅、开启守护进程保证插件稳定运行,并测试Google与YouTube访问。
|
||||
|
||||
- **15:54–19:51 | 另一款科学上网插件安装及功能对比**
|
||||
安装科学上网插件(GitHub版本),区分Full与Lite版本,根据路由器内存选择Full版本。上传插件后,导入SSR等多协议订阅地址。此插件需手动节点切换,无自动分流功能。两插件不可同时开启,推荐使用功能更强的MerlinClash。
|
||||
|
||||
- **19:51–20:23 | 软件中心的其他实用工具介绍**
|
||||
简要介绍软件中心中其他可用插件,如ROG工具箱,可监测路由器温度、运行时间、内核版本等信息,拓展路由器功能。
|
||||
|
||||
### 重点术语与定义 📚
|
||||
- **梅林固件 (Merlin Firmware)**:华硕路由器第三方固件改良版,功能丰富且稳定,支持更多插件及高级网络配置。
|
||||
- **过渡固件 (.chk 文件)**:用于网件路由器从原厂固件刷入梅林固件的转接版本,完成后才可刷入正式梅林固件。
|
||||
- **科学上网插件**:具备翻墙功能的网络插件,通过订阅国外节点实现访问被限制网站。
|
||||
- **MerlinClash插件**:基于Clash的高级分流插件,支持自动节点选择和策略组分流,适合多设备家庭科学上网。
|
||||
- **SSR订阅链接**:ShadowsocksR等代理节点的配置链接,用于导入科学上网插件实现节点管理和自动更新。
|
||||
- **JFFS双清**:清理路由器文件系统缓存和数据,保证刷机后固件环境干净,预防残留问题。
|
||||
- **故障转移**:连接故障时自动切换至备用节点,保持网络通畅的机制。
|
||||
|
||||
### 推理逻辑结构 🔍
|
||||
1. **确认原厂路由器可正常访问后台 → 下载并刷入过渡固件(`.chk`) → 完成基础梅林固件安装。**
|
||||
2. **刷入正式梅林固件(`.w`) → 恢复梅林出厂设置 + JFFS双清 → 确保系统干净稳定。**
|
||||
3. **更新软件中心版本 → 安装科学上网插件 → 导入机场订阅链接。**
|
||||
4. **设置插件节点、分流策略 → 启动守护进程确保插件稳定运行。**
|
||||
5. **通过测试访问被限制网站确认翻墙成功。**
|
||||
6. **区分插件优势,选择更适合的插件方案使用。**
|
||||
|
||||
### 典型案例举例 📝
|
||||
- 通过免费机场注册获得5GB流量和7天试用套餐,实际演示如何复制订阅链接并导入到MerlinClash插件中,体现实用配置流程。
|
||||
- 节点策略组设置案例,如将Netflix节点指定为台湾线路,YouTube指定为香港线路,利用分流精细管理网络流量,优化访问速度和稳定性。
|
||||
|
||||
### 容易混淆的误区 ❗
|
||||
- **误区:首次刷机直接刷`.w`固件。**
|
||||
正确:必须先刷`.chk`的过渡固件,再刷`.w`的正式梅林固件,二次刷机才能确保稳定。
|
||||
- **误区:两个科学上网插件可以同时开启。**
|
||||
正确:两个插件不能同时运行,选择一个即可,优选支持策略组分流的MerlinClash。
|
||||
- **误区:恢复出厂设置等同回到网件原厂固件。**
|
||||
正确:恢复出厂设置指梅林固件的默认配置,不会恢复网件原厂系统。
|
||||
- **误区:科学上网插件能自动切换节点。**
|
||||
正确:只有MerlinClash支持自动延迟测试及自动切换,科学上网插件需手动选择节点。
|
||||
|
||||
### 快速复习提示与自测题 🎯
|
||||
#### 提示(无答案)
|
||||
- 路由器刷梅林固件,第一步刷哪个后缀的固件?
|
||||
- MerlinClash插件的主要优势是什么?
|
||||
- 如何保证科学上网插件自动更新订阅?
|
||||
- JFFS双清操作有什么作用?
|
||||
- 两款科学上网插件能否同时使用,为什么?
|
||||
|
||||
#### 练习题(含答案)
|
||||
1. **问题:为什么要先刷过渡固件`.chk`?**
|
||||
**答案**:`.chk`固件作为过渡版本,为路由器从原厂固件过渡到梅林固件做准备,直接刷`.w`固件会失败。
|
||||
|
||||
2. **问题:MerlinClash插件如何实现流量分流?**
|
||||
**答案**:通过策略组配置不同节点和规则,实现基于应用、地区和服务的自动分流和节点故障转移。
|
||||
|
||||
3. **问题:科学上网插件支持哪些协议?**
|
||||
**答案**:支持SSR、V2Ray、Trojan等多个协议,用户可导入相应订阅。
|
||||
|
||||
4. **问题:什么是JFFS双清,什么时候使用?**
|
||||
**答案**:JFFS双清是清理文件系统和缓存,通常刷机后执行,确保固件环境干净无旧数据残留。
|
||||
|
||||
5. **问题:如何测试路由器是否科学上网成功?**
|
||||
**答案**:无需代理工具,访问Google和YouTube等被屏蔽网站,能成功打开说明科学上网成功。
|
||||
|
||||
### 总结回顾 🔎
|
||||
---
|
||||
title:
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [clash, merlin-clash, rax50]
|
||||
---
|
||||
|
||||
|
||||
#rax50 #merlin-clash #clash
|
||||
|
||||
```table-of-contents
|
||||
```
|
||||
|
||||
## 网件RAX50路由器刷梅林固件与科学上网插件安装教程
|
||||
|
||||
|
||||
https://www.youtube.com/watch?v=FhHgXnLoOC0
|
||||
### 概述 🔧
|
||||
本视频围绕如何使用网件RAX50路由器刷入梅林固件,并安装科学上网(翻墙)插件展开详细讲解。整体流程从登录原厂后台、下载固件、刷机、恢复设置,到安装及配置科学上网插件,逐步带领观众完成路由器的翻墙功能设置。讲解方式结合实操演示与官方文档指引,特别强调操作细节和注意事项,帮助用户建立清晰的固件刷入及翻墙插件配置知识体系。
|
||||
|
||||
### 核心知识点总结 ⏰
|
||||
- **00:00–00:52 | 网件RAX50路由器登录与原厂固件介绍**
|
||||
通过电脑连接网件路由器网络,浏览器输入192.168.1.1登录后台,需输入初始设置的用户名和密码。登录成功后确认路由器与本地网络正常连接,访问国内网络无障碍。
|
||||
|
||||
- **00:52–02:21 | 固件类型与下载选择说明**
|
||||
介绍两种固件类型:`.chk`为网件刷梅林的过渡固件,`.w`为梅林版本固件。前往KoolCenter固件下载服务器找到对应型号RAX50,下载`.chk`固件先进行第一步刷机,然后再刷`.w`固件完成稳定版本的安装。建议使用谷歌内核浏览器操作。
|
||||
|
||||
- **02:21–05:14 | 第一次刷机操作演示**
|
||||
演示连接新设的WiFi,登录后台,上传`.chk`固件完成过渡刷机。成功后界面变为梅林风格,说明已刷入梅林固件。
|
||||
|
||||
- **05:14–07:27 | 第二次刷机及恢复梅林固件出厂设置**
|
||||
上传`.w`结尾的梅林固件进行第二次刷机确保稳定性。刷机后恢复梅林固件的出厂设置,重新配置WiFi名称和登录密码,并进行JFFS双清操作以清理旧缓存,重启路由器完成大约60%刷机进度。
|
||||
|
||||
- **07:27–08:35 | 科学上网插件安装准备**
|
||||
进入梅林的软件中心,检查并更新软件中心版本,确保与在线版本同步,避免异常。原版没有任何插件,需要手动安装科学上网插件。
|
||||
|
||||
- **08:35–15:54 | MerlinClash插件安装与策略组配置**
|
||||
下载安装MerlinClash插件(小猫咪插件),通过Telegram鲁猫云频道获取最新插件版本。上传插件并安装成功后,导入订阅地址(机场节点)。介绍免费机场试用过程,手动及自动订阅配置文件。
|
||||
配置策略组实现节点自动延迟测试与故障转移,灵活切换线路(如香港、台湾、美国节点等),分流不同应用流量(如Netflix、YouTube、国内外网站),实现精准科学上网。设置定时自动更新订阅、开启守护进程保证插件稳定运行,并测试Google与YouTube访问。
|
||||
|
||||
- **15:54–19:51 | 另一款科学上网插件安装及功能对比**
|
||||
安装科学上网插件(GitHub版本),区分Full与Lite版本,根据路由器内存选择Full版本。上传插件后,导入SSR等多协议订阅地址。此插件需手动节点切换,无自动分流功能。两插件不可同时开启,推荐使用功能更强的MerlinClash。
|
||||
|
||||
- **19:51–20:23 | 软件中心的其他实用工具介绍**
|
||||
简要介绍软件中心中其他可用插件,如ROG工具箱,可监测路由器温度、运行时间、内核版本等信息,拓展路由器功能。
|
||||
|
||||
### 重点术语与定义 📚
|
||||
- **梅林固件 (Merlin Firmware)**:华硕路由器第三方固件改良版,功能丰富且稳定,支持更多插件及高级网络配置。
|
||||
- **过渡固件 (.chk 文件)**:用于网件路由器从原厂固件刷入梅林固件的转接版本,完成后才可刷入正式梅林固件。
|
||||
- **科学上网插件**:具备翻墙功能的网络插件,通过订阅国外节点实现访问被限制网站。
|
||||
- **MerlinClash插件**:基于Clash的高级分流插件,支持自动节点选择和策略组分流,适合多设备家庭科学上网。
|
||||
- **SSR订阅链接**:ShadowsocksR等代理节点的配置链接,用于导入科学上网插件实现节点管理和自动更新。
|
||||
- **JFFS双清**:清理路由器文件系统缓存和数据,保证刷机后固件环境干净,预防残留问题。
|
||||
- **故障转移**:连接故障时自动切换至备用节点,保持网络通畅的机制。
|
||||
|
||||
### 推理逻辑结构 🔍
|
||||
1. **确认原厂路由器可正常访问后台 → 下载并刷入过渡固件(`.chk`) → 完成基础梅林固件安装。**
|
||||
2. **刷入正式梅林固件(`.w`) → 恢复梅林出厂设置 + JFFS双清 → 确保系统干净稳定。**
|
||||
3. **更新软件中心版本 → 安装科学上网插件 → 导入机场订阅链接。**
|
||||
4. **设置插件节点、分流策略 → 启动守护进程确保插件稳定运行。**
|
||||
5. **通过测试访问被限制网站确认翻墙成功。**
|
||||
6. **区分插件优势,选择更适合的插件方案使用。**
|
||||
|
||||
### 典型案例举例 📝
|
||||
- 通过免费机场注册获得5GB流量和7天试用套餐,实际演示如何复制订阅链接并导入到MerlinClash插件中,体现实用配置流程。
|
||||
- 节点策略组设置案例,如将Netflix节点指定为台湾线路,YouTube指定为香港线路,利用分流精细管理网络流量,优化访问速度和稳定性。
|
||||
|
||||
### 容易混淆的误区 ❗
|
||||
- **误区:首次刷机直接刷`.w`固件。**
|
||||
正确:必须先刷`.chk`的过渡固件,再刷`.w`的正式梅林固件,二次刷机才能确保稳定。
|
||||
- **误区:两个科学上网插件可以同时开启。**
|
||||
正确:两个插件不能同时运行,选择一个即可,优选支持策略组分流的MerlinClash。
|
||||
- **误区:恢复出厂设置等同回到网件原厂固件。**
|
||||
正确:恢复出厂设置指梅林固件的默认配置,不会恢复网件原厂系统。
|
||||
- **误区:科学上网插件能自动切换节点。**
|
||||
正确:只有MerlinClash支持自动延迟测试及自动切换,科学上网插件需手动选择节点。
|
||||
|
||||
### 快速复习提示与自测题 🎯
|
||||
#### 提示(无答案)
|
||||
- 路由器刷梅林固件,第一步刷哪个后缀的固件?
|
||||
- MerlinClash插件的主要优势是什么?
|
||||
- 如何保证科学上网插件自动更新订阅?
|
||||
- JFFS双清操作有什么作用?
|
||||
- 两款科学上网插件能否同时使用,为什么?
|
||||
|
||||
#### 练习题(含答案)
|
||||
1. **问题:为什么要先刷过渡固件`.chk`?**
|
||||
**答案**:`.chk`固件作为过渡版本,为路由器从原厂固件过渡到梅林固件做准备,直接刷`.w`固件会失败。
|
||||
|
||||
2. **问题:MerlinClash插件如何实现流量分流?**
|
||||
**答案**:通过策略组配置不同节点和规则,实现基于应用、地区和服务的自动分流和节点故障转移。
|
||||
|
||||
3. **问题:科学上网插件支持哪些协议?**
|
||||
**答案**:支持SSR、V2Ray、Trojan等多个协议,用户可导入相应订阅。
|
||||
|
||||
4. **问题:什么是JFFS双清,什么时候使用?**
|
||||
**答案**:JFFS双清是清理文件系统和缓存,通常刷机后执行,确保固件环境干净无旧数据残留。
|
||||
|
||||
5. **问题:如何测试路由器是否科学上网成功?**
|
||||
**答案**:无需代理工具,访问Google和YouTube等被屏蔽网站,能成功打开说明科学上网成功。
|
||||
|
||||
### 总结回顾 🔎
|
||||
本视频系统指导了网件RAX50路由器刷入梅林固件的全过程,包括切换固件版本、恢复配置以及进行必要的系统清理操作,确保固件运行流畅。之后详细介绍了两款主流的科学上网插件——功能全面的MerlinClash和较为简易的科学上网插件,重点介绍了MerlinClash的策略组分流和自动节点切换功能,帮助用户实现全屋电子设备共享的翻墙网络环境。附带实用操作技巧和注意事项,为用户提供了一套完整、稳定、高效的路由器刷机与科学上网解决方案。
|
||||
@@ -1,219 +1,219 @@
|
||||
---
|
||||
title: 测试 Google 连接(强制走代理端口,假设 HTTP 端口是 20171)
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created: 2025-03-08
|
||||
description:
|
||||
tags: [docker, nas, synology, v2raya, vpn]
|
||||
---
|
||||
|
||||
|
||||
#v2raya #nas #synology #vpn #docker
|
||||
|
||||
```table-of-contents
|
||||
```
|
||||
## 安装V2RayA
|
||||
|
||||
1. Docker Desktop pull image: **mz2017/v2raya**
|
||||
2. 通过以下方法把v2raya的images load到NAS Docker里 [[🟠如何传输Docker images 并且在另一个Docker安装|🟠如何传输Docker images 并且在另一个Docker安装]]
|
||||
3. 参考[v2raya官方网站](https://v2raya.org/) 里的关于[V2RayA Docker安装文档](https://v2raya.org/docs/prologue/installation/docker/)用以下命令来启动 V2RayA:
|
||||
```
|
||||
docker run -d \
|
||||
--restart=always \
|
||||
--privileged \
|
||||
--network=host \
|
||||
--name v2raya \
|
||||
-e V2RAYA_LOG_FILE=/tmp/v2raya.log \
|
||||
-e V2RAYA_V2RAY_BIN=/usr/local/bin/v2ray \
|
||||
-e V2RAYA_NFTABLES_SUPPORT=off \
|
||||
-e IPTABLES_MODE=legacy \
|
||||
-v /lib/modules:/lib/modules:ro \
|
||||
-v /etc/resolv.conf:/etc/resolv.conf \
|
||||
-v /docker/v2raya:/etc/v2raya \
|
||||
mzz2017/v2raya
|
||||
```
|
||||
**请注意 ==/docker/v2raya== 为实际在NAS上创建的目录,其他配置不用修改**
|
||||
|
||||
## 启动V2RayA
|
||||
|
||||
http://192.168.3.17:2017/
|
||||
|
||||
|
||||
## 配置V2RayA让NAS上的Docker可以科学上网
|
||||
|
||||
![[IMG-20251229190624430.png]]
|
||||
|
||||
![[IMG-20251229190624730.png]]
|
||||
|
||||
在Synology DSM环境下,要验证透明代理是否对Host(即NAS本机,也就是负责执行 `docker pull` 的守护进程)生效,请按照以下逻辑进行排查和验证。
|
||||
|
||||
---
|
||||
|
||||
### 第一步:在 v2rayA 后台“打开开关”
|
||||
|
||||
仅仅运行容器是不够的,你必须在Web界面配置路由规则。
|
||||
|
||||
1. 打开浏览器访问 `http://<NAS_IP>:2017`。
|
||||
|
||||
2. 进入 **设置 (Settings)** -> **透明代理 (Transparent Proxy)**。
|
||||
|
||||
3. **核心设置:**
|
||||
|
||||
- **启用 (Enable):** 开启。
|
||||
|
||||
- **分流模式 (Traffic Splitting):** 建议选择 **"大陆白名单 (Whitelist of Mainland China)"**。这会确保国内流量直连,国外流量(包括Docker Hub)走代理。
|
||||
|
||||
- **实现方式:** 既然你在启动命令里加了 `IPTABLES_MODE=legacy`,这里通常保持默认即可。
|
||||
|
||||
4. 点击右上角 **保存并应用**。
|
||||
|
||||
|
||||
> **⚠️ 风险提示:** 在NAS上开启透明代理(尤其是Host模式)有极小概率会导致局域网连接中断。如果你正在远程操作,请确保有备用连接方案(如QuickConnect或同局域网设备)。
|
||||
|
||||
---
|
||||
|
||||
### 第二步:验证 NAS 本机的连通性 (SSH)
|
||||
|
||||
SSH 登录到你的群晖 NAS,按顺序执行以下测试。
|
||||
|
||||
**1. 测试端口监听是否正常** 先确认代理端口是通的:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
# 测试 Google 连接(强制走代理端口,假设 HTTP 端口是 20171)
|
||||
curl -I -x http://127.0.0.1:20171 https://www.google.com
|
||||
```
|
||||
正确·结果:
|
||||
``` bash
|
||||
ash-4.4# curl -I -x http://127.0.0.1:20171 https://www.google.com
|
||||
HTTP/1.1 200 Connection established
|
||||
|
||||
HTTP/2 200
|
||||
content-type: text/html; charset=ISO-8859-1
|
||||
content-security-policy-report-only: object-src 'none';base-uri 'self';script-src 'nonce-Yp5bWu7rNq-vtmDGkOlBXQ' 'strict-dynamic' 'report-sample' 'unsafe-eval' 'unsafe-inline' https: http:;report-uri https://csp.withgoogle.com/csp/gws/other-hp
|
||||
accept-ch: Sec-CH-Prefers-Color-Scheme
|
||||
p3p: CP="This is not a P3P policy! See g.co/p3phelp for more info."
|
||||
date: Fri, 19 Dec 2025 03:11:44 GMT
|
||||
server: gws
|
||||
x-xss-protection: 0
|
||||
x-frame-options: SAMEORIGIN
|
||||
expires: Fri, 19 Dec 2025 03:11:44 GMT
|
||||
cache-control: private
|
||||
set-cookie: AEC=AaJma5vsWePrX0JcVuFI8-_KwORsyiWxthLxJF9At74ncKOuryIHfjWKpw; expires=Wed, 17-Jun-2026 03:11:44 GMT; path=/; domain=.google.com; Secure; HttpOnly; SameSite=lax
|
||||
set-cookie: NID=527=w38RE1jq1xO007vl-G-dXmylbeNcX6RrVZsaz16KpJm-VmBVO-dUI4hyW4bqbNK6v3PDNKsGQXeJK8d6n6V9pXHHo5ljqr9FeRMsUwX3Ou1v-hnlKhgIVvCPacBGU-DH3X9WmVgHAMe9ZFMml-RoYQYTLq7-l342kDivOJw7kfuJDnx9ovYV2mATeK11m2PCGL-AcQVDQABuivlpPR4jH22zQ7d7viAmrQ; expires=Sat, 20-Jun-2026 03:11:44 GMT; path=/; domain=.google.com; HttpOnly
|
||||
set-cookie: __Secure-BUCKET=CPwD; expires=Wed, 17-Jun-2026 03:11:44 GMT; path=/; domain=.google.com; Secure; HttpOnly
|
||||
alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000
|
||||
|
||||
```
|
||||
|
||||
- **成功:** 返回 `HTTP/1.1 200 OK` 或 `301`。
|
||||
- **失败:** 检查 v2rayA 端口映射或节点连接状态。
|
||||
|
||||
**2. 测试透明代理是否生效 (关键步骤)** 不加 `-x` 参数,直接访问,看流量是否被劫持:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
curl -I https://www.google.com
|
||||
```
|
||||
|
||||
正确结果:
|
||||
``` bash
|
||||
ash-4.4# curl -I https://www.google.com
|
||||
HTTP/2 200
|
||||
content-type: text/html; charset=ISO-8859-1
|
||||
content-security-policy-report-only: object-src 'none';base-uri 'self';script-src 'nonce-aSgzymp_JxooD_Xigz-OgA' 'strict-dynamic' 'report-sample' 'unsafe-eval' 'unsafe-inline' https: http:;report-uri https://csp.withgoogle.com/csp/gws/other-hp
|
||||
accept-ch: Sec-CH-Prefers-Color-Scheme
|
||||
p3p: CP="This is not a P3P policy! See g.co/p3phelp for more info."
|
||||
date: Fri, 19 Dec 2025 03:12:46 GMT
|
||||
server: gws
|
||||
x-xss-protection: 0
|
||||
x-frame-options: SAMEORIGIN
|
||||
expires: Fri, 19 Dec 2025 03:12:46 GMT
|
||||
cache-control: private
|
||||
set-cookie: AEC=AaJma5sAaR7bW6DxFcTK7qYEJTzl5WO0BYlgJZwxrqpXEi_I3xcW5GckOA; expires=Wed, 17-Jun-2026 03:12:46 GMT; path=/; domain=.google.com; Secure; HttpOnly; SameSite=lax
|
||||
set-cookie: NID=527=kjjqA9JJyZpXTZGor0foKUDy_xoODeloa9HmubM9DXlCdPwWyNAcgkUMSlKI_ddkcWWIdnD_NqC3GZEN4Yt476PWJXPTjgJqvSSBtEbQ7fY5eM295GEKNwaykECAABE9yELqHgh-VmxRmp8ri4XUYByN11ryyVNI4wgnblCMzfwKRHnfJhCvA7g2IvEdOm2ldJ2ZM8lAQSiRY_CTheXpMZXsq_kIegSt2w; expires=Sat, 20-Jun-2026 03:12:46 GMT; path=/; domain=.google.com; HttpOnly
|
||||
set-cookie: __Secure-BUCKET=CI8G; expires=Wed, 17-Jun-2026 03:12:46 GMT; path=/; domain=.google.com; Secure; HttpOnly
|
||||
alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000
|
||||
|
||||
```
|
||||
|
||||
- **如果返回 200/301:** 说明透明代理已经接管了 NAS 的出站流量。你的 `docker pull` 应该可以直接成功。
|
||||
- **如果超时/无法连接:** 说明透明代理未对 Host 生效,或者 DSM 的防火墙/路由表与 v2rayA 的规则冲突(这在群晖上很常见)。
|
||||
|
||||
---
|
||||
|
||||
### 第三步:验证 Docker Pull
|
||||
|
||||
如果第二步成功,直接尝试拉取一个通常较慢或被墙的镜像:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
# 使用 docker pull 测试(docker-compose pull 本质也是调用的 daemon)
|
||||
docker pull google/pause
|
||||
# 或者
|
||||
docker pull busybox
|
||||
```
|
||||
|
||||
正确结果
|
||||
``` bash
|
||||
ash-4.4# docker pull google/pause
|
||||
Using default tag: latest
|
||||
latest: Pulling from google/pause
|
||||
Image docker.io/google/pause:latest uses outdated schema1 manifest format. Please upgrade to a schema2 image for better future compatibility. More information at https://docs.docker.com/registry/spec/deprecated-schema-v1/
|
||||
a3ed95caeb02: Already exists
|
||||
f72a00a23f01: Already exists
|
||||
Digest: sha256:e8fc56926ac3d5705772f13befbaee3aa2fc6e9c52faee3d96b26612cd77556c
|
||||
Status: Image is up to date for google/pause:latest
|
||||
docker.io/google/pause:latest
|
||||
```
|
||||
### 如果透明代理对 Docker Daemon 无效(常见情况)
|
||||
|
||||
在群晖 DSM 7.x 中,Docker Daemon (`dockerd`) 的网络栈有时候不会完全遵循 v2rayA 修改的 iptables 规则。如果上面的 `docker pull` 仍然慢或失败,**不要死磕透明代理**,直接配置 Docker 守护进程走 HTTP 代理是最稳妥的方案。
|
||||
|
||||
**解决方案:配置 Docker Daemon 代理**
|
||||
|
||||
1. **编辑/创建配置目录:**
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo mkdir -p /etc/systemd/system/pkg-ContainerManager-dockerd.service.d/
|
||||
# 注意:DSM 7.2 叫 ContainerManager,旧版叫 Docker
|
||||
```
|
||||
|
||||
2. **创建代理配置文件:**
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo vi /etc/systemd/system/pkg-ContainerManager-dockerd.service.d/http-proxy.conf
|
||||
```
|
||||
|
||||
3. **写入以下内容:**
|
||||
|
||||
|
||||
``` bash
|
||||
[Service]
|
||||
Environment="HTTP_PROXY=http://127.0.0.1:20171"
|
||||
Environment="HTTPS_PROXY=http://127.0.0.1:20171"
|
||||
Environment="NO_PROXY=localhost,127.0.0.1,192.168.*,*.synology.me"
|
||||
```
|
||||
|
||||
4. **重载并重启 Docker 服务:**
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl restart pkg-ContainerManager-dockerd
|
||||
```
|
||||
|
||||
### 总结
|
||||
|
||||
- **验证方法:** 先用 `curl -x` 测端口,再用 `curl` 测直连,最后用 `docker pull` 实战。
|
||||
|
||||
- **经验之谈:** 对于企业级或生产环境(即使是SOHO),我建议**不要**依赖 NAS Host 的透明代理来解决 `docker pull` 问题,因为这修改了系统级路由表,容易影响 NAS 其他服务。**显式配置 Docker Daemon 的 Proxy 环境变量(上面的最后一种方法)是更符合 Engineering Best Practice 的做法。**
|
||||
---
|
||||
title: 测试 Google 连接(强制走代理端口,假设 HTTP 端口是 20171)
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created: 2025-03-08
|
||||
description:
|
||||
tags: [docker, nas, synology, v2raya, vpn]
|
||||
---
|
||||
|
||||
|
||||
#v2raya #nas #synology #vpn #docker
|
||||
|
||||
```table-of-contents
|
||||
```
|
||||
## 安装V2RayA
|
||||
|
||||
1. Docker Desktop pull image: **mz2017/v2raya**
|
||||
2. 通过以下方法把v2raya的images load到NAS Docker里 [[🟠如何传输Docker images 并且在另一个Docker安装|🟠如何传输Docker images 并且在另一个Docker安装]]
|
||||
3. 参考[v2raya官方网站](https://v2raya.org/) 里的关于[V2RayA Docker安装文档](https://v2raya.org/docs/prologue/installation/docker/)用以下命令来启动 V2RayA:
|
||||
```
|
||||
docker run -d \
|
||||
--restart=always \
|
||||
--privileged \
|
||||
--network=host \
|
||||
--name v2raya \
|
||||
-e V2RAYA_LOG_FILE=/tmp/v2raya.log \
|
||||
-e V2RAYA_V2RAY_BIN=/usr/local/bin/v2ray \
|
||||
-e V2RAYA_NFTABLES_SUPPORT=off \
|
||||
-e IPTABLES_MODE=legacy \
|
||||
-v /lib/modules:/lib/modules:ro \
|
||||
-v /etc/resolv.conf:/etc/resolv.conf \
|
||||
-v /docker/v2raya:/etc/v2raya \
|
||||
mzz2017/v2raya
|
||||
```
|
||||
**请注意 ==/docker/v2raya== 为实际在NAS上创建的目录,其他配置不用修改**
|
||||
|
||||
## 启动V2RayA
|
||||
|
||||
http://192.168.3.17:2017/
|
||||
|
||||
|
||||
## 配置V2RayA让NAS上的Docker可以科学上网
|
||||
|
||||
![[IMG-20251229190624430.png]]
|
||||
|
||||
![[IMG-20251229190624730.png]]
|
||||
|
||||
在Synology DSM环境下,要验证透明代理是否对Host(即NAS本机,也就是负责执行 `docker pull` 的守护进程)生效,请按照以下逻辑进行排查和验证。
|
||||
|
||||
---
|
||||
|
||||
### 第一步:在 v2rayA 后台“打开开关”
|
||||
|
||||
仅仅运行容器是不够的,你必须在Web界面配置路由规则。
|
||||
|
||||
1. 打开浏览器访问 `http://<NAS_IP>:2017`。
|
||||
|
||||
2. 进入 **设置 (Settings)** -> **透明代理 (Transparent Proxy)**。
|
||||
|
||||
3. **核心设置:**
|
||||
|
||||
- **启用 (Enable):** 开启。
|
||||
|
||||
- **分流模式 (Traffic Splitting):** 建议选择 **"大陆白名单 (Whitelist of Mainland China)"**。这会确保国内流量直连,国外流量(包括Docker Hub)走代理。
|
||||
|
||||
- **实现方式:** 既然你在启动命令里加了 `IPTABLES_MODE=legacy`,这里通常保持默认即可。
|
||||
|
||||
4. 点击右上角 **保存并应用**。
|
||||
|
||||
|
||||
> **⚠️ 风险提示:** 在NAS上开启透明代理(尤其是Host模式)有极小概率会导致局域网连接中断。如果你正在远程操作,请确保有备用连接方案(如QuickConnect或同局域网设备)。
|
||||
|
||||
---
|
||||
|
||||
### 第二步:验证 NAS 本机的连通性 (SSH)
|
||||
|
||||
SSH 登录到你的群晖 NAS,按顺序执行以下测试。
|
||||
|
||||
**1. 测试端口监听是否正常** 先确认代理端口是通的:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
# 测试 Google 连接(强制走代理端口,假设 HTTP 端口是 20171)
|
||||
curl -I -x http://127.0.0.1:20171 https://www.google.com
|
||||
```
|
||||
正确·结果:
|
||||
``` bash
|
||||
ash-4.4# curl -I -x http://127.0.0.1:20171 https://www.google.com
|
||||
HTTP/1.1 200 Connection established
|
||||
|
||||
HTTP/2 200
|
||||
content-type: text/html; charset=ISO-8859-1
|
||||
content-security-policy-report-only: object-src 'none';base-uri 'self';script-src 'nonce-Yp5bWu7rNq-vtmDGkOlBXQ' 'strict-dynamic' 'report-sample' 'unsafe-eval' 'unsafe-inline' https: http:;report-uri https://csp.withgoogle.com/csp/gws/other-hp
|
||||
accept-ch: Sec-CH-Prefers-Color-Scheme
|
||||
p3p: CP="This is not a P3P policy! See g.co/p3phelp for more info."
|
||||
date: Fri, 19 Dec 2025 03:11:44 GMT
|
||||
server: gws
|
||||
x-xss-protection: 0
|
||||
x-frame-options: SAMEORIGIN
|
||||
expires: Fri, 19 Dec 2025 03:11:44 GMT
|
||||
cache-control: private
|
||||
set-cookie: AEC=AaJma5vsWePrX0JcVuFI8-_KwORsyiWxthLxJF9At74ncKOuryIHfjWKpw; expires=Wed, 17-Jun-2026 03:11:44 GMT; path=/; domain=.google.com; Secure; HttpOnly; SameSite=lax
|
||||
set-cookie: NID=527=w38RE1jq1xO007vl-G-dXmylbeNcX6RrVZsaz16KpJm-VmBVO-dUI4hyW4bqbNK6v3PDNKsGQXeJK8d6n6V9pXHHo5ljqr9FeRMsUwX3Ou1v-hnlKhgIVvCPacBGU-DH3X9WmVgHAMe9ZFMml-RoYQYTLq7-l342kDivOJw7kfuJDnx9ovYV2mATeK11m2PCGL-AcQVDQABuivlpPR4jH22zQ7d7viAmrQ; expires=Sat, 20-Jun-2026 03:11:44 GMT; path=/; domain=.google.com; HttpOnly
|
||||
set-cookie: __Secure-BUCKET=CPwD; expires=Wed, 17-Jun-2026 03:11:44 GMT; path=/; domain=.google.com; Secure; HttpOnly
|
||||
alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000
|
||||
|
||||
```
|
||||
|
||||
- **成功:** 返回 `HTTP/1.1 200 OK` 或 `301`。
|
||||
- **失败:** 检查 v2rayA 端口映射或节点连接状态。
|
||||
|
||||
**2. 测试透明代理是否生效 (关键步骤)** 不加 `-x` 参数,直接访问,看流量是否被劫持:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
curl -I https://www.google.com
|
||||
```
|
||||
|
||||
正确结果:
|
||||
``` bash
|
||||
ash-4.4# curl -I https://www.google.com
|
||||
HTTP/2 200
|
||||
content-type: text/html; charset=ISO-8859-1
|
||||
content-security-policy-report-only: object-src 'none';base-uri 'self';script-src 'nonce-aSgzymp_JxooD_Xigz-OgA' 'strict-dynamic' 'report-sample' 'unsafe-eval' 'unsafe-inline' https: http:;report-uri https://csp.withgoogle.com/csp/gws/other-hp
|
||||
accept-ch: Sec-CH-Prefers-Color-Scheme
|
||||
p3p: CP="This is not a P3P policy! See g.co/p3phelp for more info."
|
||||
date: Fri, 19 Dec 2025 03:12:46 GMT
|
||||
server: gws
|
||||
x-xss-protection: 0
|
||||
x-frame-options: SAMEORIGIN
|
||||
expires: Fri, 19 Dec 2025 03:12:46 GMT
|
||||
cache-control: private
|
||||
set-cookie: AEC=AaJma5sAaR7bW6DxFcTK7qYEJTzl5WO0BYlgJZwxrqpXEi_I3xcW5GckOA; expires=Wed, 17-Jun-2026 03:12:46 GMT; path=/; domain=.google.com; Secure; HttpOnly; SameSite=lax
|
||||
set-cookie: NID=527=kjjqA9JJyZpXTZGor0foKUDy_xoODeloa9HmubM9DXlCdPwWyNAcgkUMSlKI_ddkcWWIdnD_NqC3GZEN4Yt476PWJXPTjgJqvSSBtEbQ7fY5eM295GEKNwaykECAABE9yELqHgh-VmxRmp8ri4XUYByN11ryyVNI4wgnblCMzfwKRHnfJhCvA7g2IvEdOm2ldJ2ZM8lAQSiRY_CTheXpMZXsq_kIegSt2w; expires=Sat, 20-Jun-2026 03:12:46 GMT; path=/; domain=.google.com; HttpOnly
|
||||
set-cookie: __Secure-BUCKET=CI8G; expires=Wed, 17-Jun-2026 03:12:46 GMT; path=/; domain=.google.com; Secure; HttpOnly
|
||||
alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000
|
||||
|
||||
```
|
||||
|
||||
- **如果返回 200/301:** 说明透明代理已经接管了 NAS 的出站流量。你的 `docker pull` 应该可以直接成功。
|
||||
- **如果超时/无法连接:** 说明透明代理未对 Host 生效,或者 DSM 的防火墙/路由表与 v2rayA 的规则冲突(这在群晖上很常见)。
|
||||
|
||||
---
|
||||
|
||||
### 第三步:验证 Docker Pull
|
||||
|
||||
如果第二步成功,直接尝试拉取一个通常较慢或被墙的镜像:
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
# 使用 docker pull 测试(docker-compose pull 本质也是调用的 daemon)
|
||||
docker pull google/pause
|
||||
# 或者
|
||||
docker pull busybox
|
||||
```
|
||||
|
||||
正确结果
|
||||
``` bash
|
||||
ash-4.4# docker pull google/pause
|
||||
Using default tag: latest
|
||||
latest: Pulling from google/pause
|
||||
Image docker.io/google/pause:latest uses outdated schema1 manifest format. Please upgrade to a schema2 image for better future compatibility. More information at https://docs.docker.com/registry/spec/deprecated-schema-v1/
|
||||
a3ed95caeb02: Already exists
|
||||
f72a00a23f01: Already exists
|
||||
Digest: sha256:e8fc56926ac3d5705772f13befbaee3aa2fc6e9c52faee3d96b26612cd77556c
|
||||
Status: Image is up to date for google/pause:latest
|
||||
docker.io/google/pause:latest
|
||||
```
|
||||
### 如果透明代理对 Docker Daemon 无效(常见情况)
|
||||
|
||||
在群晖 DSM 7.x 中,Docker Daemon (`dockerd`) 的网络栈有时候不会完全遵循 v2rayA 修改的 iptables 规则。如果上面的 `docker pull` 仍然慢或失败,**不要死磕透明代理**,直接配置 Docker 守护进程走 HTTP 代理是最稳妥的方案。
|
||||
|
||||
**解决方案:配置 Docker Daemon 代理**
|
||||
|
||||
1. **编辑/创建配置目录:**
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo mkdir -p /etc/systemd/system/pkg-ContainerManager-dockerd.service.d/
|
||||
# 注意:DSM 7.2 叫 ContainerManager,旧版叫 Docker
|
||||
```
|
||||
|
||||
2. **创建代理配置文件:**
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo vi /etc/systemd/system/pkg-ContainerManager-dockerd.service.d/http-proxy.conf
|
||||
```
|
||||
|
||||
3. **写入以下内容:**
|
||||
|
||||
|
||||
``` bash
|
||||
[Service]
|
||||
Environment="HTTP_PROXY=http://127.0.0.1:20171"
|
||||
Environment="HTTPS_PROXY=http://127.0.0.1:20171"
|
||||
Environment="NO_PROXY=localhost,127.0.0.1,192.168.*,*.synology.me"
|
||||
```
|
||||
|
||||
4. **重载并重启 Docker 服务:**
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl restart pkg-ContainerManager-dockerd
|
||||
```
|
||||
|
||||
### 总结
|
||||
|
||||
- **验证方法:** 先用 `curl -x` 测端口,再用 `curl` 测直连,最后用 `docker pull` 实战。
|
||||
|
||||
- **经验之谈:** 对于企业级或生产环境(即使是SOHO),我建议**不要**依赖 NAS Host 的透明代理来解决 `docker pull` 问题,因为这修改了系统级路由表,容易影响 NAS 其他服务。**显式配置 Docker Daemon 的 Proxy 环境变量(上面的最后一种方法)是更符合 Engineering Best Practice 的做法。**
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user