osaet/content/posts/hello-orangepi-zero3.md
yarnom f0b50d13ea feat: add admin publishing workflow and yar theme
Add Go/Postgres admin APIs, Angular admin UI, manual build flow, asset uploads, markdown import/export, configurable slug generation, and the Yar reading theme. Exclude local docs and generated development artifacts from version control.
2026-06-01 15:48:04 +08:00

328 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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
```
若无问题的话,则说明没有问题!
### 原理
FrpFast Reverse Proxy是一个用于内网穿透的工具它允许你在公网上访问位于内网的计算机服务。它的原理是通过在公网服务器上部署 frpsFrp 服务器端)和在内网机器上部署 frpcFrp 客户端),通过公网服务器作为中转,将外部请求转发到内网机器上。
- 在公网服务器上部署 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
```
自行修改参数即可。
完成!