Skip to content

Deploy a Cloudflare Pages ​

Guía para deployar este folder de documentación como un site estático en Cloudflare Pages.

Recomendación: Opción A (VitePress) — es TypeScript, se integra naturalmente con el stack del proyecto, y produce un site rápido y buscable.


Opción A: VitePress (recomendada) ​

VitePress es el SSG del ecosistema Vue/Vite. Procesa Markdown con soporte nativo de Mermaid via plugins y produce un site completamente estático.

1. Inicializar VitePress ​

bash
cd /path/to/SipSop
pnpm add -D vitepress
pnpm vitepress init

Cuando pregunte el directorio: docs/commissions-site

2. Configurar docs/commissions-site/.vitepress/config.mts ​

ts
import { defineConfig } from 'vitepress'

export default defineConfig({
  title: 'Comisiones SipSop',
  description: 'Documentación del módulo de comisiones de SipSop',
  lang: 'es',

  head: [
    ['link', { rel: 'icon', href: '/favicon.ico' }],
  ],

  themeConfig: {
    logo: '/logo.svg',
    siteTitle: 'Comisiones SipSop',

    nav: [
      { text: 'Inicio', link: '/' },
      { text: 'API Reference', link: '/api-reference' },
    ],

    sidebar: [
      {
        text: 'Introducción',
        items: [
          { text: 'Inicio', link: '/index' },
          { text: 'Conceptos', link: '/conceptos' },
          { text: 'Happy path', link: '/happy-path' },
        ],
      },
      {
        text: 'Referencia técnica',
        items: [
          { text: 'Arquitectura', link: '/arquitectura' },
          { text: 'Operaciones', link: '/operaciones' },
          { text: 'Portal vendedor', link: '/portal-vendedor' },
          { text: 'API Reference', link: '/api-reference' },
        ],
      },
      {
        text: 'Soporte',
        items: [
          { text: 'FAQ', link: '/faq' },
          { text: 'Deploy', link: '/deploy' },
        ],
      },
    ],

    socialLinks: [
      { icon: 'github', link: 'https://github.com/sopinf/sipsop' },
    ],

    search: {
      provider: 'local',
    },

    footer: {
      message: 'Sopinf Tech LLC — SipSop MSP',
    },
  },

  // Mermaid support
  markdown: {
    config: (md) => {
      // Si usas vitepress-plugin-mermaid:
      // md.use(Mermaid)
    },
  },
})

3. Soporte de Mermaid ​

VitePress no incluye Mermaid de serie. Instalá el plugin:

bash
pnpm add -D vitepress-plugin-mermaid mermaid

Actualizar config.mts:

ts
import { withMermaid } from 'vitepress-plugin-mermaid'

export default withMermaid(defineConfig({
  // ... config anterior
}))

4. Build local ​

bash
pnpm vitepress build docs/commissions-site
# Output: docs/commissions-site/.vitepress/dist/

Para preview local:

bash
pnpm vitepress preview docs/commissions-site

5. Deploy a Cloudflare Pages via Wrangler ​

bash
# Instalar Wrangler si no está
pnpm add -D wrangler

# Deploy
pnpm wrangler pages deploy docs/commissions-site/.vitepress/dist \
  --project-name sipsop-commissions-docs \
  --branch main

wrangler.toml de ejemplo ​

Si preferís tener el proyecto de Pages configurado en el repo:

toml
name = "sipsop-commissions-docs"
pages_build_output_dir = "docs/commissions-site/.vitepress/dist"

[env.production]
vars = {}

GitHub Actions: deploy automático ​

Crear .github/workflows/docs-deploy.yml:

yaml
name: Deploy commissions docs

on:
  push:
    branches:
      - main
    paths:
      - 'docs/commissions-site/**'

