Files
2026-06-09 18:40:21 +02:00

137 lines
5.0 KiB
Markdown

---
title: Opengist
created: 2026-06-08
updated: 2026-06-08
type: app
tags: [catalogue, pastebin, self-hosted]
confidence: high
contested: false
sources: [https://selfh.st/apps/?tag=33, https://github.com/thomiceli/opengist]
---
# 📋 Opengist
> **Opengist** est un pastebin moderne écrit en Go, avec gestion multi-utilisateur, snippets Git-like, organisation par dossiers et support des gist privés/publics.
## 📋 Informations Générales
| Métadonnée | Valeur |
| :--- | :--- |
| **Site web** | https://opengist.io |
| **GitHub** | https://github.com/thomiceli/opengist |
| **License** | AGPL-3.0 |
| **Langage principal** | Go |
| **Étoiles GitHub** | 3 198 |
| **Dernière MAJ** | 2026-06-07 |
| **Catégorie** | [[cat-pastebin]] |
## 📝 Description
Opengist s'inspire de **GitHub Gist** et de **GitLab Snippets** pour proposer une alternative auto-hébergée, avec une gestion fine des utilisateurs et des permissions. Chaque snippet est en fait un mini-dépôt Git, ce qui permet de versionner l'historique, de cloner localement, et de forker comme sur un vrai forge.
L'interface web est en Go (template HTML), ce qui la rend rapide et légère. L'application supporte les **multi-fichiers** dans un même snippet (un dossier de plusieurs fichiers), les syntaxes colorées pour 100+ langages via highlight.js, l'organisation par dossiers et tags, et un système de likes/fork. L'authentification peut être locale (email/password) ou branchée sur **OAuth2** (GitHub, GitLab, Google, OpenID Connect).
L'écosystème est riche : API REST, webhooks, exports Git, intégration Continue (VS Code, JetBrains) via l'extension officielle. C'est un excellent choix pour des **équipes de développement** qui veulent partager du code en interne, commenter des snippets, et garder un historique des révisions sans dépendre de GitHub Gist.
## 🚀 Installation
### Docker Compose (recommandé)
```yaml
services:
opengist:
image: ghcr.io/thomiceli/opengist:latest
container_name: opengist
restart: unless-stopped
networks:
- web
- internal
environment:
- OG_LISTEN_IP=0.0.0.0
- OG_LISTEN_PORT=6157
- OG_SECRET_KEY=*** - OG_DOMAIN=snippet.example.com
- OG_PROTO=https
- DB_TYPE=postgres
- DB_CONNECTION=postgresql://opengist:***@db:5432/opengist?sslmode=disable
labels:
- "traefik.enable=true"
- "traefik.http.routers.opengist.rule=Host(`snippet.example.com`)"
- "traefik.http.routers.opengist.tls.certresolver=letsencrypt"
- "traefik.http.services.opengist.loadbalancer.server.port=6157"
depends_on:
- db
db:
image: postgres:16-alpine
restart: unless-stopped
networks:
- internal
environment:
- POSTGRES_USER=opengist
- POSTGRES_PASSWORD=*** - POSTGRES_DB=opengist
volumes:
- opengist-db:/var/lib/postgresql/data
networks:
web:
external: true
internal:
volumes:
opengist-db:
```
### Installation manuelle
1. `git clone https://github.com/thomiceli/opengist.git`
2. Prérequis : Go 1.22+, PostgreSQL 13+ (ou SQLite par défaut).
3. Compiler : `go build -o opengist .`
4. Configurer `config.yml` et lancer `./opengist`.
## ⚙️ Configuration
- `OG_SECRET_KEY` : chaîne aléatoire pour les sessions.
- `OG_DOMAIN` : le FQDN public.
- Configurer OAuth2 (GitHub/GitLab/Google) si besoin d'auth externe.
- Activer les **webhooks** pour notifier les channels Slack/Discord/Teams.
- Brancher un reverse proxy (Traefik/Caddy) avec TLS en frontal.
## 🔄 Alternatives
### Open Source
- [[app-pastefy]] — Java, multi-user, organisation, plus jeune.
- [[app-privatebin]] — PHP, E2E, pastebin simple, sans versioning.
- [[app-wastebin]] — Go, minimaliste, sans multi-user.
- [[app-paaster]] — TypeScript, E2E, moderne.
- [[app-chiyogami]] — Go + E2E, interface moderne.
### Propriétaires (ce que cette app remplace)
- **gist.github.com** — snippets GitHub, privé si compte GH, public sinon.
- **gitlab.com/snippets** — snippets GitLab, intégré au forge.
- **pastebin.com** — fermé en 2024 puis repris, pas de versioning.
- **hastebin.com** — minimaliste, pas de versioning.
## 🔐 Sécurité
- **OG_SECRET_KEY** : chaîne aléatoire longue, à protéger.
- **OAuth2** : configurer au moins un provider, ne pas laisser l'inscription ouverte.
- **HTTPS strict** : service exposé, ne jamais servir en HTTP.
- **Backups Postgres + Git repos** : sauvegarder à la fois la DB et le dossier `repos/`.
- **CSP headers** : Opengist applique un CSP strict, à conserver.
## 📚 Ressources
- Site officiel : https://opengist.io
- Code source : https://github.com/thomiceli/opengist
- Documentation : https://opengist.io/docs
- Démo : https://opengist.io
- API : https://opengist.io/docs/api
- Communauté : https://github.com/thomiceli/opengist/discussions
## Pages Liées
- [[cat-pastebin|Pastebin]] — Catégorie complète
- [[app-pastefy]] — Voisin multi-user
- [[app-privatebin]] — Voisin simple E2E
- [[recettes-docker-compose]] — Templates Docker