新增rustdesk
This commit is contained in:
37
README.md
37
README.md
@@ -13,6 +13,7 @@
|
|||||||
| [joplin/](joplin/) | 笔记同步服务器(Joplin Server + PostgreSQL) | 443 |
|
| [joplin/](joplin/) | 笔记同步服务器(Joplin Server + PostgreSQL) | 443 |
|
||||||
| [siyuan/](siyuan/) | 知识管理笔记(思源笔记 SiYuan) | 443 |
|
| [siyuan/](siyuan/) | 知识管理笔记(思源笔记 SiYuan) | 443 |
|
||||||
| [portainer/](portainer/) | Docker 可视化管理(Portainer CE) | 443 |
|
| [portainer/](portainer/) | Docker 可视化管理(Portainer CE) | 443 |
|
||||||
|
| [rustdesk/](rustdesk/) | 自托管远程桌面服务器(RustDesk) | 21115-21117, 443 |
|
||||||
|
|
||||||
## 架构概览
|
## 架构概览
|
||||||
|
|
||||||
@@ -30,6 +31,13 @@
|
|||||||
│+MySQL 8.4│ │ │ │+PgSQL│ │ │ │ │ │ │
|
│+MySQL 8.4│ │ │ │+PgSQL│ │ │ │ │ │ │
|
||||||
└──────────┘ └────────┘ └──────┘ └──────┘ └─────────┘ └─────────┘
|
└──────────┘ └────────┘ └──────┘ └──────┘ └─────────┘ └─────────┘
|
||||||
Docker Docker Docker Docker Docker Docker
|
Docker Docker Docker Docker Docker Docker
|
||||||
|
|
||||||
|
┌─────────────────────────────────┐
|
||||||
|
│ RustDesk (hbbs + hbbr) │
|
||||||
|
│ TCP 21115/21116/21117(外网直达)│
|
||||||
|
│ WS 21118/21119(Nginx 代理) │
|
||||||
|
└─────────────────────────────────┘
|
||||||
|
Docker
|
||||||
```
|
```
|
||||||
|
|
||||||
所有服务通过 Nginx 反向代理提供 HTTPS 访问,容器端口仅监听 `127.0.0.1`。
|
所有服务通过 Nginx 反向代理提供 HTTPS 访问,容器端口仅监听 `127.0.0.1`。
|
||||||
@@ -75,11 +83,18 @@ docker/
|
|||||||
│ ├── backup.sh
|
│ ├── backup.sh
|
||||||
│ ├── nginx/siyuan.conf
|
│ ├── nginx/siyuan.conf
|
||||||
│ └── README.md
|
│ └── README.md
|
||||||
└── portainer/ # Portainer CE Docker 管理
|
├── portainer/ # Portainer CE Docker 管理
|
||||||
├── docker-compose.yml
|
│ ├── docker-compose.yml
|
||||||
|
│ ├── deploy.sh # 部署脚本(依赖 base/)
|
||||||
|
│ ├── backup.sh
|
||||||
|
│ ├── nginx/portainer.conf
|
||||||
|
│ └── README.md
|
||||||
|
└── rustdesk/ # RustDesk 自托管远程桌面
|
||||||
|
├── docker-compose.yml # hbbs + hbbr 容器编排
|
||||||
├── deploy.sh # 部署脚本(依赖 base/)
|
├── deploy.sh # 部署脚本(依赖 base/)
|
||||||
├── backup.sh
|
├── backup.sh
|
||||||
├── nginx/portainer.conf
|
├── uninstall.sh
|
||||||
|
├── nginx/rustdesk.conf # Nginx WebSocket 代理配置
|
||||||
└── README.md
|
└── README.md
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -89,7 +104,7 @@ docker/
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# 1. 上传所有文件到服务器
|
# 1. 上传所有文件到服务器
|
||||||
scp -r base/ gitea/ certd/ joplin/ vaultwarden/ siyuan/ portainer/ root@<IP>:/opt/
|
scp -r base/ gitea/ certd/ joplin/ vaultwarden/ siyuan/ portainer/ rustdesk/ root@<IP>:/opt/
|
||||||
|
|
||||||
# 2. 安装基础环境
|
# 2. 安装基础环境
|
||||||
ssh root@<IP>
|
ssh root@<IP>
|
||||||
@@ -132,6 +147,12 @@ cd /opt/portainer
|
|||||||
bash deploy.sh
|
bash deploy.sh
|
||||||
vi .env
|
vi .env
|
||||||
bash deploy.sh
|
bash deploy.sh
|
||||||
|
|
||||||
|
# 9. 部署 RustDesk(自托管远程桌面)
|
||||||
|
cd /opt/rustdesk
|
||||||
|
bash deploy.sh
|
||||||
|
vi .env
|
||||||
|
bash deploy.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
### 场景二:已有 Gitea 的服务器,追加部署 Certd
|
### 场景二:已有 Gitea 的服务器,追加部署 Certd
|
||||||
@@ -176,6 +197,7 @@ bash deploy.sh
|
|||||||
| Joplin | `joplin.example.com` | A → 服务器 IP |
|
| Joplin | `joplin.example.com` | A → 服务器 IP |
|
||||||
| Vaultwarden | `vault.example.com` | A → 服务器 IP |
|
| Vaultwarden | `vault.example.com` | A → 服务器 IP |
|
||||||
| SiYuan | `note.example.com` | A → 服务器 IP |
|
| SiYuan | `note.example.com` | A → 服务器 IP |
|
||||||
|
| RustDesk | `rustdesk.example.com` | A → 服务器 IP |
|
||||||
|
|
||||||
## 日常运维
|
## 日常运维
|
||||||
|
|
||||||
@@ -196,6 +218,9 @@ cd /opt/vaultwarden && docker compose ps
|
|||||||
|
|
||||||
# SiYuan
|
# SiYuan
|
||||||
cd /opt/siyuan && docker compose ps
|
cd /opt/siyuan && docker compose ps
|
||||||
|
|
||||||
|
# RustDesk
|
||||||
|
cd /opt/rustdesk && docker compose ps
|
||||||
```
|
```
|
||||||
|
|
||||||
### 备份所有服务
|
### 备份所有服务
|
||||||
@@ -206,6 +231,7 @@ cd /opt/certd && bash backup.sh
|
|||||||
cd /opt/joplin && bash backup.sh
|
cd /opt/joplin && bash backup.sh
|
||||||
cd /opt/vaultwarden && bash backup.sh
|
cd /opt/vaultwarden && bash backup.sh
|
||||||
cd /opt/siyuan && bash backup.sh
|
cd /opt/siyuan && bash backup.sh
|
||||||
|
cd /opt/rustdesk && bash backup.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
### SSL 证书续期
|
### SSL 证书续期
|
||||||
@@ -222,7 +248,8 @@ certbot renew --dry-run
|
|||||||
|
|
||||||
## 注意事项
|
## 注意事项
|
||||||
|
|
||||||
- **Gitea 的 deploy.sh 是自包含的**,不依赖 base/(历史兼容)。Certd、Joplin、Vaultwarden 和 SiYuan 依赖 base/。
|
- **Gitea 的 deploy.sh 是自包含的**,不依赖 base/(历史兼容)。Certd、Joplin、Vaultwarden、SiYuan、Portainer 和 RustDesk 依赖 base/。
|
||||||
|
- **RustDesk 需额外开放防火墙端口** 21115/21116(TCP)、21116(UDP)、21117(TCP),这些端口需从外网可直接访问,不经过 Nginx。
|
||||||
- 所有容器端口仅监听 `127.0.0.1`,通过 Nginx 反向代理对外提供 HTTPS 服务。
|
- 所有容器端口仅监听 `127.0.0.1`,通过 Nginx 反向代理对外提供 HTTPS 服务。
|
||||||
- `.env` 文件包含敏感信息,不要提交到公开仓库。
|
- `.env` 文件包含敏感信息,不要提交到公开仓库。
|
||||||
- 首次部署每个服务时需要运行两次 `deploy.sh`:第一次生成 `.env`,修改配置后第二次正式部署。
|
- 首次部署每个服务时需要运行两次 `deploy.sh`:第一次生成 `.env`,修改配置后第二次正式部署。
|
||||||
|
|||||||
@@ -2,3 +2,10 @@
|
|||||||
|
|
||||||
# Docker 镜像加速(国内服务器推荐配置)
|
# Docker 镜像加速(国内服务器推荐配置)
|
||||||
DOCKER_REGISTRY_MIRRORS=https://docker.1ms.run,https://docker.m.daocloud.io,https://dockerpull.org,https://docker.rainbond.cc,https://docker.udayun.com,https://hub.rat.dev
|
DOCKER_REGISTRY_MIRRORS=https://docker.1ms.run,https://docker.m.daocloud.io,https://dockerpull.org,https://docker.rainbond.cc,https://docker.udayun.com,https://hub.rat.dev
|
||||||
|
|
||||||
|
# SSH 公钥认证(可选)
|
||||||
|
# 填入本机公钥内容,setup.sh 运行时自动写入服务器 authorized_keys,后续无需密码登录
|
||||||
|
# 获取本机公钥(Windows PowerShell): Get-Content ~/.ssh/id_ed25519.pub
|
||||||
|
# 获取本机公钥(Linux/macOS): cat ~/.ssh/id_ed25519.pub
|
||||||
|
# 若本机还没有密钥,先生成: ssh-keygen -t ed25519
|
||||||
|
SSH_PUBLIC_KEY=
|
||||||
|
|||||||
@@ -26,9 +26,43 @@ scp -r base/ root@<服务器IP>:/opt/base
|
|||||||
cd /opt/base
|
cd /opt/base
|
||||||
cp .env.example .env
|
cp .env.example .env
|
||||||
# 编辑 .env 配置 Docker 镜像加速(可选)
|
# 编辑 .env 配置 Docker 镜像加速(可选)
|
||||||
|
# 配置 SSH_PUBLIC_KEY 可实现密钥登录(推荐)
|
||||||
bash setup.sh
|
bash setup.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### 配置 SSH 密钥认证(推荐)
|
||||||
|
|
||||||
|
首次部署前,将本地公钥填入 `base/.env`,`setup.sh` 运行时会自动配置服务器,后续 SSH/SCP 无需再输入密码。
|
||||||
|
|
||||||
|
**第一步:生成本地 SSH 密钥(如果还没有)**
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
# Windows PowerShell
|
||||||
|
ssh-keygen -t ed25519
|
||||||
|
```
|
||||||
|
|
||||||
|
**第二步:将公钥写入 base/.env**
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
# Windows PowerShell:复制公钥内容
|
||||||
|
Get-Content ~/.ssh/id_ed25519.pub
|
||||||
|
```
|
||||||
|
|
||||||
|
将输出的内容(形如 `ssh-ed25519 AAAA... comment`)填入 `base/.env`:
|
||||||
|
|
||||||
|
```env
|
||||||
|
SSH_PUBLIC_KEY=ssh-ed25519 AAAA...(你的公钥内容)
|
||||||
|
```
|
||||||
|
|
||||||
|
**第三步:上传 .env 并运行 setup.sh**
|
||||||
|
|
||||||
|
正常执行上传和 `bash setup.sh` 后,SSH 密钥即自动配置完成。后续连接直接:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ssh root@<服务器IP> # 无需密码
|
||||||
|
scp -r ... root@<服务器IP> # 无需密码
|
||||||
|
```
|
||||||
|
|
||||||
### 方式二:被其他服务脚本调用
|
### 方式二:被其他服务脚本调用
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
@@ -57,6 +91,7 @@ install_nginx
|
|||||||
| `install_certbot` | 安装 Certbot |
|
| `install_certbot` | 安装 Certbot |
|
||||||
| `setup_firewall_base` | 开放 22/80/443 端口 |
|
| `setup_firewall_base` | 开放 22/80/443 端口 |
|
||||||
| `firewall_allow_port <port> [desc]` | 开放额外端口 |
|
| `firewall_allow_port <port> [desc]` | 开放额外端口 |
|
||||||
|
| `setup_ssh_key <pubkey>` | 配置 SSH 公钥认证 |
|
||||||
| `setup_ssl_cert <domain> <email> [name]` | 申请 SSL 证书 |
|
| `setup_ssl_cert <domain> <email> [name]` | 申请 SSL 证书 |
|
||||||
| `deploy_nginx_conf <template> <domain> <name>` | 部署 Nginx 反向代理配置 |
|
| `deploy_nginx_conf <template> <domain> <name>` | 部署 Nginx 反向代理配置 |
|
||||||
| `load_base_env [dir]` | 加载 base/.env |
|
| `load_base_env [dir]` | 加载 base/.env |
|
||||||
|
|||||||
@@ -282,6 +282,35 @@ setup_firewall_base() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# ===== 配置 SSH 公钥认证 =====
|
||||||
|
# 用法: setup_ssh_key <公钥内容>
|
||||||
|
# 将公钥写入 ~/.ssh/authorized_keys,自动设置正确权限
|
||||||
|
setup_ssh_key() {
|
||||||
|
local pubkey="$1"
|
||||||
|
|
||||||
|
if [ -z "$pubkey" ]; then
|
||||||
|
warn "SSH_PUBLIC_KEY 为空,跳过 SSH 密钥配置"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
step "配置 SSH 密钥认证"
|
||||||
|
|
||||||
|
mkdir -p /root/.ssh
|
||||||
|
chmod 700 /root/.ssh
|
||||||
|
touch /root/.ssh/authorized_keys
|
||||||
|
chmod 600 /root/.ssh/authorized_keys
|
||||||
|
|
||||||
|
# 幂等:相同公钥不重复写入
|
||||||
|
if grep -qF "$pubkey" /root/.ssh/authorized_keys 2>/dev/null; then
|
||||||
|
log "SSH 公钥已存在,跳过"
|
||||||
|
else
|
||||||
|
echo "$pubkey" >> /root/.ssh/authorized_keys
|
||||||
|
log "SSH 公钥已添加到 /root/.ssh/authorized_keys"
|
||||||
|
fi
|
||||||
|
|
||||||
|
log "SSH 密钥认证配置完成,后续可使用密钥连接,无需输入密码"
|
||||||
|
}
|
||||||
|
|
||||||
# ===== 开放额外端口 =====
|
# ===== 开放额外端口 =====
|
||||||
# 用法: firewall_allow_port <端口> [描述]
|
# 用法: firewall_allow_port <端口> [描述]
|
||||||
firewall_allow_port() {
|
firewall_allow_port() {
|
||||||
@@ -428,6 +457,11 @@ _base_main() {
|
|||||||
install_certbot
|
install_certbot
|
||||||
setup_firewall_base
|
setup_firewall_base
|
||||||
|
|
||||||
|
# 配置 SSH 公钥认证(若 .env 中设置了 SSH_PUBLIC_KEY)
|
||||||
|
if [ -n "${SSH_PUBLIC_KEY:-}" ]; then
|
||||||
|
setup_ssh_key "$SSH_PUBLIC_KEY"
|
||||||
|
fi
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
log "===== 基础环境安装完成 ====="
|
log "===== 基础环境安装完成 ====="
|
||||||
log "已安装: Docker $(docker --version 2>/dev/null | grep -o '[0-9.]*' | head -1)"
|
log "已安装: Docker $(docker --version 2>/dev/null | grep -o '[0-9.]*' | head -1)"
|
||||||
|
|||||||
Reference in New Issue
Block a user