Deploy your CMS-powered site to Vercel, Fly.io, Netlify, or Docker.
Pre-deployment checklist
- All documents intended to be live have
status: "published" - No published pages reference draft-only documents
- All relation fields point to existing, published documents
- OG images exist for key pages
- Environment variables are configured
next buildsucceeds locally
Vercel
npx vercelConfigure image domains in next.config.ts:
images: {
remotePatterns: [
{ protocol: 'https', hostname: 'your-domain.com', pathname: '/uploads/**' },
],
}Fly.io
# fly.toml
primary_region = "arn"
[build]
dockerfile = "Dockerfile"
[env]
NODE_ENV = "production"FROM node:22-alpine AS builder
WORKDIR /app
COPY . .
RUN npm ci && npm run build
FROM node:22-alpine
WORKDIR /app
COPY --from=builder /app/.next/standalone ./
COPY --from=builder /app/.next/static ./.next/static
COPY --from=builder /app/public ./public
COPY --from=builder /app/content ./content
CMD ["node", "server.js"]Netlify
npx netlify-cli deploy --buildDocker (self-hosted)
FROM node:22-alpine AS builder
WORKDIR /app
COPY . .
RUN npm ci && npm run build
FROM node:22-alpine
WORKDIR /app
COPY --from=builder /app/.next ./.next
COPY --from=builder /app/public ./public
COPY --from=builder /app/content ./content
COPY --from=builder /app/package.json ./
RUN npm ci --omit=dev
CMD ["npm", "start"]Post-deployment verification
- Visit
/sitemap.xmland confirm all pages are listed - Check page source for OpenGraph and JSON-LD tags
- Test social sharing preview
- Confirm images load correctly
- If using revalidation, test the webhook endpoint