一个完全复刻 GitHub Actions 体验的私有化定时任务平台。 专为解决公共 CI/CD 服务 IP 被封锁、签到脚本无法运行而生。
GitHub Actions 是一个基于 Docker 部署的轻量级任务调度系统。它允许你在自己的服务器上运行 Python 脚本,完美解决了使用 GitHub Actions 等公共服务进行网站签到、爬虫任务时面临的 IP 封锁 问题。
不仅如此,GitHub Actions 还引入了 “随机延时” 机制,模拟真人操作时间,极大地提高了账号的安全性。
requirements.txt,系统会自动创建虚拟环境 (venv) 并安装依赖。os.environ 直接调用,保护你的 Cookie 和 Token。推荐使用 Docker Compose 进行一键部署,支持 x86_64 和 arm64 架构。
如果您还没有安装 Docker,请先安装:
curl -fsSL https://get.docker.com | bash
在服务器上创建一个目录(例如 github-actions),并创建 docker-compose.yml 文件:
version: '3.8'
services:
github-actions:
image: yesyunxin/github-actions:latest
container_name: github-actions
restart: unless-stopped
ports:
- "8080:8000" # 外部访问端口:容器内部端口
volumes:
- ./data:/app/data # 数据库持久化
- ./scripts:/app/scripts # 脚本文件持久化
environment:
- TZ=Asia/Shanghai
# 自定义管理员密码 (建议修改)
- ADMIN_USER=admin
- ADMIN_PASSWORD=admin
# JWT 加密密钥 (生产环境请务必修改为长随机字符串)
- JWT_SECRET=change_this_to_a_secure_random_string
在包含 docker-compose.yml 的目录下执行:
docker-compose up -d
http://你的服务器IP:8080adminadmin (或你在 yaml 中设置的密码)点击右上角 “新建任务”。
requests 或 selenium,请在右侧标签页填写,每行一个。在左侧菜单点击 “Secrets 管理” 添加变量,例如 JD_COOKIE。
在 Python 脚本中这样使用:
import os
cookie = os.environ.get("JD_COOKIE")
print(f"当前 Cookie: {cookie}")
提示: 系统默认内置了
GITHUB_ACTIONS=true变量,方便直接迁移 GitHub 的脚本。如果出错:删除脚本Python 代码 中的
if os.getenv('GITHUB_ACTIONS'):
GitHub Actions 完美支持 Selenium。在脚本中使用时,必须添加以下 Docker 兼容参数:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
def run_browser():
chrome_options = Options()
# --- Docker 环境必须添加以下参数 ---
chrome_options.add_argument('--headless') # 无头模式
chrome_options.add_argument('--no-sandbox') # 禁用沙盒
chrome_options.add_argument('--disable-dev-shm-usage') # 解决内存崩溃问题
chrome_options.add_argument('--disable-gpu')
# ------------------------------------
driver = webdriver.Chrome(options=chrome_options)
driver.get("https://www.google.com")
print(driver.title)
driver.quit()
if __name__ == "__main__":
run_browser()
点击任务卡片上的 “日志” 按钮,侧边栏会弹出执行详情。
如果你想自己修改源码并构建。
GitHubActions/
├── backend/ # FastAPI 后端
│ ├── app/
│ │ ├── main.py # 核心逻辑 (API, 调度, 数据库, 日志)
│ │ └── ...
│ └── requirements.txt
├── frontend/ # Vue3 前端
│ ├── src/
│ │ ├── views/ # 页面 (Dashboard, Secrets)
│ │ └── components/ # 组件 (Editor)
│ └── ...
├── Dockerfile # 多阶段构建文件
└── docker-compose.yml
后端:
cd backend
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
前端:
cd frontend
npm install
npm run dev
# 访问 http://localhost:5173 (需配置 vite.config.js 代理到后端)
Q: 为什么 Selenium 报错 Chrome instance exited?
A: 这是因为 Docker 共享内存不足。请务必在 Python 脚本的 Chrome Options 中添加 --disable-dev-shm-usage 参数。详情请参考上文“Selenium 脚本示例”。
Q: 依赖安装太慢怎么办? A: 系统默认已配置使用 阿里云 PyPI 镜像源 加速依赖安装,通常速度很快。
Q: 如何迁移数据?
A: 所有数据存储在映射的 ./data/github-actions.db (SQLite) 文件中。备份或迁移该文件即可。
在 GitHub Actions 中,有时即便不加某些参数也能跑,但在 Docker 容器内,必须加上以下参数,否则 Chrome 进程会崩溃:
在你的脚本 setup_driver 部分,确保有这三行:
def setup_driver(self):
chrome_options = Options()
# =========== Docker 环境必须添加的参数 (开始) ===========
# 1. 解决内存不足导致 Chrome 崩溃的关键参数
chrome_options.add_argument('--disable-dev-shm-usage')
# 2. Docker 中以 Root 运行必须禁用沙盒
chrome_options.add_argument('--no-sandbox')
# 3. 无头模式 (因为 Docker 没有显示器)
chrome_options.add_argument('--headless')
# 4. 禁用 GPU (Docker 通常没有 GPU)
chrome_options.add_argument('--disable-gpu')
# =========== Docker 环境必须添加的参数 (结束) ===========
# 其他常规配置
chrome_options.add_argument('--window-size=1920,1080')
chrome_options.add_argument('--disable-blink-features=AutomationControlled')
# 初始化驱动
self.driver = webdriver.Chrome(options=chrome_options)
本项目采用 MIT License 开源。欢迎 Star 和 Fork!
Content type
Image
Digest
sha256:095c306d9…
Size
958.2 MB
Last updated
6 months ago
docker pull yesyunxin/github-actions