137 lines
5.0 KiB
Markdown
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
|