我这台小服务器部署的东西越来越多,就显得之前用的签到助手占用大了,于是用 ai 搓了一个简单的签到助手。
一个基于 Python 标准库 HTTP 服务实现的百度贴吧自动签到网站。项目支持多用户注册登录、添加百度账号 BDUSS、同步关注贴吧、确认签到贴吧、手动签到、服务器定时自动签到,以及管理员后台管理。
当前版本:v1.0.1
首页

管理员后台

用户中心

用户注册、登录、退出
用户修改登录密码
第一个注册用户自动成为管理员
添加百度账号备注和 BDUSS
自动同步该百度账号关注的贴吧
用户确认需要签到的贴吧后才会执行签到
手动触发单个百度账号签到
删除已添加的百度账号
查看账号状态、同步时间、签到时间和签到记录
后台调度器每 300 秒检查一次
每天 06:00 到 23:59 之间自动执行
每个百度账号每天只会自动处理一次
已成功签到或已因风控暂停的账号当天不会重复签到
单个贴吧之间按环境变量设置随机延迟
不同账号之间额外随机间隔 3 到 8 秒
管理员可进入 /admin 后台,查看和管理:
今日签到任务统计
今日成功、失败、暂停数量
当前程序版本号
所有用户列表
所有百度账号列表
审计日志
封禁 / 恢复普通用户
删除普通用户
修改普通用户密码
暂停 / 恢复百度账号
不保存百度账号明文密码
只使用用户自行填写的 BDUSS
BDUSS 使用 AES-GCM 加密保存
登录密码使用 PBKDF2-HMAC-SHA256 加盐哈希保存
Session 使用随机 token,有效期 14 天
管理员不能封禁或删除当前登录的管理员自己
遇到验证码、风控或异常登录时,不绕过验证,只暂停账号等待用户处理
Python 3
SQLite
requests
cryptography
Tailwind CSS CDN
Iconify CDN
项目没有使用 Flask、Django 等 Web 框架,HTTP 服务由 Python 标准库 http.server 提供。
安装依赖:
python3 -m pip install -r requirements.txt启动服务:
python3 app.py默认访问地址:
http://127.0.0.1:8000可通过环境变量调整运行配置:
示例:
HOST=0.0.0.0 PORT=8000 APP_SECRET='change-me' SIGN_DELAY_MIN=0.2 SIGN_DELAY_MAX=0.8 python3 app.py生产环境必须固定设置 APP_SECRET。如果未设置,程序会自动生成 .app_secret 文件作为本地密钥。
程序运行目录下会产生:
tieba.db
tieba.db-shm
tieba.db-wal
.app_secret说明:
tieba.db:SQLite 主数据库
tieba.db-shm / tieba.db-wal:SQLite WAL 模式文件
.app_secret:未设置 APP_SECRET 时自动生成的本地加密密钥
注意:
不要公开这些文件
不要提交到公开仓库
备份数据库时应同时备份密钥
如果丢失 APP_SECRET 或 .app_secret,已保存的 BDUSS 将无法解密
启动网站
注册第一个用户,第一个用户会自动成为管理员
登录后进入控制台
添加百度账号备注和 BDUSS
系统自动同步关注贴吧
在贴吧确认页面勾选需要签到的贴吧
返回控制台后可手动签到
后续系统会在每日自动签到时间段内定时签到
BDUSS 是百度登录 Cookie 中的一项。需要用户自行从浏览器 Cookie 中获取并填写。
请注意:
BDUSS 等同于登录凭据,应妥善保管
不要把 BDUSS 发给不可信的人
如果担心泄露,可在百度账号中退出登录或修改密码使其失效
推荐使用 1Panel 的「容器编排」功能,通过 Docker Compose 部署。这样可以固定 Python 运行环境,并把数据库持久化到服务器目录中。
建议在服务器创建项目目录:
mkdir -p /opt/tieba-sign/data
cd /opt/tieba-sign最终目录建议如下:
/opt/tieba-sign
├── app.py
├── requirements.txt
├── Dockerfile
├── docker-compose.yml
├── .env
└── data/
├── tieba.db
└── .app_secret说明:
app.py:主程序
requirements.txt:Python 依赖
Dockerfile:镜像构建文件
docker-compose.yml:容器编排文件
.env:生产环境变量
data/:数据库和密钥持久化目录
将本项目中的以下文件上传到服务器:
/opt/tieba-sign/app.py
/opt/tieba-sign/requirements.txt如果服务器还没有 Dockerfile 和 docker-compose.yml,需要继续创建下面两个文件。
在 /opt/tieba-sign/Dockerfile 写入:
FROM python:3.12-slim
WORKDIR /app
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
COPY requirements.txt /app/requirements.txt
RUN pip install --no-cache-dir -r /app/requirements.txt
COPY app.py /app/app.py
EXPOSE 8000
CMD ["python", "app.py"]注意这里使用了:
COPY app.py /app/app.py这表示 app.py 会在构建镜像时复制进容器。以后更新 app.py 后,必须重新构建镜像,不能只重启容器。
在 /opt/tieba-sign/docker-compose.yml 写入:
services:
tieba-sign:
build: .
container_name: tieba-sign
restart: unless-stopped
env_file:
- .env
ports:
- "127.0.0.1:8000:8000"
volumes:
- ./data/tieba.db:/app/tieba.db
- ./data/.app_secret:/app/.app_secret
environment:
- TZ=Asia/Shanghai端口说明:
127.0.0.1:8000:8000表示容器的 8000 端口只绑定到服务器本机,不直接暴露到公网。公网访问建议交给 1Panel 网站反向代理。
在 /opt/tieba-sign/.env 写入:
HOST=0.0.0.0
PORT=8000
APP_SECRET=请替换为一段足够长的随机密钥
SIGN_DELAY_MIN=0.2
SIGN_DELAY_MAX=0.8
TZ=Asia/Shanghai生成随机密钥可以执行:
openssl rand -hex 32然后把输出内容填到 APP_SECRET= 后面。
重要说明:
APP_SECRET 必须固定
APP_SECRET 用于加密数据库中的 BDUSS
如果后续更换 APP_SECRET,旧数据库里的 BDUSS 将无法解密
.env 不要公开,不要提交到公开仓库
在 /opt/tieba-sign 下执行:
touch data/tieba.db
touch data/.app_secret如果你已经有旧数据库,需要把旧文件放到:
/opt/tieba-sign/data/tieba.db如果旧环境没有设置 APP_SECRET,而是使用自动生成的 .app_secret,也要一起迁移:
/opt/tieba-sign/data/.app_secret在 1Panel 后台操作:
打开「容器」
进入「编排」
点击「创建编排」或「新建编排」
选择或填写 /opt/tieba-sign/docker-compose.yml
启动编排
等待镜像构建完成
确认容器 tieba-sign 状态为运行中
启动成功后,容器日志中应能看到类似:
Tieba sign-in web is running: http://0.0.0.0:8000因为容器端口只绑定到服务器本机,所以需要通过 1Panel 网站反向代理访问。
在 1Panel 后台:
打开「网站」
创建网站
类型选择「反向代理」
填写你的域名
代理地址填写:
http://127.0.0.1:8000保存配置
按需申请并开启 HTTPS 证书
最终访问地址类似:
https://你的域名部署完成后:
打开网站域名
点击注册
注册第一个用户
第一个注册用户会自动成为管理员
登录后进入控制台
管理员可通过顶部导航进入「管理员后台」
管理员后台会显示当前运行版本号,例如:
当前版本:v1.0.1这个版本号可用于确认服务器是否已经运行最新脚本。
由于 Dockerfile 使用 COPY app.py /app/app.py,更新代码后必须重新构建镜像。
推荐更新流程:
备份数据库和密钥
替换服务器上的 /opt/tieba-sign/app.py
重新构建编排 / 镜像
重启容器
登录管理员后台确认版本号是否更新
命令方式:
cd /opt/tieba-sign
docker compose down
docker compose build --no-cache
docker compose up -d如果在 1Panel 中操作,需要选择「重新构建」「重建镜像」「重新构建编排」等操作,而不是只点「重启」。
只重启容器通常不会生效,因为容器仍然会使用旧镜像里的旧 app.py。
如果你不确定服务器是否已经使用新脚本,可以进入容器检查:
docker exec -it tieba-sign sh进入容器后查看 /app/app.py:
python - <<'PY'
from pathlib import Path
print(Path('/app/app.py').read_text()[:1000])
PY如果容器里的 /app/app.py 不是新内容,说明镜像没有重新构建成功。
检查容器是否运行:
docker ps检查容器日志:
docker logs tieba-sign确认 1Panel 反向代理地址是:
http://127.0.0.1:8000通常原因是只重启了容器,没有重新构建镜像。
解决:
cd /opt/tieba-sign
docker compose down
docker compose build --no-cache
docker compose up -d然后登录管理员后台查看版本号。
检查数据库是否正确挂载:
volumes:
- ./data/tieba.db:/app/tieba.db如果没有挂载,数据可能保存在容器内部,容器重建后会丢失。
通常是密钥变了。
需要确认以下文件或变量和旧环境一致:
APP_SECRET
.app_secret如果旧环境使用 .app_secret,迁移数据库时必须一起迁移 .app_secret。
检查:
服务器时间和时区是否正确
.env 中是否设置 TZ=Asia/Shanghai
当前时间是否在 06:00 到 23:59 之间
账号状态是否为 active
贴吧是否已经确认
当天是否已经成功或暂停过
容器日志是否有异常
如果服务器本机 8000 已被占用,可以修改 docker-compose.yml:
ports:
- "127.0.0.1:18000:8000"然后 1Panel 反向代理地址也改成:
http://127.0.0.1:18000建议定期备份:
tieba.db
.app_secret
.env如果使用 1Panel 部署,推荐备份:
/opt/tieba-sign/data/tieba.db
/opt/tieba-sign/data/.app_secret
/opt/tieba-sign/.env恢复时必须保证数据库和密钥匹配,否则数据库中的 BDUSS 无法解密。
本项目只做自动化签到,不提供也不会尝试:
百度账号密码登录
验证码识别
风控绕过
异常登录处理
批量撞库或账号测试
当百度返回验证码、风控、账号异常或 BDUSS 失效时,系统会暂停相关账号,需要用户自行处理后再恢复。