# AutoStopper
AutoStopper 是一个 Velocity 代理插件,可以根据玩家活动自动停止和启动 Minecraft 服务器容器。它有助于服务器管理员通过关闭不活跃的基于 Docker 的 Minecraft 服务器来节省资源。
## 功能
- 自动监控服务器活动
- 在可配置的超时时间后停止不活跃的 Docker 容器
- 在玩家尝试连接时按需启动服务器
- 在启动服务器后无缝地将玩家连接到服务器
- 维护服务器状态跟踪
## 要求
- Velocity 代理服务器(3.3.0 或更高版本)
- 带有 itzg/minecraft-server 容器的 Docker 环境
- Docker 套接字挂载到 Velocity 容器
- Java 21+
## 安装
1. 从 [releases](https://github.com/criseda/AutoStopper/releases) 页面下载最新的 AutoStopper JAR
2. 将 JAR 放置在 Velocity 服务器的 `plugins` 目录中
3. 启动 (或重启) 您的 Velocity 服务器
4. 编辑生成的配置文件以匹配您的设置
## 配置文件
首次运行后,AutoStopper 将在 `plugins/AutoStopper` 目录中生成一个 `config.yml`:
```yaml
# 服务器不活动多长时间后停止(秒)
inactivity_timeout_seconds: 900
# AutoStopper 应该管理的服务器列表
monitored_servers:
- server_name: purpur
container_name: purpur-server
- server_name: fabric
container_name: fabric-server
```
### 配置文件选项
- `inactivity_timeout_seconds`: 服务器必须不活动的时间(秒),在被关闭之前(默认:900 秒/15 分钟)
- `monitored_servers`: 服务器映射列表
- `server_name`: Velocity 配置文件中服务器的名称
- `container_name`: 对应的 Docker 容器名称
## Docker 设置
AutoStopper 需要将 Docker 套接字挂载到您的 Velocity 容器。以下是一个示例 `docker-compose.yml` 设置:
```yaml
services:
velocity:
image: itzg/mc-proxy
container_name: velocity-server
environment:
TYPE: "VELOCITY"
ONLINE_MODE: "true"
VELOCITY_VERSION: "latest"
VELOCITY_BUILD_ID: "latest"
REPLACE_ENV_VARIABLES: "true"
ports:
- "25565:25565"
volumes:
- ./velocity_server:/server
- /var/run/docker.sock:/var/run/docker.sock # 必须用于 AutoStopper
networks:
- mc-network
restart: unless-stopped
# 在容器中安装 Docker CLI
entrypoint: bash -c
command: >
"if [ ! -f /usr/bin/docker ]; then
apt-get update &&
apt-get install -y curl &&
curl -fsSL https://get.docker.com -o get-docker.sh &&
sh get-docker.sh &&
apt-get clean;
fi &&
exec /usr/bin/run-bungeecord.sh"
# 可以由 AutoStopper 管理的 Minecraft 服务器示例
purpur:
image: itzg/minecraft-server:java21
container_name: purpur-server
environment:
TYPE: "PURPUR"
VERSION: "1.21.4"
EULA: "TRUE"
ONLINE_MODE: "FALSE"
volumes:
- ./purpur_data:/data
networks:
- mc-network
restart: "no" # 重要:让 AutoStopper 管理容器生命周期
fabric:
image: itzg/minecraft-server:java21
container_name: fabric-server
environment:
TYPE: "FABRIC"
VERSION: "1.21.4"
EULA: "TRUE"
ONLINE_MODE: "FALSE"
volumes:
- ./fabric_data:/data
networks:
- mc-network
restart: "no" # 重要:让 AutoStopper 管理容器生命周期
networks:
mc-network:
driver: bridge
```
### 重要 Docker 配置文件注记
1. Velocity 容器必须安装了 Docker CLI,因此入口脚本会安装它
2. Docker 套接字必须挂载 (`/var/run/docker.sock:/var/run/docker.sock`)
3. 将管理服务器的 `restart` 设置为 `"no"`,以便 Docker 不会自动重启它们
4. 保持任何中心/大厅服务器的 `restart: unless-stopped`,如果您希望它们始终可用
## 命令
- `/autostopper` 或 `/as` - 主命令
- `/autostopper help` - 显示帮助信息
- `/autostopper status` - 显示所有受监控服务器的状态
- `/autostopper reload` - 重新加载配置 (需要 `autostopper.admin` 权限)
## 权限
- `autostopper.admin` - 允许使用重新加载命令
## 工作原理
1. 当玩家尝试连接到受监控的服务器时:
- 如果服务器正在运行,连接将正常进行
- 如果服务器已停止,AutoStopper:
- 启动 Docker 容器
- 等待服务器完全初始化
- 在服务器准备就绪后自动连接玩家
2. 该插件跟踪每个服务器的上次活动时间
3. 一个计划任务检查不活跃的服务器,并在配置的超时时间后停止它们
4. 可以将始终需要的服务器(例如中心/大厅)从监控中排除
## 从源代码构建
1. 克隆存储库
2. 使用 Maven 构建:
```bash
mvn clean package
```
3. 在 `target/AutoStopper-1.1.1-SNAPSHOT.jar` 中找到 JAR 文件
## 许可
本项目使用 MIT 许可授权 - 详情请参阅 LICENSE 文件。
## 作者
- Criseda 为 Velocity 构建
- 使用 itzg/minecraft-server Docker 镜像