6 Commits

Author SHA1 Message Date
OpenClaw Agent
c34d7f43fc 归档 2026-03-23 03:51:10 +08:00
OpenClaw Agent
b973bdaf47 refactor: 目录结构重构和清理 (v2.0.2)
新增目录:
- docs/legacy/ - 废弃文档归档
- scripts/ - 管理脚本和测试脚本
- build/ - 构建输出目录

文件移动:
- GO_REFACTOR_PROGRESS.md -> docs/legacy/
- OPTIMIZATION_REPORT.md -> docs/legacy/
- sms-receiver-go-ctl.sh -> scripts/
- test_api.sh -> scripts/

改进:
- 更新 .gitignore 忽略运行时文件
- 新增 CHANGELOG.md 独立变更日志
- 更新 README.md 目录结构说明
- 更新 Makefile 版本号到 v2.0.2
- 更新管理脚本路径引用

清理:
- 从仓库中移除二进制文件
- 从仓库中移除数据库文件
- 从仓库中移除日志文件
- 从仓库中移除配置文件
2026-02-12 12:19:05 +08:00
OpenClaw Agent
b29a7bbc63 docs(readme): 更新 v2.0.2 版本信息和更新日志
- 更新版本标签从 v2.0.0 到 v2.0.2
- 添加生产环境 Docker Compose 部署说明
- 新增 v2.0.2 详细更新日志
- 添加 Docker Hub 镜像标签说明
2026-02-12 11:47:27 +08:00
OpenClaw Agent
05a39bd495 feat(docker): 添加生产环境 Docker Compose 配置
- 使用预编译镜像 ouaone/sms-receiver-go:latest
- 自动数据卷挂载(data/ 和 logs/)
- 只读配置文件挂载
- 健康检查和资源限制配置
- 完整的使用说明文档
2026-02-12 11:13:39 +08:00
OpenClaw Agent
ebe9d61665 fix(docker): 复制 templates 和 static 目录到运行时镜像
- 修复容器启动时找不到模板文件导致崩溃的问题
- 添加 COPY 指令复制 templates/ 和 static/ 目录
- 验证容器可正常启动并通过健康检查
2026-02-12 00:59:46 +08:00
OpenClaw Agent
69814a3822 docs: 更新 README.md 添加 v2.0.1 变更日志 2026-02-08 23:15:44 +08:00
20 changed files with 314 additions and 103 deletions

27
.gitignore vendored
View File

@@ -7,9 +7,21 @@
*.log *.log
nohup.out nohup.out
# 二进制文件和备份(根目录)
sms-receiver
sms-receiver-new
sms-receiver-new.backup
sms-receiver-new.v2.0.0
sms-receiver-v2
# 配置文件(根目录)
config.yaml
# 临时文件 # 临时文件
tmp/ tmp/
*.tmp *.tmp
*.bak
*.backup
# Go 相关 # Go 相关
go.sum go.sum
@@ -21,6 +33,15 @@ go.sum
*.swo *.swo
*~ *~
# 备份文件 # 运行时目录
*.bak data/
*.backup logs/
build/
# 二进制目录(如果是旧的)
sms-receiver-go/
# Python 版本(不应该在 Go 项目中)
sms-receiver/
__pycache__/
*.pyc

103
CHANGELOG.md Normal file
View File

