LiveShot – 网页实时截图与直播 API
LiveShot – 网页实时截图与直播 API
LiveShot 是一个基于 Node.js 和 Puppeteer (Headless Chrome) 的轻量级服务。它允许你通过简单的 API 调用,获取任何网页的高清截图,甚至是以 MJPEG 视频流 的形式实时“直播”网页的变化。特别适合用于 服务器探针监控 (Server Status)、GitHub Profile 动态展示、自动化报表生成 或 网页变动监控。
项目介绍
在低配置的 Linux VPS 上运行 Puppeteer(Chrome)通常是一场噩梦,内存泄漏和 CPU 飙升是家常便饭。
LiveShot 是一个专为 Linux VPS 设计的高性能网页渲染工具。它不仅仅是一个截图 API,还支持生成实时网页 MJPEG 直播流。最重要的是,v4.1 版本针对低资源环境进行了深度优化,实现了零 CPU 轮询开销,并内置了内存守护机制。
核心特性
- 极低占用:彻底移除了轮询机制,待机 CPU 占用为 0%。
- 智能守护:通过 PM2 限制最大内存(默认 500MB),防止 Chrome 撑爆服务器,长期运行极度稳定。
- 安全鉴权:内置 Token 验证,并自动拦截局域网/内网 IP 请求。
- 功能丰富:支持长截图(Full Page)、自定义分辨率、实时 MJPEG 直播。
- 便捷管理:提供
lvs终端快捷指令,拥有全交互式菜单(安装/重启/日志/卸载)。
🚀 一键部署
支持 Debian / Ubuntu 系统。请在 SSH 终端执行以下命令:
Bash
wget -O liveshot.sh https://raw.githubusercontent.com/ypkin/LiveShot/refs/heads/main/liveshot.sh && chmod +x liveshot.sh && ./liveshot.sh
安装完成后,直接输入 lvs 即可呼出管理菜单,查看运行状态或重置 Token。
🛡️ 进阶:Nginx 反代安全配置(隐藏 Token)
默认情况下,API 需要在 URL 中携带 token 参数,这在公开分享(如放入 GitHub Readme 或 OBS 直播源)时非常不安全。
我们可以利用 Nginx 的反向代理功能,将 Token 和目标 URL “写死” 在服务器配置中,对外只暴露一个安全的静态链接。
公开访问效果:
- 直播流地址:
https://your-domain.com/gh-live - 静态图地址:
https://your-domain.com/gh-shot
🔒 安全设置(Nginx)
修改 Nginx 配置,达到隐藏 Token 的目的!
访问地址:
- 高清直播:
https://服务端域名/gh-live - 高清截图:
https://服务端域名/gh-shot
Nginx 配置代码:
Nginx
server {
# 1. 端口监听 (保持原样)
listen 80;
listen [::]:80;
listen 443 ssl;
listen [::]:443 ssl;
listen 443 quic;
listen [::]:443 quic;
server_name 服务端域名;
# 2. SSL 证书 (保持原样)
ssl_certificate /etc/nginx/certs/服务端域名_cert.pem;
ssl_certificate_key /etc/nginx/certs/服务端域名_key.pem;
# 3. HTTP 强制跳转 HTTPS
if ($scheme = http) {
return 301 https://$host$request_uri;
}
# =========================================================
# [新增] 安全直播路由 (用于 HTML / 实时监控)
# 访问地址: https://服务端域名/gh-live
# =========================================================
location = /gh-live {
# 【核心配置】写死参数:URL 和 Token
set $args "url=https://监控网站域名&token=mytoken";
# 转发到后端 /live 接口
proxy_pass http://服务端ip:3000/live;
# 直播流专用配置 (必须关闭缓冲和缓存)
proxy_set_header Host $host;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_buffering off;
proxy_cache off;
chunked_transfer_encoding on;
# 保持 HTTP/3 支持
add_header Alt-Svc 'h3=":443"; ma=86400';
}
# =========================================================
# [新增] 安全静态截图路由 (用于 GitHub README)
# 访问地址: https://服务端域名/gh-shot
# =========================================================
location = /gh-shot {
# 【核心配置】写死参数:URL 和 Token (指定 720P 分辨率)
set $args "url=https://监控网站域名&token=mytoken&width=1280&height=720";
# 转发到后端 /screenshot 接口
proxy_pass http://服务端ip:3000/screenshot;
proxy_set_header Host $host;
proxy_http_version 1.1;
add_header Alt-Svc 'h3=":443"; ma=86400';
}
# =========================================================
# [原有] 通用根路径 (需要手动带参数)
# =========================================================
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_pass http://服务端ip:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
add_header Alt-Svc 'h3=":443"; ma=86400';
}
# =========================================================
# [原有] 静态资源缓存
# =========================================================
location ~* \.(js|css|png|jpg|jpeg|gif|ico|bmp|swf|eot|svg|ttf|woff|woff2|webp)$ {
proxy_pass http://服务端ip:3000;
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_http_version 1.1;
proxy_cache my_proxy_cache;
proxy_set_header Accept-Encoding "";
aio threads;
# add_header Cache-Control $add_cache_control;
add_header Alt-Svc 'h3=":443"; ma=86400';
log_not_found off;
access_log off;
}
client_max_body_size 1000m;
}