feat: Switch to Astro SSR with API routes support

- Changed output: 'static' → 'server' in astro.config.mjs
- Added @astrojs/node adapter for dynamic serving
- Updated Dockerfile to use astro preview (not serve package)
- Fixed package.json dependency conflicts
- All API routes will work (privacy consent logging)
- Static pages still work

Now includes BOTH:
-  Static pages (product pages, blog)
-  Dynamic API routes (cookie consent logging)
-  Admin dashboard with database access
-  Fixed host restrictions
This commit is contained in:
Kunthawat
2026-03-12 13:43:58 +07:00
parent 74d7e5bee8
commit af32f9a962
19 changed files with 49 additions and 33 deletions

View File

@@ -9,33 +9,26 @@ RUN npm install
COPY . .
RUN mkdir -p data
# Build Astro to static files
RUN npm run build
# Production Stage - Static Server
FROM node:20-alpine
WORKDIR /app
# Install serve and SQLite runtime
RUN apk add --no-cache sqlite-libs curl
# Copy package files with serve dependency
COPY package*.json ./
RUN npm install serve --production
RUN npm install --production
# Copy built static files and database
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/data ./data
EXPOSE 80
# Health check with curl
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
CMD curl -f http://localhost/ || exit 1
ENV NODE_ENV=production
ENV PORT=80
# Serve static files with NO restrictions (plain HTTP server)
CMD ["serve", "--no-clipboard", "--single", "--listen", "80", "dist"]
CMD ["npm", "run", "preview", "--", "--host", "0.0.0.0", "--port", "80"]

View File

@@ -1,13 +1,22 @@
// @ts-check
import { defineConfig } from 'astro/config';
import tailwindcss from '@tailwindcss/vite';
// https://astro.build/config
// For SSR with API routes
import node from '@astrojs/node';
export default defineConfig({
output: 'static', // Changed from 'hybrid' (deprecated)
output: 'server',
adapter: node({ mode: 'standalone' }),
build: {
inlineStylesheets: 'always',
},
// Remove vite config - we only serve static files via serve package
// No preview/server config needed since using static file serving
});
vite: {
preview: {
host: true, // Allow any host
port: 80,
},
server: {
host: true, // Allow any host
port: 80,
},
},
});

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

3
dist/index.html vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long