优先处理
- 数据库、worker、存储或备份异常
- 失败任务与重复失败提醒
- 举报、异常登录和高风险修改
- 报名审批、取消申请和临近活动
- 俱乐部审批与过期群二维码
PLATFORM OPERATOR MANUAL
覆盖平台运营、用户与活动治理、俱乐部、发现内容、媒体、安全、完整备份、恢复计划、1Panel 部署与应急处理。
生产环境通常为 https://app.81on.com/admin。管理员邮箱和初始密码来自服务器 .env 的 ADMIN_EMAIL 与 ADMIN_PASSWORD。真实密码不得写入项目、文档或压缩包。
生产服务器不要执行 docker compose down -v,不要删除 PostgreSQL、普通媒体、活动相册或系统备份 volume。
| 角色 | 主要职责 | 权限边界 |
|---|---|---|
| 平台总管理员 | 系统、数据、安全与岗位治理 | 备份恢复、权限、系统配置和高风险处置 |
| 平台运营 | 用户、活动、俱乐部与内容运营 | 只使用被授予的后台模块,不能恢复数据库或管理超级管理员 |
| 活动组织者 | 自己相关的活动 | 发布、名单、分组、签到、通知、相册和复盘 |
| 俱乐部管理员 | 本俱乐部成员与活动 | 审批、标签、公告、邀请、模板、固定计划和本俱乐部数据 |
| 参与者 | 报名与参加 | 查看名单和已发布分组;不能管理他人报名 |
采用最小权限。权限、封禁、删除、备份恢复和批量修改必须填写原因并进入审计。
总览的目标是回答“今天先做什么”,不是只展示累计数字。
非零数值应进入对应用户、活动、俱乐部、任务或媒体列表。运营判断至少结合 7 天和 30 天趋势。
按昵称、邮箱、微信关联、角色、状态、城市、最后登录、资料完整度和 IP 查找;支持登录时间、位置、角色排序及分页。
头像、昵称、性别、年龄段、城市、坐标、运动偏好和水平。
发布、报名、到场、关注、粉丝、俱乐部、点评、收藏和媒体。
真实 IP、最后登录位置、会话、登录事件、设备线索与审计。
172.x Docker 地址时检查可信代理链和请求头。关键词、运动、活动类型、地区、场地、日期、报名状态、活动状态、可见范围、俱乐部、推荐状态和容量。排序支持活动时间、发布时间、报名进度、访问、收藏和分享转化。
可纠正日期、场地、坐标、分类、图片、报名规则与可见范围。保存必须记录原因,并在重要修改时通知组织者。
活动管理员只能管理自己有关的活动;平台运营的辅助修改来自后台岗位授权,并必须审计。
俱乐部 360° 包含品牌、所有者、管理员、会员状态、邀请、公告、活动、模板、固定计划、相册、复盘、发现曝光与入会转化。
违规时优先暂停招募、隐藏发现曝光、冻结二维码或停用俱乐部,同时保留证据、原因和申诉空间,不直接删除历史。
统一管理活动、俱乐部、场馆和本地生活内容。栏目、文案、地图图层和优先显示方式都可后台配置。
首页 Logo、Hero、标题、按钮、空状态、俱乐部说明和隐私提示均可后台维护。发布前同时预览 H5 和小程序。
包括 H5 微信登录、Google 登录、发现栏目、地图图层、签到、活动相册、俱乐部装修、公告日历和赞助内容。关闭功能时 API 也必须拒绝操作,不能只隐藏按钮。
节假日可批量录入名称、日期和详情;没有节假日时可投放符合日期、地区、运动和页面位置的赞助内容。广告必须有标识、起止时间和曝光点击统计。
站内消息按活动、报名、组织者、俱乐部和平台分类,支持分页、回复、清空与撤销。操作反馈应使用服务器最终状态,避免超时后显示失败但实际已完成。
worker 负责活动提醒、邮件、微信订阅、媒体处理和备份校验。后台显示等待、执行、成功、失败、重试次数和错误摘要。
后台分为普通媒体、活动相册、备份恢复三个区域。普通媒体按用途、上传者、时间、大小、引用数和状态筛选;活动相册查看上传者、处理、授权、精选、收藏、举报和删除申请。
后台维护版本、摘要、正文、启用和生效时间。内容说明头像、昵称、邮箱、位置、备注、相册与日志用途。版本变化时可要求重新确认。
1Panel/OpenResty → Caddy → API 必须传递 X-Real-IP、X-Forwarded-For 和 X-Forwarded-Proto。API 只信任可信代理。
用自然语言展示谁、何时、从何 IP、对哪个对象、做了什么、修改前后和原因。备份恢复、权限、封禁、删除、批量修改和密钥迁移必须记录。
CONTACT_ENCRYPTION_KEY 至少 32 位并长期保存。升级沿用;轮换时配置旧密钥,完成迁移验证后再清空。
./scripts/backup-db.sh RESTORE_CONFIRM=AITEONE_RESTORE ./scripts/restore-backup.sh backups/备份目录 ./scripts/smoke-test.sh http://127.0.0.1:8100
跨版本恢复必须使用项目脚本。直接对已有新版表执行 pg_restore --clean,可能被外键依赖阻断并留下半恢复状态。
建议保留 7 份每日、4 份每周、6 份每月备份;升级、批量导入和媒体清理前额外长期保留。
WECHAT_MINI_APP_ID=你的AppID WECHAT_MINI_APP_SECRET=你的Secret WECHAT_REMINDER_ACTIVITY_KEY=thing1 WECHAT_REMINDER_TIME_KEY=time2 WECHAT_REMINDER_VENUE_KEY=thing3 WECHAT_REMINDER_NOTE_KEY=thing4
AppID 与开发者工具工程一致,Secret 只在服务器保存。订阅模板在微信公众平台“小程序 → 功能 → 订阅消息”选择,字段与 worker 配置一致。
使用微信当前开放的头像选择与昵称输入组件,不能静默读取。首次主动提示,报名时强制完善。位置由用户主动选择,失败时默认东京;签到仅在点击后定位。
Google 回调登记为 https://app.81on.com/api/v1/auth/oauth/google/callback。H5 微信 AppID/Secret 未取得时在后台关闭入口,API 同时阻止发起流程。
mkdir -p /opt/aiteone cd /opt/aiteone unzip Aiteone-3.11.1-build-20260906.312-1Panel.zip cd Aiteone cp .env.1panel.example .env nano .env chmod +x scripts/*.sh ./scripts/preflight.sh docker compose up -d --build --wait ./scripts/smoke-test.sh http://127.0.0.1:8100
在 1Panel 创建 HTTPS 网站,反向代理到 http://127.0.0.1:8100。需要传递 Host、真实 IP、Forwarded-For 和协议。
client_max_body_size 1100m; proxy_request_buffering off; proxy_connect_timeout 60s; proxy_send_timeout 3600s; proxy_read_timeout 3600s;
备份导入的 1100MB 限制要同时配置 Aiteone 网关和 1Panel 外层代理。/uploads/ 使用 add_header Cross-Origin-Resource-Policy "cross-origin" always;。
.env。APP_VERSION=3.11.1 与 BUILD_ID=20260906.312。| 项目 | 生产 | 测试示例 |
|---|---|---|
| 目录 | /opt/aiteone/Aiteone | /opt/aiteone311-test/Aiteone |
| 项目名 | aiteone | aiteone311test |
| 端口 | 8100 | 8300 |
| 域名 | app.81on.com | test-app.81on.com |
项目名决定容器、网络和 volume 前缀。两套系统的项目名、端口、数据库、媒体、域名和密钥全部隔离。
docker compose ps docker compose logs --tail=200 postgres docker compose logs --tail=200 api docker compose exec -T postgres sh -c 'psql -U "$POSTGRES_USER" -d "$POSTGRES_DB" -Atc "SELECT COALESCE(MAX(version),0) FROM schema_migrations;"'
3.11.1 正常 schema 为 48。不能手工修改迁移版本号掩盖失败。
同时检查 Caddy、1Panel OpenResty/Nginx 与 MAX_BACKUP_UPLOAD_BYTES。
核对 volume、/uploads/* 路由、HTTPS、响应状态和 CORP 头。Docker volume 内部路径不是外网 URL。
核对工程 AppID 与服务器 AppID/Secret,清除开发者工具缓存。公共首页应降级打开,不因静默登录失败阻断。