ホームページ >データベース >mysql チュートリアル >会社用のリモート Git Hub の作成 (Github なし)
会社用のリモート Git ハブの作成: 包括的なガイド
この記事では、GitHub に依存せずに会社用のリモート Git ハブを作成する方法を検討します。バックエンドの実装には TypeScript と Go を使用し、データ ストレージには MySQL を統合し、FIDO2 を使用してユーザー認証を実装します。このソリューションは、サードパーティのホスティング プラットフォームに代わる、安全でカスタマイズ可能な代替手段を提供します。
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 のプッシュおよびプル操作を処理する 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 認証を統合する方法の基本的な例です:
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 サイトの他の関連記事を参照してください。