---
title: Runbook Operațional & Rețete de Găzduire
description: Proceduri de găzduire în producție, rețete de rutare edge, verificări de sănătate și triaj incidente pentru VertiWiki.
tags: [vertiwiki, operatiuni, runbook, gazduire, cloudflare, vercel, nginx, romana]
---

# Runbook Operațional & Rețete de Găzduire

> For the complete documentation index and agent navigation, see [llms.txt](/llms.txt).

VertiWiki este o aplicație single-page 100% statică, fără backend. Operarea în producție constă în configurarea serverelor web statice, a rețelelor CDN și a regulilor de negociere de conținut.

---

## ☁️ Rețete de Implementare Multi-Cloud

### 1. Vercel (`vercel.json`)
Pentru implementare pe Vercel cu negociere automată de conținut AI (`Accept: text/markdown`) și păstrarea slash-ului final:

```json
{
  "trailingSlash": true,
  "cleanUrls": false,
  "rewrites": [
    {
      "source": "/docs/:path*/",
      "has": [{ "type": "header", "key": "Accept", "value": ".*text/markdown.*" }],
      "destination": "/docs/:path*/index.md"
    },
    {
      "source": "/docs",
      "destination": "/docs/index.html"
    }
  ]
}
```

### 2. Cloudflare Pages & Workers
Utilizați Cloudflare Pages pentru distribuție globală rapidă:

```javascript
export default {
  async fetch(request, env) {
    const url = new URL(request.url);
    const accept = request.headers.get("Accept") || "";

    // Dacă un agent AI solicită Markdown brut
    if (accept.includes("text/markdown") && !url.pathname.endsWith(".md")) {
      const targetMd = url.pathname.endsWith("/") ? `${url.pathname}index.md` : `${url.pathname}/index.md`;
      return env.ASSETS.fetch(new Request(new URL(targetMd, url.origin)));
    }

    return env.ASSETS.fetch(request);
  }
};
```

### 3. Nginx (`vertiwiki.conf`)
```nginx
server {
    listen 80;
    server_name docs.example.com;
    root /var/www/vertiwiki;
    index index.html;

    gzip on;
    gzip_types text/plain text/css text/markdown application/javascript application/json image/svg+xml;

    location / {
        try_files $uri $uri/ /index.html;
    }

    location = /index.html {
        add_header Cache-Control "no-cache, must-revalidate";
    }

    location ~* \.(?:svg|png|jpg|woff2|json)$ {
        expires 30d;
        add_header Cache-Control "public, no-transform";
    }
}
```

---

## 🩺 Verificări de Sănătate (Health Checks)

Efectuați următoarele verificări după fiecare implementare:

| Verificare | Rută Țintă | Rezultat Așteptat | Acțiune la Eșec |
| :--- | :--- | :--- | :--- |
| **Pachet Motor** | `GET /index.html` | HTTP 200, Content-Type: `text/html` | Verificați permisiunile și fișierele implementate. |
| **Configurație** | `GET /config.json` | HTTP 200, JSON valid | Verificați sintaxa cu `jq . config.json`. |
| **Meniu Navigare** | `GET /navigation.md` | HTTP 200, Markdown valid | Confirmați existența fișierului de navigare. |
| **Pagina Principală** | `GET /index.md` | HTTP 200, Markdown valid | Verificați setarea `homePage` din `config.json`. |
| **Index Agenți AI** | `GET /llms.txt` | HTTP 200, Text simplu | Verificați setarea `llmsTxtUrl` și robots.txt. |

---

## 🚨 Triaj Incidente & Ghid de Urgență

### Scenariul A: Ecran Alb la Încărcare
1. Deschideți Developer Tools (<kbd>F12</kbd>) și verificați fila Console.
2. Dacă apare `SyntaxError: Unexpected token in JSON`:
   - `config.json` conține o virgulă în plus sau ghilimele neînchise. Validați fișierul prin `jq . config.json`.
3. Dacă apare `NetworkError: Failed to fetch config.json`:
   - Asigurați-vă că fișierele sunt servite prin HTTP și nu direct prin `file:///`.

### Scenariul B: Linkurile din Meniu Afișează 404
1. Inspectați ruta hash din URL (ex: `#/guides/development.md`).
2. Confirmați existența fișierului fizic pe server respectând exact majusculele și minusculele (case-sensitive).
