services: frontend: restart: unless-stopped image: node:18-alpine working_dir: /app volumes: - ./apps/frontend:/app ports: # 外部访问 clip.zeabur.app:8080 -> 宿主 8080 -> 容器 3000 - "3000:3000" environment: - NEXT_PUBLIC_URL=http://20.63.225.23:3000 - PUBLIC_SOCKET_URL=http://20.63.225.23:3001 # 后端在容器网络里依然通过服务名访问,不用改 - DOCKER_BACKEND_URL=http://backend:3001 - NODE_ENV=production command: sh -c "npm i -g pnpm && pnpm install && pnpm run build && pnpm start" depends_on: - backend networks: - app-network backend: restart: unless-stopped image: node:18-alpine working_dir: /app volumes: - ./apps/backend:/app - ./uploads:/app/uploads # Mount uploads directory for file storage ports: - "3001:3001" # This port must be exported and accessed by the frontend for the socket connection environment: - REDIS_HOST=sjc1.clusters.zeabur.com - REDIS_PORT=24122 - REDIS_PASSWORD=DjJd9reClM4T2BiqRoF56IZbNGV07138 - ADMIN_TOKEN=admintoken11451421422 command: sh -c "npm i -g pnpm && pnpm install && pnpm run start" networks: - app-network - storage-network networks: app-network: driver: bridge storage-network: driver: bridge