## 在 ARM 架构 Debian 12 NAS 上部署 ChmlFrp 客户端技术文档
本文档汇总了从文件上传、解压、临时运行、到配置为 Systemd 服务实现开机自启及自动重启的完整操作步骤。所有命令均在 SSH 终端中执行,适用于无图形界面的 NAS 环境。
---
### 1. 环境与前置条件
- 操作系统:Debian GNU/Linux 12 (bookworm)
- CPU 架构:ARM(32 位,对应 armv7l;若为 64 位 aarch64 需下载 arm64 版本)
- 软件包:ChmlFrp-0.51.2_251023_linux_arm.tar.gz
- SSH 连接:已通过 SSH 登录 NAS,具有 sudo 权限
---
### 2. 文件上传与解压
#### 2.1 上传文件到 NAS(任选一种)
- 使用 WinSCP(图形化):协议选 SFTP,主机填 NAS IP,端口 22,拖拽上传。
- 使用 SCP 命令(Windows 命令提示符):
```bash
scp -P 22 C:\本地路径\ChmlFrp-*.tar.gz 用户名@NAS_IP:/home/用户名/
```
- 使用 SMB 共享:在 Windows 运行 \\NAS_IP,复制粘贴到共享文件夹,再通过 SSH 移动到目标目录。
#### 2.2 解压压缩包
```bash
tar -xzvf ChmlFrp-0.51.2_251023_linux_arm.tar.gz
```
解压后文件位于当前目录,包含 frpc(主程序)、frpc.ini(配置文件模板)等。
#### 2.3 添加执行权限
```bash
chmod +x frpc
```
---
### 3. 临时后台运行(使用 nohup)
此方式使程序在 SSH 断开后继续运行,但重启后不会自动启动。
```bash
nohup ./frpc -u 你的用户ID -p 你的隧道ID > frpc.log 2>&1 &
```
- -u 和 -p 参数请替换为实际值。
- 日志输出到当前目录的 frpc.log 文件。
查看实时日志:
```bash
tail -f frpc.log
```
按 Ctrl+C 退出日志查看。
---
### 4. 配置为 Systemd 服务(开机自启 + 崩溃自动重启)
此方式将程序托管给系统服务管理器,实现开机自启和异常退出后自动重启。
#### 4.1 创建服务文件
服务文件位于 /etc/systemd/system/frpc.service。使用 sudo 权限创建。
方法一:使用 nano 编辑器(如果已安装)
```bash
sudo nano /etc/systemd/system/frpc.service
```
方法二:使用 vim 编辑器(系统自带)
```bash
sudo vim /etc/systemd/system/frpc.service
```
- 在 vim 中按 i 进入插入模式,输入内容。
- 完成后按 Esc,输入 :wq 保存退出。
#### 4.2 服务文件内容
```ini
[Unit]
Description=ChmlFrp Client
After=network.target
[Service]
Type=simple
ExecStart=/home/用户名/frpc -u 你的用户ID -p 你的隧道ID
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
```
重要:将 /home/用户名/ 替换为 frpc 文件的实际绝对路径。可使用 pwd 查看当前路径,并用 ls -l 确认文件位置。
#### 4.3 重载系统服务配置
```bash
sudo systemctl daemon-reload
```
#### 4.4 设置开机自启并立即启动
```bash
sudo systemctl enable frpc.service
sudo systemctl start frpc.service
```
#### 4.5 查看服务运行状态
```bash
sudo systemctl status frpc.service
```
正常状态应显示 Active: active (running)。
---
### 5. 服务管理与日志查看
| 操作 | 命令 |
| :--- | :--- |
| 查看服务状态 | sudo systemctl status frpc.service |
| 手动启动服务 | sudo systemctl start frpc.service |
| 手动停止服务 | sudo systemctl stop frpc.service |
| 手动重启服务 | sudo systemctl restart frpc.service |
| 查看实时日志(滚动) | sudo journalctl -u frpc.service -f |
| 查看最近 100 行日志 | sudo journalctl -u frpc.service -n 100 --no-pager |
| 查看全部日志(分页) | sudo journalctl -u frpc.service |
按 Ctrl+C 可退出 -f 模式的日志跟踪。
---
### 6. 进程管理(非 Systemd 方式)
若使用 nohup 临时运行,可通过以下方式管理进程。
#### 6.1 查找进程 ID
```bash
ps aux | grep frpc | grep -v grep
```
输出第二列即为 PID。
#### 6.2 终止进程
```bash
kill PID
```
或按名称杀死:
```bash
pkill -f "frpc -u"
```
---
### 7. 移除开机自启并删除服务
若不再需要开机自启,按顺序执行:
停止服务:
```bash
sudo systemctl stop frpc.service
```
取消开机自启:
```bash
sudo systemctl disable frpc.service
```
(可选)删除服务文件:
```bash
sudo rm /etc/systemd/system/frpc.service
sudo systemctl daemon-reload
```
---
### 8. 常见错误及解决方法
#### 8.1 服务启动失败,状态为 Active: activating (auto-restart) (Result: exit-code),code=exited, status=203/EXEC
可能原因:
- ExecStart= 路径错误或文件不存在。
- 文件没有可执行权限。
- 程序依赖库缺失。
排查步骤:
1. 确认文件存在且路径正确:
```bash
ls -l /home/用户名/frpc
```
2. 添加执行权限:
```bash
chmod +x /home/用户名/frpc
```
3. 检查程序依赖:
```bash
ldd /home/用户名/frpc
```
若显示 not found,安装对应库(如 libfuse2):
```bash
sudo apt update && sudo apt install libfuse2
```
4. 尝试直接运行看具体错误:
```bash
/home/用户名/frpc -u xxx -p xxx
```
#### 8.2 服务运行但日志显示 connection refused
这表示 frpc 已成功连接远程服务器,但无法连接到内网的目标服务(如 192.168.110.42:8090)。请检查:
- 内网服务是否已启动。
- 目标 IP 和端口是否正确。
- 若服务就在本机,建议目标地址改为 127.0.0.1:端口。
#### 8.3 修改服务文件后不生效
执行重载和重启:
```bash
sudo systemctl daemon-reload
sudo systemctl restart frpc.service
```
#### 8.4 忘记使用 sudo 打开服务文件导致无法保存
退出后重新用 sudo vim 或 sudo nano 打开。
---
### 9. 安全提醒
- 命令行中的 -u 和 -p 参数会被所有用户通过 ps aux 看到,建议改用配置文件 frpc.ini 存放认证信息,并将 ExecStart 改为 ExecStart=/路径/frpc -c /路径/frpc.ini。
- 服务文件中的路径和参数应使用绝对路径,避免使用 ~ 等相对符号。
- 定期检查日志文件大小,可配置日志轮转(logrotate)。
---
### 10. 附录:vim 编辑器常用操作(针对无 nano 环境)
| 操作 | 按键 |
| :--- | :--- |
| 打开文件 | sudo vim 文件路径 |
| 进入插入模式(开始编辑) | 按 i |
| 退出插入模式 | 按 Esc |
| 保存并退出 | :wq |
| 不保存强制退出 | :q! |
| 删除当前行 | dd |
| 撤销上一步 | u |
| 查找关键词 | /关键词(按 n 下一个) |
| 替换整个文件内容 | :%s/旧/新/g |
---
本文档覆盖了从零开始部署 ChmlFrp 客户端的全部流程。若遇到未列出的问题,可通过 journalctl -u frpc.service -n 50 查看详细日志进一步排查。
评论交流
欢迎留下你的想法