회사를 위한 원격 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!