Nixpacks auto-detect could not find a 'start' script in package.json and bailed out. Astro builds to static files in dist/ — there is no Node server to start. Switching to a Dockerfile + nginx fixes the 'No start command could be found' error from EasyPanel. The workflow also pointed at the source-code branch, but the panel's git source ref for the dealplustech-astro service is 'main', so the trigger was firing for the wrong ref. Both workflows now run on push to main. - Dockerfile: multi-stage node:20-alpine build + nginx:1.27-alpine serve - nginx.conf: gzip, security headers, 1-year cache for hashed assets, try_files fallback for UTF-8 slugs (Astro file-based routing) - .dockerignore: keep build context small (skip CI, docs, .gitea, IDE) - build-and-deploy.yml + lint.yml: branch source-code -> main - docs/ci-setup.md: corrected project + service names (customerwebsite / dealplustech-astro), documented the Dockerfile rationale, added a note for the 'Failed to sync changes' server-side error
30 lines
800 B
Docker
30 lines
800 B
Docker
# =====================================================================
|
|
# Stage 1: Build the Astro static site
|
|
# =====================================================================
|
|
FROM node:20-alpine AS builder
|
|
|
|
WORKDIR /app
|
|
|
|
# Install deps with cache layer
|
|
COPY package*.json ./
|
|
RUN npm ci --no-audit --no-fund
|
|
|
|
# Build
|
|
COPY . .
|
|
RUN npm run build
|
|
|
|
# =====================================================================
|
|
# Stage 2: Serve with nginx
|
|
# =====================================================================
|
|
FROM nginx:1.27-alpine
|
|
|
|
# Astro outputs to ./dist by default
|
|
COPY --from=builder /app/dist /usr/share/nginx/html
|
|
|
|
# nginx config: SPA-friendly, gzip, cache headers for static assets
|
|
COPY nginx.conf /etc/nginx/conf.d/default.conf
|
|
|
|
EXPOSE 80
|
|
|
|
CMD ["nginx", "-g", "daemon off;"]
|