Buat GitHub App
Panduan ini menunjukkan cara memberi server Anda identitas GitHub-nya sendiri. Prosesnya sekitar dua menit, hanya pemilik server yang melakukannya, dan cukup sekali per server.
Untuk menghubungkan akun Anda sendiri setelahnya, lihat Siapkan integrasi GitHub.
Mengapa server Anda memerlukan app sendiri
Bagian berjudul “Mengapa server Anda memerlukan app sendiri”Satu pendaftaran menghasilkan dua pekerjaan berbeda, dan app-lah yang membuat keduanya jujur:
| Pekerjaan | Yang menjawabnya | Mengapa penting |
|---|---|---|
| Seseorang masuk | Client id app, melalui device flow | Anda mendapat kredensial milik Anda sendiri, di server, di setiap perangkat — tanpa token yang harus ditempel atau dirotasi |
| Server bertindak | Id app + kunci privat → token instalasi | Webhook, polling PR, dan sinkronisasi tiket tidak lagi bergantung pada masih validnya token satu orang |
Perhatikan apa yang tidak ada di tabel itu: client secret. Device flow GitHub mengautentikasi hanya dengan client id — baik permintaan kode perangkat maupun polling token — sehingga tidak ada rahasia yang perlu disimpan untuk masuk.
Tanpa app Anda sendiri, yang pertama tetap berfungsi melalui client id bawaan build; yang kedua beralih ke kredensial pemilik server, sehingga pekerjaan latar belakang menumpang pada siapa pun yang melakukan onboarding lebih dulu.
Prasyarat
Bagian berjudul “Prasyarat”- Anda adalah pemilik server — operasi
providerApps.*dibatasi hanya untuknya, dan kartu itu tidak terlihat oleh orang lain - Akun GitHub, atau organisasi tempat Anda dapat membuat app
- Tidak ada yang perlu dapat dijangkau publik: proses masuknya adalah device flow, sehingga server tidak memerlukan port masuk, tunnel, URL callback, atau domain
Daftarkan app
Bagian berjudul “Daftarkan app”- Buka github.com/settings/apps/new (untuk organisasi: Settings → Developer settings → GitHub Apps → New GitHub App)
- GitHub App name — apa saja;
Control Center (yourname)tidak masalah. Nama ini muncul pada commit dan komentar yang dibuat server - Homepage URL — apa saja, mis.
https://github.com/your-name - Callback URL — biarkan kosong. Device flow tidak memilikinya
- Centang Enable Device Flow. Ini satu-satunya setelan yang tanpanya proses masuk tidak dapat berfungsi
- Hapus centang Webhook → Active kecuali Anda menyambungkan webhook secara terpisah
- Di bawah Repository permissions, berikan setidaknya:
- Contents: Read and write
- Metadata: Read-only (wajib)
- Pull requests: Read and write
- Issues: Read and write, jika Anda memakai GitHub Issues untuk tiket, dan untuk pencarian komentar percakapan PR bot (lihat Bicara ke Control Center dari PR GitHub)
- Checks: Read-only, untuk status CI di halaman PR
- Di bawah Where can this GitHub App be installed?, pilih yang sesuai — “Only on this account” cocok untuk server pribadi
- Klik Create GitHub App
Kumpulkan ketiga nilainya
Bagian berjudul “Kumpulkan ketiga nilainya”Di halaman app, tepat setelah pembuatan:
| Nilai | Di mana |
|---|---|
| App ID | Tab General, di dekat bagian atas |
| Client ID | Tab General, di bawah “Client secrets” |
| Private key | Generate a private key — berkas .pem diunduh |
Berkas kunci privat hanya diunduh sekali dan GitHub tidak pernah menampilkannya lagi. Simpan sampai Anda menempelkannya; Anda selalu dapat membuat yang baru.
Client secret bersifat opsional dan hanya memberi satu hal: jika Anda membiarkan “Expire user authorization tokens” AKTIF, dialah yang memperbarui token seseorang secara diam-diam alih-alih memintanya masuk lagi setiap delapan jam. Proses masuknya sendiri tidak pernah memakainya.
Penyiapan yang lebih sederhana adalah mematikan masa berlaku itu, dan setelah itu tidak ada rahasia yang diperlukan di mana pun. Jika Anda membiarkannya aktif, buat rahasia dan tempel di Pengaturan → Server → Single sign-on (kartu Aplikasi penyedia) — tidak ada variabel lingkungan untuk rahasia itu, dan tidak ada yang ditanam dalam build, sehingga rahasia itu tetap berada di server Anda.
Pasang di akun Anda
Bagian berjudul “Pasang di akun Anda”App yang terdaftar tetapi tidak dipasang dapat mengautentikasi orang dan tidak dapat membaca apa pun.
- Di halaman app, buka Install App
- Pasang di akun atau organisasi Anda
- Pilih All repositories, atau pilih repositori yang harus dilihat server ini
Tempel ke Control Center
Bagian berjudul “Tempel ke Control Center”- Buka Pengaturan → Server → Single sign-on dan gulir ke kartu Aplikasi penyedia
- Pada blok GitHub, isi setiap kolom:
- Id aplikasi — App ID numeriknya
- Kunci privat — tempel seluruh
.pem, termasuk barisBEGINdanEND - Id klien — dari halaman yang sama
- Rahasia klien — hanya jika Anda membuatnya (untuk penyegaran token)
- Klik Tes
Kunci diurai saat disimpan, sehingga tempelan yang terpotong atau salah format langsung ditolak di situ, bukan gagal pada permintaan latar belakang berjam-jam kemudian. Tes melangkah lebih jauh dan menanyakan ke GitHub di akun mana app itu dipasang — “tersimpan” dan “berfungsi” adalah dua klaim yang berbeda, dan hanya yang kedua berarti ada sesuatu yang akan berjalan.
Titik pemeriksaan: blok GitHub berbunyi “Server dapat bertindak sebagai dirinya sendiri, dan orang dapat masuk”, dan baris GitHub di bawah Pengaturan → Ruang kerja → Profil & identitas → Hosting kode kini menawarkan Masuk dengan GitHub.
Konfigurasikan dengan variabel lingkungan sebagai gantinya
Bagian berjudul “Konfigurasikan dengan variabel lingkungan sebagai gantinya”Untuk instalasi headless atau berbasis skrip, server menyemai setiap kolom dari lingkungan saat pertama kali tidak memiliki nilai tersimpan:
GITHUB_APP_ID=123456GITHUB_APP_PRIVATE_KEY="$(cat control-center.private-key.pem)"GITHUB_CLIENT_ID=Iv1.0123456789abcdefTidak ada flag baris perintah untuk ini — rahasia di baris perintah dapat dibaca
oleh setiap proses di host melalui ps. Lingkungan adalah satu-satunya tempat
untuk mengonfigurasinya, dan itu mengalahkan apa pun yang disertakan build.
.env.template adalah daftar lengkapnya.
Untuk pengembangan lokal, .env di akar repo membawa nilai yang sama dan
aplikasi desktop meneruskannya ke server yang dijalankannya. Letakkan kunci itu
pada satu baris di sana: nilai .env adalah satu baris, dan \n di dalam
tanda kutip ganda didekode menjadi baris baru.
GITHUB_APP_PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY-----\nMIIEow…\n-----END RSA PRIVATE KEY-----"GITHUB_APP_ID dan GITHUB_APP_PRIVATE_KEY adalah nama yang sama yang sudah
dibaca broker token sandbox, sehingga host yang telah mengonfigurasi token agen
fine-grained mendapat jalur masuknya gratis. Penyemaian terjadi sekali per
kolom — setelah itu nilai tersimpan yang menang, sehingga penyuntingan di
Pengaturan tidak dibatalkan oleh mulai ulang berikutnya.
Lakukan hal yang sama untuk Linear
Bagian berjudul “Lakukan hal yang sama untuk Linear”Linear tidak memiliki device flow, jadi proses masuknya berupa perjalanan bolak-balik melalui browser dan memang memerlukan URL callback — kartu Aplikasi penyedia menunjukkan URL persisnya untuk didaftarkan.
- Buat aplikasi OAuth di linear.app/settings/api/applications/new
- Setel Callback URL ke URL yang ditampilkan kartu, persis apa adanya
- Tempel Id klien dan Rahasia klien ke blok Linear
- Secara opsional tambahkan Kunci API ruang kerja — itulah kredensial yang dipakai server untuk menyinkronkan tiket saat tidak ada manusia yang meminta
Pemecahan masalah
Bagian berjudul “Pemecahan masalah”Dialog proses masuk menyebut penyedia tidak mengembalikan kode perangkat
Bagian berjudul “Dialog proses masuk menyebut penyedia tidak mengembalikan kode perangkat”Enable Device Flow mati pada app. Aktifkan di bawah General, lalu coba lagi.
Tes menyebut kredensial berfungsi tetapi app tidak dipasang di mana pun
Bagian berjudul “Tes menyebut kredensial berfungsi tetapi app tidak dipasang di mana pun”Pendaftaran dan pemasangan adalah langkah terpisah. Buka Install App di halaman app, lalu pasang.
Tes menyebut kunci privat tidak dapat dibaca
Bagian berjudul “Tes menyebut kunci privat tidak dapat dibaca”Tempel seluruh berkas .pem, termasuk baris -----BEGIN dan -----END. Kunci
ed25519 atau EC tidak dapat dipakai — GitHub Apps menandatangani dengan RSA.
Seorang anggota berhasil masuk tetapi tidak melihat repositori
Bagian berjudul “Seorang anggota berhasil masuk tetapi tidak melihat repositori”App tidak dipasang pada akun yang memilikinya, atau pemasangannya memilih repositori yang berbeda. Proses masuk milik mereka hanya memberikan apa yang boleh dilihat app.