# 部署指南 本指南介绍如何部署 SMS Forwarder 服务器。 ## 部署方式 ### 1. 本地部署 #### 环境要求 - Python 3.10+ - uv 包管理器 #### 安装步骤 ```bash # 1. 克隆项目 git clone 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())" ```