PixLive 是一个自部署图片直播推流平台,包含服务端、Web 用户后台、Android/iOS 原生应用框架和一键部署脚本。
- 服务端:Node.js 22 + Express + TypeScript。
- Web 后台:Vite + React + TypeScript,UI 风格参考 Forwardx 的清爽后台布局。
- 移动端:Flutter,一套代码支持 Android/iOS,并通过 platform channel 预留原生能力。
- 存储:本地存储已可用,WebDAV 和主流 OSS/COS/OBS/Kodo/S3/MinIO 已预留驱动接口。
- 部署:支持 Docker、本地 systemd、一键安装、升级、卸载。
- CI:GitHub Actions 构建服务端、Docker、APK 和 iOS IPA。
- 相机有线闪传:OTG 数据线连接相机和手机,实时传图。
- 相机无线 FTP 闪传:手机端作为 FTP 接收端或连接相机 FTP,实时传图。
- 手机本地上传:从手机相册批量上传。
- 读卡器上传:读取外接读卡器文件并批量上传。
- 电脑上传:通过 Web 工作台上传。
pnpm install
pnpm devWeb 开发服务器:
pnpm dev:web构建:
pnpm build
pnpm start默认后台账号来自 .env.example:
- 用户名:
admin - 密码:
PixLive@123456
下面的命令会从 https://github.com/poouo/PixLive.git 拉取完整脚本并执行。默认安装目录是 /opt/pixlive,默认端口是 3002。
本地 systemd 部署:
curl -fsSL https://raw.githubusercontent.com/poouo/PixLive/main/scripts/pixlive.sh -o pixlive.sh
sudo bash pixlive.sh installDocker 部署:
curl -fsSL https://raw.githubusercontent.com/poouo/PixLive/main/scripts/pixlive.sh -o pixlive.sh
sudo bash pixlive.sh docker升级当前部署:
curl -fsSL https://raw.githubusercontent.com/poouo/PixLive/main/scripts/pixlive.sh -o pixlive.sh
sudo bash pixlive.sh upgrade卸载服务端:
curl -fsSL https://raw.githubusercontent.com/poouo/PixLive/main/scripts/pixlive.sh -o pixlive.sh
sudo bash pixlive.sh uninstall非交互卸载并删除源码和数据:
curl -fsSL https://raw.githubusercontent.com/poouo/PixLive/main/scripts/pixlive.sh -o pixlive.sh
sudo PIXLIVE_UNINSTALL_CONFIRM=yes bash pixlive.sh uninstall保留数据卸载:
curl -fsSL https://raw.githubusercontent.com/poouo/PixLive/main/scripts/pixlive.sh -o pixlive.sh
sudo PIXLIVE_UNINSTALL_KEEP_DATA=1 bash pixlive.sh uninstall可配置环境变量:
PIXLIVE_REPO_URL=https://github.com/poouo/PixLive.git
PIXLIVE_BRANCH=main
PIXLIVE_APP_DIR=/opt/pixlive
PORT=3002也可以直接使用仓库内脚本:
bash scripts/install.sh
bash scripts/install-docker.sh
bash scripts/upgrade.sh
bash scripts/uninstall.shAndroid App 会在启动后检查 GitHub 最新 Release:
https://api.github.com/repos/poouo/PixLive/releases/latest
如果发现高于当前 mobile/pubspec.yaml 中 version 的版本,并且 Release assets 中有 .apk 文件,App 会弹窗提示用户更新。用户点击“立即更新”后,App 会从 GitHub 下载 APK,并打开 Android 系统安装界面。
要实现覆盖安装,Android APK 必须满足:
- 固定包名:
com.poouo.pixlive。 - 每次发布都使用同一套 release keystore 签名。
versionCode必须递增。
GitHub Actions 支持通过 Secrets 注入同一套签名证书:
PIXLIVE_ANDROID_KEYSTORE_BASE64:release keystore 的 base64 内容。PIXLIVE_ANDROID_KEYSTORE_PASSWORDPIXLIVE_ANDROID_KEY_ALIASPIXLIVE_ANDROID_KEY_PASSWORD
如果没有配置这些 Secrets,构建出的 APK 可能无法覆盖安装已安装版本,Android 会要求卸载旧包后再安装。
发布 Android 新版本时,建议使用 tag:
git tag v0.0.2
git push origin v0.0.2GitHub Actions 的 Mobile workflow 会在 tag 推送时构建 APK,并把 APK 附加到 GitHub Release。第一版版本号为合法 SemVer 0.0.1,后续 Release tag 建议形如 v0.0.2,这样 App 和后台都能正确比较版本。后台和 Android 端检测到更高版本都会提示更新;项目版本号只在明确发布新版本时调整。
Android 原生工程由 Flutter 生成后,需要应用更新补丁:
cd mobile
flutter create --platforms=android .
node scripts/patch_android_update.mjs
flutter pub get
flutter build apk --releasepatch_android_update.mjs 会自动补充:
REQUEST_INSTALL_PACKAGES权限。OtaUpdateFileProvider。InstallResultReceiver。res/xml/filepaths.xml。- Android desugaring 配置。
本地有 Flutter 环境时:
cd mobile
flutter create --platforms=android,ios .
node scripts/patch_android_update.mjs
flutter pub get
flutter run本地没有 Android/iOS 环境时,推送到 GitHub 后可在 Actions 里运行 Mobile workflow 构建 APK 和 iOS IPA。
GET /api/healthGET /api/config/publicGET /api/albumsGET /api/albums/:albumId/mediaPOST /api/albums:新增图片直播,需要提交标题、直播地点、开始/结束时间,可选备注和定位坐标。POST /api/mobile/registerPOST /api/albums/:albumId/uploadPOST /api/upgrade/checkGET /api/upgrade/checkPOST /api/upgrade/startGET /api/upgrade/status
移动端上传需要先注册设备,拿到 deviceToken 后使用 Authorization: Bearer <token>。
系统设置页会调用 GitHub latest Release 检测更新;发现更高版本后可以点击“在线升级”。服务端会执行 PIXLIVE_UPGRADE_COMMAND 指定的命令,如果没有配置,则默认执行仓库内 scripts/upgrade.sh。
本地部署推荐使用默认命令;Docker 部署如果需要在容器内触发宿主机升级,可以将 PIXLIVE_UPGRADE_COMMAND 配置为你自己的安全升级脚本。