ホームページ >データベース >mysql チュートリアル >会社用のリモート Git Hub の作成 (Github なし)

会社用のリモート Git Hub の作成 (Github なし)

Susan Sarandon
Susan Sarandonオリジナル
2024-11-07 19:18:03579ブラウズ

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

会社用のリモート Git ハブの作成: 包括的なガイド

この記事では、GitHub に依存せずに会社用のリモート Git ハブを作成する方法を検討します。バックエンドの実装には TypeScript と Go を使用し、データ ストレージには MySQL を統合し、FIDO2 を使用してユーザー認証を実装します。このソリューションは、サードパーティのホスティング プラットフォームに代わる、安全でカスタマイズ可能な代替手段を提供します。

バックエンドの実装

TypeScriptサーバー

Git 操作を処理できるように TypeScript サーバーをセットアップすることから始めましょう:

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}`);
});

この TypeScript サーバーは、サーバー上に新しい Git リポジトリを作成するためのエンドポイントを提供します。

Git サーバーに移行する

次に、Git のプッシュおよびプル操作を処理する Go サーバーを実装しましょう。

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)
}

この Go サーバーは、適切な Git コマンドを実行することによって、Git のプッシュおよびプル操作を処理します。

データベースの統合

リポジトリのメタデータとユーザー情報を保存するには、MySQL を使用します。以下は、データベース接続を設定してテーブルを作成する方法の例です:

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();

このコードは MySQL 接続を設定し、リポジトリとユーザー情報を保存するためのテーブルを作成します。

FIDO2によるユーザー認証

FIDO2 認証を実装すると、安全でパスワードのないログイン エクスペリエンスが提供されます。以下は、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' });
  }
});

このコードは、FIDO2 の登録とログインのための基本的なエンドポイントを提供します。データベースにチャレンジとユーザー資格情報を保存および取得するには、追加のロジックを実装する必要があります。

結論

バックエンドに TypeScript と Go、データ ストレージに MySQL、ユーザー認証に FIDO2 を組み合わせることで、会社用の堅牢で安全なリモート Git ハブを作成できます。このソリューションは、GitHub などのサードパーティ プラットフォームに依存せずに、ソース コードとユーザー管理を完全に制御できます。

運用環境では、適切なエラー処理、ログ記録、セキュリティ対策を忘れずに実装してください。さらに、アクセス制御、コードレビュープロセス、既存の開発ツールとの統合などの機能を追加して、企業のニーズに合わせた包括的な Git 管理ソリューションを作成することを検討してください。

以上が会社用のリモート Git Hub の作成 (Github なし)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。