# 📝 Strapi: Headless CMS pro obsahové weby 👉 [[1.1.1 O projektu]] 👉 [[1.1.2 Vlastní digitální svět (přehled článků)]] ## 📌 Úvod: Proč Strapi? [Strapi](https://strapi.io/) je **open-source headless CMS** postavené na Node.js, které je ideální pro správu obsahu webů, blogů a aplikací. Je to alternativa k WordPressu pro moderní vývojáře. Podporuje: - ✅ **Vizuální Content-Type Builder pro tvorbu datových modelů** - ✅ **REST a GraphQL API out-of-the-box** - ✅ **Plugin systém pro rozšíření funkcionalit** - ✅ **Media Library pro správu obrázků a souborů** V tomto článku si ukážeme, jak nasadit Strapi v Dockeru a vytvořit strukturu pro blog. ![[image_strapi.png]] --- ## 📜 Licence a cena | Aspekt | Detail | |--------|--------| | **Licence** | MIT (Community Edition) | | **Self-hosting** | ✅ Ano, zdarma a bez omezení | | **Enterprise** | Placená verze s SSO, audit logs, support | | **Cloud verze** | Strapi Cloud (od $99/měsíc) | | **Zdrojový kód** | [github.com/strapi/strapi](https://github.com/strapi/strapi) | > Strapi Community Edition je **plně open-source pod MIT licencí** – nejliberálnější licence v této kategorii. Můžete ho používat kdekoliv, upravovat, prodávat. Enterprise funkce (SSO, RBAC, audit) jsou placené. --- ## 🚀 Instalace v Dockeru ```yaml version: '3.8' services: strapi: image: strapi/strapi:latest container_name: strapi restart: always ports: - "1337:1337" environment: DATABASE_CLIENT: postgres DATABASE_HOST: postgres_db DATABASE_PORT: 5432 DATABASE_NAME: strapi DATABASE_USERNAME: admin DATABASE_PASSWORD: your_secure_password JWT_SECRET: your_jwt_secret ADMIN_JWT_SECRET: your_admin_jwt_secret APP_KEYS: key1,key2,key3,key4 volumes: - strapi_data:/srv/app networks: - digilifehub_network depends_on: - postgres_db volumes: strapi_data: networks: digilifehub_network: external: true ``` 📌 **Strapi admin panel je dostupný na `http://IP_ADRESA:1337/admin`** 📌 **První spuštění trvá déle – Strapi se inicializuje** --- ## ⚙️ Konfigurace ### Základní nastavení 1. Vytvořte admin účet při prvním spuštění 2. Otevřete Content-Type Builder 3. Vytvořte první Collection Type (např. Article) 4. Přidejte pole: title, content, slug, published_at ### Nastavení oprávnění API - Settings → Roles → Public - Povolte `find` a `findOne` pro veřejný přístup - API endpoint: `GET /api/articles` --- ## 💡 Praktické použití ### Use case 1: Firemní blog s více autory **Situace:** Marketingové oddělení chce publikovat články, ale WordPress je pomalý a nebezpečný. Vývojáři chtějí moderní stack. **Řešení se Strapi:** - **Content Types:** `articles`, `authors`, `categories`, `tags` - **Relationships:** Article → Author, Article ↔ Categories (M2M) - **Workflow:** Draft → Review → Published (custom field `status`) - **Media:** Automatická optimalizace obrázků - **Frontend:** Next.js s ISR – nový článek = rebuild za 60s - **Preview:** Draft články viditelné jen pro editory **Výsledek:** Bleskově rychlý blog, který marketingový tým miluje. ### Use case 2: Dokumentace pro SaaS produkt **Situace:** Startup potřebuje dokumentaci, která se snadno aktualizuje a je prohledávatelná. **Řešení se Strapi:** - **Content Types:** `docs`, `sections`, `changelog`, `faqs` - **Hierarchie:** Docs → Sections → Pages (nested relationships) - **Verzování:** Pole `version` pro různé verze produktu - **Search:** Algolia plugin pro fulltext search - **Frontend:** Docusaurus nebo custom Next.js - **Webhooks:** Změna v docs → rebuild + Slack notifikace **Výsledek:** Dokumentace jako first-class citizen, ne afterthought. ### Use case 3: Multi-tenant news portál **Situace:** Mediální skupina provozuje 5 regionálních zpravodajských webů. Každý má jiný design, ale sdílí redakci. **Řešení se Strapi:** - **Content Types:** `articles`, `regions`, `authors`, `ads` - **Multi-tenant:** Pole `region` určuje, kde se článek zobrazí - **Permissions:** Redaktor Brno nemůže editovat články Praha - **Scheduling:** `publish_at` pro plánované publikování - **API:** Každý web volá `/api/articles?filters[region]=brno` - **CDN:** Cloudflare cache pro miliony čtenářů **Výsledek:** 5 webů, 1 redakce, 1 Strapi instance. ### Use case 4: Landing pages pro marketing kampaně **Situace:** Marketing neustále potřebuje nové landing pages pro kampaně. Čekání na vývojáře trvá týdny. **Řešení se Strapi:** - **Content Types:** `landing_pages`, `components` (hero, features, testimonials, cta) - **Dynamic zones:** Marketér skládá stránku z komponent - **Preview:** Live náhled před publikací - **A/B testing:** Více variant jedné stránky - **Analytics:** UTM parametry uložené v Strapi - **Frontend:** Generovaný z šablon (Next.js) **Výsledek:** Nová landing page za hodinu, ne týden. --- ## 🆚 Strapi vs Directus vs WordPress | Aspekt | Strapi | Directus | WordPress | |--------|--------|----------|-----------| | **Licence** | MIT | BSL | GPL | | **Jazyk** | Node.js | Node.js | PHP | | **API** | REST/GraphQL | REST/GraphQL | REST (plugin) | | **Admin UX** | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | | **Existující DB** | ❌ | ✅ | ❌ | | **Ideální pro** | Blogy, marketing | Aplikace, data | Klasické weby | | **Community** | Velmi aktivní | Aktivní | Obrovská | --- ## 🏁 Závěr a další kroky ✅ **Strapi je výborný pro obsahové weby a blogy.** ✅ **Vizuální builder usnadňuje tvorbu datových modelů.** ✅ **Silná komunita a ekosystém pluginů.** ✅ **MIT licence – nejliberálnější možná, žádná omezení.** 👉 **Strapi nebo Directus? Jaký CMS preferujete a proč?** 🚀 --- ### ⏪ Související články ⏩ > **🔙 Předchozí článek:** > [[2025-04-01 Directus.io (headless CMS a BaaS)|Directus.io (headless CMS a BaaS)]] > > **🔜 Následující článek:** > [[2025-05-01 Obsidian.md (znalostní báze a Zettelkasten)|Obsidian.md (znalostní báze a Zettelkasten)]] #docker #strapi #headlesscms #nodejs #opensource #osobniDigitalizace #digilifehub