Initial commit: SMS Forwarder project with Docker support
This commit is contained in:
264
docs/deployment.md
Normal file
264
docs/deployment.md
Normal file
@ -0,0 +1,264 @@
|
||||
# 部署指南
|
||||
|
||||
本指南介绍如何部署 SMS Forwarder 服务器。
|
||||
|
||||
## 部署方式
|
||||
|
||||
### 1. 本地部署
|
||||
|
||||
#### 环境要求
|
||||
- Python 3.10+
|
||||
- uv 包管理器
|
||||
|
||||
#### 安装步骤
|
||||
|
||||
```bash
|
||||
# 1. 克隆项目
|
||||
git clone <repository-url>
|
||||
cd notification
|
||||
|
||||
# 2. 安装依赖
|
||||
uv sync
|
||||
|
||||
# 3. 复制配置文件
|
||||
cp config.example.yaml config.yaml
|
||||
|
||||
# 4. 编辑配置文件
|
||||
nano config.yaml
|
||||
|
||||
# 5. 运行服务器
|
||||
uv run sms-forwarder
|
||||
```
|
||||
|
||||
### 2. Docker 部署
|
||||
|
||||
#### 创建 Dockerfile
|
||||
|
||||
```dockerfile
|
||||
FROM python:3.10-slim
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
# 安装 uv
|
||||
RUN pip install uv
|
||||
|
||||
# 复制项目文件
|
||||
COPY . .
|
||||
|
||||
# 安装依赖
|
||||
RUN uv sync
|
||||
|
||||
# 创建日志目录
|
||||
RUN mkdir -p logs
|
||||
|
||||
# 暴露端口
|
||||
EXPOSE 8000
|
||||
|
||||
# 启动命令
|
||||
CMD ["uv", "run", "sms-forwarder"]
|
||||
```
|
||||
|
||||
#### 构建和运行
|
||||
|
||||
```bash
|
||||
# 构建镜像
|
||||
docker build -t sms-forwarder .
|
||||
|
||||
# 运行容器
|
||||
docker run -d \
|
||||
--name sms-forwarder \
|
||||
-p 8000:8000 \
|
||||
-v $(pwd)/config.yaml:/app/config.yaml \
|
||||
-v $(pwd)/logs:/app/logs \
|
||||
sms-forwarder
|
||||
```
|
||||
|
||||
### 3. systemd 服务部署
|
||||
|
||||
#### 创建服务文件
|
||||
|
||||
```bash
|
||||
sudo nano /etc/systemd/system/sms-forwarder.service
|
||||
```
|
||||
|
||||
```ini
|
||||
[Unit]
|
||||
Description=SMS Forwarder Service
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=your-user
|
||||
WorkingDirectory=/path/to/sms-forwarder
|
||||
Environment=PATH=/path/to/sms-forwarder/.venv/bin
|
||||
ExecStart=/path/to/sms-forwarder/.venv/bin/python -m sms_forwarder.main
|
||||
Restart=always
|
||||
RestartSec=10
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
```
|
||||
|
||||
#### 启用服务
|
||||
|
||||
```bash
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl enable sms-forwarder
|
||||
sudo systemctl start sms-forwarder
|
||||
sudo systemctl status sms-forwarder
|
||||
```
|
||||
|
||||
## 配置推送服务
|
||||
|
||||
### Pushbullet 配置
|
||||
|
||||
1. 访问 [Pushbullet](https://www.pushbullet.com/)
|
||||
2. 注册账号并在 Android 设备上安装应用
|
||||
3. 获取 Access Token:
|
||||
- 访问 https://www.pushbullet.com/#settings/account
|
||||
- 创建 Access Token
|
||||
4. 在配置文件中添加:
|
||||
|
||||
```yaml
|
||||
notifications:
|
||||
services:
|
||||
- name: "pushbullet"
|
||||
url: "pbul://your-access-token-here"
|
||||
enabled: true
|
||||
```
|
||||
|
||||
### FCM 配置
|
||||
|
||||
1. 创建 Firebase 项目
|
||||
2. 获取服务器密钥和项目 ID
|
||||
3. 在 Android 应用中集成 FCM
|
||||
4. 获取设备 token
|
||||
5. 配置:
|
||||
|
||||
```yaml
|
||||
notifications:
|
||||
services:
|
||||
- name: "fcm"
|
||||
url: "fcm://project-id@server-key/device-token"
|
||||
enabled: true
|
||||
```
|
||||
|
||||
### Gotify 配置
|
||||
|
||||
1. 部署 Gotify 服务器
|
||||
2. 创建应用并获取 token
|
||||
3. 配置:
|
||||
|
||||
```yaml
|
||||
notifications:
|
||||
services:
|
||||
- name: "gotify"
|
||||
url: "gotify://your-server.com/app-token"
|
||||
enabled: true
|
||||
```
|
||||
|
||||
## 安全配置
|
||||
|
||||
### 1. 生成强 API 密钥
|
||||
|
||||
```bash
|
||||
# 使用 Python 生成随机密钥
|
||||
python -c "import secrets; print(secrets.token_urlsafe(32))"
|
||||
```
|
||||
|
||||
### 2. 配置防火墙
|
||||
|
||||
```bash
|
||||
# 只允许特定 IP 访问
|
||||
sudo ufw allow from YOUR_IPHONE_IP to any port 8000
|
||||
```
|
||||
|
||||
### 3. 使用 HTTPS
|
||||
|
||||
#### 使用 nginx 反向代理
|
||||
|
||||
```nginx
|
||||
server {
|
||||
listen 443 ssl;
|
||||
server_name your-domain.com;
|
||||
|
||||
ssl_certificate /path/to/cert.pem;
|
||||
ssl_certificate_key /path/to/key.pem;
|
||||
|
||||
location / {
|
||||
proxy_pass http://127.0.0.1:8000;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 监控和维护
|
||||
|
||||
### 1. 日志监控
|
||||
|
||||
```bash
|
||||
# 查看实时日志
|
||||
tail -f logs/sms_forwarder.log
|
||||
|
||||
# 查看错误日志
|
||||
grep ERROR logs/sms_forwarder.log
|
||||
```
|
||||
|
||||
### 2. 健康检查
|
||||
|
||||
```bash
|
||||
# 检查服务状态
|
||||
curl http://localhost:8000/health
|
||||
|
||||
# 检查系统状态
|
||||
curl http://localhost:8000/status
|
||||
```
|
||||
|
||||
### 3. 性能监控
|
||||
|
||||
可以使用以下工具监控服务器性能:
|
||||
- Prometheus + Grafana
|
||||
- htop / top
|
||||
- systemd journal
|
||||
|
||||
### 4. 备份配置
|
||||
|
||||
```bash
|
||||
# 定期备份配置文件
|
||||
cp config.yaml config.yaml.backup.$(date +%Y%m%d)
|
||||
```
|
||||
|
||||
## 故障排除
|
||||
|
||||
### 常见问题
|
||||
|
||||
1. **服务启动失败**
|
||||
- 检查配置文件语法
|
||||
- 确认端口未被占用
|
||||
- 查看详细错误日志
|
||||
|
||||
2. **通知发送失败**
|
||||
- 验证推送服务配置
|
||||
- 检查网络连接
|
||||
- 确认 API 密钥有效
|
||||
|
||||
3. **高内存使用**
|
||||
- 检查日志文件大小
|
||||
- 考虑添加日志轮转
|
||||
- 监控请求频率
|
||||
|
||||
### 调试命令
|
||||
|
||||
```bash
|
||||
# 检查端口占用
|
||||
netstat -tlnp | grep 8000
|
||||
|
||||
# 检查进程状态
|
||||
ps aux | grep sms-forwarder
|
||||
|
||||
# 测试配置文件
|
||||
uv run python -c "from sms_forwarder.config import get_config; print(get_config())"
|
||||
```
|
149
docs/iphone-setup.md
Normal file
149
docs/iphone-setup.md
Normal file
@ -0,0 +1,149 @@
|
||||
# iPhone 快捷指令配置指南
|
||||
|
||||
本指南将帮助你在 iPhone 上设置快捷指令,自动将收到的短信转发到你的 Android 设备。
|
||||
|
||||
## 前提条件
|
||||
|
||||
1. iPhone 上已安装"快捷指令"应用
|
||||
2. SMS Forwarder 服务器已部署并运行
|
||||
3. 已获取服务器的 API 密钥
|
||||
|
||||
## 步骤 1: 创建快捷指令
|
||||
|
||||
1. 打开"快捷指令"应用
|
||||
2. 点击右上角的"+"创建新快捷指令
|
||||
3. 点击"添加操作"
|
||||
|
||||
## 步骤 2: 配置快捷指令动作
|
||||
|
||||
### 2.1 获取短信内容
|
||||
|
||||
1. 搜索并添加"获取我的快捷指令"动作
|
||||
2. 搜索并添加"文本"动作,用于获取短信内容
|
||||
3. 在文本框中输入短信内容(这将在自动化中被替换)
|
||||
|
||||
### 2.2 发送 HTTP 请求
|
||||
|
||||
1. 搜索并添加"获取 URL 内容"动作
|
||||
2. 配置如下:
|
||||
- **URL**: `http://your-server-ip:8000/notify`
|
||||
- **方法**: POST
|
||||
- **请求体**: JSON
|
||||
- **标头**:
|
||||
- `Content-Type`: `application/json`
|
||||
|
||||
### 2.3 配置请求体
|
||||
|
||||
在"获取 URL 内容"动作的请求体中,输入以下 JSON 格式:
|
||||
|
||||
```json
|
||||
{
|
||||
"api_key": "your-secret-api-key-here",
|
||||
"message": {
|
||||
"sender": "发送者号码或名称",
|
||||
"content": "短信内容",
|
||||
"timestamp": "2024-01-01T12:00:00"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**注意**: 实际使用时,你需要:
|
||||
- 将 `your-secret-api-key-here` 替换为你的实际 API 密钥
|
||||
- 使用快捷指令的变量来动态获取发送者和内容
|
||||
|
||||
## 步骤 3: 设置自动化
|
||||
|
||||
1. 在快捷指令应用中,点击底部的"自动化"
|
||||
2. 点击右上角的"+"创建新自动化
|
||||
3. 选择"收到信息时"
|
||||
4. 配置触发条件:
|
||||
- 选择"任何人"或特定联系人
|
||||
- 选择"立即运行"
|
||||
5. 选择你刚创建的快捷指令
|
||||
|
||||
## 步骤 4: 高级配置
|
||||
|
||||
### 动态获取短信信息
|
||||
|
||||
为了动态获取短信的发送者和内容,你需要在快捷指令中:
|
||||
|
||||
1. 使用"获取输入内容"动作获取短信
|
||||
2. 使用"获取短信详细信息"动作提取发送者和内容
|
||||
3. 在 HTTP 请求中使用这些变量
|
||||
|
||||
### 示例快捷指令流程
|
||||
|
||||
```
|
||||
1. 获取输入内容 (短信)
|
||||
2. 获取短信详细信息
|
||||
- 发送者 → 变量: sender
|
||||
- 内容 → 变量: content
|
||||
3. 文本 (JSON 请求体)
|
||||
{
|
||||
"api_key": "your-api-key",
|
||||
"message": {
|
||||
"sender": "[sender变量]",
|
||||
"content": "[content变量]",
|
||||
"timestamp": "[当前日期]"
|
||||
}
|
||||
}
|
||||
4. 获取 URL 内容
|
||||
- URL: http://your-server:8000/notify
|
||||
- 方法: POST
|
||||
- 请求体: 上面的文本
|
||||
```
|
||||
|
||||
## 步骤 5: 测试
|
||||
|
||||
1. 保存快捷指令和自动化
|
||||
2. 让朋友给你发送一条测试短信
|
||||
3. 检查你的 Android 设备是否收到通知
|
||||
4. 查看服务器日志确认请求是否成功
|
||||
|
||||
## 故障排除
|
||||
|
||||
### 常见问题
|
||||
|
||||
1. **通知没有发送**
|
||||
- 检查网络连接
|
||||
- 确认服务器地址和端口正确
|
||||
- 验证 API 密钥是否正确
|
||||
|
||||
2. **自动化没有触发**
|
||||
- 确认自动化已启用
|
||||
- 检查触发条件设置
|
||||
- 重启快捷指令应用
|
||||
|
||||
3. **HTTP 请求失败**
|
||||
- 检查 JSON 格式是否正确
|
||||
- 确认 Content-Type 标头已设置
|
||||
- 查看服务器日志获取详细错误信息
|
||||
|
||||
### 调试技巧
|
||||
|
||||
1. 在快捷指令中添加"显示通知"动作来调试
|
||||
2. 使用"获取 URL 内容"的响应来检查服务器返回
|
||||
3. 查看服务器的 `/health` 端点确认服务正常
|
||||
|
||||
## 安全建议
|
||||
|
||||
1. 使用强 API 密钥
|
||||
2. 考虑使用 HTTPS(需要 SSL 证书)
|
||||
3. 限制服务器的访问 IP
|
||||
4. 定期更换 API 密钥
|
||||
|
||||
## 进阶功能
|
||||
|
||||
### 过滤特定短信
|
||||
|
||||
你可以在快捷指令中添加条件判断,只转发特定的短信:
|
||||
|
||||
```
|
||||
1. 获取短信内容
|
||||
2. 如果 (内容包含"验证码"或发送者是"银行")
|
||||
3. 执行 HTTP 请求
|
||||
```
|
||||
|
||||
### 自定义通知格式
|
||||
|
||||
通过修改服务器配置文件中的模板,你可以自定义通知的显示格式。
|
96
docs/simple-iphone-setup.md
Normal file
96
docs/simple-iphone-setup.md
Normal file
@ -0,0 +1,96 @@
|
||||
# 简化版 iPhone 快捷指令配置指南
|
||||
|
||||
本指南将帮助你设置一个简单的 iPhone 快捷指令,只需要发送短信内容,无需其他复杂信息。
|
||||
|
||||
## 前提条件
|
||||
|
||||
1. iPhone 上已安装"快捷指令"应用
|
||||
2. SMS Forwarder 服务器已部署并运行
|
||||
3. 已在 Android 设备上安装 Pushbullet 应用
|
||||
|
||||
## 步骤 1: 创建快捷指令
|
||||
|
||||
1. 打开 iPhone 上的"快捷指令"应用
|
||||
2. 点击右上角的"+"创建新快捷指令
|
||||
3. 点击"添加操作"
|
||||
|
||||
## 步骤 2: 配置快捷指令动作
|
||||
|
||||
### 2.1 获取短信内容
|
||||
|
||||
1. 搜索并添加"获取我的快捷指令的输入"动作
|
||||
2. 这将获取短信内容作为输入
|
||||
|
||||
### 2.2 发送 HTTP 请求
|
||||
|
||||
1. 搜索并添加"获取 URL 内容"动作
|
||||
2. 配置如下:
|
||||
- **URL**: `http://你的服务器IP:12152/notify/simple`
|
||||
- **方法**: POST
|
||||
- **请求体**: JSON
|
||||
- **标头**:
|
||||
- `Content-Type`: `application/json`
|
||||
|
||||
### 2.3 配置请求体
|
||||
|
||||
在"获取 URL 内容"动作的请求体中,输入以下 JSON 格式:
|
||||
|
||||
```json
|
||||
{
|
||||
"api_key": "ayNESyIW2pCQ5Ts-O8FC5t8mzhb26kbDZEr4I7PynHg",
|
||||
"content": "快捷指令输入"
|
||||
}
|
||||
```
|
||||
|
||||
**注意**:
|
||||
- 将 `"快捷指令输入"` 替换为变量,方法是点击它,然后从变量列表中选择"快捷指令输入"
|
||||
- API 密钥已经设置好,不需要修改
|
||||
|
||||
## 步骤 3: 设置自动化
|
||||
|
||||
1. 在快捷指令应用中,点击底部的"自动化"
|
||||
2. 点击右上角的"+"创建新自动化
|
||||
3. 选择"收到信息时"
|
||||
4. 配置触发条件:
|
||||
- 选择"任何人"或特定联系人
|
||||
- 选择"立即运行"
|
||||
5. 选择你刚创建的快捷指令
|
||||
|
||||
## 步骤 4: 测试
|
||||
|
||||
1. 保存快捷指令和自动化
|
||||
2. 让朋友给你发送一条测试短信
|
||||
3. 检查你的 Android 设备上的 Pushbullet 是否收到通知
|
||||
|
||||
## 故障排除
|
||||
|
||||
### 常见问题
|
||||
|
||||
1. **通知没有发送**
|
||||
- 确认服务器地址和端口正确 (12152)
|
||||
- 确认 API 密钥正确
|
||||
- 检查 Android 设备上的 Pushbullet 是否正常运行
|
||||
|
||||
2. **自动化没有触发**
|
||||
- 确认自动化已启用
|
||||
- 检查触发条件设置
|
||||
- 重启快捷指令应用
|
||||
|
||||
### 调试技巧
|
||||
|
||||
1. 在快捷指令中添加"显示通知"动作来调试
|
||||
2. 使用"获取 URL 内容"的响应来检查服务器返回
|
||||
|
||||
## 高级选项
|
||||
|
||||
如果你想添加发送者信息,可以修改 JSON 为:
|
||||
|
||||
```json
|
||||
{
|
||||
"api_key": "ayNESyIW2pCQ5Ts-O8FC5t8mzhb26kbDZEr4I7PynHg",
|
||||
"content": "快捷指令输入",
|
||||
"sender": "发送者名称"
|
||||
}
|
||||
```
|
||||
|
||||
其中 `"发送者名称"` 可以是固定文本,如 "银行短信" 或 "验证码"。
|
Reference in New Issue
Block a user