修复Docker构建问题和优化配置

- 修复Dockerfile缺少uv.lock和README.md文件的问题
- 更新.dockerignore以正确包含README.md文件
- 优化docker-compose.yml配置
- 更新部署文档
- 添加Docker快速启动指南
This commit is contained in:
root
2025-07-17 20:06:48 +08:00
parent 152e136673
commit c2fb0c440f
5 changed files with 496 additions and 188 deletions

View File

@ -52,8 +52,9 @@ docker-compose*.yml
# Documentation
docs/
README.md
# README.md # 需要包含在Docker镜像中
*.md
!README.md
# Scripts
scripts/

View File

@ -13,6 +13,8 @@ RUN pip install uv
# 复制项目文件
COPY pyproject.toml .
COPY uv.lock .
COPY README.md .
COPY sms_forwarder/ ./sms_forwarder/
# 安装 Python 依赖

View File

@ -1,4 +1,3 @@
version: '3.8'
services:
sms-forwarder:
@ -33,14 +32,11 @@ services:
image: gotify/server
container_name: gotify
ports:
- "8080:80"
- "24545:80"
volumes:
- gotify_data:/app/data
- ./gotify_data:/app/data
environment:
- GOTIFY_DEFAULTUSER_PASS=admin
restart: unless-stopped
profiles:
- gotify
volumes:
gotify_data:

View File

