2025-03-26 12:14:52 +08:00
|
|
|
|
# AWS EC2 价格计算器
|
|
|
|
|
|
|
|
|
|
|
|
这是一个基于Vue.js和Python FastAPI开发的AWS EC2价格计算器网站,可以帮助用户计算和比较不同EC2实例的价格。
|
|
|
|
|
|
|
|
|
|
|
|
## 功能特点
|
|
|
|
|
|
|
2025-04-03 12:52:37 +08:00
|
|
|
|
1. **价格计算器**
|
2025-03-26 12:14:52 +08:00
|
|
|
|
- 选择实例类型、区域、操作系统和购买选项
|
|
|
|
|
|
- 实时计算价格
|
|
|
|
|
|
- 显示详细的价格信息
|
|
|
|
|
|
|
2025-04-03 12:52:37 +08:00
|
|
|
|
2. **实例搜索**
|
|
|
|
|
|
- 根据CPU、内存和其他规格查找最合适的实例
|
|
|
|
|
|
- 支持从AWS官方API和数据库两种数据源查询
|
|
|
|
|
|
- 显示完整规格和价格信息
|
2025-03-26 12:14:52 +08:00
|
|
|
|
|
2025-04-03 12:52:37 +08:00
|
|
|
|
3. **价格比较**
|
|
|
|
|
|
- 支持多个实例配置的并排比较
|
|
|
|
|
|
- 生成标准化的报价单
|
|
|
|
|
|
- 支持导出Excel格式报价单
|
2025-03-26 12:14:52 +08:00
|
|
|
|
|
|
|
|
|
|
## 技术栈
|
|
|
|
|
|
|
2025-04-03 12:52:37 +08:00
|
|
|
|
- **前端**:Vue.js 3 + Element Plus
|
|
|
|
|
|
- **后端**:Python FastAPI
|
|
|
|
|
|
- **数据源**:AWS Pricing API + MySQL数据库
|
2025-03-26 12:14:52 +08:00
|
|
|
|
|
|
|
|
|
|
## 系统要求
|
|
|
|
|
|
|
2025-04-03 12:52:37 +08:00
|
|
|
|
- Python 3.9+
|
2025-03-26 12:14:52 +08:00
|
|
|
|
- Node.js 14+
|
|
|
|
|
|
- npm 6+
|
2025-04-03 12:52:37 +08:00
|
|
|
|
- MySQL 5.7+
|
2025-03-26 12:14:52 +08:00
|
|
|
|
|
2025-04-03 12:52:37 +08:00
|
|
|
|
## 项目结构
|
2025-03-26 12:14:52 +08:00
|
|
|
|
|
|
|
|
|
|
```
|
2025-04-03 12:52:37 +08:00
|
|
|
|
.
|
|
|
|
|
|
├── backend/ # 后端项目
|
|
|
|
|
|
│ ├── app/ # 应用代码
|
|
|
|
|
|
│ │ ├── api/ # API路由
|
|
|
|
|
|
│ │ ├── core/ # 核心配置
|
|
|
|
|
|
│ │ ├── models/ # 数据模型
|
|
|
|
|
|
│ │ └── services/ # 服务层
|
|
|
|
|
|
│ ├── main.py # 入口文件
|
|
|
|
|
|
│ └── requirements.txt # 依赖包
|
|
|
|
|
|
└── frontend/ # 前端项目
|
|
|
|
|
|
├── public/ # 静态资源
|
|
|
|
|
|
├── src/ # 源代码
|
|
|
|
|
|
│ ├── api/ # API调用
|
|
|
|
|
|
│ ├── assets/ # 资源文件
|
|
|
|
|
|
│ ├── components/ # 组件
|
|
|
|
|
|
│ └── views/ # 页面
|
|
|
|
|
|
└── package.json # 依赖配置
|
2025-03-26 12:14:52 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
2025-04-03 12:52:37 +08:00
|
|
|
|
## 安装与部署
|
2025-03-26 12:14:52 +08:00
|
|
|
|
|
2025-04-03 12:52:37 +08:00
|
|
|
|
### 后端部署
|
2025-03-26 12:14:52 +08:00
|
|
|
|
|
2025-04-03 12:52:37 +08:00
|
|
|
|
1. **创建并激活虚拟环境**
|
2025-03-26 12:14:52 +08:00
|
|
|
|
|
|
|
|
|
|
```bash
|
2025-04-03 12:52:37 +08:00
|
|
|
|
# 创建虚拟环境
|
|
|
|
|
|
conda create -n calc python=3.10
|
|
|
|
|
|
conda activate calc
|
2025-03-26 12:14:52 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
2025-04-03 12:52:37 +08:00
|
|
|
|
2. **安装依赖**
|
|
|
|
|
|
|
2025-03-26 12:14:52 +08:00
|
|
|
|
```bash
|
|
|
|
|
|
cd backend
|
|
|
|
|
|
pip install -r requirements.txt
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2025-04-03 12:52:37 +08:00
|
|
|
|
3. **配置环境变量**
|
2025-03-26 12:14:52 +08:00
|
|
|
|
|
2025-04-03 12:52:37 +08:00
|
|
|
|
创建`.env`文件在backend目录下,添加以下内容:
|
2025-03-26 12:14:52 +08:00
|
|
|
|
|
|
|
|
|
|
```
|
2025-04-03 12:52:37 +08:00
|
|
|
|
# AWS凭证
|
2025-03-26 12:14:52 +08:00
|
|
|
|
AWS_ACCESS_KEY_ID=your_access_key
|
|
|
|
|
|
AWS_SECRET_ACCESS_KEY=your_secret_key
|
2025-04-03 12:52:37 +08:00
|
|
|
|
AWS_DEFAULT_REGION=us-east-1
|
2025-03-26 12:14:52 +08:00
|
|
|
|
|
2025-04-03 12:52:37 +08:00
|
|
|
|
# MySQL数据库配置
|
|
|
|
|
|
MYSQL_HOST=localhost
|
|
|
|
|
|
MYSQL_USER=your_username
|
|
|
|
|
|
MYSQL_PASSWORD=your_password
|
|
|
|
|
|
MYSQL_DATABASE=aws_price
|
2025-03-26 12:14:52 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
2025-04-03 12:52:37 +08:00
|
|
|
|
4. **启动开发服务器**
|
2025-03-26 12:14:52 +08:00
|
|
|
|
|
|
|
|
|
|
```bash
|
2025-04-03 12:52:37 +08:00
|
|
|
|
# 开发环境
|
|
|
|
|
|
uvicorn main:app --reload --host 0.0.0.0 --port 8000
|
2025-03-26 12:14:52 +08:00
|
|
|
|
|
2025-04-03 12:52:37 +08:00
|
|
|
|
# 生产环境
|
|
|
|
|
|
gunicorn main:app -w 4 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:8000
|
2025-03-26 12:14:52 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
2025-04-03 12:52:37 +08:00
|
|
|
|
### 前端部署
|
2025-03-26 12:14:52 +08:00
|
|
|
|
|
2025-04-03 12:52:37 +08:00
|
|
|
|
1. **安装依赖**
|
2025-03-26 12:14:52 +08:00
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
cd frontend
|
|
|
|
|
|
npm install
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2025-04-03 12:52:37 +08:00
|
|
|
|
2. **启动开发服务器**
|
|
|
|
|
|
|
2025-03-26 12:14:52 +08:00
|
|
|
|
```bash
|
|
|
|
|
|
npm run serve
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2025-04-03 12:52:37 +08:00
|
|
|
|
3. **构建生产版本**
|
2025-03-26 12:14:52 +08:00
|
|
|
|
|
|
|
|
|
|
```bash
|
2025-04-03 12:52:37 +08:00
|
|
|
|
npm run build
|
2025-03-26 12:14:52 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
2025-04-03 12:52:37 +08:00
|
|
|
|
4. **前端生产环境部署**
|
2025-03-26 12:14:52 +08:00
|
|
|
|
|
2025-04-03 12:52:37 +08:00
|
|
|
|
将`frontend/dist`目录下的文件部署到Web服务器的根目录。
|
2025-03-26 12:14:52 +08:00
|
|
|
|
|
2025-04-03 12:52:37 +08:00
|
|
|
|
### Nginx配置示例
|
2025-03-26 12:14:52 +08:00
|
|
|
|
|
|
|
|
|
|
```nginx
|
|
|
|
|
|
server {
|
|
|
|
|
|
listen 80;
|
|
|
|
|
|
server_name your_domain.com;
|
|
|
|
|
|
|
2025-04-03 12:52:37 +08:00
|
|
|
|
# 前端静态文件
|
2025-03-26 12:14:52 +08:00
|
|
|
|
location / {
|
2025-04-03 12:52:37 +08:00
|
|
|
|
root /path/to/frontend/dist;
|
|
|
|
|
|
index index.html;
|
2025-03-26 12:14:52 +08:00
|
|
|
|
try_files $uri $uri/ /index.html;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-04-03 12:52:37 +08:00
|
|
|
|
# 后端API代理
|
2025-03-26 12:14:52 +08:00
|
|
|
|
location /api {
|
2025-04-03 12:52:37 +08:00
|
|
|
|
proxy_pass http://127.0.0.1:8000;
|
2025-03-26 12:14:52 +08:00
|
|
|
|
proxy_set_header Host $host;
|
|
|
|
|
|
proxy_set_header X-Real-IP $remote_addr;
|
2025-04-03 12:52:37 +08:00
|
|
|
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
2025-03-26 12:14:52 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2025-04-03 12:52:37 +08:00
|
|
|
|
## API接口说明
|
2025-03-26 12:14:52 +08:00
|
|
|
|
|
2025-04-03 12:52:37 +08:00
|
|
|
|
### 主要API端点
|
2025-03-26 12:14:52 +08:00
|
|
|
|
|
2025-04-03 12:52:37 +08:00
|
|
|
|
- `GET /api/regions` - 获取所有可用区域
|
|
|
|
|
|
- `GET /api/instance-types` - 获取所有实例类型
|
|
|
|
|
|
- `POST /api/search-instances` - 搜索符合条件的实例(AWS API方式)
|
|
|
|
|
|
- `POST /api/search-instances-v2` - 搜索符合条件的实例(数据库方式)
|
|
|
|
|
|
- `POST /api/compare-prices` - 对比多个配置的价格
|
2025-03-26 12:14:52 +08:00
|
|
|
|
|
2025-04-03 12:52:37 +08:00
|
|
|
|
### 示例请求
|
2025-03-26 12:14:52 +08:00
|
|
|
|
|
2025-04-03 12:52:37 +08:00
|
|
|
|
```json
|
|
|
|
|
|
// 搜索实例示例请求
|
|
|
|
|
|
POST /api/search-instances-v2
|
|
|
|
|
|
{
|
|
|
|
|
|
"cpu_cores": 4,
|
|
|
|
|
|
"memory_gb": 16,
|
|
|
|
|
|
"disk_gb": 100,
|
|
|
|
|
|
"region": "us-east-1",
|
|
|
|
|
|
"operating_system": "Linux"
|
|
|
|
|
|
}
|
2025-03-26 12:14:52 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
2025-04-03 12:52:37 +08:00
|
|
|
|
## 数据库说明
|
2025-03-26 12:14:52 +08:00
|
|
|
|
|
2025-04-03 12:52:37 +08:00
|
|
|
|
该应用使用MySQL数据库存储AWS实例价格数据,主要表结构如下:
|
2025-03-26 12:14:52 +08:00
|
|
|
|
|
2025-04-03 12:52:37 +08:00
|
|
|
|
**aws_price表**
|
|
|
|
|
|
- `id` - 唯一标识符
|
|
|
|
|
|
- `locations` - 区域类型
|
|
|
|
|
|
- `area_en` - 区域英文名称
|
|
|
|
|
|
- `area_cn` - 区域中文名称
|
|
|
|
|
|
- `instance_type` - 实例类型
|
|
|
|
|
|
- `price` - 小时价格
|
|
|
|
|
|
- `operating_system` - 操作系统
|
|
|
|
|
|
- `vcpu` - CPU核心数
|
|
|
|
|
|
- `memory` - 内存大小(GB)
|
|
|
|
|
|
- `updatetime` - 更新时间
|
2025-03-26 12:14:52 +08:00
|
|
|
|
|
2025-04-03 12:52:37 +08:00
|
|
|
|
## 常见问题解答
|
2025-03-26 12:14:52 +08:00
|
|
|
|
|
2025-04-03 12:52:37 +08:00
|
|
|
|
1. **价格计算不准确?**
|
|
|
|
|
|
- 确保已配置正确的AWS凭证
|
|
|
|
|
|
- 价格可能因区域和时间而变化
|
2025-03-26 12:14:52 +08:00
|
|
|
|
|
2025-04-03 12:52:37 +08:00
|
|
|
|
2. **无法连接数据库?**
|
|
|
|
|
|
- 检查数据库连接配置
|
|
|
|
|
|
- 确保MySQL服务已启动
|
|
|
|
|
|
- 验证用户权限
|
2025-03-26 12:14:52 +08:00
|
|
|
|
|
2025-04-03 12:52:37 +08:00
|
|
|
|
3. **API返回错误?**
|
|
|
|
|
|
- 检查日志获取详细错误信息
|
|
|
|
|
|
- 验证请求格式是否正确
|
2025-03-26 12:14:52 +08:00
|
|
|
|
|
|
|
|
|
|
## 贡献指南
|
|
|
|
|
|
|
|
|
|
|
|
1. Fork 项目
|
2025-04-03 12:52:37 +08:00
|
|
|
|
2. 创建特性分支 (`git checkout -b feature/amazing-feature`)
|
|
|
|
|
|
3. 提交更改 (`git commit -m 'Add some amazing feature'`)
|
|
|
|
|
|
4. 推送到分支 (`git push origin feature/amazing-feature`)
|
|
|
|
|
|
5. 创建Pull Request
|
2025-03-26 12:14:52 +08:00
|
|
|
|
|
|
|
|
|
|
## 许可证
|
|
|
|
|
|
|
|
|
|
|
|
MIT License
|