Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Simpfun Web Control Panel

一个轻量的 Simpfun / 简幻欢 Minecraft 服务器网页控制面板。它通过你自己浏览器里捕获到的合法 Simpfun 控制台请求,提供状态查看、开机、关机、重启和强制关机按钮。

适合自用服务器管理。不要用它控制不属于你的服务器,也不要把自己的 Authorization 令牌提交到公开仓库。

功能

  • 查看服务器名称、状态、地址、任务状态和运行时间
  • 页面标题和服务器 ID 来自 Simpfun detail/status 接口返回值,服务器改名后页面会跟着变
  • 根据当前状态自动限制按钮:
    • running:允许关机、重启、强制关机
    • starting:只允许强制关机
    • stopping:只允许强制关机
    • stopped / 其它状态:只允许开机
  • 支持可选面板口令 SIMPFUN_WEB_TOKEN
  • 纯 Python 标准库后端,无需安装第三方依赖
  • 前端不保存 Simpfun Authorization,令牌只放在服务器环境变量里

项目结构

.
├── app.py                  # Web 后端,提供静态页面和 /api/* 接口
├── simpfun_status.py       # Simpfun API helper,可单独 CLI 使用
├── static/
│   ├── index.html
│   ├── script.js
│   └── style.css
├── .env.example            # 环境变量示例,不含真实密钥
├── .gitignore
└── README.md

配置

复制示例配置生成本机私有配置文件:

cp .env.example .env

如果你的部署目录里没有 .env.example,说明你拉到的是旧版本或文件没有被提交;可以直接手动创建 .env

nano .env

然后把下面这段填进去并修改为自己的值:

SIMPFUN_INSTANCE_ID=你的实例ID
SIMPFUN_AUTHORIZATION=你的Authorization
SIMPFUN_WEB_TOKEN=你的面板口令
SIMPFUN_WEB_HOST=127.0.0.1
SIMPFUN_WEB_PORT=8080

编辑 .env

nano .env

至少填写:

SIMPFUN_INSTANCE_ID=你的实例ID
SIMPFUN_AUTHORIZATION=你的Authorization
SIMPFUN_WEB_TOKEN=你的面板口令
SIMPFUN_WEB_HOST=127.0.0.1
SIMPFUN_WEB_PORT=8080

实例 ID 来自 Simpfun 控制台地址:

https://simpfun.cn/console/ins/<这里就是实例ID>/

SIMPFUN_AUTHORIZATION 从浏览器 DevTools 的 Network/XHR 请求里复制,通常是 detail 请求的 Authorization 请求头值。

本地运行

因为本项目不依赖 python-dotenv,开发时可以用 shell 加载 .env

set -a
source .env
set +a
python3 app.py

打开:

http://127.0.0.1:8080

也可以单独使用 CLI:

python3 simpfun_status.py status
python3 simpfun_status.py start
python3 simpfun_status.py stop
python3 simpfun_status.py restart
python3 simpfun_status.py kill

部署到服务器

推荐架构:Python 只监听 127.0.0.1:8080,公网通过 Nginx + HTTPS 反向代理到它。

1. 克隆项目

cd /opt
git clone https://github.com/OctoberPrayRain/Simpfun_External.git
cd Simpfun_External
cp .env.example .env
nano .env

2. 创建 systemd 服务

sudo nano /etc/systemd/system/simpfun-web.service

示例:

[Unit]
Description=Simpfun Web Control Panel
After=network.target

[Service]
Type=simple
WorkingDirectory=/opt/Simpfun_External
EnvironmentFile=/opt/Simpfun_External/.env
ExecStart=/usr/bin/python3 /opt/Simpfun_External/app.py
Restart=always
RestartSec=3

[Install]
WantedBy=multi-user.target

启动:

sudo systemctl daemon-reload
sudo systemctl enable --now simpfun-web
sudo systemctl status simpfun-web

查看日志:

journalctl -u simpfun-web -f

3. Nginx 反向代理

panel.example.com 换成你的域名:

server {
    listen 80;
    server_name panel.example.com;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_http_version 1.1;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

然后:

sudo nginx -t
sudo systemctl reload nginx

HTTPS 可以用 Certbot:

sudo certbot --nginx -d panel.example.com

API

  • GET /api/status:查询服务器状态
  • GET /api/actions:查看支持的电源动作和状态规则
  • POST /api/power:执行电源动作

请求体示例:

{"action":"restart"}

支持动作:

  • start:开机
  • stop:正常关机
  • restart:重启
  • kill:强制关机

安全注意

  • .env 已被 .gitignore 忽略,不要提交它
  • 不要把 SIMPFUN_AUTHORIZATION 写进 README、issue、截图或前端 JS
  • 如果令牌意外公开,立刻退出 Simpfun 登录或重新登录刷新令牌
  • 面板挂公网域名前建议务必设置 SIMPFUN_WEB_TOKEN
  • 建议只让 Python 监听 127.0.0.1,由 Nginx 对外提供 HTTPS

About

External Controller of Simpfun's Minecraft Server Panel./管理Simpfun服务器状态的外部网页控制端

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages