Skip to content

Production Deployment, SEO/AEO Engine & Operations Runbook ​

1. Multi-Stage Production Docker Deployment ​

dockerfile
FROM node:22-alpine AS builder
WORKDIR /app
COPY package*.json ./
COPY prisma ./prisma/
RUN npm ci
COPY . .
RUN npx prisma generate
RUN npm run build

FROM node:22-alpine AS runner
WORKDIR /app
ENV NODE_ENV=production
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/package*.json ./
COPY --from=builder /app/prisma ./prisma

EXPOSE 3000
CMD ["node", "dist/index.js"]

2. Apache VirtualHost & SSL Configuration ​

On server [SERVER_HOST], Apache routes HTTPS requests directly to compiled static VitePress documentation assets:

apache
<VirtualHost *:443>
    ServerName [DOMAIN_DOKUMENTASI]
    DocumentRoot /www/wwwroot/partitionb/project-docs/docs/.vitepress/dist

    SSLEngine on
    SSLCertificateFile /www/server/panel/vhost/cert/[DOMAIN_DOKUMENTASI]/fullchain.pem
    SSLCertificateKeyFile /www/server/panel/vhost/cert/[DOMAIN_DOKUMENTASI]/privkey.pem

    <Directory "/www/wwwroot/partitionb/project-docs/docs/.vitepress/dist">
        Options FollowSymLinks
        AllowOverride All
        Require all granted
        FallbackResource /index.html
    </Directory>
</VirtualHost>

3. SEO, GEO & AI Answer Engine Optimization (AEO) ​

The backend (src/backend/routes/seo.ts) generates real-time search engine assets:

  • /sitemap.xml: XML sitemap listing core routes, active products, and dynamic help articles.
  • /robots.txt: Rules allowing Googlebot, Bingbot, GPTBot, ClaudeBot, and PerplexityBot.
  • /llms.txt: Markdown summary file for AI search crawlers.
  • /llms-full.txt: Deep knowledge base containing full menu item descriptions, operational hours, and refund policies.
  • generateSeoMetaHtml(): Generates structured Schema.org JSON-LD data (Restaurant & FAQPage).

4. Troubleshooting & Maintenance Runbook ​

Symptom / IssueRoot CauseRemediation Procedure
Prisma query fails with P2021Table missing or unmigratedRun npx prisma migrate deploy to synchronize schema.
Wadeno WhatsApp auth timeoutSession un-paired or network socket closedVerify /v1/sessions/default/status. If closed, request QR scan via /v1/sessions/default/start.
QBiz Webhook signature mismatch (401)Incorrect QBIZ_WEBHOOK_SECRETRe-align secret key between .env and QBiz merchant portal.
Cloudflare R2 Upload CORS ErrorMissing bucket CORS rulesAdd AllowedOrigins: ["*"] and AllowedHeaders: ["*"] to Cloudflare R2 bucket CORS settings.