From ee88c5b3e15ce7fa72a9844d3319cab9d1f69f1a Mon Sep 17 00:00:00 2001 From: xiaoma Date: Tue, 10 Feb 2026 21:40:05 +0800 Subject: [PATCH] test --- backend/Dockerfile | 3 +++ backend/requirements.txt | 1 + .../shop/__pycache__/views.cpython-313.pyc | Bin 24872 -> 27505 bytes backend/shop/admin.py | 4 ++-- docker-compose.yml | 2 +- frontend/Dockerfile | 18 ++++++++++++------ frontend/vite.config.js | 9 +++++++++ 7 files changed, 28 insertions(+), 9 deletions(-) diff --git a/backend/Dockerfile b/backend/Dockerfile index 12e99b4..3c912ce 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -15,5 +15,8 @@ RUN pip install --upgrade pip && pip install -r requirements.txt # Copy project COPY . /app/ +# Expose port +EXPOSE 8000 + # Run the application CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"] diff --git a/backend/requirements.txt b/backend/requirements.txt index 41f80ac..1ffa959 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -17,3 +17,4 @@ rpds-py==0.30.0 sqlparse==0.5.5 uritemplate==4.2.0 wechatpayv3==2.0.1 +drf-spectacular-sidecar==2026.1.1 diff --git a/backend/shop/__pycache__/views.cpython-313.pyc b/backend/shop/__pycache__/views.cpython-313.pyc index 7e83a1020e809bed2ec4b5fa8ddc9f81aede99e8..b7fcf84e35bffe0140f26f34b3ef482eed996615 100644 GIT binary patch delta 6184 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 diff --git a/backend/shop/admin.py b/backend/shop/admin.py index bf3593c..b60089e 100644 --- a/backend/shop/admin.py +++ b/backend/shop/admin.py @@ -160,8 +160,8 @@ class SalespersonAdmin(ModelAdmin): total_sales_display.short_description = "累计销售额 (已支付)" def promotion_url(self, obj): - # 假设前端部署在 localhost:5173,生产环境需配置 - base_url = "http://localhost:5173" + # 假设前端部署在 localhost:15173,生产环境需配置 + base_url = "http://localhost:15173" return f"{base_url}/?ref={obj.code}" @display(description="推广链接") diff --git a/docker-compose.yml b/docker-compose.yml index f34d066..961da48 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -19,7 +19,7 @@ services: - ./frontend:/app - /app/node_modules ports: - - "5173:5173" + - "15173:15173" environment: - VITE_API_URL=http://localhost:8000/api depends_on: diff --git a/frontend/Dockerfile b/frontend/Dockerfile index c21d2dd..500402c 100644 --- a/frontend/Dockerfile +++ b/frontend/Dockerfile @@ -1,5 +1,5 @@ # Use an official Node runtime as a parent image -FROM node:18-alpine +FROM node:22-alpine # Set working directory WORKDIR /app @@ -8,11 +8,17 @@ WORKDIR /app COPY package.json package-lock.json* ./ RUN npm install -# Copy project files +# 复制项目文件 COPY . . -# Expose the port the app runs on -EXPOSE 5173 +# 设置环境变量供构建时使用 +ENV VITE_API_URL=http://localhost:8000/api -# Start the application -CMD ["npm", "run", "dev", "--", "--host"] +# 构建生产环境代码 +RUN npm run build + +# 暴露应用运行的端口 +EXPOSE 15173 + +# 启动应用 (Preview 模式) +CMD ["npm", "run", "preview", "--", "--host", "0.0.0.0", "--port", "15173"] diff --git a/frontend/vite.config.js b/frontend/vite.config.js index 8b0f57b..7335060 100644 --- a/frontend/vite.config.js +++ b/frontend/vite.config.js @@ -1,7 +1,16 @@ import { defineConfig } from 'vite' import react from '@vitejs/plugin-react' +//123 // https://vite.dev/config/ export default defineConfig({ plugins: [react()], + server: { + host: '0.0.0.0', + port: 5173, + }, + preview: { + host: '0.0.0.0', + port: 15173, + } })