Die GitHub App erstellen
Diese Anleitung zeigt, wie du deinem Server eine eigene GitHub-Identität gibst. Sie dauert etwa zwei Minuten, nur der Server-Eigentümer macht das, und pro Server nur einmal.
Wie du danach dein eigenes Konto verbindest, steht unter GitHub-Integration einrichten.
Warum dein Server eine eigene App braucht
Abschnitt betitelt „Warum dein Server eine eigene App braucht“Aus einer Registrierung werden zwei verschiedene Aufgaben, und die App macht beide ehrlich:
| Aufgabe | Was sie beantwortet | Warum es zählt |
|---|---|---|
| Eine Person meldet sich an | Die Client-ID der App, über den Device Flow | Du bekommst Zugangsdaten, die dir gehören, auf dem Server, auf jedem Gerät — ohne Token, das du einfügen oder rotieren musst |
| Der Server handelt | ID der App + privater Schlüssel → Installationstoken | Webhooks, PR-Polling und Ticket-Synchronisierung hängen nicht mehr davon ab, dass das Token eines Menschen noch gültig ist |
Was in der Tabelle nicht steht: ein Client-Secret. Der Device Flow von GitHub authentifiziert sich allein mit der Client-ID — die Anfrage des Device-Codes und das Token-Polling —, für die Anmeldung gibt es also kein Geheimnis, das du verwahren müsstest.
Ohne eigene App funktioniert das Erste weiter über die Client-ID, die der Build mitliefert; das Zweite fällt auf die Zugangsdaten des Server-Eigentümers zurück, und die Hintergrundarbeit hängt an der Person, die sich zuerst eingerichtet hat.
Voraussetzungen
Abschnitt betitelt „Voraussetzungen“- Du bist der Server-Eigentümer — die Operationen
providerApps.*sind darauf beschränkt, und die Karte bleibt für alle anderen unsichtbar - Ein GitHub-Konto oder eine Organisation, in der du Apps anlegen kannst
- Nichts muss öffentlich erreichbar sein: die Anmeldung ist ein Device Flow, der Server braucht also keinen eingehenden Port, keinen Tunnel, keine Callback-URL und keine Domain
Die App registrieren
Abschnitt betitelt „Die App registrieren“- Geh zu github.com/settings/apps/new (für eine Organisation: Settings → Developer settings → GitHub Apps → New GitHub App)
- GitHub App name — beliebig;
Control Center (yourname)reicht. Der Name erscheint auf Commits und Kommentaren, die der Server setzt - Homepage URL — beliebig, zum Beispiel
https://github.com/your-name - Callback URL — leer lassen. Der Device Flow hat keine
- Hake Enable Device Flow an. Das ist die eine Einstellung, ohne die die Anmeldung nicht funktioniert
- Nimm den Haken bei Webhook → Active weg, außer du verdrahtest Webhooks getrennt
- Unter Repository permissions vergib mindestens:
- Contents: Read and write
- Metadata: Read-only (Pflicht)
- Pull requests: Read and write
- Issues: Read and write, wenn du GitHub Issues für Tickets nutzt, und für die Kommentarsuche des Bots in PR-Unterhaltungen (siehe Aus einem GitHub-PR mit Control Center sprechen)
- Checks: Read-only, für den CI-Status auf der PR-Seite
- Unter Where can this GitHub App be installed? nimm, was passt — “Only on this account” stimmt für einen persönlichen Server
- Klicke auf Create GitHub App
Die drei Werte holen
Abschnitt betitelt „Die drei Werte holen“Auf der Seite der App, direkt nach dem Anlegen:
| Wert | Wo |
|---|---|
| App ID | Reiter General, weit oben |
| Client ID | Reiter General, unter “Client secrets” |
| Private key | Generate a private key — eine .pem wird heruntergeladen |
Die Datei mit dem privaten Schlüssel wird einmal heruntergeladen, und GitHub zeigt sie nie wieder. Behalte sie, bis du sie eingefügt hast; eine neue kannst du jederzeit erzeugen.
Ein Client-Secret ist optional und bringt genau eines: lässt du “Expire user authorization tokens” an, erneuert es das Token einer Person still, statt sie alle acht Stunden erneut zur Anmeldung zu schicken. Die Anmeldung selbst benutzt es nie.
Einfacher ist, dieses Ablaufen auszuschalten; dann brauchst du nirgends ein Secret. Lässt du es an, erzeuge ein Secret und füge es unter Einstellungen → Server → Single sign-on ein (Karte Anbieter-Apps) — dafür gibt es keine Umgebungsvariable, und in einen Build ist keine eingebaut, also bleibt es auf deinem Server.
Auf deinem Konto installieren
Abschnitt betitelt „Auf deinem Konto installieren“Eine App, die registriert, aber nicht installiert ist, kann Personen authentifizieren und sonst nichts lesen.
- Öffne auf der Seite der App Install App
- Installiere sie auf deinem Konto oder in der Organisation
- Wähle All repositories, oder die Repositories, die dieser Server sehen soll
In Control Center einfügen
Abschnitt betitelt „In Control Center einfügen“- Geh zu Einstellungen → Server → Single sign-on und scrolle zur Karte Anbieter-Apps
- Setze im Block GitHub jedes Feld:
- App-ID — die numerische App ID
- Privater Schlüssel — füge die ganze
.pemein, die ZeilenBEGINundENDmit - Client-ID — von derselben Seite
- Client-Secret — nur, wenn du eines erzeugt hast (für die Token-Erneuerung)
- Klicke auf Testen
Der Schlüssel wird beim Speichern geparst. Ein abgeschnittener oder falsch formatierter Inhalt wird an dieser Stelle abgelehnt, statt Stunden später an einer Hintergrundanfrage zu scheitern. Testen geht weiter und fragt GitHub, auf welchen Konten die App installiert ist — „gespeichert“ und „funktioniert“ sind verschiedene Behauptungen, und nur die zweite heißt, dass überhaupt etwas laufen wird.
Kontrolle: der GitHub-Block lautet „Der Server kann für sich selbst handeln, und Personen können sich anmelden.“, und die Zeile GitHub unter Einstellungen → Arbeitsbereich → Profil und Identität → Code-Hosting bietet jetzt Mit GitHub anmelden.
Stattdessen über Umgebungsvariablen konfigurieren
Abschnitt betitelt „Stattdessen über Umgebungsvariablen konfigurieren“Für eine Headless- oder skriptgesteuerte Installation belegt der Server jedes Feld aus der Umgebung, und zwar beim ersten Mal, wenn noch kein gespeicherter Wert vorliegt:
GITHUB_APP_ID=123456GITHUB_APP_PRIVATE_KEY="$(cat control-center.private-key.pem)"GITHUB_CLIENT_ID=Iv1.0123456789abcdefFür diese Werte gibt es keine Kommandozeilen-Flags — ein Geheimnis auf der
Kommandozeile kann jeder Prozess auf dem Host über ps lesen. Die Umgebung ist
der einzige Ort, an dem du sie setzt, und sie hat Vorrang vor dem, was der Build
mitliefert. .env.template ist die vollständige Liste.
Für die lokale Entwicklung trägt die .env in der Wurzel des Repos dieselben
Werte, und der Desktop gibt sie an den Server weiter, den er startet. Setze den
Schlüssel dort in eine Zeile: ein Wert in der .env ist eine Zeile, und
\n in doppelten Anführungszeichen wird zum Zeilenumbruch.
GITHUB_APP_PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY-----\nMIIEow…\n-----END RSA PRIVATE KEY-----"GITHUB_APP_ID und GITHUB_APP_PRIVATE_KEY sind dieselben Namen, die der
Token-Broker der Sandbox schon liest. Ein Host, der feingranulare
Agenten-Tokens eingerichtet hat, bekommt die Anmeldung also gleich mit. Das
Belegen passiert einmal je Feld — danach gilt der gespeicherte Wert, und
eine Änderung unter Einstellungen macht der nächste Neustart nicht rückgängig.
Dasselbe für Linear
Abschnitt betitelt „Dasselbe für Linear“Linear hat keinen Device Flow. Die Anmeldung ist ein Browser-Roundtrip und braucht eine Callback-URL — die Karte Anbieter-Apps zeigt dir genau die URL, die du einträgst.
- Lege eine OAuth-Anwendung an unter linear.app/settings/api/applications/new
- Setze die Callback URL auf die URL, die die Karte anzeigt, Wort für Wort
- Füge Client-ID und Client-Secret in den Linear-Block ein
- Optional einen API-Schlüssel — das sind die Zugangsdaten, mit denen der Server Tickets synchronisiert, wenn kein Mensch danach gefragt hat
Fehlersuche
Abschnitt betitelt „Fehlersuche“Der Anmeldedialog sagt, der Anbieter habe keinen Device-Code geliefert
Abschnitt betitelt „Der Anmeldedialog sagt, der Anbieter habe keinen Device-Code geliefert“Enable Device Flow ist an der App aus. Schalte es unter General ein und versuche es erneut.
Testen sagt, die Zugangsdaten funktionieren, die App ist aber nirgends installiert
Abschnitt betitelt „Testen sagt, die Zugangsdaten funktionieren, die App ist aber nirgends installiert“Registrierung und Installation sind getrennte Schritte. Öffne auf der Seite der App Install App und installiere sie.
Testen sagt, der private Schlüssel ließ sich nicht lesen
Abschnitt betitelt „Testen sagt, der private Schlüssel ließ sich nicht lesen“Füge die ganze .pem-Datei ein, inklusive der Zeilen -----BEGIN und
-----END. Ein Schlüssel ed25519 oder EC geht nicht — GitHub Apps signieren
mit RSA.
Ein Mitglied hat sich angemeldet und sieht keine Repositories
Abschnitt betitelt „Ein Mitglied hat sich angemeldet und sieht keine Repositories“Die App ist nicht auf dem Konto installiert, dem die Repositories gehören, oder die Installation wählt andere Repositories aus. Die eigene Anmeldung gibt nur frei, was die App sehen darf.