| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- FROM node:18-alpine as build-stage
- WORKDIR /app
- COPY package*.json ./
- # Use NPM Mirror
- RUN npm config set registry https://registry.npmmirror.com
- RUN npm install
- COPY . .
- # Build args
- ARG VITE_API_BASE_URL=/api/v1
- ENV VITE_API_BASE_URL=$VITE_API_BASE_URL
- # Build for production
- RUN npm run build
- # Production Stage with Nginx
- FROM nginx:stable-alpine as production-stage
- # Install openssl and inotify-tools for dynamic SSL reloading
- RUN apk add --no-cache openssl inotify-tools
- COPY --from=build-stage /app/dist /usr/share/nginx/html
- COPY nginx.conf /etc/nginx/conf.d/default.conf
- COPY entrypoint.sh /entrypoint.sh
- RUN chmod +x /entrypoint.sh
- EXPOSE 80 443
- ENTRYPOINT ["/entrypoint.sh"]
- # Development Stage
- FROM node:18-alpine as dev-stage
- WORKDIR /app
- COPY package*.json ./
- # Use NPM Mirror
- RUN npm config set registry https://registry.npmmirror.com
- RUN npm install
- COPY . .
- # We will run 'vite' in development mode (or 'vite preview' for prod-like serving,
- # but Uvicorn user usually implies a simpler dev-like setup or just Python preference).
- # Since user asked "Why not use Uvicorn for frontend", strictly speaking Uvicorn is Python server.
- # Frontend (Vue) is JS. We cannot run Vue with Uvicorn directly.
- # BUT, we can use Vite's preview or dev server.
- # Expose Vite's default port
- EXPOSE 5173
- # Host 0.0.0.0 is needed for Docker
- CMD ["npm", "run", "dev", "--", "--host", "0.0.0.0"]
|