# 📝 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