# Xray VPS 部署指南

> 一键部署 Xray 代理，支持 VLESS-Reality（抗封锁）和 VLESS TCP（极速）两种模式。无需域名和证书。

## 功能特性

- 两种部署模式可选：Reality（推荐）/ Fast TCP
- 自动安装 Xray + 生成密钥 + 配置防火墙
- BBR 拥塞控制 + TCP 深度调优
- 自动选择延迟最低的 Reality 伪装目标
- 部署完成自动输出 VLESS 分享链接
- 一键备份 / 卸载脚本

## 模式对比

| 特性 | Reality（推荐） | Fast TCP |
|------|-----------------|----------|
| **加密** | Reality TLS 1.3 | 无，明文传输 |
| **抗检测** | 伪装为真实 HTTPS 流量 | 极易被 DPI 识别 |
| **需要域名** | 否 | 否 |
| **需要证书** | 否 | 否 |
| **速度** | Vision 流控避免双重加密，差距 < 5% | 裸 TCP 无开销，理论最快 |
| **被封风险** | 极低 | 极高 |

## 技术栈

| 组件 | 说明 |
|------|------|
| Xray | VLESS 代理核心 |
| BBR | TCP 拥塞控制算法 |
| ufw / firewalld | 防火墙 |

## 前置条件

1. 一台境外 Linux VPS（Debian 12 推荐）
2. root 权限
3. 服务器 443 端口可从外网访问

### 推荐配置

| 项目 | 最低 | 推荐 |
|------|------|------|
| CPU | 1 核 | 1 核 |
| 内存 | 256 MB | 512 MB |
| 硬盘 | 5 GB | 10 GB |
| 带宽 | 200 Mbps | 1 Gbps |
| 流量 | 500 GB/月 | 1 TB+/月 |
| 位置 | — | 日本 / 新加坡 / 美西 |

## 目录结构

```
vps-xray/
├── deploy.sh             # 一键部署脚本
├── backup.sh             # 备份脚本
├── uninstall.sh          # 完全卸载脚本
├── .env.example          # 配置模板
├── README.md             # 本文件
├── vps-xray-optimized.md # Reality 方案详细文档
└── vps-xray-fast.md      # Fast TCP 方案详细文档
```

服务器上的文件位置：

```
/usr/local/bin/xray                # Xray 可执行文件
/usr/local/etc/xray/config.json    # Xray 配置文件
/etc/sysctl.d/99-xray-turbo.conf   # 网络调优参数
/var/backups/xray/                  # 备份文件
```

## 快速部署

### 第一步：上传文件到 VPS

```bash
scp -r vps-xray/ root@<VPS_IP>:/opt/vps-xray
```

### 第二步：登录 VPS 执行部署

```bash
ssh root@<VPS_IP>
cd /opt/vps-xray

# Reality 模式部署（推荐）
bash deploy.sh

# 或者 Fast TCP 模式
bash deploy.sh --mode fast
```

部署完成后会输出：
- 连接参数（IP、端口、UUID、密钥等）
- VLESS 分享链接（可直接导入客户端）

> **⚠️ 请妥善保存输出的连接信息！密钥仅显示一次。**凭据同时保存在 `/opt/vps-xray/.env` 中。

### 第三步：客户端配置

将部署脚本输出的 `vless://` 链接导入客户端即可：

| 平台 | 推荐客户端 |
|------|-----------|
| Windows | v2rayN（6.x+） |
| macOS | V2BOX / NekoRay，详见 [client-macos.md](client-macos.md) |
| iOS | Shadowrocket / Streisand |
| Android | v2rayNG |

详细的 Clash Meta / Sing-Box 配置参见 [vps-xray-optimized.md](vps-xray-optimized.md)。

## 日常运维

### 查看状态 / 日志

```bash
systemctl status xray
journalctl -u xray -f
journalctl -u xray --tail 100
```

### 备份

```bash
cd /opt/vps-xray
bash backup.sh
```

备份内容包括：
- Xray 配置文件（`config.json`）
- 部署配置（`.env` + 脚本）
- 网络调优参数

备份文件保存在 `/var/backups/xray/`，自动清理 30 天前的旧备份。

### 恢复备份

```bash
# 查看可用备份
ls /var/backups/xray/

# 恢复 Xray 配置
tar xzf /var/backups/xray/xray_config_<日期>.tar.gz -C /usr/local/etc/

# 恢复网络调优
cp /var/backups/xray/sysctl_<日期>.conf /etc/sysctl.d/99-xray-turbo.conf
sysctl --system

# 重启服务
systemctl restart xray
```

### 更新 Xray

```bash
# 备份当前配置
cd /opt/vps-xray && bash backup.sh

# 更新 Xray 核心（配置文件保留）
bash <(curl -fsSL https://raw.githubusercontent.com/XTLS/Xray-install/main/install-release.sh)

# 重启服务
systemctl restart xray
```

### 重启 / 停止

```bash
systemctl restart xray    # 重启
systemctl stop xray       # 停止
systemctl start xray      # 启动
```

### 验证

```bash
# 确认 BBR 启用
sysctl net.ipv4.tcp_congestion_control

# 确认端口监听
ss -tlnp | grep 443

# 测试配置语法
/usr/local/bin/xray run -test -config /usr/local/etc/xray/config.json
```

## 完全卸载

```bash
cd /opt/vps-xray
bash uninstall.sh
```

脚本会**交互式确认**每个危险操作：

| 步骤 | 操作 | 确认方式 |
|------|------|----------|
| 0 | 卸载前备份（可选） | y/N |
| 1 | 停止并禁用 Xray 服务 | 输入 YES |
| 2 | 卸载 Xray 程序 + 删除配置 | 自动 |
| 3 | 移除网络调优配置 | 自动 |
| 4 | 关闭防火墙端口 | 自动 |
| 5 | 删除部署目录 `/opt/vps-xray` | y/N |

**备份目录 `/var/backups/xray/` 始终保留**。

## 多用户

在 Xray 配置的 `clients` 数组中添加更多用户：

```bash
vi /usr/local/etc/xray/config.json
```

```json
"clients": [
  { "id": "原始-uuid", "flow": "xtls-rprx-vision" },
  { "id": "新用户-uuid", "flow": "xtls-rprx-vision" }
]
```

生成新 UUID：`cat /proc/sys/kernel/random/uuid`

修改后重启：`systemctl restart xray`

## 故障排查

### 客户端连接失败

```bash
# 确认 Xray 运行
systemctl status xray

# 确认端口监听
ss -tlnp | grep 443

# 查看错误日志
journalctl -u xray --tail 50
```

### 速度慢

```bash
# 确认 BBR 启用
sysctl net.ipv4.tcp_congestion_control
# 应输出: net.ipv4.tcp_congestion_control = bbr

# 确认网络调优生效
sysctl net.core.rmem_max
# 应输出: net.core.rmem_max = 16777216
```

### IP 被封

Reality 能大幅降低被封概率，但如果 IP 已被墙：
1. 更换 VPS IP
2. 重新部署：`bash deploy.sh`

## 安全说明

- `PrivateKey` 只存在服务端配置中，切勿泄露
- `PublicKey` 是客户端参数，可公开
- `.env` 文件权限已设为 600（仅 root 可读）
- BT 流量已在路由规则中屏蔽，降低 VPS 被投诉风险
