| # Stage 1: Build Astro static site | |
| FROM node:18-slim AS build | |
| WORKDIR /app | |
| COPY app/package*.json ./ | |
| RUN npm install | |
| COPY app/ . | |
| # Ensure public/data is a real directory (not symlink) | |
| RUN set -e; \ | |
| rm -rf public/data; \ | |
| mkdir -p public/data; \ | |
| cp -a src/content/assets/data/. public/data/ | |
| RUN npm run build | |
| # Stage 2: Serve with nginx | |
| FROM nginx:alpine | |
| COPY --from=build /app/dist /app/dist | |
| COPY nginx.conf /etc/nginx/nginx.conf | |
| COPY entrypoint.sh /entrypoint.sh | |
| RUN chmod +x /entrypoint.sh | |
| RUN mkdir -p /var/cache/nginx /var/run /var/log/nginx /var/lib/nginx/body /tmp && \ | |
| chmod -R 777 /var/cache/nginx /var/run /var/log/nginx /var/lib/nginx /tmp /app | |
| EXPOSE 7860 | |
| ENTRYPOINT ["/entrypoint.sh"] | |