commit 6e98e1993a2a2646750877a4991ec39ca819538c Author: wanwu Date: Tue Oct 7 01:19:34 2025 +0800 chore(docker): move root docker-compose files into wwjcloud-nest/docker for unified docker testing with admin and backend diff --git a/docker/docker-compose.dev.yml b/docker/docker-compose.dev.yml new file mode 100644 index 0000000..84badfc --- /dev/null +++ b/docker/docker-compose.dev.yml @@ -0,0 +1,66 @@ +version: '3.8' + +# 开发环境的Docker Compose配置 +# 使用方式: docker-compose -f docker-compose.dev.yml up + +services: + # ======================================== + # MySQL 数据库(开发) + # ======================================== + mysql: + image: mysql:8.0 + container_name: wwjcloud-mysql-dev + restart: unless-stopped + environment: + MYSQL_ROOT_PASSWORD: root123456 + MYSQL_DATABASE: wwjcloud + MYSQL_USER: wwjcloud + MYSQL_PASSWORD: wwjcloud123 + TZ: Asia/Shanghai + ports: + - "3306:3306" + volumes: + - mysql_dev_data:/var/lib/mysql + - ./sql:/docker-entrypoint-initdb.d + command: + - --character-set-server=utf8mb4 + - --collation-server=utf8mb4_unicode_ci + - --default-authentication-plugin=mysql_native_password + healthcheck: + test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-proot123456"] + interval: 10s + timeout: 5s + retries: 5 + networks: + - wwjcloud-dev-network + + # ======================================== + # Redis 缓存(开发) + # ======================================== + redis: + image: redis:7-alpine + container_name: wwjcloud-redis-dev + restart: unless-stopped + ports: + - "6379:6379" + volumes: + - redis_dev_data:/data + command: redis-server --appendonly yes --requirepass redis123456 + healthcheck: + test: ["CMD", "redis-cli", "-a", "redis123456", "ping"] + interval: 10s + timeout: 3s + retries: 5 + networks: + - wwjcloud-dev-network + +volumes: + mysql_dev_data: + driver: local + redis_dev_data: + driver: local + +networks: + wwjcloud-dev-network: + driver: bridge + diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml new file mode 100644 index 0000000..6fd0c45 --- /dev/null +++ b/docker/docker-compose.yml @@ -0,0 +1,180 @@ +version: '3.8' + +services: + # ======================================== + # MySQL 数据库 + # ======================================== + mysql: + image: mysql:8.0 + container_name: wwjcloud-mysql + restart: unless-stopped + environment: + MYSQL_ROOT_PASSWORD: root123456 + MYSQL_DATABASE: wwjcloud + MYSQL_USER: wwjcloud + MYSQL_PASSWORD: wwjcloud123 + TZ: Asia/Shanghai + ports: + - "3306:3306" + volumes: + - mysql_data:/var/lib/mysql + - ./sql:/docker-entrypoint-initdb.d + command: + - --character-set-server=utf8mb4 + - --collation-server=utf8mb4_unicode_ci + - --default-authentication-plugin=mysql_native_password + healthcheck: + test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-proot123456"] + interval: 10s + timeout: 5s + retries: 5 + networks: + - wwjcloud-network + + # ======================================== + # Redis 缓存 + # ======================================== + redis: + image: redis:7-alpine + container_name: wwjcloud-redis + restart: unless-stopped + ports: + - "6379:6379" + volumes: + - redis_data:/data + command: redis-server --appendonly yes --requirepass redis123456 + healthcheck: + test: ["CMD", "redis-cli", "-a", "redis123456", "ping"] + interval: 10s + timeout: 3s + retries: 5 + networks: + - wwjcloud-network + + # ======================================== + # NestJS 后端服务 + # ======================================== + nestjs-backend: + build: + context: ./wwjcloud-nest + dockerfile: Dockerfile + container_name: wwjcloud-nestjs + restart: unless-stopped + ports: + - "3000:3000" + environment: + NODE_ENV: production + # App配置 + APP_NAME: wwjcloud + APP_VERSION: 1.0.0 + APP_PORT: 3000 + APP_ENVIRONMENT: production + APP_TIMEZONE: Asia/Shanghai + APP_KEY: wwjcloud-super-secret-key-2024 + APP_DEFAULT_LANGUAGE: zh_CN + APP_SUPPORTED_LOCALES: zh_CN,en_US + # 数据库配置 + DB_HOST: mysql + DB_PORT: 3306 + DB_USERNAME: wwjcloud + DB_PASSWORD: wwjcloud123 + DB_DATABASE: wwjcloud + DB_SYNC: false + DB_LOGGING: false + DB_CONN_LIMIT: 10 + DB_ACQUIRE_TIMEOUT_MS: 60000 + DB_QUERY_TIMEOUT_MS: 60000 + DB_CACHE_DURATION_MS: 300000 + DB_TIMEZONE: +08:00 + DB_CHARSET: utf8mb4 + # Redis配置 + REDIS_HOST: redis + REDIS_PORT: 6379 + REDIS_PASSWORD: redis123456 + REDIS_DB: 0 + REDIS_KEY_PREFIX: "wwjcloud:" + # JWT配置 + JWT_SECRET: your-super-secret-jwt-key-change-in-production-32-chars + JWT_EXPIRES_IN: 7d + JWT_ALGORITHM: HS256 + # Kafka配置 + KAFKA_CLIENT_ID: wwjcloud-nestjs + KAFKA_BROKERS: kafka:9092 + KAFKA_GROUP_ID: wwjcloud-group + KAFKA_TOPIC_PREFIX: wwjcloud + # 缓存配置 + CACHE_TTL: 3600 + CACHE_MAX_ITEMS: 1000 + CACHE_PREFIX: "cache:" + # 日志配置 + LOG_LEVEL: info + LOG_FORMAT: json + # 上传配置 + UPLOAD_PATH: /app/uploads + UPLOAD_MAX_SIZE: 10485760 + UPLOAD_ALLOWED_TYPES: image/jpeg,image/png,image/gif,application/pdf + # 限流配置 + THROTTLE_TTL: 60 + THROTTLE_LIMIT: 100 + # 健康检查配置 + STARTUP_HEALTH_CHECK: true + STARTUP_HEALTH_TIMEOUT_MS: 30000 + # Swagger配置 + SWAGGER_ENABLED: true + SWAGGER_TITLE: WWJCloud API + SWAGGER_DESCRIPTION: WWJCloud NestJS API Documentation + SWAGGER_VERSION: 1.0.0 + SWAGGER_AUTH_ENABLED: true + SWAGGER_TOKEN: wwjcloud-swagger-token + depends_on: + mysql: + condition: service_healthy + redis: + condition: service_healthy + healthcheck: + test: ["CMD", "node", "-e", "require('http').get('http://localhost:3000/health', (r) => {process.exit(r.statusCode === 200 ? 0 : 1)})"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 40s + networks: + - wwjcloud-network + + # ======================================== + # Admin 前端管理面板 + # ======================================== + admin-frontend: + build: + context: ./wwjcloud-nest/admin + dockerfile: Dockerfile + container_name: wwjcloud-admin + restart: unless-stopped + ports: + - "80:80" + depends_on: + nestjs-backend: + condition: service_healthy + healthcheck: + test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost/"] + interval: 30s + timeout: 3s + retries: 3 + networks: + - wwjcloud-network + +# ======================================== +# 数据卷 +# ======================================== +volumes: + mysql_data: + driver: local + redis_data: + driver: local + +# ======================================== +# 网络 +# ======================================== +networks: + wwjcloud-network: + driver: bridge +