웹사이트 검색

Ubuntu 20.04에서 Nginx로 HTTP Git 서버를 설치하는 방법


이 페이지에서

  1. 전제 조건
  2. 시작하기\n
  3. Nginx 및 Git 설치
  4. Git 저장소 만들기
  5. Git용 Nginx 구성
  6. HTTP Git 서버 테스트
  7. 결론

Git은 Linus Torvalds가 개발한 무료 오픈 소스 버전 관리 시스템입니다. 전 세계 수백만 명의 개발자가 사용합니다. GitHub는 무료 코드 호스팅 서비스도 제공합니다. 그러나 무료 서비스는 코드의 비공개 호스팅을 허용하지 않습니다. 이 경우 Git HTTP 서버로 자체 코드 호스팅 서버를 호스팅할 수 있습니다. 이렇게 하면 서버에 대한 모든 권한이 부여됩니다.

이 튜토리얼에서는 Ubuntu 20.04에서 Nginx로 Git HTTP 서버를 설치하고 구성하는 방법을 보여줍니다.

전제 조건

  • Ubuntu 20.04를 실행하는 서버.\n
  • 서버 IP를 가리키는 유효한 도메인 이름입니다.\n
  • 루트 암호는 서버에 구성됩니다.\n

시작하기

시작하기 전에 서버 패키지를 최신 버전으로 업데이트하는 것이 좋습니다. 다음 명령으로 업데이트할 수 있습니다.

apt-get update -y

모든 패키지가 업데이트되면 다음 단계로 진행할 수 있습니다.

Nginx 및 Git 설치

다음으로 Nginx 웹 서버, Git 및 기타 필수 패키지를 시스템에 설치해야 합니다. 다음 명령으로 설치할 수 있습니다.

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

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

Git 리포지토리 만들기

다음으로 Nginx 웹 루트 디렉토리 내에 Git 리포지토리를 생성해야 합니다. 먼저 다음 명령을 사용하여 git이라는 디렉터리를 만듭니다.

mkdir /var/www/html/git

다음으로 디렉터리를 git로 변경하고 Git 리포지토리를 위한 새 디렉터리를 만듭니다.

cd /var/www/html/git
mkdir gituser.git

다음으로 이 새 디렉터리로 변경하고 다음 명령을 사용하여 Git 리포지토리를 초기화합니다.

git --bare init

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

git update-server-info

그런 다음 다음 명령을 사용하여 git 디렉토리에 대한 소유권 및 권한을 설정합니다.

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

다음으로 다음 명령을 사용하여 인증을 위한 새 gituser를 만듭니다.

htpasswd -c /var/www/html/git/htpasswd gituser

아래와 같이 비밀번호를 설정하라는 메시지가 표시됩니다.

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

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

cat /var/www/html/git/htpasswd

다음과 같은 결과가 표시되어야 합니다.

gituser:$apr1$iPKZDbFB$ziRRbGXzVMMHaPYOtL05m/

Git용 Nginx 구성

다음으로 Git 리포지토리를 제공하도록 Nginx를 구성해야 합니다. 다음 명령을 사용하여 Git용 새 가상 호스트 구성 파일을 만들 수 있습니다.

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

다음 줄을 추가합니다.

server {
        listen 80;

        root /var/www/html/git;

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

        server_name git.example.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/git/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/git;
    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 Tue 2020-11-17 07:43:46 UTC; 4s ago
       Docs: man:nginx(8)
    Process: 3240 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
    Process: 3256 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 3257 (nginx)
      Tasks: 3 (limit: 4691)
     Memory: 3.5M
     CGroup: /system.slice/nginx.service
             ??3257 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
             ??3258 nginx: worker process
             ??3259 nginx: worker process

Nov 17 07:43:46 ubunt4 systemd[1]: Starting A high performance web server and a reverse proxy server...
Nov 17 07:43:46 ubunt4 systemd[1]: Started A high performance web server and a reverse proxy server.

완료되면 다음 단계로 진행할 수 있습니다.

HTTP Git 서버 테스트

이 시점에서 Git 서버가 설치되고 구성됩니다. 이제 테스트할 시간입니다.

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

apt-get install git -y

설치가 완료되면 다음 명령을 사용하여 myapp라는 디렉터리를 만듭니다.

mkdir myapp

그런 다음 새 디렉터리로 변경하고 다음 명령을 사용하여 Git을 초기화합니다.

cd myapp
git init

다음으로 다음 명령을 사용하여 원격 Git 리포지토리를 추가합니다.

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

다음으로 app1 및 app2 디렉토리를 생성하고 해당 디렉토리 내부에 일부 콘텐츠가 포함된 app1 및 app2 파일도 생성합니다.

mkdir app1 app2
echo "This is my first application" > app1/app1
echo "This is my first application" > app2/app2

다음으로 다음 명령을 사용하여 모든 디렉터리와 파일을 리포지토리에 추가합니다.

git add .

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

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

다음과 같은 결과가 표시되어야 합니다.

[master (root-commit) 4e90372] Add files and directories
 2 files changed, 2 insertions(+)
 create mode 100644 app1/app1
 create mode 100644 app2/app2

그런 다음 다음 명령을 사용하여 이러한 변경 사항을 원격 Git 서버로 푸시합니다.

git push origin master

아래와 같이 원격 Git 사용자의 비밀번호를 제공하라는 메시지가 표시됩니다.

Password for 'http://': 

비밀번호를 입력하고 Enter를 누르십시오. 다음과 같은 결과가 표시되어야 합니다.

Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (5/5), 354 bytes | 0 bytes/s, done.
Total 5 (delta 0), reused 0 (delta 0)
To http:///gituser.git
 * [new branch]      master -> master

위의 출력은 파일과 디렉터리가 원격 Git 리포지토리에 추가되었음을 나타냅니다. 이 리포지토리를 로컬 시스템에 복제하려면 다음 명령을 실행합니다.

git clone http:///gituser.git

다음과 같은 결과가 표시되어야 합니다.

Cloning into 'gituser'...
Password for 'http://': 
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 5 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (5/5), done.
Checking connectivity... done.

결론

축하합니다! Ubuntu 20.04 서버에 Git HTTP 서버를 성공적으로 설치하고 설정했습니다. 이제 LAN 내에서 액세스할 수 있는 개발 환경에서 theGit 서버를 구현할 수 있습니다.