# Vexon Pool 新服务器安装/迁移流程

本文档用于把 Vexon Pool 安装到服务器，并恢复数据库、钱包、
Stratum 配置和后台统计服务。

## 本地文件

当前 Mac 本地通常会有两个关键内容：

```text
vexon-pool-deploy/
vexon-pool-backup.tar.gz
```

说明：

- `vexon-pool-deploy/` 是私有部署仓库。
- `vexon-pool-backup.tar.gz` 是旧服务器备份包，包含数据库、钱包、真实配置和密码。
- `vexon-pool-backup.tar.gz` 不能上传 GitHub，不能发给别人。

同一台服务器已经有其他矿池或网站服务时，保持默认共存配置：Vexon 使用
`/opt/vexon-pool` 和 `4499`，不会覆盖旧部署的 `/var/stratum`、`/var/web`
和常见矿池端口。

## 1. 准备新服务器

推荐系统：

```text
Ubuntu 20.04 LTS
```

用 root 登录新服务器，确认基础工具：

```bash
apt-get update
apt-get install -y rsync screen curl git
```

## 2. 上传部署仓库和备份包

在 Mac 终端执行，把 `新服务器IP` 替换为真实 IP：

```bash
rsync -avz --progress \
  vexon-pool-backup.tar.gz \
  root@新服务器IP:/root/

rsync -avz --progress \
  vexon-pool-deploy/ \
  root@新服务器IP:/root/vexon-pool-deploy/
```

## 3. 配置 `.env`

在新服务器执行：

```bash
cd /root/vexon-pool-deploy
cp .env.example .env
nano .env
```

至少确认这些值：

```bash
POOL_DOMAIN=你的域名或服务器IP
POOL_SITE_NAME=Vexon Pool
POOL_ADMIN_EMAIL=你的邮箱

POOL_BACKUP_TAR=/root/vexon-pool-backup.tar.gz

STRATUM_PORT=4499
STRATUM_DIFFICULTY=256
VEX_BLOCK_SUBMIT_DIFF=503382015

VEX_CORE_REF=main
VEX_WALLET_REF=main
VEX_STRATUM_REF=main
```

如果你要完整恢复旧池子，`POOL_BACKUP_TAR` 必须指向备份包。
安装脚本默认会拉取你的私有仓库：`vexon-core`、`vexon-wallet`、`vexon-stratum`。如果要固定到某个发布版本，把上面的 `main` 改成 tag 名即可。

## 4. 执行安装

在新服务器执行：

```bash
cd /root/vexon-pool-deploy
chmod +x install.sh scripts/preflight.sh scripts/backup-existing-pool.sh
scripts/preflight.sh
bash install.sh
```

安装脚本会自动处理：

- 安装 MariaDB、PHP CLI、编译依赖、screen、Go
- 默认不改宝塔或系统 Nginx；只有 `VEX_CONFIGURE_NGINX=1` 时才创建系统 Nginx 站点
- 安装 Vexon Pool Web 到 `/opt/vexon-pool/web`
- 初始化 MariaDB 数据库
- 恢复旧池数据库备份
- 恢复节点和钱包数据目录
- 恢复 Vexon_Stratum 配置
- 编译并安装 Vexon_Stratum
- 启动节点
- 启动钱包
- 启动 Vexon_Stratum
- 启动 Vexon Pool 后台统计循环：`main.sh`、`loop2.sh`、`blocks.sh`

`scripts/preflight.sh` 会先检查 `.env` 是否还是占位符、私有 GitHub 仓库是否能访问、备份包是否存在、模板和脚本语法是否正确。这个检查通过后再执行安装。

## 5. 安装后检查

安装后优先运行自动医生脚本。默认只检查，不会修改系统：

```bash
cd /root/vexon-pool-deploy
scripts/doctor.sh
```

如果发现白屏、`debug.log Permission denied`、runtime 不可写、nginx 没启动、
PHP-FPM 没启动、VEX 币种配置漂移、Stratum 没监听、钱包 RPC 没启动等问题，
再执行修复模式：

