Mencipta Hab Git Jauh untuk Syarikat Anda (Tanpa Github)

Susan Sarandon
Lepaskan: 2024-11-07 19:18:03
asal
432 orang telah melayarinya

Creating a Remote Git Hub for Your Company(Without Github)

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.

Pelaksanaan Bahagian Belakang

Pelayan TypeScript

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}`);
});
Salin selepas log masuk

Pelayan TypeScript ini menyediakan titik akhir untuk mencipta repositori Git baharu pada pelayan.

Pergi Pelayan Git

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)
}
Salin selepas log masuk

Pelayan Go ini mengendalikan operasi tolak dan tarik Git dengan melaksanakan arahan Git yang sesuai.

Penyepaduan Pangkalan Data

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();
Salin selepas log masuk

Kod ini menyediakan sambungan MySQL dan mencipta jadual untuk menyimpan repositori dan maklumat pengguna.

Pengesahan Pengguna dengan FIDO2

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' });
  }
});
Salin selepas log masuk

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.

Kesimpulan

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!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!