@@ -0,0 +1,103 @@
# CHANGELOG.md
所有重要的变更都会记录在此文件中。
## [v2.0.2] - 2026-02-12
### 🐛 Bug 修复
- ✅ 修复容器启动时找不到模板文件导致崩溃的问题
- ✅ 修复 Dockerfile 缺少 `templates/``static/` 目录复制
### 📦 Docker 改进
- ✅ 完善多阶段构建,正确复制运行时所需文件
- ✅ 新增 `docker-compose.production.yml` 生产环境配置
- ✅ 预编译镜像推送到 Docker Hub (ouaone/sms-receiver-go:v2.0.2)
- ✅ 验证容器可正常启动并通过健康检查
### 📂 目录结构重构
- ✅ 新增 `docs/legacy/` 目录,归档废弃文档
- ✅ 新增 `scripts/` 目录,存放管理脚本和测试脚本
- ✅ 新增 `build/` 目录,用于构建输出
- ✅ 移动 `sms-receiver-go-ctl.sh``scripts/`
- ✅ 移动 `test_api.sh``scripts/`
- ✅ 移动 `GO_REFACTOR_PROGRESS.md``docs/legacy/`
- ✅ 移动 `OPTIMIZATION_REPORT.md``docs/legacy/`
### 🔧 Git 仓库清理
- ✅ 从仓库中移除二进制文件sms-receiver*, sms_*.db, *.log
- ✅ 从仓库中移除配置文件 `config.yaml`
- ✅ 更新 `.gitignore` 忽略运行时生成文件
- ✅ 从仓库中移除 Python 版本目录 `sms-receiver/`
### 📚 文档
- ✅ 更新 `README.md` 版本标签从 v2.0.0 到 v2.0.2
- ✅ 更新 `README.md` 镜像拉取说明
- ✅ 新增 `CHANGELOG.md` 独立变更日志文件
- ✅ 添加 Docker Hub 镜像标签说明
### 🔧 兼容性
- ✅ 与 v2.0.1 功能完全兼容
- ✅ 数据库无需迁移
- ✅ 配置文件格式无变更
- ✅ 更新管理脚本路径(`scripts/sms-receiver-go-ctl.sh`
---
## [v2.0.1] - 2026-02-08
### 🐛 Bug 修复
- ✅ 修复登录会话创建失败问题(`securecookie: the value is not valid`
- ✅ 回退密钥处理逻辑确保向后兼容性
- ✅ 改进会话初始化错误处理
### 🔧 兼容性
- ✅ 与 v2.0.0 Cookie 完全兼容,无需清除
- ✅ 支持 `/api/v1/*``/api/*` 路由
- ✅ 密钥长度不足时仅记录警告
---
## [v2.0.0] - 2026-02-08
### 🔴 高优先级 (6项)
- ✅ 数据库事务支持 (确保消息和日志一致性)
- ✅ SQL 注入修复 (参数化查询)
- ✅ 配置验证启动时自动检查
- ✅ 会话密钥强化 (长度验证)
- ✅ 签名验证增强 (详细记录验证过程)
- ✅ 密码哈希支持 (bcrypt)
### 🟡 中优先级 (15项)
- ✅ 连接池配置 (MaxOpenConns, MaxIdleConns)
- ✅ 查询优化 (范围查询, 索引)
- ✅ 健康检查增强 (/health 端点)
- ✅ API 版本控制 (/api/v1/*)
- ✅ 认证中间件 (RequireAuth, RequireAPIAuth)
- ✅ 定时任务优化 (robfig/cron)
- ✅ 配置文件示例 (config.example.yaml)
- ✅ 常量定义 (config/constants.go)
- ✅ 开发文档 (DEVELOPMENT.md)
### 🟢 低优先级 (9项)
- ✅ Docker 支持 (Dockerfile, docker-compose.yml)
- ✅ Makefile 构建脚本
- ✅ 优化报告 (OPTIMIZATION_REPORT.md)
- ✅ 密码哈希工具 (tools/password_hash.go)
- ✅ 单元测试架构准备
### 📦 文件变更
- 新增文件: 14 个
- 代码行数: +1523 / -101
---
## [v1.0.0] - 2026-02-08
### 🎉 初始版本发布
- ✅ 完整功能实现
- ✅ 对齐 Python 版本所有核心特性
- ✅ 独立数据库 (sms_receiver_go.db)
- ✅ 完整的 API 接口 (POST /api/receive, GET /api/messages, GET /api/statistics)
- ✅ Web 管理界面 (短信列表、详情、统计、日志)
- ✅ 签名验证 (HMAC-SHA256)
- ✅ 时区转换 (Asia/Shanghai)

View File

@@ -49,6 +49,10 @@ WORKDIR /app
COPY --from=builder /app/sms-receiver . COPY --from=builder /app/sms-receiver .
COPY --from=builder /app/config.example.yaml config.yaml COPY --from=builder /app/config.example.yaml config.yaml
# 复制运行时需要的目录(模板和静态资源)
COPY --from=builder /app/templates ./templates
COPY --from=builder /app/static ./static
# 创建数据目录并设置权限 # 创建数据目录并设置权限
RUN mkdir -p /app/data /app/logs && \ RUN mkdir -p /app/data /app/logs && \
chown -R appuser:appuser /app chown -R appuser:appuser /app

View File

@@ -5,7 +5,7 @@ APP_NAME := sms-receiver-v2
MAIN_FILE := main.go MAIN_FILE := main.go
# 版本信息 # 版本信息
VERSION := v2.0.1 VERSION := v2.0.2
BUILD_TIME := $(shell date +%Y-%m-%d\ %H:%M:%S) BUILD_TIME := $(shell date +%Y-%m-%d\ %H:%M:%S)
GIT_COMMIT := $(shell git rev-parse --short HEAD 2>/dev/null || echo "unknown") GIT_COMMIT := $(shell git rev-parse --short HEAD 2>/dev/null || echo "unknown")
GO_VERSION := $(shell go version | awk '{print $$3}') GO_VERSION := $(shell go version | awk '{print $$3}')

128
README.md
View File

@@ -4,7 +4,7 @@
[![Go Version](https://img.shields.io/badge/Go-1.21+-00ADD8?style=flat&logo=go)](https://golang.org/) [![Go Version](https://img.shields.io/badge/Go-1.21+-00ADD8?style=flat&logo=go)](https://golang.org/)
[![License](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE) [![License](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE)
[![Version](https://img.shields.io/badge/Version-2.0.0-blue.svg)](https://gitea.king.nyc.mn/openclaw/SmsReceiver-go) [![Version](https://img.shields.io/badge/Version-2.0.2-blue.svg)](https://gitea.king.nyc.mn/openclaw/SmsReceiver-go/releases/tag/v2.0.2)
## ✨ 功能特性 ## ✨ 功能特性
@@ -49,35 +49,53 @@
``` ```
SmsReceiver-go/ SmsReceiver-go/
├── main.go # 入口文件 ├── main.go # 入口文件
├── config.yaml # 配置文件 ├── go.mod / go.sum # Go 依赖管理
├── config.example.yaml # 配置示例 ├── Makefile # 构建脚本
├── Makefile # 构建脚本 ├── config.example.yaml # 配置示例
├── Dockerfile # Docker 镜像 ├── .gitignore # Git 忽略规则
├── docker-compose.yml # Docker Compose ├── .dockerignore # Docker 忽略规则
├── DEVELOPMENT.md # 开发文档 ├── Dockerfile # Docker 镜像
├── OPTIMIZATION_REPORT.md # 优化报告 ├── docker-compose.yml # 开发环境 Docker Compose
├── auth/ # 认证模块 ├── docker-compose.production.yml # 生产环境 Docker Compose
├── auth.go # 认证逻辑
├── README.md # 项目说明
├── CHANGELOG.md # 变更日志
├── DEVELOPMENT.md # 开发文档
├── docs/ # 文档目录
│ └── legacy/ # 废弃文档归档
│ ├── GO_REFACTOR_PROGRESS.md
│ └── OPTIMIZATION_REPORT.md
├── scripts/ # 脚本目录
│ ├── sms-receiver-go-ctl.sh # 服务管理脚本
│ └── test_api.sh # API 测试脚本
├── auth/ # 认证模块
│ └── password.go # 密码验证bcrypt │ └── password.go # 密码验证bcrypt
├── config/ # 配置加载 ├── config/ # 配置加载
│ ├── config.go # 配置管理
│ └── constants.go # 常量定义 │ └── constants.go # 常量定义
├── database/ # 数据库操作 ├── database/ # 数据库操作
│ └── database.go # CRUD + 事务 ├── handlers/ # HTTP 处理器
├── handlers/ # HTTP 处理器
│ ├── handlers.go # 主处理函数
│ ├── middleware.go # 认证中间件 │ ├── middleware.go # 认证中间件
│ └── health.go # 健康检查 │ └── health.go # 健康检查
├── models/ # 数据模型 ├── models/ # 数据模型
│ └── message.go # 数据结构 ├── sign/ # 签名验证
├── sign/ # 签名验证 ├── static/ # 静态资源
│ └── sign.go # HMAC-SHA256 ├── templates/ # HTML 模板
── static/ # 静态资源 ── tools/ # 工具脚本
├── templates/ # HTML 模板
└── tools/ # 工具脚本
└── password_hash.go # 密码哈希生成 └── password_hash.go # 密码哈希生成
``` ```
**运行时生成(不在仓库中)**:
- `config.yaml` - 配置文件(需从 config.example.yaml 创建)
- `sms_receiver_go.db` - SQLite 数据库
- `sms_receiver.log` - 运行日志
- `data/` - 数据目录
- `logs/` - 日志目录
- `build/` - 构建输出目录
- `sms-receiver-v2` - 编译后的二进制文件
## 🚀 快速开始 ## 🚀 快速开始
### 方式 1: 使用预编译二进制(推荐) ### 方式 1: 使用预编译二进制(推荐)
@@ -155,8 +173,30 @@ make docker-logs
docker-compose up -d docker-compose up -d
``` ```
**使用生产环境 Docker Compose推荐**:
```bash
# 复制配置文件
cp config.example.yaml config.yaml
# 启动服务
docker compose -f docker-compose.production.yml up -d
# 查看日志
docker compose -f docker-compose.production.yml logs -f
# 停止服务
docker compose -f docker-compose.production.yml down
```
**Docker Hub**: https://hub.docker.com/r/ouaone/sms-receiver-go **Docker Hub**: https://hub.docker.com/r/ouaone/sms-receiver-go
**可用镜像标签**:
- `ouaone/sms-receiver-go:latest` - 最新版本(推荐)
- `ouaone/sms-receiver-go:v2.0.2` - v2.0.2 稳定版本
- `ouaone/sms-receiver-go:v2.0.1` - v2.0.1 版本
- `ouaone/sms-receiver-go:v2.0.0` - v2.0.0 版本
### 方式 4: 从源码编译 ### 方式 4: 从源码编译
```bash ```bash
@@ -417,7 +457,7 @@ systemctl status sms-receiver-go # 状态
### 控制脚本 ### 控制脚本
使用 `sms-receiver-go-ctl.sh`: 使用 `scripts/sms-receiver-go-ctl.sh`:
```bash ```bash
./sms-receiver-go-ctl.sh start # 启动服务 ./sms-receiver-go-ctl.sh start # 启动服务
@@ -430,8 +470,9 @@ systemctl status sms-receiver-go # 状态
## 📚 文档 ## 📚 文档
- [变更日志](CHANGELOG.md) - 版本更新记录
- [开发文档](DEVELOPMENT.md) - 详细的开发指南和 API 文档 - [开发文档](DEVELOPMENT.md) - 详细的开发指南和 API 文档
- [优化报告](OPTIMIZATION_REPORT.md) - v2.0.0 优化详情和变更记录 - [优化报告](docs/legacy/OPTIMIZATION_REPORT.md) - v2.0.0 优化详情归档
## 🔒 安全建议 ## 🔒 安全建议
@@ -464,40 +505,5 @@ MIT License
## 📝 更新日志 ## 📝 更新日志
### [v2.0.0] - 2026-02-08 详细的版本更新记录请查看 [CHANGELOG.md](CHANGELOG.md)
#### 🔴 高优先级 (6项)
- ✅ 数据库事务支持 (确保消息和日志一致性)
- ✅ SQL 注入修复 (参数化查询)
- ✅ 配置验证启动时自动检查
- ✅ 会话密钥强化 (长度验证)
- ✅ 签名验证增强 (详细记录验证过程)
- ✅ 密码哈希支持 (bcrypt)
#### 🟡 中优先级 (15项)
- ✅ 连接池配置 (MaxOpenConns, MaxIdleConns)
- ✅ 查询优化 (范围查询, 索引)
- ✅ 健康检查增强 (/health 端点)
- ✅ API 版本控制 (/api/v1/*)
- ✅ 认证中间件 (RequireAuth, RequireAPIAuth)
- ✅ 定时任务优化 (robfig/cron)
- ✅ 配置文件示例 (config.example.yaml)
- ✅ 常量定义 (config/constants.go)
- ✅ 开发文档 (DEVELOPMENT.md)
#### 🟢 低优先级 (9项)
- ✅ Docker 支持 (Dockerfile, docker-compose.yml)
- ✅ Makefile 构建脚本
- ✅ 优化报告 (OPTIMIZATION_REPORT.md)
- ✅ 密码哈希工具 (tools/password_hash.go)
- ✅ 单元测试架构准备
#### 📦 文件变更
- 新增文件: 14 个
- 代码行数: +1523 / -101
### [v1.0.0] - 2026-02-08
- ✅ 初始版本发布
- ✅ 完整功能实现
- ✅ 对齐 Python 版本功能

Binary file not shown.

View File

@@ -1,34 +0,0 @@
# SMS Receiver Go - 配置文件
app:
name: "短信转发接收端"
version: "2.0.1"
server:
host: "0.0.0.0"
port: 28001
debug: true
security:
enabled: true
username: "admin"
password: "admin123"
session_lifetime: 3600
secret_key: "1e81b5f9e5a695eba01e996b14871db8899b08e111cf8252df8aa4c91d1c7144"
sign_verify: true
sign_max_age: 3600000
sms:
max_messages: 10000
auto_cleanup: true
cleanup_days: 30
database:
path: "sms_receiver_go.db"
timezone: "Asia/Shanghai"
api_tokens:
- name: "默认配置"
token: "default_token"
secret: ""
enabled: true

View File

@@ -0,0 +1,97 @@
# SmsReceiver-go 生产环境 Docker Compose 配置
# 使用预编译好的 Docker 镜像,无需本地编译
#
# 快速启动:
# 1. 复制配置文件cp config.example.yaml config.yaml
# 2. 根据需要修改 config.yaml数据库路径、API Token 等)
# 3. 启动服务docker compose -f docker-compose.production.yml up -d
#
# 访问地址http://localhost:28001
# 默认账号admin / admin123
services:
sms-receiver:
# 使用 Docker Hub 上的预编译镜像
image: ouaone/sms-receiver-go:latest
# 或指定版本image: ouaone/sms-receiver-go:v2.0.2
container_name: sms-receiver-go
# 自动重启策略
restart: unless-stopped
# 端口映射
ports:
- "28001:28001"
# 数据卷挂载
volumes:
# 数据库目录(容器内 /app/data
- ./data:/app/data
# 日志目录(容器内 /app/logs
- ./logs:/app/logs
# 配置文件(只读挂载)
- ./config.yaml:/app/config.yaml:ro
# 环境变量
environment:
- TZ=Asia/Shanghai
# 健康检查
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:28001/health"]
interval: 30s # 每 30 秒检查一次
timeout: 3s # 超时时间 3 秒
retries: 3 # 失败 3 次后标记为不健康
start_period: 5s # 容器启动后 5 秒开始检查
# 网络
networks:
- sms-network
# 资源限制(可选)
deploy:
resources:
limits:
cpus: '0.5'
memory: 128M
reservations:
cpus: '0.1'
memory: 32M
networks:
sms-network:
driver: bridge
# 使用说明:
#
# 1. 首次使用前,创建配置文件:
# cp config.example.yaml config.yaml
#
# 2. 编辑 config.yaml 配置:
# - data_path: /app/data (数据库名称,无需修改)
# - admin_password: admin123 (修改为强密码,或使用 password_hash
# - api_tokens: 添加你的 TranspondSms APP 的 Token 配置
#
# 3. 启动服务:
# docker compose -f docker-compose.production.yml up -d
#
# 4. 查看日志:
# docker compose -f docker-compose.production.yml logs -f
#
# 5. 停止服务:
# docker compose -f docker-compose.production.yml down
#
# 6. 更新镜像:
# docker compose -f docker-compose.production.yml pull
# docker compose -f docker-compose.production.yml up -d
#
# 目录结构示例:
# SmsReceiver-go/
# ├── docker-compose.production.yml (本文件)
# ├── config.yaml (配置文件,需自行创建)
# ├── config.example.yaml (配置示例)
# ├── data/ (自动创建,存放数据库)
# └── logs/ (自动创建,存放日志)

1
docs/.gitkeep Normal file
View File

@@ -0,0 +1 @@
# 废弃文档归档

1
docs/legacy/.gitkeep Normal file
View File

@@ -0,0 +1 @@
# 空目录

1
scripts/.gitkeep Normal file
View File

@@ -0,0 +1 @@
# 脚本目录

View File

@@ -2,8 +2,11 @@
# SMS Receiver Go - 管理脚本 # SMS Receiver Go - 管理脚本
SERVICE_NAME="sms-receiver-go" SERVICE_NAME="sms-receiver-go"
BINARY_PATH="/root/.openclaw/workspace/SmsReceiver-go/sms-receiver-new" # 脚本所在目录的父目录(项目根目录)
LOG_PATH="/root/.openclaw/workspace/SmsReceiver-go/sms_receiver.log" SCRIPT_DIR=$(cd "$(dirname "$0")/.." && pwd)
BINARY_NAME="sms-receiver-v2"
BINARY_PATH="$SCRIPT_DIR/$BINARY_NAME"
LOG_PATH="$SCRIPT_DIR/sms_receiver.log"
case "$1" in case "$1" in
start) start)
@@ -28,11 +31,19 @@ case "$1" in
;; ;;
log) log)
echo "SMS Receiver Go 日志 (最近 50 行):" echo "SMS Receiver Go 日志 (最近 50 行):"
tail -n 50 $LOG_PATH if [ -f "$LOG_PATH" ]; then
tail -n 50 "$LOG_PATH"
else
echo "日志文件不存在: $LOG_PATH"
fi
;; ;;
logtail) logtail)
echo "实时监控 SMS Receiver Go 日志 (Ctrl+C 退出):" echo "实时监控 SMS Receiver Go 日志 (Ctrl+C 退出):"
tail -f $LOG_PATH if [ -f "$LOG_PATH" ]; then
tail -f "$LOG_PATH"
else
echo "日志文件不存在: $LOG_PATH"
fi
;; ;;
enable) enable)
echo "设置 SMS Receiver Go 开机自启..." echo "设置 SMS Receiver Go 开机自启..."

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.