```bash
cd /root/vexon-pool-deploy
sudo scripts/doctor.sh --fix
```

修复模式会重新发布 Web/Docs、渲染 `serverconfig.php`、修复 Yii runtime 和日志权限、
重载 nginx/PHP-FPM、启动 memcached、修复 VEX coin 数据库配置、重启 Stratum，
并在 `VEX_START_WALLET=1` 时重启钱包 RPC。它不会覆盖原有池子的 `/var/web`
或 `/var/stratum`。

### 生产运维层

矿池确认能出 shares、`scripts/health-check.sh` 通过后，建议切到 systemd，并安装
自动重启、日志轮转、数据库备份、SSL 续期检查和掉线监控：

```bash
cd /root/vexon-pool-deploy
sudo bash scripts/install-ops.sh --enable-now
sudo systemctl status vexon-node vexon-stratum vexon-pool-main --no-pager
sudo systemctl list-timers 'vexon-*' --all
```

这一步只安装 `vexon-*` 服务和 `/etc/logrotate.d/vexon-pool`，不会修改原有池子的
`/var/web`、`/var/stratum` 或旧 screen 名称。

常用检查：

```bash
sudo bash scripts/monitor-pool.sh
sudo bash scripts/run-backup.sh
sudo bash scripts/ssl-renew-check.sh
journalctl -u vexon-pool-monitor.service -n 100 --no-pager
```

默认备份目录是 `/root/vexon-pool-backups`，备份包包含数据库和钱包/配置等敏感数据，
不要上传到网站目录或公开仓库。

查看 screen：

```bash
screen -ls
```

应该看到类似：

```text
Vexon_Node
Vexon_Wallet
Vexon_Stratum
vexon-pool-main
vexon-pool-loop2
vexon-pool-blocks
```

查看进程：

```bash
ps -ef | grep -E 'vexond|vexonwallet|VexonStratum|main.sh|loop2.sh|blocks.sh' | grep -v grep
```

查看端口：

```bash
ss -lntp | grep -E '4499|18555|18556|18557|80|443'
```

查看 Vexon_Stratum 日志：

```bash
tail -80 /opt/vexon-pool/stratum-config/vexon.log
```

查看 Vexon Pool 后台统计：

```bash
mysql -uroot vexonpool -e "SELECT id,algo,hashrate,hashrate_bad,FROM_UNIXTIME(time) AS t FROM hashrate WHERE algo='decred' ORDER BY id DESC LIMIT 10;"
```

## 6. 矿机连接

矿机地址：

```text
stratum+tcp://新服务器IP:4499
```

Worker 示例：

```text
VEX地址.001
```

密码可继续用：

```text
123
```

## 7. 常用维护命令

重启 Vexon_Stratum：

```bash
screen -S Vexon_Stratum -X quit
sleep 2
cd /opt/vexon-pool/stratum-config
screen -dmS Vexon_Stratum ./run.sh vexon
```

查看有效 shares：

```bash
mysql -uroot vexonpool -e "
SELECT valid,error,COUNT(*) AS cnt, SUM(difficulty) AS sumdiff,
FROM_UNIXTIME(MIN(time)) AS first_t, FROM_UNIXTIME(MAX(time)) AS last_t
FROM shares
WHERE algo='decred' AND time>UNIX_TIMESTAMP()-900
GROUP BY valid,error
ORDER BY cnt DESC;
"
```

查看最新 shares：

```bash
mysql -uroot vexonpool -e "SELECT id,userid,coinid,workerid,valid,error,difficulty,share_diff,FROM_UNIXTIME(time) AS t FROM shares WHERE algo='decred' ORDER BY id DESC LIMIT 20;"
```

## 8. 重要安全提醒

不要提交或上传这些内容：

```text
vexon-pool-backup.tar.gz
.env
节点数据目录
钱包文件
Vexon_Stratum 真实配置
数据库 dump
证书和私钥
```

迁移成功后建议离线保存一份备份包，服务器上可删除：

```bash
rm -f /root/vexon-pool-backup.tar.gz
```
