Exeprotector/个人版_快速部署指南.md
2025-10-23 18:28:10 +08:00

10 KiB
Raw Blame History

个人版快速部署指南

总用时30-40分钟
难度:☆☆☆(简单)


📋 准备清单

在开始之前,确保你有:

  • 一台云服务器已有MySQL数据库
  • SSH登录权限
  • 域名(可选,但推荐)
  • 本地Python环境

🚀 部署流程3步走

第一步云服务器部署API15分钟
   ↓
第二步本地修改管理程序5分钟
   ↓
第三步测试验证10分钟

第一步云服务器部署15分钟

1.1 上传文件到服务器

Windows用户使用WinSCP

  1. 打开WinSCP连接到你的服务器
  2. 创建目录:/opt/license-api
  3. 上传文件:api_server_lite.py

Linux/Mac用户

# 使用SCP上传
scp api_server_lite.py root@your-server-ip:/opt/license-api/

1.2 SSH登录服务器

ssh root@your-server-ip

1.3 安装依赖

# 进入目录
cd /opt/license-api

# Ubuntu/Debian
apt update
apt install python3 python3-pip -y
pip3 install flask mysql-connector-python

# CentOS/RHEL
yum install python3 python3-pip -y
pip3 install flask mysql-connector-python

1.4 生成API密钥

# 生成随机密钥
python3 -c "import os; print(os.urandom(32).hex())"

# 输出示例:
# a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1v2w3x4y5z6a7b8c9d0e1f2

# ⚠️ 保存这个密钥,后面要用!

1.5 配置环境变量

# 编辑环境变量文件
nano ~/.bashrc

# 在文件末尾添加(修改为你的实际值):
export DB_HOST=localhost
export DB_USER=taiyi
export DB_PASSWORD=taiyi1224
export DB_NAME=filesend_db
export API_KEY=你刚才生成的密钥

# 保存并退出Ctrl+O, Enter, Ctrl+X

# 使配置生效
source ~/.bashrc

1.6 测试运行

# 测试运行(前台)
python3 api_server_lite.py

# 你应该看到:
# ============================================================
# 轻量级API服务器 - 个人管理版
# ============================================================
# 数据库: localhost/filesend_db
# 端口: 5000
# API密钥: 已设置
# ============================================================

# 按 Ctrl+C 停止

# 测试接口
curl http://localhost:5000/api/health

# 应该返回:
# {"status":"ok","timestamp":1234567890.123,"version":"1.0"}

1.7 配置为系统服务(后台运行)

# 创建服务文件
nano /etc/systemd/system/license-api.service

# 粘贴以下内容(修改为你的实际密钥):
[Unit]
Description=License API Server
After=network.target mysql.service

[Service]
Type=simple
User=root
WorkingDirectory=/opt/license-api
Environment="DB_HOST=localhost"
Environment="DB_USER=taiyi"
Environment="DB_PASSWORD=taiyi1224"
Environment="DB_NAME=filesend_db"
Environment="API_KEY=你的API密钥"
ExecStart=/usr/bin/python3 /opt/license-api/api_server_lite.py
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
# 保存并退出

# 启动服务
systemctl daemon-reload
systemctl start license-api
systemctl enable license-api

# 检查状态
systemctl status license-api

# 应该显示Active: active (running)

# 查看日志
journalctl -u license-api -f

1.8 配置防火墙

# 开放5000端口
ufw allow 5000

# 或者只允许特定IP访问更安全
# ufw allow from your-client-ip to any port 5000

1.9 配置Nginx反向代理推荐

# 安装Nginx
apt install nginx -y

# 创建配置文件
nano /etc/nginx/sites-available/license-api
server {
    listen 80;
    server_name your-domain.com;  # 改成你的域名

    location /api/ {
        proxy_pass http://127.0.0.1:5000/api/;
        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_connect_timeout 10s;
        proxy_read_timeout 30s;
    }
}
# 启用配置
ln -s /etc/nginx/sites-available/license-api /etc/nginx/sites-enabled/
nginx -t
systemctl reload nginx

# 申请SSL证书免费
apt install certbot python3-certbot-nginx -y
certbot --nginx -d your-domain.com

# 按提示操作即可

第二步本地修改5分钟

2.1 备份原文件

# Windows
copy main.py main.py.backup

# Linux/Mac
cp main.py main.py.backup

2.2 修改 main.py

main.py 中找到 encrypt_software_by_name 方法大约1365行

原代码:

def encrypt_software_by_name(self, software_name):
    # ...
    encryptor = EXEEncryptor()
    success, msg = encryptor.encrypt_file(
        source_path,
        dest_path,
        validator_path,
        self.db_config,
        software_name
    )

修改为:

def encrypt_software_by_name(self, software_name):
    # ... 前面代码不变 ...
    
    # 🔴 使用新的安全加密器
    from encryptor_secure import SecureEXEEncryptor
    
    # 配置API改成你的实际值
    api_config = {
        'api_url': 'https://your-domain.com/api',     # 改成你的域名或IP
        'api_key': '你的API密钥'                       # 改成你生成的密钥
    }
    
    encryptor = SecureEXEEncryptor()
    success, msg = encryptor.encrypt_exe(
        source_path=source_path,
        output_path=dest_path,
        api_config=api_config,
        software_name=software_name
    )
    
    # ... 后面代码不变 ...

