웹사이트 검색

Debian 11에서 Nginx로 HTTP Git 서버를 설치하는 방법


이 페이지에서

  1. 전제 조건
  2. Nginx 및 기타 종속성 설치
  3. Git 저장소 만들기
  4. Git 리포지토리를 제공하도록 Nginx 구성\n
  5. 클라이언트에서 Git 저장소에 연결
  6. 결론

Git은 전 세계 수천 명의 개발자가 사용하는 오픈 소스 버전 제어 시스템입니다. 소스 수준에서 소프트웨어 변경 사항을 추적하는 데 사용됩니다. 변경 사항을 추적하고 이전 단계로 되돌리며 파일 및 디렉토리의 대체 버전을 생성할 수 있습니다.

HTTP Git 서버는 Nginx 웹 서버를 사용하여 LAN(Local Area Network)을 통해 Git 리포지토리를 제공하는 오픈 소스 프로젝트입니다. 설정이 매우 간단하고 쉽습니다. 누구나 명령줄 인터페이스에서 관리할 수 있습니다.

이 튜토리얼에서는 Debian 11에서 Nginx로 HTTP Git 리포지토리 서버를 설정하는 방법을 설명합니다.

전제 조건

  • Debian 11을 실행하는 서버.\n
  • 서버 IP를 가리키는 유효한 도메인 이름입니다.\n
  • 서버에 루트 암호가 구성되어 있습니다.\n

Nginx 및 기타 종속성 설치

먼저 HTTP Git 서버를 설정하려면 Nginx 웹 서버 및 기타 필수 패키지를 설치해야 합니다. 다음 명령을 사용하여 모두 설치할 수 있습니다.

apt-get install nginx git fcgiwrap apache2-utils unzip -y

모든 패키지가 설치되면 다음 단계로 진행할 수 있습니다.

Git 리포지토리 만들기

다음으로 Git 리포지토리를 저장할 디렉터리를 만들어야 합니다. Nginx 웹 루트 디렉토리 내에 myrepo라는 디렉토리를 생성해 보겠습니다.

mkdir /var/www/html/myrepo

다음으로 디렉터리를 myrepo로 변경하고 사용자를 위한 다른 디렉터리를 만듭니다.

cd /var/www/html/myrepo
mkdir user1.git

그런 다음 사용자 디렉터리로 이동하고 다음 명령을 사용하여 Git 리포지토리를 초기화합니다.

cd user1.git
git --bare init

다음과 같은 결과가 표시됩니다.

Initialized empty Git repository in /var/www/html/myrepo/user1.git/

다음으로 다음 명령을 사용하여 Git 서버 정보를 업데이트합니다.

git update-server-info

다음으로 myrepo의 소유권을 변경하고 다음 명령을 사용하여 적절한 권한을 설정합니다.

chown -R www-data:www-data /var/www/html/myrepo
chmod -R 755 /var/www/html/myrepo

다음으로 user1이라는 사용자를 만들고 비밀번호를 설정합니다.

htpasswd -c /var/www/html/myrepo/htpasswd user1

아래와 같이 비밀번호를 설정할 수 있습니다.

New password: 
Re-type new password: 
Adding password for user user1

다음 명령을 사용하여 비밀번호를 확인할 수 있습니다.

cat /var/www/html/myrepo/htpasswd

샘플 출력:

user1:$apr1$LoyCEkzA$Fjq5nBbLhBRdaxCQBBUQd1

Git 리포지토리를 제공하도록 Nginx 구성

다음으로 Git 리포지토리를 제공할 Nginx 가상 호스트 구성 파일을 만들어야 합니다.

nano /etc/nginx/conf.d/git.conf

다음 줄을 추가합니다.

server {
        listen 80;

        root /var/www/html/myrepo;

        # Add index.php to the list if you are using PHP
        index index.html index.htm index.nginx-debian.html;

        server_name git.yourdomain.com;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ =404;
        }

