Mencipta Hab Git Jauh untuk Syarikat Anda: Panduan Komprehensif
Dalam artikel ini, kami akan meneroka cara membuat hab Git jauh untuk syarikat anda tanpa bergantung pada GitHub. Kami akan menggunakan TypeScript dan Go untuk pelaksanaan bahagian belakang, menyepadukan MySQL untuk penyimpanan data dan melaksanakan pengesahan pengguna menggunakan FIDO2. Penyelesaian ini menyediakan alternatif yang selamat dan boleh disesuaikan kepada platform pengehosan pihak ketiga.
Mari mulakan dengan menyediakan pelayan TypeScript untuk mengendalikan operasi Git:
import express from 'express'; import { execSync } from 'child_process'; const app = express(); const port = 3000; app.post('/create-repo', (req, res) => { const { repoName } = req.body; try { execSync(`git init --bare /path/to/repos/${repoName}.git`); res.status(200).json({ message: 'Repository created successfully' }); } catch (error) { res.status(500).json({ error: 'Failed to create repository' }); } }); app.listen(port, () => { console.log(`Server running on port ${port}`); });
Pelayan TypeScript ini menyediakan titik akhir untuk mencipta repositori Git baharu pada pelayan.
Seterusnya, mari kita laksanakan pelayan Go untuk mengendalikan operasi tolak dan tarik Git:
package main import ( "fmt" "net/http" "os/exec" ) func handleGitOperation(w http.ResponseWriter, r *http.Request) { repoPath := r.URL.Path[1:] gitCommand := r.Header.Get("X-Git-Command") cmd := exec.Command("git", gitCommand, "--stateless-rpc", repoPath) cmd.Stdin = r.Body cmd.Stdout = w cmd.Stderr = w if err := cmd.Run(); err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } } func main() { http.HandleFunc("/", handleGitOperation) fmt.Println("Git server running on :8080") http.ListenAndServe(":8080", nil) }
Pelayan Go ini mengendalikan operasi tolak dan tarik Git dengan melaksanakan arahan Git yang sesuai.
Untuk menyimpan metadata repositori dan maklumat pengguna, kami akan menggunakan MySQL. Berikut ialah contoh cara untuk menyediakan sambungan pangkalan data dan mencipta jadual:
import mysql from 'mysql2/promise'; const pool = mysql.createPool({ host: 'localhost', user: 'your_username', password: 'your_password', database: 'git_hub', }); async function createTables() { const connection = await pool.getConnection(); try { await connection.query(` CREATE TABLE IF NOT EXISTS repositories ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) NOT NULL, owner_id INT NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) `); await connection.query(` CREATE TABLE IF NOT EXISTS users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(255) NOT NULL, email VARCHAR(255) NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) `); } finally { connection.release(); } } createTables();
Kod ini menyediakan sambungan MySQL dan mencipta jadual untuk menyimpan repositori dan maklumat pengguna.
Melaksanakan pengesahan FIDO2 menyediakan pengalaman log masuk yang selamat tanpa kata laluan. Berikut ialah contoh asas cara menyepadukan pengesahan FIDO2:
import { Fido2Lib } from 'fido2-lib'; const f2l = new Fido2Lib({ timeout: 60000, rpId: 'your-company.com', rpName: 'Your Company Git Hub', challengeSize: 128, attestation: 'none', cryptoParams: [-7, -257], }); app.post('/register', async (req, res) => { const { username, email } = req.body; const challengeResponse = await f2l.attestationOptions(); // Store challenge and user info in the database res.json(challengeResponse); }); app.post('/login', async (req, res) => { const { credential } = req.body; try { const result = await f2l.assertionResult(credential, { challenge: 'stored_challenge', origin: 'https://your-company.com', factor: 'either', }); // Verify the result and create a session res.json({ success: true }); } catch (error) { res.status(401).json({ error: 'Authentication failed' }); } });
Kod ini menyediakan titik akhir asas untuk pendaftaran dan log masuk FIDO2. Anda perlu melaksanakan logik tambahan untuk menyimpan dan mendapatkan semula cabaran dan bukti kelayakan pengguna daripada pangkalan data.
Dengan menggabungkan TypeScript dan Go for the backend, MySQL untuk penyimpanan data dan FIDO2 untuk pengesahan pengguna, anda boleh mencipta hab Git jauh yang teguh dan selamat untuk syarikat anda. Penyelesaian ini menawarkan kawalan penuh ke atas kod sumber dan pengurusan pengguna anda, tanpa bergantung pada platform pihak ketiga seperti GitHub.
Ingat untuk melaksanakan pengendalian ralat, pengelogan dan langkah keselamatan yang betul dalam persekitaran pengeluaran. Selain itu, pertimbangkan untuk menambah ciri seperti kawalan akses, proses semakan kod dan penyepaduan dengan alatan pembangunan sedia ada anda untuk mencipta penyelesaian pengurusan Git komprehensif yang disesuaikan dengan keperluan syarikat anda.
Atas ialah kandungan terperinci Mencipta Hab Git Jauh untuk Syarikat Anda (Tanpa Github). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!