#!/bin/bash # HotTrend Tees 原型快速启动脚本 # 使用方法: bash quick_start.sh set -e echo "🚀 HotTrend Tees 原型快速启动" echo "================================" # 检查必要的工具 check_dependencies() { echo "📋 检查依赖项..." if ! command -v docker &> /dev/null; then echo "❌ Docker 未安装,请先安装 Docker" exit 1 fi if ! command -v node &> /dev/null; then echo "❌ Node.js 未安装,请先安装 Node.js" exit 1 fi if ! command -v python3 &> /dev/null; then echo "❌ Python3 未安装,请先安装 Python3" exit 1 fi echo "✅ 依赖项检查完成" } # 创建项目目录结构 setup_project_structure() { echo "📁 创建项目目录结构..." mkdir -p hottrend-tees/{backend,frontend,docker,scripts,docs} mkdir -p hottrend-tees/backend/{app/{models,services,api,utils},tests} mkdir -p hottrend-tees/frontend/{src/{components,services},public} cd hottrend-tees echo "✅ 项目结构创建完成" } # 创建环境配置文件 create_env_files() { echo "⚙️ 创建环境配置文件..." # 后端环境配置 cat > backend/.env.example << 'EOF' # Twitter API 配置 TWITTER_BEARER_TOKEN=your_twitter_bearer_token TWITTER_API_KEY=your_twitter_api_key TWITTER_API_SECRET=your_twitter_api_secret TWITTER_ACCESS_TOKEN=your_twitter_access_token TWITTER_ACCESS_TOKEN_SECRET=your_twitter_access_token_secret # OpenAI API 配置 OPENAI_API_KEY=your_openai_api_key # AWS 配置 AWS_ACCESS_KEY_ID=your_aws_access_key AWS_SECRET_ACCESS_KEY=your_aws_secret_key AWS_REGION=us-east-1 AWS_S3_BUCKET=hottrend-tees-designs # 数据库配置 DATABASE_URL=postgresql://user:password@localhost/hottrend_tees # Redis 配置 REDIS_URL=redis://localhost:6379 EOF # 前端环境配置 cat > frontend/.env.example << 'EOF' REACT_APP_API_URL=http://localhost:8000 REACT_APP_APP_NAME=HotTrend Tees EOF echo "✅ 环境配置文件创建完成" echo "⚠️ 请复制 .env.example 为 .env 并填入真实的API密钥" } # 创建Docker配置 create_docker_configs() { echo "🐳 创建Docker配置..." # 后端Dockerfile cat > backend/Dockerfile << 'EOF' FROM python:3.11-slim WORKDIR /app # 安装系统依赖 RUN apt-get update && apt-get install -y \ build-essential \ && rm -rf /var/lib/apt/lists/* # 安装Python依赖 COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt # 复制应用代码 COPY . . EXPOSE 8000 # 启动应用 CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000", "--reload"] EOF # 前端Dockerfile cat > frontend/Dockerfile << 'EOF' FROM node:18-alpine AS build WORKDIR /app COPY package*.json ./ RUN npm ci --only=production COPY . . RUN npm run build FROM nginx:alpine COPY --from=build /app/build /usr/share/nginx/html COPY nginx.conf /etc/nginx/nginx.conf EXPOSE 80 CMD ["nginx", "-g", "daemon off;"] EOF # Nginx配置 cat > frontend/nginx.conf << 'EOF' events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; server { listen 80; server_name localhost; location / { root /usr/share/nginx/html; index index.html index.htm; try_files $uri $uri/ /index.html; } location /api/ { proxy_pass http://backend: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; } } } EOF # Docker Compose配置 cat > docker-compose.yml << 'EOF' version: '3.8' services: backend: build: ./backend ports: - "8000:8000" environment: - DATABASE_URL=postgresql://postgres:password@db:5432/hottrend_tees - REDIS_URL=redis://redis:6379 env_file: - ./backend/.env depends_on: - db - redis volumes: - ./backend:/app restart: unless-stopped frontend: build: ./frontend ports: - "3000:80" depends_on: - backend restart: unless-stopped db: image: postgres:15 environment: POSTGRES_DB: hottrend_tees POSTGRES_USER: postgres POSTGRES_PASSWORD: password ports: - "5432:5432" volumes: - postgres_data:/var/lib/postgresql/data restart: unless-stopped redis: image: redis:7-alpine ports: - "6379:6379" volumes: - redis_data:/data restart: unless-stopped volumes: postgres_data: redis_data: EOF echo "✅ Docker配置创建完成" } # 创建package.json文件 create_package_files() { echo "📦 创建package.json文件..." # 后端requirements.txt cat > backend/requirements.txt << 'EOF' fastapi==0.104.1 uvicorn[standard]==0.24.0 tweepy==4.14.0 openai==1.3.7 boto3==1.29.7 sqlalchemy==2.0.23 psycopg2-binary==2.9.9 redis==5.0.1 celery==5.3.4 python-multipart==0.0.6 python-dotenv==1.0.0 requests==2.31.0 pillow==10.1.0 pydantic-settings==2.1.0 alembic==1.13.1 asyncpg==0.29.0 aiohttp==3.9.1 pytest==7.4.3 pytest-asyncio==0.21.1 httpx==0.25.2 EOF # 前端package.json cat > frontend/package.json << 'EOF' { "name": "hottrend-tees-frontend", "version": "1.0.0", "private": true, "dependencies": { "@mui/icons-material": "^5.14.19", "@mui/material": "^5.14.20", "@emotion/react": "^11.11.1", "@emotion/styled": "^11.11.0", "@testing-library/jest-dom": "^5.17.0", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", "axios": "^1.6.2", "react": "^18.2.0", "react-dom": "^18.2.0", "react-router-dom": "^6.8.0", "react-scripts": "5.0.1", "recharts": "^2.8.0", "styled-components": "^6.1.1", "web-vitals": "^2.1.4" }, "scripts": { "start": "react-scripts start", "build": "react-scripts build", "test": "react-scripts test", "eject": "react-scripts eject" }, "eslintConfig": { "extends": [ "react-app", "react-app/jest" ] }, "browserslist": { "production": [ ">0.2%", "not dead", "not op_mini all" ], "development": [ "last 1 chrome version", "last 1 firefox version", "last 1 safari version" ] }, "proxy": "http://localhost:8000" } EOF echo "✅ Package文件创建完成" } # 创建基础代码文件 create_basic_code() { echo "💻 创建基础代码文件..." # 后端主文件 cat > backend/app/__init__.py << 'EOF' # HotTrend Tees Backend EOF cat > backend/app/main.py << 'EOF' from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware app = FastAPI( title="HotTrend Tees API", description="AI驱动的T-shirt定制平台原型API", version="1.0.0" ) app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) @app.get("/") async def root(): return {"message": "HotTrend Tees API v1.0.0", "status": "running"} @app.get("/api/health") async def health_check(): return { "status": "healthy", "timestamp": "2025-07-03T00:00:00Z", "services": { "api": "running" } } EOF # 前端基础文件 cat > frontend/public/index.html << 'EOF' HotTrend Tees
EOF cat > frontend/src/index.js << 'EOF' import React from 'react'; import ReactDOM from 'react-dom/client'; import App from './App'; const root = ReactDOM.createRoot(document.getElementById('root')); root.render( ); EOF cat > frontend/src/App.js << 'EOF' import React, { useState, useEffect } from 'react'; import { ThemeProvider, createTheme } from '@mui/material/styles'; import { CssBaseline, AppBar, Toolbar, Typography, Container, Box, Card, CardContent, Button, Alert } from '@mui/material'; import { AutoAwesome } from '@mui/icons-material'; const theme = createTheme({ palette: { primary: { main: '#6366f1', }, secondary: { main: '#ec4899', }, }, }); function App() { const [apiStatus, setApiStatus] = useState('checking'); useEffect(() => { checkApiHealth(); }, []); const checkApiHealth = async () => { try { const response = await fetch('/api/health'); const data = await response.json(); setApiStatus(data.status === 'healthy' ? 'healthy' : 'error'); } catch (error) { setApiStatus('error'); } }; return ( HotTrend Tees - AI驱动的T-shirt定制平台 欢迎使用 HotTrend Tees 原型 基于 Twitter API v2 + OpenAI + AWS 的AI驱动T-shirt定制平台 系统状态 {apiStatus === 'checking' && ( 正在检查API连接... )} {apiStatus === 'healthy' && ( API服务运行正常 )} {apiStatus === 'error' && ( 重试 }> API服务连接失败 )} 下一步操作 1. 配置API密钥(Twitter、OpenAI、AWS) 2. 启动完整功能模块 3. 测试趋势分析和设计生成功能 ); } export default App; EOF echo "✅ 基础代码文件创建完成" } # 创建启动脚本 create_startup_scripts() { echo "🔧 创建启动脚本..." # 开发环境启动脚本 cat > scripts/start-dev.sh << 'EOF' #!/bin/bash echo "🚀 启动HotTrend Tees开发环境" # 检查环境文件 if [ ! -f "./backend/.env" ]; then echo "❌ 请先创建 backend/.env 文件" echo "💡 提示: 复制 backend/.env.example 为 backend/.env 并填入API密钥" exit 1 fi if [ ! -f "./frontend/.env" ]; then echo "❌ 请先创建 frontend/.env 文件" echo "💡 提示: 复制 frontend/.env.example 为 frontend/.env" exit 1 fi # 启动服务 echo "🐳 启动Docker服务..." docker-compose up -d db redis echo "⏳ 等待数据库启动..." sleep 10 echo "🐍 启动后端服务..." cd backend python -m venv venv source venv/bin/activate pip install -r requirements.txt uvicorn app.main:app --reload --host 0.0.0.0 --port 8000 & cd .. echo "⚛️ 启动前端服务..." cd frontend npm install npm start & cd .. echo "✅ 开发环境启动完成!" echo "🌐 前端地址: http://localhost:3000" echo "📡 后端API: http://localhost:8000" echo "📚 API文档: http://localhost:8000/docs" EOF # 生产环境启动脚本 cat > scripts/start-prod.sh << 'EOF' #!/bin/bash echo "🚀 启动HotTrend Tees生产环境" # 检查环境文件 if [ ! -f "./backend/.env" ]; then echo "❌ 请先创建 backend/.env 文件" exit 1 fi if [ ! -f "./frontend/.env" ]; then echo "❌ 请先创建 frontend/.env 文件" exit 1 fi # 构建并启动所有服务 echo "🐳 构建并启动所有服务..." docker-compose up -d --build echo "⏳ 等待服务启动..." sleep 30 echo "✅ 生产环境启动完成!" echo "🌐 应用地址: http://localhost:3000" echo "📡 API地址: http://localhost:8000" # 显示服务状态 docker-compose ps EOF # 停止脚本 cat > scripts/stop.sh << 'EOF' #!/bin/bash echo "🛑 停止HotTrend Tees服务" # 停止Docker服务 docker-compose down # 停止本地进程 pkill -f "uvicorn app.main:app" pkill -f "npm start" echo "✅ 所有服务已停止" EOF # 设置脚本可执行权限 chmod +x scripts/*.sh echo "✅ 启动脚本创建完成" } # 创建测试脚本 create_test_script() { echo "🧪 创建测试脚本..." cat > scripts/test-api.py << 'EOF' #!/usr/bin/env python3 import asyncio import aiohttp import json import sys async def test_api(): base_url = "http://localhost:8000" print("🧪 开始API测试") print("=" * 40) async with aiohttp.ClientSession() as session: try: # 测试健康检查 print("📋 测试健康检查...") async with session.get(f"{base_url}/api/health") as resp: if resp.status == 200: health_data = await resp.json() print(f"✅ 健康检查通过: {health_data['status']}") else: print(f"❌ 健康检查失败: HTTP {resp.status}") return False # 测试根路径 print("🏠 测试根路径...") async with session.get(f"{base_url}/") as resp: if resp.status == 200: root_data = await resp.json() print(f"✅ 根路径访问成功: {root_data['message']}") else: print(f"❌ 根路径访问失败: HTTP {resp.status}") return False print("\n🎉 所有基础测试通过!") print("💡 提示: 配置API密钥后可以测试完整功能") return True except aiohttp.ClientError as e: print(f"❌ 连接失败: {e}") print("💡 确保后端服务已启动 (python -m uvicorn app.main:app)") return False except Exception as e: print(f"❌ 测试失败: {e}") return False if __name__ == "__main__": success = asyncio.run(test_api()) sys.exit(0 if success else 1) EOF chmod +x scripts/test-api.py echo "✅ 测试脚本创建完成" } # 创建README文件 create_readme() { echo "📖 创建README文件..." cat > README.md << 'EOF' # HotTrend Tees 原型项目 🚀 基于 Twitter API v2 + OpenAI + AWS 的AI驱动T-shirt定制平台原型 ## 快速开始 ### 1. 环境准备 ```bash # 复制环境配置文件 cp backend/.env.example backend/.env cp frontend/.env.example frontend/.env # 编辑环境文件,填入真实的API密钥 # backend/.env - 填入Twitter、OpenAI、AWS密钥 # frontend/.env - 配置前端参数 ``` ### 2. 开发环境启动 ```bash # 启动开发环境 bash scripts/start-dev.sh # 或分别启动各个组件 # 1. 启动数据库和Redis docker-compose up -d db redis # 2. 启动后端 cd backend python -m venv venv source venv/bin/activate pip install -r requirements.txt uvicorn app.main:app --reload # 3. 启动前端 cd frontend npm install npm start ``` ### 3. 生产环境部署 ```bash # 启动生产环境 bash scripts/start-prod.sh # 或使用Docker Compose docker-compose up -d --build ``` ### 4. API测试 ```bash # 运行API测试 python scripts/test-api.py # 或手动测试 curl http://localhost:8000/api/health ``` ## 访问地址 - 🌐 前端应用: http://localhost:3000 - 📡 后端API: http://localhost:8000 - 📚 API文档: http://localhost:8000/docs - 🗄️ 数据库: localhost:5432 - 🔴 Redis: localhost:6379 ## 项目结构 ``` hottrend-tees/ ├── backend/ # FastAPI后端 │ ├── app/ # 应用代码 │ ├── requirements.txt # Python依赖 │ └── Dockerfile # Docker配置 ├── frontend/ # React前端 │ ├── src/ # 源代码 │ ├── package.json # Node依赖 │ └── Dockerfile # Docker配置 ├── scripts/ # 脚本文件 │ ├── start-dev.sh # 开发环境启动 │ ├── start-prod.sh # 生产环境启动 │ ├── stop.sh # 停止服务 │ └── test-api.py # API测试 ├── docker-compose.yml # Docker编排 └── README.md # 项目说明 ``` ## 功能特性 ### ✅ 已实现 - 基础API框架 (FastAPI) - 前端界面框架 (React + Material-UI) - Docker容器化部署 - 健康检查和监控 - 开发/生产环境配置 ### 🚧 待实现 (需要API密钥) - Twitter趋势数据获取 - OpenAI图像生成 - AWS S3存储集成 - 用户认证系统 - 订单管理系统 ## 开发指南 ### 环境要求 - Python 3.11+ - Node.js 18+ - Docker & Docker Compose - PostgreSQL 15+ - Redis 7+ ### API密钥配置 1. **Twitter API v2** - 访问: https://developer.twitter.com/ - 申请开发者账号并创建应用 - 获取Bearer Token和API密钥 2. **OpenAI API** - 访问: https://platform.openai.com/ - 创建账号并生成API密钥 - 确保账户有DALL-E 3访问权限 3. **AWS服务** - 访问: https://aws.amazon.com/ - 创建IAM用户并配置S3权限 - 获取Access Key和Secret Key ### 调试技巧 ```bash # 查看容器日志 docker-compose logs backend docker-compose logs frontend # 进入容器调试 docker-compose exec backend bash docker-compose exec db psql -U postgres -d hottrend_tees # 重启特定服务 docker-compose restart backend ``` ## 部署指南 ### AWS ECS部署 1. 构建Docker镜像 2. 推送到ECR 3. 创建ECS任务定义 4. 部署到ECS集群 详细部署步骤请参考: `docs/deployment.md` ## 贡献指南 1. Fork项目 2. 创建功能分支 3. 提交代码 4. 创建Pull Request ## 许可证 MIT License ## 支持 如有问题,请创建Issue或联系开发团队。 EOF echo "✅ README文件创建完成" } # 显示完成信息 show_completion_info() { echo "" echo "🎉 HotTrend Tees 原型项目创建完成!" echo "================================" echo "" echo "📁 项目位置: $(pwd)" echo "" echo "📋 下一步操作:" echo "1️⃣ 配置API密钥:" echo " cp backend/.env.example backend/.env" echo " cp frontend/.env.example frontend/.env" echo " # 编辑 .env 文件,填入真实的API密钥" echo "" echo "2️⃣ 启动开发环境:" echo " bash scripts/start-dev.sh" echo "" echo "3️⃣ 访问应用:" echo " 🌐 前端: http://localhost:3000" echo " 📡 API: http://localhost:8000" echo " 📚 文档: http://localhost:8000/docs" echo "" echo "4️⃣ 运行测试:" echo " python scripts/test-api.py" echo "" echo "📖 更多信息请查看 README.md 文件" echo "" } # 主执行流程 main() { echo "开始创建 HotTrend Tees 原型项目..." check_dependencies setup_project_structure create_env_files create_docker_configs create_package_files create_basic_code create_startup_scripts create_test_script create_readme show_completion_info } # 运行主函数 main "$@"