jobs:
  deploy:
    runs-on: ubuntu-latest
    name: Deploy to Cloudflare Pages
    permissions:
      contents: read
      deployments: write

    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Setup pnpm
        uses: pnpm/action-setup@v3
        with:
          version: 9

      - name: Setup Node
        uses: actions/setup-node@v4
        with:
          node-version: 22
          cache: pnpm

      - name: Install dependencies
        run: pnpm install --frozen-lockfile

      - name: Build VitePress
        run: pnpm vitepress build docs/commissions-site

      - name: Deploy to Cloudflare Pages
        uses: cloudflare/wrangler-action@v3
        with:
          apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
          accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
          command: pages deploy docs/commissions-site/.vitepress/dist --project-name=sipsop-commissions-docs --branch=main

Secrets requeridos en el repo de GitHub:

  • CLOUDFLARE_API_TOKEN: token con permiso de Pages deployment.
  • CLOUDFLARE_ACCOUNT_ID: ID de la cuenta de Cloudflare.

Custom domain ​

Desde el dashboard de Cloudflare Pages:

  1. Settings → Custom domains → Add custom domain.
  2. Ingresar el dominio (ej: docs.commissions.sipsop.net).
  3. Cloudflare genera los registros DNS automáticamente si el dominio también está en Cloudflare.

Si el dominio está en otro registrar, agregar el CNAME que Cloudflare indica.


Headers de seguridad ​

Crear docs/commissions-site/.vitepress/public/_headers:

/*
  X-Content-Type-Options: nosniff
  X-Frame-Options: DENY
  Referrer-Policy: strict-origin-when-cross-origin
  Permissions-Policy: camera=(), microphone=(), geolocation=()
  Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self';

El archivo _headers en la carpeta de output de Pages se procesa automáticamente por Cloudflare.


Opción B: Astro Starlight ​

Más features out-of-the-box (i18n, versioning, sidebar auto-generado desde rutas) pero más setup inicial.

bash
pnpm create astro@latest docs/commissions-site --template starlight

Build output: docs/commissions-site/dist/. Deploy igual que VitePress pero apuntando a esa carpeta.

Starlight tiene soporte de Mermaid via @astrojs/mdx + mermaid.


Opción C: MkDocs Material ​

Opción en Python. Simple de configurar, con búsqueda integrada y soporte de Mermaid nativo.

bash
pip install mkdocs-material
pip install mkdocs-mermaid2-plugin

docs/commissions-site/mkdocs.yml:

yaml
site_name: Comisiones SipSop
theme:
  name: material
  palette:
    primary: deep-orange    # closest a #e8590c
    accent: deep-orange
  font:
    text: IBM Plex Mono

plugins:
  - search
  - mermaid2

nav:
  - Inicio: index.md
  - Conceptos: conceptos.md
  - Happy path: happy-path.md
  - Arquitectura: arquitectura.md
  - Operaciones: operaciones.md
  - Portal vendedor: portal-vendedor.md
  - API Reference: api-reference.md
  - FAQ: faq.md
  - Deploy: deploy.md

Build: mkdocs build --config-file docs/commissions-site/mkdocs.yml

No requiere Node. Pero introduce Python como dependencia en el pipeline de CI.


Opción D: Markdown raw en Cloudflare Pages ​

Cloudflare Pages no renderiza Markdown nativamente. Esta opción requeriría un worker de transformación o usar @cloudflare/kv-asset-handler con un parser de Markdown. No recomendada para documentación — el resultado es HTML sin estilos ni navegación.


Checklist pre-deploy ​

  • [ ] Build local sin errores: pnpm vitepress build docs/commissions-site
  • [ ] Preview local funciona: pnpm vitepress preview docs/commissions-site
  • [ ] Diagramas Mermaid se renderizan correctamente
  • [ ] Links relativos entre páginas funcionan (ej: ./architecture.md)
  • [ ] Búsqueda funciona en local
  • [ ] Headers de seguridad configurados en _headers
  • [ ] Secrets de GitHub Actions configurados
  • [ ] Custom domain configurado (si aplica)

Documentación de SipSop. Producto operado por Sopinf Tech LLC.