@ -1,264 +1,351 @@
# 部署指南
# SMS Forwarder 部署指南
本指南介绍如何部署 SMS Forwarder 服务器。
本指南介绍如何使用 Docker 部署 SMS Forwarder 服务器。
## 部署方式
## 推荐部署方式Docker
### 1. 本地部署
Docker 部署具有以下优势:
- ✅ 环境一致性,无依赖问题
- ✅ 一键部署,简单快速
- ✅ 自动重启和健康检查
- ✅ 资源隔离和限制
- ✅ 易于备份和迁移
#### 环境要求
- Python 3.10+
- uv 包管理器
## 快速开始
#### 安装步骤
### 1. 环境要求
- Docker 20.10+
- Docker Compose 2.0+
- 2GB+ 可用内存
- 开放端口 12152
### 2. 克隆项目
```bash
# 1. 克隆项目
git clone <repository-url>
cd notification
git clone https://gitea.nosuchip.de/zack/sms_forwarder.git
cd sms_forwarder
```
# 2. 安装依赖
uv sync
### 3. 配置服务
# 3. 复制配置文件
```bash
# 复制配置文件模板
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"]
```
#### 构建和运行
### 4. 一键部署
```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
# 执行自动部署脚本
./scripts/deploy.sh
```
### 3. systemd 服务部署
部署脚本会自动:
- 检查 Docker 环境
- 构建应用镜像
- 启动服务容器
- 运行健康检查
- 显示服务信息
#### 创建服务文件
## 手动部署步骤
如果你不想使用自动部署脚本,可以手动执行以下步骤:
### 1. 构建镜像
```bash
sudo nano /etc/systemd/system/sms-forwarder.service
docker build -t sms-forwarder:latest .
```
```ini
[Unit]
Description=SMS Forwarder Service
After=network.target
### 2. 启动服务
[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
#### 只启动 SMS Forwarder
```bash
docker-compose up -d
```
#### 启用服务
#### 同时启动 SMS Forwarder 和 Gotify
```bash
docker-compose --profile gotify up -d
```
### 3. 验证部署
```bash
sudo systemctl daemon-reload
sudo systemctl enable sms-forwarder
sudo systemctl start sms-forwarder
sudo systemctl status sms-forwarder
# 检查容器状态
docker-compose ps
# 查看日志
docker-compose logs -f sms-forwarder
# 测试健康检查
curl http://localhost:12152/health
```
## 配置推送服务
## 配置说明
### 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. 配置:
编辑 `config.yaml` 文件,配置以下关键项:
```yaml
# 服务器配置
server:
host: "0.0.0.0"
port: 12152
api_key: "your-secret-api-key" # 必须修改
# 通知服务配置
notifications:
services:
# Gotify推荐低延迟
- name: "gotify"
url: "gotify://your-server.com/app-token"
url: "gotifys://your-domain.com/YOUR_APP_TOKEN"
enabled: true
# ntfy备用
- name: "ntfy"
url: "ntfy://your-unique-topic/"
enabled: true
```
## 安全配置
### 推送服务选择
### 1. 生成强 API 密钥
1. **自建 Gotify**(最推荐)
- 延迟1-3 秒
- 完全自主控制
- 启动方式:`docker-compose --profile gotify up -d`
2. **ntfy**(简单易用)
- 延迟5-15 秒
- 无需自建服务器
- 在 Android 上安装 ntfy 应用并订阅主题
## 服务管理
### 使用管理脚本
项目提供了便捷的管理脚本:
```bash
# 使用 Python 生成随机密钥
python -c "import secrets; print(secrets.token_urlsafe(32))"
# 查看所有可用命令
./scripts/docker-manage.sh help
# 常用命令
./scripts/docker-manage.sh status # 查看服务状态
./scripts/docker-manage.sh logs # 查看实时日志
./scripts/docker-manage.sh test # 发送测试通知
./scripts/docker-manage.sh restart # 重启服务
./scripts/docker-manage.sh stop # 停止服务
```
### 2. 配置防火墙
### 手动管理命令
```bash
# 只允许特定 IP 访问
sudo ufw allow from YOUR_IPHONE_IP to any port 8000
# 查看容器状态
docker-compose ps
# 查看日志
docker-compose logs -f sms-forwarder
# 重启服务
docker-compose restart sms-forwarder
# 停止所有服务
docker-compose down
# 重新构建镜像
docker-compose build --no-cache
```
### 3. 使用 HTTPS
## 测试部署
#### 使用 nginx 反向代理
### 自动测试
```nginx
server {
listen 443 ssl;
server_name your-domain.com;
```bash
# 使用测试脚本
./scripts/test-docker.sh
```
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;
}
}
```bash
# 1. 健康检查
curl http://localhost:12152/health
# 2. 查看服务状态
curl http://localhost:12152/status
# 3. 发送测试通知
curl -X POST "http://localhost:12152/notify/simple" \
-H "Content-Type: application/json" \
-d '{
"api_key": "your-api-key",
"content": "测试通知",
"sender": "测试"
}'
```
## 生产环境配置
### 1. 安全设置
```yaml
# config.yaml
security:
# 限制访问 IP可选
allowed_ips: ["192.168.1.100"] # 你的 iPhone IP
# 请求频率限制
rate_limit: 60
```
### 2. 使用强 API 密钥
```bash
# 生成强密钥
python3 -c "import secrets; print(secrets.token_urlsafe(32))"
```
### 3. 反向代理(可选)
如果需要 HTTPS 或域名访问,可以使用 nginx
```bash
# 启动带 nginx 的配置
docker-compose -f docker-compose.prod.yml --profile nginx up -d
```
## 监控和维护
### 1. 日志监控
### 1. 日志管理
```bash
# 查看实时日志
tail -f logs/sms_forwarder.log
docker-compose logs -f sms-forwarder
# 查看最近 100 行日志
docker-compose logs --tail=100 sms-forwarder
# 查看错误日志
grep ERROR logs/sms_forwarder.log
docker-compose logs sms-forwarder | grep ERROR
```
### 2. 健康检查
### 2. 资源监控
```bash
# 检查服务状态
curl http://localhost:8000/health
# 查看容器资源使用
docker stats sms-forwarder --no-stream
# 检查系统状态
curl http://localhost:8000/status
# 查看详细信息
./scripts/docker-manage.sh stats
```
### 3. 性能监控
可以使用以下工具监控服务器性能:
- Prometheus + Grafana
- htop / top
- systemd journal
### 4. 备份配置
### 3. 数据备份
```bash
# 定期备份配置文件
cp config.yaml config.yaml.backup.$(date +%Y%m%d)
# 备份配置和数据
tar -czf sms_forwarder_backup_$(date +%Y%m%d).tar.gz \
config.yaml logs/ data/ gotify_data/
# 恢复备份
tar -xzf sms_forwarder_backup_20240117.tar.gz
```
## 故障排除
### 常见问题
1. **服务启动失败**
- 检查配置文件语法
- 确认端口未被占用
- 查看详细错误日志
1. **容器启动失败**
```bash
# 查看详细错误信息
docker-compose logs sms-forwarder
2. **通知发送失败**
- 验证推送服务配置
- 检查网络连接
- 确认 API 密钥有效
3. **高内存使用**
- 检查日志文件大小
- 考虑添加日志轮转
- 监控请求频率
### 调试命令
# 检查配置文件
docker-compose config
```
2. **端口被占用**
```bash
# 检查端口占用
netstat -tlnp | grep 8000
netstat -tlnp | grep 12152
# 检查进程状态
ps aux | grep sms-forwarder
# 测试配置文件
uv run python -c "from sms_forwarder.config import get_config; print(get_config())"
# 修改端口(在 docker-compose.yml 中)
ports:
- "12153:12152" # 使用不同的外部端口
```
3. **通知发送失败**
```bash
# 检查服务状态
curl http://localhost:12152/status
# 查看详细日志
docker-compose logs -f sms-forwarder
# 测试网络连接
docker-compose exec sms-forwarder curl -I https://ntfy.sh
```
4. **配置文件问题**
```bash
# 验证 YAML 语法
python3 -c "import yaml; yaml.safe_load(open('config.yaml'))"
# 重新生成配置
cp config.example.yaml config.yaml
```
### 性能优化
1. **资源限制调整**
```yaml
# docker-compose.yml
deploy:
resources:
limits:
memory: 512M # 增加内存限制
cpus: '1.0' # 增加 CPU 限制
```
2. **日志轮转**
```yaml
# docker-compose.yml
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
```
## 更新和维护
### 更新应用
```bash
# 1. 拉取最新代码
git pull
# 2. 重新构建和部署
./scripts/deploy.sh
# 或手动更新
docker-compose build --no-cache
docker-compose up -d
```
### 定期维护
```bash
# 清理未使用的 Docker 资源
docker system prune -f
# 查看磁盘使用
du -sh logs/ data/ gotify_data/
# 备份重要数据
./scripts/backup.sh # 如果有备份脚本
```

