Skapa GitHub-appen
Den här guiden visar hur du ger din server en egen GitHub-identitet. Det tar ungefär två minuter, bara serverägaren gör det, och det behöver bara göras en gång per server.
För att ansluta ditt eget konto efteråt, se Konfigurera GitHub-integration.
Varför din server behöver en egen app
Avsnitt med rubriken “Varför din server behöver en egen app”En registrering leder till två olika uppgifter, och appen är det som gör båda ärliga:
| Uppgift | Vad som svarar på den | Varför det spelar roll |
|---|---|---|
| En person loggar in | Appens klient-ID, via enhetsflödet | Du får en inloggningsuppgift som är din, på servern, på varje enhet — utan token att klistra in eller rotera |
| Servern agerar | Appens ID + privata nyckel → installationstoken | Webhooks, PR-pollning och ärendesynkronisering slutar bero på att en människas token fortfarande är giltig |
Lägg märke till vad som inte finns i tabellen: en klienthemlighet. GitHubs enhetsflöde autentiserar med enbart klient-ID:t — både begäran om enhetskoden och token-omröstningen — så det finns ingen hemlighet att hålla reda på för inloggningen.
Utan en egen app fungerar det första fortfarande via klient-ID:t som bygget levereras med; det andra faller tillbaka på serverägarens inloggningsuppgifter, så bakgrundsarbetet hänger på den som kom igång först.
Förutsättningar
Avsnitt med rubriken “Förutsättningar”- Du är serverägare — åtgärderna
providerApps.*är begränsade till den rollen, och kortet är osynligt för alla andra - Ett GitHub-konto, eller en organisation där du kan skapa appar
- Inget som behöver vara åtkomligt utifrån: inloggningen är ett enhetsflöde, så servern behöver ingen inkommande port, tunnel, callback-URL eller domän
Registrera appen
Avsnitt med rubriken “Registrera appen”- Gå till github.com/settings/apps/new (för en organisation: Settings → Developer settings → GitHub Apps → New GitHub App)
- GitHub App name — vad som helst;
Control Center (yourname)är bra. Det visas på commits och kommentarer som servern gör - Homepage URL — vad som helst, t.ex.
https://github.com/your-name - Callback URL — lämna det tomt. Enhetsflödet har ingen
- Markera Enable Device Flow. Det här är den enda inställningen som inloggningen inte kan fungera utan
- Avmarkera Webhook → Active om du inte kopplar upp webhooks separat
- Under Repository permissions, bevilja minst:
- Contents: Read and write
- Metadata: Read-only (obligatoriskt)
- Pull requests: Read and write
- Issues: Read and write, om du använder GitHub Issues för ärenden, och för botens kommentarssökning i PR-samtal (se Prata med Control Center från en GitHub-PR)
- Checks: Read-only, för CI-status på PR-sidan
- Under Where can this GitHub App be installed?, välj det som passar — ”Only on this account” passar för en personlig server
- Klicka på Create GitHub App
Samla in de tre värdena
Avsnitt med rubriken “Samla in de tre värdena”På appens sida, direkt efter att den har skapats:
| Värde | Var |
|---|---|
| App ID | Fliken General, nära toppen |
| Client ID | Fliken General, under ”Client secrets” |
| Private key | Generate a private key — en .pem laddas ner |
Den privata nyckelfilen laddas ner en gång och GitHub visar den aldrig igen. Behåll den tills du har klistrat in den; du kan alltid generera en ny.
En klienthemlighet är valfri och ger exakt en sak: om du låter ”Expire user authorization tokens” vara PÅ är det den som förnyar någons token i tysthet i stället för att be personen logga in igen var åttonde timme. Själva inloggningen använder den aldrig.
Det enklaste upplägget är att stänga AV den utgången, och då behövs ingen hemlighet någonstans. Om du behåller den på, generera en hemlighet och klistra in den i Inställningar → Server → Enkel inloggning (kortet Leverantörsappar) — det finns ingen miljövariabel för den, och ingen är inbakad i ett bygge, så den stannar på din server.
Installera den på ditt konto
Avsnitt med rubriken “Installera den på ditt konto”En app som är registrerad men inte installerad kan autentisera personer och läsa ingenting.
- På appens sida, öppna Install App
- Installera den på ditt konto eller din organisation
- Välj All repositories, eller välj de arkiv som servern ska se
Klistra in den i Control Center
Avsnitt med rubriken “Klistra in den i Control Center”- Gå till Inställningar → Server → Enkel inloggning och rulla till kortet Leverantörsappar
- I blocket GitHub, ange varje fält:
- App-ID — det numeriska App ID:t
- Privat nyckel — klistra in hela
.pem-filen, inklusive radernaBEGINochEND - Klient-ID — från samma sida
- Klienthemlighet — endast om du genererade en (för token-förnyelse)
- Klicka på Test
Nyckeln tolkas när den sparas, så en avkortad eller felformaterad inklistring avvisas direkt i stället för att misslyckas i en bakgrundsförfrågan timmar senare. Test går längre och frågar GitHub vilka konton appen är installerad på — ”sparad” och ”fungerar” är olika påståenden, och bara det andra betyder att något kommer att köras.
Kontrollpunkt: GitHub-blocket visar ”Servern kan agera som sig själv, och personer kan logga in”, och raden GitHub under Inställningar → Arbetsyta → Profil och identitet → Kodvärd erbjuder nu Logga in med GitHub.
Konfigurera den med miljövariabler i stället
Avsnitt med rubriken “Konfigurera den med miljövariabler i stället”För en huvudlös eller skriptad installation fyller servern varje fält från miljön första gången det inte har något sparat värde:
GITHUB_APP_ID=123456GITHUB_APP_PRIVATE_KEY="$(cat control-center.private-key.pem)"GITHUB_CLIENT_ID=Iv1.0123456789abcdefDet finns inga kommandoradsflaggor för dessa — en hemlighet på en kommandorad
kan läsas av varje process på värden via ps. Miljön är den enda platsen att
konfigurera dem på, och den går före det som bygget levereras med.
.env.template är den fullständiga listan.
För lokal utveckling har .env i arkivets rot samma värden och skrivbordsappen
skickar dem till servern den startar. Lägg nyckeln på en rad där: ett
.env-värde är en rad, och \n inom dubbla citattecken avkodas till en ny rad.
GITHUB_APP_PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY-----\nMIIEow…\n-----END RSA PRIVATE KEY-----"GITHUB_APP_ID och GITHUB_APP_PRIVATE_KEY är samma namn som sandlådans
tokenförmedlare redan läser, så en värd som har konfigurerat finkorniga
agenttoken får inloggningsbanan på köpet. Fyllningen sker en gång per fält — efter
det vinner det sparade värdet, så ändringar i Inställningar ångras inte av nästa
omstart.
Gör samma sak för Linear
Avsnitt med rubriken “Gör samma sak för Linear”Linear har inget enhetsflöde, så dess inloggning är en tur via webbläsaren och den behöver en callback-URL — kortet Leverantörsappar visar exakt vilken du ska registrera.
- Skapa en OAuth-applikation på linear.app/settings/api/applications/new
- Ange Callback URL till den URL som kortet visar, ordagrant
- Klistra in Client ID och Client secret i Linear-blocket
- Lägg valfritt till en API-nyckel för arbetsytan — det är den inloggningsuppgift som servern använder för att synkronisera ärenden när ingen människa har bett om det
Felsökning
Avsnitt med rubriken “Felsökning”Inloggningsdialogen säger att leverantören inte returnerade någon enhetskod
Avsnitt med rubriken “Inloggningsdialogen säger att leverantören inte returnerade någon enhetskod”Enable Device Flow är avstängt på appen. Slå på det under General och försök igen.
Test säger att inloggningsuppgifterna fungerar men att appen inte är installerad någonstans
Avsnitt med rubriken “Test säger att inloggningsuppgifterna fungerar men att appen inte är installerad någonstans”Registrering och installation är två separata steg. Öppna Install App på appens sida och installera den.
Test säger att den privata nyckeln inte kunde läsas
Avsnitt med rubriken “Test säger att den privata nyckeln inte kunde läsas”Klistra in hela .pem-filen, inklusive raderna -----BEGIN och -----END. En
ed25519- eller EC-nyckel kan inte användas — GitHub Apps signerar med RSA.
En medlem loggade in men ser inga arkiv
Avsnitt med rubriken “En medlem loggade in men ser inga arkiv”Appen är inte installerad på kontot som äger dem, eller så omfattar installationen andra arkiv. Medlemmens egen inloggning ger bara åtkomst till det appen får se.