初始化提交,包含完整的邮件系统代码

This commit is contained in:
huangzhenpc
2025-02-25 19:50:00 +08:00
commit aeffc4f8b8
52 changed files with 6673 additions and 0 deletions

283
DEPLOYMENT_GUIDE.md Normal file
View File

@@ -0,0 +1,283 @@
# 邮箱系统部署指南
本文档提供在生产环境中部署邮箱系统的详细步骤。
## 系统要求
- Python 3.7+
- 公网IP地址
- 已配置MX记录的域名
- 开放的25端口SMTP和5000端口API
## 1. 服务器准备
### 1.1 安装基础软件包
```bash
# Ubuntu/Debian
sudo apt update
sudo apt install -y python3 python3-pip python3-venv git ufw
# CentOS/RHEL
sudo yum update -y
sudo yum install -y python3 python3-pip git
```
### 1.2 配置防火墙
```bash
# Ubuntu/Debian (ufw)
sudo ufw allow 22/tcp # SSH
sudo ufw allow 25/tcp # SMTP
sudo ufw allow 5000/tcp # API
sudo ufw enable
# CentOS/RHEL (firewalld)
sudo firewall-cmd --permanent --add-port=22/tcp
sudo firewall-cmd --permanent --add-port=25/tcp
sudo firewall-cmd --permanent --add-port=5000/tcp
sudo firewall-cmd --reload
```
## 2. 部署系统
### 2.1 获取代码
```bash
git clone <repository-url> /opt/email-system
cd /opt/email-system
```
### 2.2 创建虚拟环境并安装依赖
```bash
python3 -m venv venv
source venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txt
```
### 2.3 配置系统
创建环境变量文件:
```bash
cat > .env << EOF
FLASK_ENV=production
SECRET_KEY=$(python -c 'import secrets; print(secrets.token_hex(16))')
MAIL_DOMAINS=yourdomain.com,anotherdomain.com
DATABASE_URL=sqlite:///db/email_system.db
EOF
```
修改`local_settings.py`以适应生产环境:
```bash
cat > local_settings.py << EOF
"""
生产环境配置文件
"""
# SMTP服务器配置
SMTP_HOST = '0.0.0.0' # 监听所有网络接口
SMTP_PORT = 25 # 使用标准SMTP端口
# 日志配置
LOG_LEVEL = 'INFO'
EOF
```
### 2.4 初始化数据库
```bash
mkdir -p db email_data logs
python -c "from app.models import init_db; init_db()"
```
## 3. 启动服务
### 3.1 直接启动(测试用)
```bash
python run.py --host 0.0.0.0 --port 5000 --smtp-port 25
```
### 3.2 使用Systemd服务推荐用于生产
创建服务文件:
```bash
sudo cat > /etc/systemd/system/email-system.service << EOF
[Unit]
Description=Email System
After=network.target
[Service]
User=root
WorkingDirectory=/opt/email-system
ExecStart=/opt/email-system/venv/bin/python run.py --host 0.0.0.0 --port 5000 --smtp-port 25
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF
```
启动服务:
```bash
sudo systemctl daemon-reload
sudo systemctl enable email-system
sudo systemctl start email-system
```
## 4. 验证部署
### 4.1 检查服务状态
```bash
sudo systemctl status email-system
netstat -tulpn | grep -E ':(25|5000)'
curl http://localhost:5000/api/status
```
### 4.2 检查日志
```bash
tail -f logs/email_system.log
```
## 5. 故障排除
### 5.1 服务无法启动
- 检查日志文件: `cat logs/email_system.log`
- 确认端口未被占用: `netstat -tulpn | grep -E ':(25|5000)'`
- 检查Python依赖: `pip install -r requirements.txt`
### 5.2 无法接收外部邮件
- 验证MX记录配置: `dig MX yourdomain.com`
- 检查25端口是否开放: `telnet your-server-ip 25`
- 确认SMTP服务已启动: `ps aux | grep smtp`
- 检查防火墙规则: `sudo ufw status``sudo firewall-cmd --list-all`
### 5.3 常见ISP限制
许多ISP会阻止25端口的出站流量。如果遇到此问题:
- 联系ISP要求解除25端口限制
- 使用备用端口如587并在防火墙中转发到25端口
- 考虑使用云服务提供商如AWS、GCP、阿里云等的VM实例
## 6. 性能优化
### 6.1 数据库优化
对于大规模部署考虑从SQLite迁移到PostgreSQL:
```bash
# 安装PostgreSQL
sudo apt install -y postgresql postgresql-contrib
# 创建数据库和用户
sudo -u postgres psql -c "CREATE USER email_system WITH PASSWORD 'your_password';"
sudo -u postgres psql -c "CREATE DATABASE email_system_db OWNER email_system;"
```
然后更新`.env`文件中的`DATABASE_URL`:
```
DATABASE_URL=postgresql://email_system:your_password@localhost/email_system_db
```
### 6.2 使用反向代理
对于生产环境建议使用Nginx作为反向代理:
```bash
# 安装Nginx
sudo apt install -y nginx
# 配置Nginx
sudo cat > /etc/nginx/sites-available/email-system << EOF
server {
listen 80;
server_name api.yourdomain.com;
location / {
proxy_pass http://localhost:5000;
proxy_set_header Host \$host;
proxy_set_header X-Real-IP \$remote_addr;
}
}
EOF
sudo ln -s /etc/nginx/sites-available/email-system /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx
```
## 7. 安全建议
- 启用HTTPS (使用Let's Encrypt)
- 限制API访问 (IP白名单、API密钥等)
- 定期备份数据库
- 监控系统资源使用情况
- 实现基本的邮件过滤功能
## 8. 备份与恢复
### 8.1 备份
```bash
# 创建备份脚本
cat > backup.sh << EOF
#!/bin/bash
TIMESTAMP=\$(date +%Y%m%d_%H%M%S)
BACKUP_DIR=/opt/email-system/backups/\$TIMESTAMP
mkdir -p \$BACKUP_DIR
# 停止服务
systemctl stop email-system
# 备份数据库
cp db/email_system.db \$BACKUP_DIR/
# 备份邮件数据
cp -r email_data \$BACKUP_DIR/
# 备份配置
cp .env \$BACKUP_DIR/
cp local_settings.py \$BACKUP_DIR/
# 重启服务
systemctl start email-system
echo "备份完成: \$BACKUP_DIR"
EOF
chmod +x backup.sh
```
### 8.2 恢复
```bash
# 恢复数据
BACKUP_DIR=/opt/email-system/backups/20220101_120000
# 停止服务
systemctl stop email-system
# 恢复数据库
cp $BACKUP_DIR/email_system.db db/
# 恢复邮件数据
cp -r $BACKUP_DIR/email_data ./
# 恢复配置
cp $BACKUP_DIR/.env ./
cp $BACKUP_DIR/local_settings.py ./
# 重启服务
systemctl start email-system
```