From a5807e3fbaa073ffe7c3ca04a6e54f6df310fe90 Mon Sep 17 00:00:00 2001 From: xie7654 <765462425@qq.com> Date: Fri, 4 Jul 2025 13:12:32 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9docker-compose.dev?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .dockerignore | 70 ++++++++++++++++++++++++++++++ .gitignore | 5 ++- backend/Dockerfile | 5 ++- backend/backend/__init__.py | 1 - backend/backend/settings.py | 3 +- backend/requirements.txt | 2 +- data/.gitkeep | 0 docker-compose.dev.yml | 43 +++++++++--------- docker/.env.dev | 1 + docker/.env.docker | 1 + web/.dockerignore | 2 +- web/Dockerfile | 42 +++++------------- web/apps/web-antd/.env.development | 3 +- web/apps/web-antd/.env.docker | 1 + web/apps/web-antd/vite.config.mts | 13 +++--- 15 files changed, 127 insertions(+), 65 deletions(-) create mode 100644 .dockerignore create mode 100644 data/.gitkeep create mode 100644 docker/.env.dev create mode 100644 docker/.env.docker create mode 100644 web/apps/web-antd/.env.docker diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..0507dad --- /dev/null +++ b/.dockerignore @@ -0,0 +1,70 @@ +**/.idea/ +.idea/** +**/*.pyc +__pycache__/ +build/ +*.egg-info/ +.python-version +.pytest_cache/ +dist/ +eggs/ +lib/ +lib64/ +.DS_Store +docs/_build/ +*.env +**/local_settings.py +static/ + +node_modules +dist +dist-ssr +dist.zip +dist.tar +dist.war +.nitro +.output +*-dist.zip +*-dist.tar +*-dist.war +coverage +*.local +**/.vitepress/cache +.cache +.turbo +.temp +dev-dist +.stylelintcache +yarn.lock +package-lock.json +.VSCodeCounter +**/backend-mock/data + +# local env files +.env.local +.env.*.local +.eslintcache + +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* +vite.config.mts.* +vite.config.mjs.* +vite.config.js.* +vite.config.ts.* + +# Editor directories and files +.idea +# .vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? +.history +celerybeat-schedule.db +**/node_modules \ No newline at end of file diff --git a/.gitignore b/.gitignore index 06d3920..b634887 100644 --- a/.gitignore +++ b/.gitignore @@ -17,7 +17,6 @@ docs/_build/ static/ node_modules -.DS_Store dist dist-ssr dist.zip @@ -67,4 +66,6 @@ vite.config.ts.* *.sln *.sw? .history -celerybeat-schedule.db \ No newline at end of file +celerybeat-schedule.db +**/.pnpm-store +data/mysql \ No newline at end of file diff --git a/backend/Dockerfile b/backend/Dockerfile index ba914f8..4324942 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -1,5 +1,5 @@ # syntax=docker/dockerfile:1 -FROM python:3.12.2 +FROM python:3.12.2 AS dev WORKDIR /app @@ -16,6 +16,7 @@ COPY requirements.txt . RUN pip install -r requirements.txt COPY . . +CMD ["sh", "-c", "sleep 10 && python manage.py runserver 0.0.0.0:8000"] # 默认命令,开发和生产通过 docker-compose 覆盖 -CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"] \ No newline at end of file +#CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"] \ No newline at end of file diff --git a/backend/backend/__init__.py b/backend/backend/__init__.py index 62c4f9a..fb989c4 100644 --- a/backend/backend/__init__.py +++ b/backend/backend/__init__.py @@ -1,4 +1,3 @@ - from .celery import app as celery_app __all__ = ('celery_app',) diff --git a/backend/backend/settings.py b/backend/backend/settings.py index eb0bd92..2b9dc14 100644 --- a/backend/backend/settings.py +++ b/backend/backend/settings.py @@ -94,7 +94,8 @@ DATABASES = { 'NAME': 'django_vue', 'USER': 'root', 'PASSWORD': '', - 'HOST': 'localhost', + 'HOST': os.getenv('DATABASE_HOST', 'localhost'), + # 'HOST': 'localhost', } } diff --git a/backend/requirements.txt b/backend/requirements.txt index eb23aaa..99b9f20 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -11,4 +11,4 @@ celery==5.5.3 redis==6.2.0 eventlet==0.40.0 goofish_api==0.0.6 -flower==2.0.1 \ No newline at end of file +flower==2.0.1 diff --git a/data/.gitkeep b/data/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index c1d22c5..b417223 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -1,7 +1,29 @@ services: + mysql: + image: mysql:8 + environment: + MYSQL_ROOT_PASSWORD: my-secret-pw + MYSQL_DATABASE: django_vue + ports: + - "43306:3306" + volumes: + - ./sql/django_vue.sql:/docker-entrypoint-initdb.d/django_vue.sql + - ./data/mysql:/var/lib/mysql # <-- 加这一行 + networks: + - dj_admin_network + env_file: + - ./docker/.env.dev + healthcheck: + test: [ "CMD", "mysqladmin", "ping", "-h", "localhost", "-pmy-secret-pw" ] + interval: 5s + timeout: 5s + retries: 10 + + backend: build: context: ./backend + target: dev volumes: - ./backend:/app ports: @@ -17,24 +39,6 @@ services: mysql: condition: service_healthy - mysql: - image: mysql:8 - environment: - MYSQL_ROOT_PASSWORD: my-secret-pw - MYSQL_DATABASE: django_vue - ports: - - "43306:3306" - volumes: - - ./sql/django_vue.sql:/docker-entrypoint-initdb.d/django_vue.sql - networks: - - dj_admin_network - env_file: - - ./docker/.env.dev - healthcheck: - test: [ "CMD", "mysqladmin", "ping", "-h", "localhost", "-pmy-secret-pw" ] - interval: 5s - timeout: 5s - retries: 10 web: build: @@ -42,14 +46,13 @@ services: target: dev volumes: - ./web:/app - - /app/node_modules ports: - "5678:5678" - command: pnpm run dev:antd networks: - dj_admin_network env_file: - ./docker/.env.dev + - ./docker/.env.docker networks: dj_admin_network: diff --git a/docker/.env.dev b/docker/.env.dev new file mode 100644 index 0000000..ba4fba4 --- /dev/null +++ b/docker/.env.dev @@ -0,0 +1 @@ +VITE_BACKEND_URL=http://localhost:8000 diff --git a/docker/.env.docker b/docker/.env.docker new file mode 100644 index 0000000..53df50a --- /dev/null +++ b/docker/.env.docker @@ -0,0 +1 @@ +VITE_BACKEND_URL=http://backend:8000 diff --git a/web/.dockerignore b/web/.dockerignore index 52b833a..938853a 100644 --- a/web/.dockerignore +++ b/web/.dockerignore @@ -1,4 +1,4 @@ -node_modules +**/node_modules .git .gitignore *.md diff --git a/web/Dockerfile b/web/Dockerfile index 29d9f12..529ce1a 100644 --- a/web/Dockerfile +++ b/web/Dockerfile @@ -1,27 +1,4 @@ # syntax=docker/dockerfile:1 - -#################### -# 构建阶段 -#################### -FROM node:22.17.0 AS build - -WORKDIR /app - -# 先拷贝依赖文件 -COPY package.json ./ - -# 启用 corepack + 设置 registry -RUN corepack enable \ - && corepack prepare pnpm@latest --activate \ - && pnpm config set registry https://registry.npmjs.org/ \ - && pnpm install - -# 再拷贝源码 -COPY . . - -# 编译 -RUN pnpm run build:antd - #################### # 生产阶段 #################### @@ -41,24 +18,27 @@ FROM node:22.17.0 AS dev WORKDIR /app +ENV PNPM_SKIP_PROMPT=true + # 拷贝项目 COPY . . -# 如果有私有 registry -COPY .npmrc .npmrc +COPY /apps/web-antd/.env.docker /apps/web-antd/.env.local # 安装 pnpm(官方推荐 corepack,更好) -RUN corepack enable \ - && corepack prepare pnpm@latest --activate +RUN corepack enable && corepack prepare pnpm@latest --activate # 安装依赖(一定要在 monorepo 根目录,保证 workspace 有效) -RUN pnpm i +RUN pnpm store prune && rm -rf $(pnpm store path) && \ + rm -rf node_modules .npmrc package-lock.json pnpm-lock.yaml .pnpm-store .turbo && \ + find . -name 'node_modules' -type d -prune -exec rm -rf '{}' + + +RUN yes | pnpm recursive install # 设置前端工作目录(根据实际情况修改) -WORKDIR /app/apps/web-antd - # 暴露前端 dev server 端口 EXPOSE 5678 +#CMD ["tail", "-f", "/dev/null"] # 默认启动 dev server -CMD ["pnpm", "run", "dev:antd"] +CMD ["npm", "run", "dev:antd"] diff --git a/web/apps/web-antd/.env.development b/web/apps/web-antd/.env.development index 1257291..71cc73d 100644 --- a/web/apps/web-antd/.env.development +++ b/web/apps/web-antd/.env.development @@ -4,7 +4,8 @@ VITE_PORT=5678 VITE_BASE=/ # 接口地址 -VITE_GLOB_API_URL=http://127.0.0.1:8000/api +VITE_GLOB_API_URL=/api +VITE_BACKEND_URL=http://localhost:8000 # 是否开启 Nitro Mock服务,true 为开启,false 为关闭 VITE_NITRO_MOCK=false diff --git a/web/apps/web-antd/.env.docker b/web/apps/web-antd/.env.docker new file mode 100644 index 0000000..53df50a --- /dev/null +++ b/web/apps/web-antd/.env.docker @@ -0,0 +1 @@ +VITE_BACKEND_URL=http://backend:8000 diff --git a/web/apps/web-antd/vite.config.mts b/web/apps/web-antd/vite.config.mts index b6360f1..8fff1e5 100644 --- a/web/apps/web-antd/vite.config.mts +++ b/web/apps/web-antd/vite.config.mts @@ -1,17 +1,20 @@ import { defineConfig } from '@vben/vite-config'; -export default defineConfig(async () => { +import { loadEnv } from 'vite'; + +export default defineConfig(async ({ mode }) => { + // eslint-disable-next-line n/prefer-global/process + const env = loadEnv(mode, process.cwd(), ''); return { application: {}, vite: { server: { + host: '0.0.0.0', // 保证 docker 内外都能访问 + port: 5678, proxy: { '/api': { + target: env.VITE_BACKEND_URL, changeOrigin: true, - rewrite: (path) => path.replace(/^\/api/, ''), - // mock代理目标地址 - target: 'http://localhost:5320/api', - ws: true, }, }, },