---
id: 09c5a7e9-e666-4c5a-ae89-2495eb2df4bd
slug: hello-orangepi-zero3
title: 你好，OrangePi Zero3！
summary: ""
status: published
tags: []
cover: ""
version: 1
slug_source: manual
slug_locked: true
published_at: "2023-08-17T11:48:44+08:00"
created_at: "2023-08-17T11:48:44+08:00"
updated_at: "2026-01-07T18:11:45+08:00"
---

本篇文章将详细地写下我配置这块单板计算机的全过程，之后若是有新的自托管服务也会在本文记录下来。

## 购买

自从接触 Linux 之后渴望得到一个树莓派了，奈何因为疫情导致了全球的芯片供应紧张，树莓派的价格水涨船高，价格已经远远超过了它的价值，更重要的是超过了我的预算，即使是二手的价格也非常不值当。总之，出于囊中羞涩的考虑，我最终选择了这块国产的派 —— **OrangePi Zero3.**

![2023-08-17_12-27.png](https://s2.loli.net/2023/08/27/uq5Lpt4VhGs3eTZ.png)

我购买的是内存为 1.5G 的版本价格为一百出头，刚拿到快递的时候我就疑惑了， 为何如此之小！开箱后更是震惊，它甚至没有我的巴掌大呢！虽然但是，这还是很精致的，而且对于这样的设备而言，小其实是更好的，更方便搭载在其他的设备上。

![photo_6264513425795298480_y.jpg](https://s2.loli.net/2023/08/27/ZeyCJqUun7NYE2I.jpg)





除开这块板子，我还另外买了：

- 亚克力的外壳
- 风扇+散热片
- USB to TTL 用于串口调试
- 64G 闪迪 tf 卡



关于系统镜像方面，我还是选择了熟悉的 debian 发行版，毕竟我的 vps 用的也是这个，这块单板计算机我是拿来内网穿透的 [官方镜像](http://www.orangepi.cn/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-Zero-3.html)


![2023-08-17_12-42.png](https://s2.loli.net/2023/08/27/2gtelYJwAKvsV8X.png)


## 系统配置
在向 tf 卡刷完系统后，就可以通过串口进行连接了。



### 自动连接热点 WiFi

使用串口多少是不方便的，所以先来配置一下网络，让其他机器可以通过 ssh 访问这块板子。

1. 使用`nmcli dev wifi`查看当前扫描到的 wifi 列表。

2. 使用 `nmcli` 连接到热点并输入密码：

```bash
sudo nmcli dev wifi connect YourHotspotName password YourPassword
```

3. 将连接的配置设置为自动连接：

```bash
sudo nmcli connection modify "YourHotspotName" connection.autoconnect yes
```

将 `YourHotspotName` 替换为你的热点名称，`YourPassword` 替换为密码。

完成后通过 `ip addr ` 即可看到 ip 地址，然后就可以通过 ssh 正常访问板子了



### 添加一个新用户

```
useradd -m -G additional_groups -s login_shell username
```

```bash
passwd username
```

然后去修改` /etc/sudoers` 文件



## FRP 内网穿透

在这个 [releases](https://github.com/fatedier/frp/releases) 页面中，找到对应架构的压缩包，可以使用 `uname -a ` 查看到。

- 我的 VPS 是 X86_64 那么就选择 [amd64.tar.gz](https://github.com/fatedier/frp/releases/download/v0.51.3/frp_0.51.3_linux_amd64.tar.gz) 的包
- 香橙派是 arm 架构，那么就选择 [arm64.tar.gz ](https://github.com/fatedier/frp/releases/download/v0.51.3/frp_0.51.3_linux_arm64.tar.gz)的包

通过 `wget` 下载

```bash
wget https://github.com/fatedier/frp/releases/download/v0.51.3/frp_0.51.3_linux_arm64.tar.gz
```

通过 `tar` 解压

```bash
tar xvf frp_0.51.3_linux_arm64.tar.gz
```

- **frpc**: 这是 FRP 客户端的可执行文件。FRP 客户端用于连接到 FRP 服务器并将内部网络服务暴露给外部访问。
- **frps**: 这是 FRP 服务器的可执行文件。FRP 服务器用于接收来自客户端的连接，并将这些连接转发到内部的网络服务。
- **frpc.ini**: 这是 FRP 客户端的配置文件，用于指定客户端的连接设置、代理规则等。
- **frps.ini**: 这是 FRP 服务器的配置文件，用于指定服务器的监听端口、代理规则等。
- **frpc_full.ini**: 这是 FRP 客户端的完整配置文件，可能包含更多详细的设置。
- **frps_full.ini**: 这是 FRP 服务器的完整配置文件，可能包含更多详细的设置。



### 服务器配置

下载完对应架构的文件后，即可开始配置，只需要关心 `frps` 和 `frps.ini` 文件即可，前者是FRP 服务器的可执行文件，后者是这是 FRP 服务器的配置文件。

打开 `frps.ini`进行配置，配置文件的内容如下：

```ini
[common]
bind_port = 7000
token = 1234567890
```

客户端和服务器的配置文件中都需要设置相同的 Token 才能正确进行连接和通信。

为了保障安全性，你应该选择一个强密码的 Token，并确保不会轻易泄露给他人。如果你怀疑 Token 可能已经暴露，应当立即生成一个新的 Token 并更新配置文件。

完成后，运行 `./frpc -c ./frpc.ini`

若无问题，则说明配置成功。

接下来，配置一下 systemd 服务，让上面这条运行命令能开机自动启动，这非常实用：

但是在此之前，我们需要先将 `frps` 和 `frps.ini` 文件放到合适的地方：

```
sudo cp frps /usr/local/bin/
sudo mkdir /usr/local/etc/frp
sudo cp frps.ini /usr/local/etc/frp/
```



首先，创建一个名为`frps.service`的文件，该文件将存储有关你的自启动服务的信息。通常，这些文件存放在`/etc/systemd/system/`目录下。

```bash
sudo vim /etc/systemd/system/frps.service
```

```
[Unit]
Description=frps
After=network.target
[Service]
TimeoutStartSec=30
WorkingDirectory=/usr/local/bin/
ExecStart=/usr/local/bin/frps -c /usr/local/etc/frp/frps.ini
Restart=on-failure
[Install]
WantedBy=multi-user.target
```



保存后，执行：

```
sudo systemctl enable frps
sudo systemctl start frps
sudo systemctl status frps
```

若无问题，则可进入客户端的配置。

下面是一些常用的命令：

- 启动服务：`sudo systemctl start frps`
- 停止服务：`sudo systemctl stop frps`
- 重启服务：`sudo systemctl restart frps`
- 查看服务状态：`sudo systemctl status frps`
- 关闭自启动：`sudo systemctl disable frps`

### 客户端配置

下载完对应架构的文件后，即可开始配置，只需要关心 `frpc` 和 `frpc.ini` 文件即可，前者是FRP 客户端的可执行文件，后者是这是 FRP 客户端的配置文件。

**假设：**

**服务器的ip地址是 1.1.1.1, 服务端frp正在监听的端口是7000, token是1234567890**

**客户端目前正在运行一个项目叫 bitwarden ,它正在本地 0.0.0.0 地址上监听 1111 端口**



打开 `frpc.ini`进行配置，配置文件的内容如下：

```
[common]
server_addr = 1.1.1.1
server_port = 7000
token = 1234567890

[bitwarden]
type = tcp
local_ip = 0.0.0.0
local_port = 1111
remote_port = 8111
```



值得注意的是，配置文件中的 [bitwarden] 可以替换成任何想要的名字

为了方便，我们同样设置 systemd 服务

但是在此之前，我们需要先将 `frpc` 和 `frpc.ini` 文件放到合适的地方：

```
sudo cp frpc /usr/local/bin/
sudo mkdir /usr/local/etc/frp
sudo cp frpc.ini /usr/local/etc/frp/
```



首先，创建一个名为`frpc.service`的文件，该文件将存储有关你的自启动服务的信息。通常，这些文件存放在`/etc/systemd/system/`目录下。

```bash
sudo vim /etc/systemd/system/frpc.service
```

```
[Unit]
Description=frpc
After=network.target
[Service]
TimeoutStartSec=30
WorkingDirectory=/usr/local/bin/
ExecStart=/usr/local/bin/frpc -c /usr/local/etc/frp/frpc.ini
Restart=on-failure
[Install]
WantedBy=multi-user.target
```



保存后，执行：

```
sudo systemctl enable frpc
sudo systemctl start frpc
sudo systemctl status frpc
```

若无问题的话，则说明没有问题！



### 原理

Frp（Fast Reverse Proxy）是一个用于内网穿透的工具，它允许你在公网上访问位于内网的计算机服务。它的原理是通过在公网服务器上部署 frps（Frp 服务器端）和在内网机器上部署 frpc（Frp 客户端），通过公网服务器作为中转，将外部请求转发到内网机器上。

- 在公网服务器上部署 frps：公网服务器上运行的 frps 监听一个指定的端口，等待来自 frpc 的连接。
- 在内网机器上部署 frpc：内网机器上的 frpc 将建立到 frps 的连接，并注册自己的服务信息。frpc 和 frps 之间建立的连接可以被用于穿透数据。
- 数据传输：当公网客户端请求连接到公网服务器的指定端口时，frps 会将这个请求转发给已经连接的 frpc 客户端，然后 frpc 客户端再将请求转发到内网机器的指定服务上。



在我上面的配置中，其转换的意思就是：

frps 监听在公网服务器的 7000 端口，frpc 连接到公网服务器的 7000 端口，并注册自己的服务信息。frpc 客户端配置了一个类型为 TCP 的服务，将本地的 bitwarden 服务映射到公网服务器的 8111 端口上。

若是请求 https://1.1.1.1:8111 那么这个请求就转发给客户端的 http://0.0.0.0:1111



### Nginx 配置

我在服务器中是使用 Nginx 来进行反向代理的，若你的服务器不是，则可以跳过此内容。**若你完全不了解 nginx 建议先去学习了之后再回来进行配置，因为此处我写得很简略，可能会对你产生误导。**

我的 Nginx 代理了80端口，所有的请求都是从此处进入上文提到，需要从 8111 端口进入才能访问内网，所以我需要对 nginx 添加一些配置：

![2023-08-17_15-48.png](https://s2.loli.net/2023/08/27/RrNxIVbkSTgGQOy.png)

这样，当请求 bitwarden 路径时，将会反向代理到 8111 端口

当然，通过 nginx 也可以配置子域名来访问，首先将三级域名 bitwarden.yarnom.top 通过 CNAME 指向当前的服务器地址

然后，nginx 设置一个新的 server ，server_name 就是这个三级域名：

![2023-08-17_15-26.png](https://s2.loli.net/2023/08/27/DjX7LebSQftPovT.png)


## 搭建 **[Vaultwarden](https://github.com/dani-garcia/vaultwarden)**

由于官方的 Bitwarden 服务对于我的小机子来说过于庞大了，所以选择了社区用 Rust 编写 Vaultwarden 项目

它可以用 docker 搭建，那就是几条命令就能安装完毕：

```
Pull the docker image and mount a volume from the host for persistent storage:

docker pull vaultwarden/server:latest
docker run -d --name vaultwarden -v /vw-data/:/data/ --restart unless-stopped -p 80:80 vaultwarden/server:latest
```

完成！



### 搭建 [Memos](https://github.com/usememos/memos)

docker 搭建

```
docker run -d --name memos -p 5230:5230 -v ~/.memos/:/var/opt/memos ghcr.io/usememos/memos:latest
```

自行修改参数即可。

完成！