2.3 安装依赖(如果还没装)

pip install cryptography requests

第三步测试10分钟

3.1 测试API连接

# 从本地电脑测试
curl https://your-domain.com/api/health

# 或者用浏览器访问
# https://your-domain.com/api/health

# 应该看到:
# {"status":"ok","timestamp":1234567890.123,"version":"1.0"}

3.2 测试加密

# 运行管理程序
python main.py

# 1. 连接数据库
# 2. 选择一个软件
# 3. 点击"加密软件"
# 4. 观察是否成功生成加密EXE

3.3 测试激活

  1. 把加密的EXE复制到另一台电脑
  2. 运行EXE
  3. 输入机器码(会显示)
  4. 在管理程序中生成对应的卡密
  5. 输入卡密
  6. 验证是否激活成功

🎯 配置参考

环境变量配置模板

创建 .env 文件(服务器上):

# 数据库配置
DB_HOST=localhost
DB_USER=taiyi
DB_PASSWORD=taiyi1224
DB_NAME=filesend_db

# API密钥必须修改
API_KEY=a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1v2w3x4y5z6a7b8c9d0e1f2

main.py 配置模板

# API配置在 encrypt_software_by_name 方法中)
api_config = {
    # 如果有域名+SSL
    'api_url': 'https://your-domain.com/api',
    
    # 如果只有IP不推荐用于生产
    # 'api_url': 'http://your-server-ip:5000/api',
    
    # API密钥与服务器上的API_KEY一致
    'api_key': 'a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1v2w3x4y5z6a7b8c9d0e1f2'
}

🐛 故障排查

问题1API服务无法启动

# 检查日志
journalctl -u license-api -n 50

# 常见原因:
# 1. 端口被占用
netstat -tulpn | grep 5000
# 解决:杀掉占用进程或换端口

# 2. 数据库连接失败
mysql -h localhost -u taiyi -p
# 解决:检查数据库配置

# 3. Python模块缺失
pip3 list | grep flask
# 解决:重新安装依赖

问题2客户端无法连接API

# 1. 检查防火墙
ufw status

# 2. 检查Nginx状态
systemctl status nginx
nginx -t

# 3. 测试本地连接
curl http://localhost:5000/api/health

# 4. 测试外部连接
curl http://your-server-ip:5000/api/health

问题3加密失败

# 1. 检查validator_secure.py是否存在
ls -l validator_secure.py

# 2. 检查encryptor_secure.py是否存在
ls -l encryptor_secure.py

# 3. 检查依赖
pip list | grep cryptography

# 4. 查看详细错误
python main.py
# 在GUI中查看错误提示

问题4激活失败

# 1. 服务器端检查日志
journalctl -u license-api -f

# 2. 检查API密钥是否一致
echo $API_KEY

# 3. 检查数据库中的软件名称
mysql -u taiyi -p filesend_db
SELECT * FROM software_products;

# 4. 检查网络连接
curl https://your-domain.com/api/health

📊 性能监控

查看API服务状态

# 服务状态
systemctl status license-api

# 实时日志
journalctl -u license-api -f

# CPU和内存使用
top -p $(pgrep -f api_server_lite)

# 网络连接
netstat -an | grep 5000

查看数据库状态

# 登录MySQL
mysql -u taiyi -p

# 查询统计
SELECT status, COUNT(*) FROM license_keys GROUP BY status;

# 查询今日激活
SELECT COUNT(*) FROM license_keys WHERE DATE(start_time) = CURDATE();

🔒 安全建议

必须做的:

  1. 修改默认密钥

    # 生成强密钥
    python3 -c "import os; print(os.urandom(32).hex())"
    
  2. 使用HTTPS

    certbot --nginx -d your-domain.com
    
  3. 定期备份数据库

    mysqldump -u taiyi -p filesend_db > backup_$(date +%Y%m%d).sql
    

建议做的:

  1. 限制SSH访问

    # 只允许密钥登录
    nano /etc/ssh/sshd_config
    # PasswordAuthentication no
    systemctl restart sshd
    
  2. 配置fail2ban

    apt install fail2ban -y
    systemctl enable fail2ban
    
  3. 监控异常请求

    # 设置告警
    tail -f /var/log/nginx/access.log | grep -i "api"
    

📞 需要帮助?

免费支持:

  • 📖 查看文档:方案_个人管理版.md
  • 💬 邮件咨询shoubo1224@qq.com

付费服务:

  • 🔧 远程部署¥200/次
  • 📞 技术支持¥500/月
  • 🎓 一对一培训¥500/小时

微信taiyi1224


部署完成检查清单

完成后,确认以下项目:

  • API服务器正常运行
  • 能访问 /api/health 接口
  • main.py 已修改配置
  • 本地能连接云数据库
  • 加密功能正常
  • 测试EXE能激活
  • 防火墙已配置
  • SSL证书已安装如有域名
  • 服务设置为开机自启
  • 数据库已备份

全部完成?恭喜你!🎉


预计总用时30-40分钟
实际难度:非常简单!

有问题随时联系!