회사를 위한 원격 Git Hub 만들기(Github 없이)

Susan Sarandon
풀어 주다: 2024-11-07 19:18:03
원래의
499명이 탐색했습니다.

Creating a Remote Git Hub for Your Company(Without 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 저장소를 생성하기 위한 엔드포인트를 제공합니다.

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

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