551 lines
10 KiB
Markdown
551 lines
10 KiB
Markdown
# 个人版快速部署指南
|
||
|
||
> **总用时:30-40分钟**
|
||
> **难度:⭐⭐☆☆☆(简单)**
|
||
|
||
---
|
||
|
||
## 📋 准备清单
|
||
|
||
在开始之前,确保你有:
|
||
|
||
- ✅ 一台云服务器(已有MySQL数据库)
|
||
- ✅ SSH登录权限
|
||
- ✅ 域名(可选,但推荐)
|
||
- ✅ 本地Python环境
|
||
|
||
---
|
||
|
||
## 🚀 部署流程(3步走)
|
||
|
||
```
|
||
第一步:云服务器部署API(15分钟)
|
||
↓
|
||
第二步:本地修改管理程序(5分钟)
|
||
↓
|
||
第三步:测试验证(10分钟)
|
||
```
|
||
|
||
---
|
||
|
||
## 第一步:云服务器部署(15分钟)
|
||
|
||
### 1.1 上传文件到服务器
|
||
|
||
**Windows用户(使用WinSCP):**
|
||
|
||
1. 打开WinSCP,连接到你的服务器
|
||
2. 创建目录:`/opt/license-api`
|
||
3. 上传文件:`api_server_lite.py`
|
||
|
||
**Linux/Mac用户:**
|
||
|
||
```bash
|
||
# 使用SCP上传
|
||
scp api_server_lite.py root@your-server-ip:/opt/license-api/
|
||
```
|
||
|
||
### 1.2 SSH登录服务器
|
||
|
||
```bash
|
||
ssh root@your-server-ip
|
||
```
|
||
|
||
### 1.3 安装依赖
|
||
|
||
```bash
|
||
# 进入目录
|
||
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密钥
|
||
|
||
```bash
|
||
# 生成随机密钥
|
||
python3 -c "import os; print(os.urandom(32).hex())"
|
||
|
||
# 输出示例:
|
||
# a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1v2w3x4y5z6a7b8c9d0e1f2
|
||
|
||
# ⚠️ 保存这个密钥,后面要用!
|
||
```
|
||
|
||
### 1.5 配置环境变量
|
||
|
||
```bash
|
||
# 编辑环境变量文件
|
||
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 测试运行
|
||
|
||
```bash
|
||
# 测试运行(前台)
|
||
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 配置为系统服务(后台运行)
|
||
|
||
```bash
|
||
# 创建服务文件
|
||
nano /etc/systemd/system/license-api.service
|
||
|
||
# 粘贴以下内容(修改为你的实际密钥):
|
||
```
|
||
|
||
```ini
|
||
[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
|
||
```
|
||
|
||
```bash
|
||
# 保存并退出
|
||
|
||
# 启动服务
|
||
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 配置防火墙
|
||
|
||
```bash
|
||
# 开放5000端口
|
||
ufw allow 5000
|
||
|
||
# 或者只允许特定IP访问(更安全)
|
||
# ufw allow from your-client-ip to any port 5000
|
||
```
|
||
|
||
### 1.9 配置Nginx反向代理(推荐)
|
||
|
||
```bash
|
||
# 安装Nginx
|
||
apt install nginx -y
|
||
|
||
# 创建配置文件
|
||
nano /etc/nginx/sites-available/license-api
|
||
```
|
||
|
||
```nginx
|
||
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;
|
||
}
|
||
}
|
||
```
|
||
|
||
```bash
|
||
# 启用配置
|
||
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 备份原文件
|
||
|
||
```bash
|
||
# 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行):
|
||
|
||
**原代码:**
|
||
```python
|
||
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
|
||
)
|
||
```
|
||
|
||
**修改为:**
|
||
```python
|
||
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 安装依赖(如果还没装)
|
||
|
||
```bash
|
||
pip install cryptography requests
|
||
```
|
||
|
||
---
|
||
|
||
## 第三步:测试(10分钟)
|
||
|
||
### 3.1 测试API连接
|
||
|
||
```bash
|
||
# 从本地电脑测试
|
||
curl https://your-domain.com/api/health
|
||
|
||
# 或者用浏览器访问
|
||
# https://your-domain.com/api/health
|
||
|
||
# 应该看到:
|
||
# {"status":"ok","timestamp":1234567890.123,"version":"1.0"}
|
||
```
|
||
|
||
### 3.2 测试加密
|
||
|
||
```bash
|
||
# 运行管理程序
|
||
python main.py
|
||
|
||
# 1. 连接数据库
|
||
# 2. 选择一个软件
|
||
# 3. 点击"加密软件"
|
||
# 4. 观察是否成功生成加密EXE
|
||
```
|
||
|
||
### 3.3 测试激活
|
||
|
||
1. 把加密的EXE复制到另一台电脑
|
||
2. 运行EXE
|
||
3. 输入机器码(会显示)
|
||
4. 在管理程序中生成对应的卡密
|
||
5. 输入卡密
|
||
6. 验证是否激活成功
|
||
|
||
---
|
||
|
||
## 🎯 配置参考
|
||
|
||
### 环境变量配置模板
|
||
|
||
创建 `.env` 文件(服务器上):
|
||
|
||
```bash
|
||
# 数据库配置
|
||
DB_HOST=localhost
|
||
DB_USER=taiyi
|
||
DB_PASSWORD=taiyi1224
|
||
DB_NAME=filesend_db
|
||
|
||
# API密钥(必须修改)
|
||
API_KEY=a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1v2w3x4y5z6a7b8c9d0e1f2
|
||
```
|
||
|
||
### main.py 配置模板
|
||
|
||
```python
|
||
# 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'
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 🐛 故障排查
|
||
|
||
### 问题1:API服务无法启动
|
||
|
||
```bash
|
||
# 检查日志
|
||
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
|
||
|
||
```bash
|
||
# 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:加密失败
|
||
|
||
```bash
|
||
# 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:激活失败
|
||
|
||
```bash
|
||
# 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服务状态
|
||
|
||
```bash
|
||
# 服务状态
|
||
systemctl status license-api
|
||
|
||
# 实时日志
|
||
journalctl -u license-api -f
|
||
|
||
# CPU和内存使用
|
||
top -p $(pgrep -f api_server_lite)
|
||
|
||
# 网络连接
|
||
netstat -an | grep 5000
|
||
```
|
||
|
||
### 查看数据库状态
|
||
|
||
```bash
|
||
# 登录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. **修改默认密钥**
|
||
```bash
|
||
# 生成强密钥
|
||
python3 -c "import os; print(os.urandom(32).hex())"
|
||
```
|
||
|
||
2. **使用HTTPS**
|
||
```bash
|
||
certbot --nginx -d your-domain.com
|
||
```
|
||
|
||
3. **定期备份数据库**
|
||
```bash
|
||
mysqldump -u taiyi -p filesend_db > backup_$(date +%Y%m%d).sql
|
||
```
|
||
|
||
### 建议做的:
|
||
|
||
4. **限制SSH访问**
|
||
```bash
|
||
# 只允许密钥登录
|
||
nano /etc/ssh/sshd_config
|
||
# PasswordAuthentication no
|
||
systemctl restart sshd
|
||
```
|
||
|
||
5. **配置fail2ban**
|
||
```bash
|
||
apt install fail2ban -y
|
||
systemctl enable fail2ban
|
||
```
|
||
|
||
6. **监控异常请求**
|
||
```bash
|
||
# 设置告警
|
||
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分钟**
|
||
**实际难度:非常简单!**
|
||
|
||
有问题随时联系!
|
||
|