location ~ (/.*) {
    client_max_body_size 0; 
    auth_basic "Git Login"; 
    auth_basic_user_file "/var/www/html/myrepo/htpasswd";
    include /etc/nginx/fastcgi_params; 
    fastcgi_param SCRIPT_FILENAME /usr/lib/git-core/git-http-backend; 
    fastcgi_param GIT_HTTP_EXPORT_ALL "";
    fastcgi_param GIT_PROJECT_ROOT /var/www/html/myrepo;
    fastcgi_param REMOTE_USER $remote_user;
    fastcgi_param PATH_INFO $1; 
    fastcgi_pass  unix:/var/run/fcgiwrap.socket;
}

}

완료되면 파일을 저장하고 닫은 다음 Nginx에서 구문 오류를 확인합니다.

nginx -t

다음과 같은 결과가 표시됩니다.

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

마지막으로 Nginx 서비스를 다시 시작하여 변경 사항을 적용합니다.

systemctl restart nginx

다음 명령을 사용하여 Nginx 상태를 확인할 수도 있습니다.

systemctl status nginx

다음과 같은 결과가 표시됩니다.

? nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Sat 2021-12-11 08:00:04 UTC; 2s ago
       Docs: man:nginx(8)
    Process: 144985 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
    Process: 144986 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 144987 (nginx)
      Tasks: 2 (limit: 2341)
     Memory: 2.5M
        CPU: 42ms
     CGroup: /system.slice/nginx.service
             ??144987 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
             ??144988 nginx: worker process

Dec 11 08:00:04 debian11 systemd[1]: Starting A high performance web server and a reverse proxy server...
Dec 11 08:00:04 debian11 systemd[1]: nginx.service: Failed to parse PID from file /run/nginx.pid: Invalid argument
Dec 11 08:00:04 debian11 systemd[1]: Started A high performance web server and a reverse proxy server.

클라이언트에서 Git 저장소에 연결

이 시점에서 Git HTTP 서버는 Nginx로 설정됩니다. 이제 클라이언트 시스템에서 연결하고 테스트할 시간입니다.

먼저 다음 명령을 사용하여 클라이언트 시스템에 Git 패키지를 설치합니다.

apt-get install git -y

다음으로 다음 명령을 사용하여 프로젝트의 디렉터리를 만듭니다.

mkdir project

다음으로 프로젝트 디렉터리로 이동하고 아래 명령을 사용하여 Git을 초기화합니다.

cd project
git init

다음으로 이메일과 사용자 이름을 사용하여 Git을 구성합니다.

git config --global user.email ""
git config --global user.name "user1"

다음으로 다음 명령을 사용하여 Git HTTP 서버를 추가합니다.

git remote add origin http:///user1.git

다음으로 dev01이라는 디렉터리를 만들고 그 안에 파일을 추가합니다.

mkdir dev01
echo "This is my first application" > dev01/file1

다음으로 생성된 디렉터리와 파일을 Git 리포지토리에 추가합니다.

git add .

그런 다음 다음 명령을 사용하여 변경 사항을 커밋합니다.

git commit -a -m "Add files and directories"

다음과 같은 결과가 표시됩니다.

[master (root-commit) 0299d83] Add files and directories
 1 file changed, 1 insertion(+)
 create mode 100644 dev01/file1

다음으로 다음 명령을 사용하여 파일과 디렉터리를 HTTP Git 서버에 업로드합니다.

git push origin master

Git 서버에 액세스하려면 비밀번호를 입력하라는 메시지가 표시됩니다.

Password for 'http://': 

연결되면 다음과 같은 결과가 표시됩니다.

Counting objects: 4, done.
Writing objects: 100% (4/4), 281 bytes | 281.00 KiB/s, done.
Total 4 (delta 0), reused 0 (delta 0)
To http://git.yourdomain.com/user1.git
 * [new branch]      master -> master

다음 명령을 사용하여 Git 서버에서 직접 리포지토리를 다운로드할 수도 있습니다.

git clone http:///user1.git

다음과 같은 결과가 표시됩니다.

Cloning into 'user1'...
Password for 'http://': 
remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Total 4 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (4/4), done.

결론

위 가이드에서는 Debian 11에서 Nginx로 HTTP Git 서버를 설정하는 방법을 배웠습니다. 이제 이 설정을 로컬 개발 환경에 구현하고 명령줄을 사용하여 프로젝트를 관리 및 추적할 수 있습니다.