Initial vault setup
This commit is contained in:
@@ -0,0 +1,111 @@
|
||||
---
|
||||
title: Payload
|
||||
created: 2026-06-08
|
||||
updated: 2026-06-08
|
||||
type: app
|
||||
tags: [catalogue, content-management, app-marathon-batch-rattrapage-2]
|
||||
confidence: high
|
||||
contested: false
|
||||
sources: [https://selfh.st/apps/?tag=Content+Management&app=payload]
|
||||
---
|
||||
|
||||
# 📰 Payload
|
||||
|
||||
> **CMS headless TypeScript open source** : TypeScript natif, type-safe, auto-hébergeable, parfait pour les stacks Next.js.
|
||||
|
||||
## 📋 Informations Générales
|
||||
|
||||
| Champ | Valeur |
|
||||
| :--- | :--- |
|
||||
| **Site web** | [payloadcms.com](https://payloadcms.com/) |
|
||||
| **GitHub** | [payloadcms/payload](https://github.com/payloadcms/payload) |
|
||||
| **License** | MIT |
|
||||
| **Langage** | TypeScript |
|
||||
| **Étoiles GitHub** | 36k ⭐ |
|
||||
| **Catégorie** | [[cat-content-management|Content Management]] |
|
||||
|
||||
## 📝 Description
|
||||
|
||||
**Payload** est un **CMS headless moderne 100% TypeScript**, conçu pour s'intégrer nativement dans une application **Next.js** (mais utilisable aussi en standalone). Sa force : tout est défini en **TypeScript code-first** (Collections, Fields, Hooks, Access), pas de GUI à configurer à la souris — ce qui rend le code testable, versionnable, type-safe. Inclut un **admin UI auto-généré**, une auth, des uploads, un **access control** granulaire par collection, et un **plugin ecosystem** (multi-tenants, i18n, form-builder, lexical editor, etc.).
|
||||
|
||||
Différence vs **Strapi / Directus** : Strapi et Directus sont des monorepos Node.js avec leur propre serveur ; Payload s'installe **dans** votre app Next.js (ou Express), ce qui simplifie le déploiement et élimine un service à maintenir.
|
||||
|
||||
Pour qui : équipes TypeScript / Next.js qui veulent un CMS headless, type-safe, auto-hébergeable, sans la complexité d'un Strapi ou la GUI vieillissante d'un Directus.
|
||||
|
||||
## 🚀 Installation
|
||||
|
||||
### Standalone (Next.js + Payload)
|
||||
|
||||
```bash
|
||||
npx create-payload-app -n my-payload-app
|
||||
cd my-payload-app
|
||||
DATABASE_URI=postgres://user:pass@db:5432/payload PAYLOAD_SECRET=xxx npm run dev
|
||||
```
|
||||
|
||||
### Docker Compose (production)
|
||||
|
||||
```yaml
|
||||
version: '3.8'
|
||||
services:
|
||||
payload:
|
||||
build: .
|
||||
container_name: payload
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "3000:3000"
|
||||
environment:
|
||||
DATABASE_URI: postgres://payload:change-me@db:5432/payload
|
||||
PAYLOAD_SECRET: change-me-32-bytes
|
||||
PAYLOAD_PUBLIC_SERVER_URL: https://payload.example.com
|
||||
NEXT_PUBLIC_SERVER_URL: https://payload.example.com
|
||||
depends_on:
|
||||
- db
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.payload.rule=Host(`payload.example.com`)"
|
||||
- "traefik.http.routers.payload.entrypoints=websecure"
|
||||
- "traefik.http.routers.payload.tls.certresolver=letsencrypt"
|
||||
- "traefik.http.services.payload.loadbalancer.server.port=3000"
|
||||
|
||||
db:
|
||||
image: postgres:16-alpine
|
||||
container_name: payload-db
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
POSTGRES_DB: payload
|
||||
POSTGRES_USER: payload
|
||||
POSTGRES_PASSWORD: change-me
|
||||
volumes:
|
||||
- payload_db:/var/lib/postgresql/data
|
||||
|
||||
volumes:
|
||||
payload_db:
|
||||
```
|
||||
|
||||
## 🔄 Alternatives
|
||||
|
||||
### Open Source
|
||||
- [[app-strapi]] — CMS headless Node.js leader, GUI-first, REST/GraphQL.
|
||||
- **Directus** — Headless Node.js avec admin UI data-first.
|
||||
- [[app-grav]] — Flat-file PHP, plus simple, pas headless.
|
||||
|
||||
### Propriétaires
|
||||
- **Contentful** — Headless SaaS leader, enterprise.
|
||||
- **Sanity** — Headless SaaS avec studio personnalisable.
|
||||
- **Strapi Cloud** — Version cloud de Strapi.
|
||||
|
||||
## 🔐 Sécurité
|
||||
- **Authentification** : intégrée (email/password, API keys, JWT, sessions). SSO via plugins tiers.
|
||||
- **Access Control** : fonctions TypeScript par collection/field, granulaires.
|
||||
- **Type-safety** : moins de risque d'injection, le typage TS force à valider les inputs.
|
||||
|
||||
## 📚 Ressources
|
||||
- [Documentation](https://payloadcms.com/docs)
|
||||
- [GitHub](https://github.com/payloadcms/payload)
|
||||
- [Templates](https://github.com/payloadcms/payload/tree/main/templates)
|
||||
|
||||
## Pages Liées
|
||||
- [[cat-content-management]] — Catégorie Content Management
|
||||
- [[app-strapi]] — Concurrent open source
|
||||
- [[app-grav]] — CMS flat-file open source
|
||||
- [[recettes-docker-compose]] — Templates Docker
|
||||
Reference in New Issue
Block a user