222
docs/docker-quickstart.md Normal file
View File

@ -0,0 +1,222 @@
# Docker 快速开始指南
本指南将帮助你在 5 分钟内使用 Docker 部署 SMS Forwarder。
## 🎯 目标
- ✅ 在 VPS 上部署 SMS Forwarder
- ✅ 配置推送服务Gotify 或 ntfy
- ✅ 设置 iPhone 快捷指令
- ✅ 实现短信自动转发
## 📋 前提条件
- VPS 服务器1GB+ 内存)
- Docker 和 Docker Compose
- 域名(可选,用于 HTTPS
## 🚀 部署步骤
### 1. 克隆项目
```bash
# SSH 到你的 VPS
ssh user@your-vps
# 克隆项目
git clone https://gitea.nosuchip.de/zack/sms_forwarder.git
cd sms_forwarder
```
### 2. 配置服务
```bash
# 复制配置文件
cp config.example.yaml config.yaml
# 编辑配置
nano config.yaml
```
**必须修改的配置项**
```yaml
server:
api_key: "your-secret-api-key-here" # 生成强密钥
notifications:
services:
# 选择一种推送方式
- name: "ntfy"
url: "ntfy://your-unique-topic-name/"
enabled: true
```
### 3. 生成 API 密钥
```bash
# 生成强密钥
python3 -c "import secrets; print(secrets.token_urlsafe(32))"
```
将生成的密钥填入 `config.yaml``server.api_key` 字段。
### 4. 选择推送方式
#### 方案 A使用 ntfy推荐新手
```yaml
notifications:
services:
- name: "ntfy"
url: "ntfy://sms-forward-$(whoami)-$(date +%s)/"
enabled: true
```
在 Android 设备上:
1. 安装 ntfy 应用
2. 订阅主题:`sms-forward-$(whoami)-$(date +%s)`
#### 方案 B自建 Gotify推荐进阶
```bash
# 启动 SMS Forwarder + Gotify
docker-compose --profile gotify up -d
```
然后:
1. 访问 `http://your-vps:24545`
2. 登录admin/admin
3. 创建应用获取 Token
4. 更新配置文件中的 Gotify URL
### 5. 部署服务
```bash
# 一键部署
./scripts/deploy.sh
```
或手动部署:
```bash
# 构建并启动
docker-compose up -d
# 查看状态
docker-compose ps
```
### 6. 测试部署
```bash
# 运行测试
./scripts/test-docker.sh
```
如果测试通过,你应该在 Android 设备上收到测试通知。
## 📱 配置 iPhone
### 1. 创建快捷指令
1. 打开 iPhone "快捷指令" 应用
2. 点击 "+" 创建新快捷指令
3. 添加 "获取我的快捷指令的输入" 动作
4. 添加 "获取 URL 内容" 动作
### 2. 配置 HTTP 请求
- **URL**: `http://your-vps:12152/notify/simple`
- **方法**: POST
- **请求体**: JSON
- **标头**: `Content-Type: application/json`
**请求体内容**
```json
{
"api_key": "your-api-key-here",
"content": "快捷指令输入"
}
```
### 3. 设置自动化
1. 点击 "自动化" → "+"
2. 选择 "收到信息时"
3. 选择 "任何人" 或特定联系人
4. 选择你创建的快捷指令
5. 关闭 "运行前询问"
## 🔧 管理和维护
### 常用命令
```bash
# 查看服务状态
./scripts/docker-manage.sh status
# 查看实时日志
./scripts/docker-manage.sh logs
# 重启服务
./scripts/docker-manage.sh restart
# 发送测试通知
./scripts/docker-manage.sh test
```
### 更新服务
```bash
# 拉取最新代码
git pull
# 重新部署
./scripts/deploy.sh
```
## 🛡️ 安全建议
1. **使用强 API 密钥**
2. **限制访问 IP**(在 config.yaml 中配置)
3. **使用 HTTPS**(配置域名和 SSL 证书)
4. **定期备份配置**
## 🆘 故障排除
### 服务无法启动
```bash
# 查看错误日志
docker-compose logs sms-forwarder
# 检查配置文件
docker-compose config
```
### 通知发送失败
```bash
# 检查网络连接
docker-compose exec sms-forwarder curl -I https://ntfy.sh
# 验证配置
curl http://localhost:12152/status
```
### iPhone 快捷指令不工作
1. 检查网络连接
2. 确认 API 密钥正确
3. 查看服务器日志
4. 测试 API 端点
## 🎉 完成
如果一切正常,你现在应该能够:
- ✅ 在 iPhone 上收到短信时自动触发快捷指令
- ✅ 快捷指令将短信内容发送到你的服务器
- ✅ 服务器将通知推送到你的 Android 设备
享受你的短信转发服务吧!🎊