웹사이트 검색

Debian 10에서 HTTPS로 Gitea 코드 호스팅 플랫폼을 설치하는 방법


이 튜토리얼은 다음 OS 버전에 대해 존재합니다.

  • 데비안 11(불스아이)
  • 데비안 10(버스터)

이 페이지에서

  1. 요구 사항\n
  2. 1단계: 시스템 준비
  3. 2단계: 데이터베이스 설정
  4. 3단계: Gitea 설치
  5. 4단계: Gitea 구성
  6. 5단계: 역방향 프록시 설정\n
  7. 선택적 단계
    1. 로깅 구성
    2. 별도의 SSH 서버

    Gitea는 Go로 작성되고 Gogs에서 분기된 코드 호스팅 웹 애플리케이션입니다. 이름에서 알 수 있듯이 Gitlab 및 Github와 마찬가지로 널리 사용되는 소스 제어 프로그램 Git과 함께 사용하도록 설계되었습니다. 이 가이드는 HTTPS 리버스 프록시(Nginx) 뒤에 Debian 10에 Gitea를 설치하는 방법을 설명합니다.

    요구 사항

    • 루트 권한이 있는 Debian 10 시스템.\n
    • 서버를 가리키는 등록된 도메인 이름.
    • $EDITOR 환경 변수를 설정해야 합니다.\n
    • 이메일 알림을 위한 SMTP 서버 액세스(선택 사항).\n

    (하위)도메인이 A 레코드가 있는 서버의 IPv4 주소를 가리키는지 확인하십시오. 선택적으로 서버 IPv6 주소를 가리키는 AAAA 레코드를 생성합니다.

    1단계: 시스템 준비

    패키지 색인을 업데이트하여 시작하고 사용 가능한 업데이트를 설치합니다.

    apt update
    apt upgrade -y
    reboot
    

    이 설정에는 여러 소프트웨어 패키지가 필요합니다.

    • Git, Gitea의 의존성.
    • PostgreSQL, Gitea는 데이터베이스가 필요합니다.\n
    • 리버스 프록시로 사용될 Nginx.\n
    • Lets Encrypt SSL 인증서를 얻기 위한 유틸리티인 Certbot.\n
    • Sudo, postgres 시스템 사용자로 명령을 실행합니다.\n

    다음과 같이 설치하십시오.

    apt install -y git nginx certbot postgresql sudo
    

    다음으로 Gitea를 실행할 사용자를 생성합니다.

    adduser --system --disabled-password --group --shell /bin/bash --home /home/gitea gitea
    

    그런 다음 Gitea의 디렉터리 구조를 만듭니다.

    mkdir -p /var/lib/gitea/{data,log} /etc/gitea /run/gitea
    

    그리고 다음과 같이 소유권과 권한을 설정합니다.

    chown -R gitea:gitea /var/lib/gitea
    chown -R gitea:gitea /run/gitea
    chown -R root:gitea /etc/gitea
    chmod -R 750 /var/lib/gitea
    chmod 770 /etc/gitea
    

    /etc/gitea에 대한 권한은 일시적이며 웹 설치 프로그램을 실행한 후 강화됩니다.

    2단계: 데이터베이스 설정

    Postgres가 활성화되어 실행 중인지 확인합니다.

    systemctl enable --now 
    

    그런 다음 Gitea에서 사용할 사용자 역할과 데이터베이스를 만듭니다.

    sudo -u postgres psql
    postgres=# CREATE ROLE gitea LOGIN ENCRYPTED PASSWORD 'your_password';
    postgres=# CREATE DATABASE gitea;
    postgres=# GRANT ALL PRIVILEGES ON DATABASE gitea TO gitea;
    postgres=# exit;
    

    3단계: Gitea 설치

    Giteas 다운로드 페이지에서 최신 linux-amd64 바이너리를 다운로드합니다. 예를 들어:

    wget https://dl.gitea.io/gitea/master/gitea-master-linux-amd64 -O /usr/local/bin/gitea
    chmod 755 /usr/local/bin/gitea
    

    다음으로 Gitea에 대한 시스템 단위 파일을 만듭니다.

    $EDITOR /etc/systemd/system/gitea.service
    

    그리고 다음을 입력합니다.

    [Unit]
    Description=Gitea (Git with a cup of tea)
    After=syslog.target
    After=network.target
    Requires=postgresql.service
    [Service]
    Type=simple
    User=gitea
    Group=gitea
    WorkingDirectory=/var/lib/gitea/
    RuntimeDirectory=gitea
    ExecStart=/usr/local/bin/gitea web -c /etc/gitea/app.ini
    Restart=always
    Environment=USER=gitea HOME=/home/gitea GITEA_WORK_DIR=/var/lib/gitea
    [Install]
    WantedBy=multi-user.target
    

    새 장치가 로드되었는지 확인하십시오.

    systemctl daemon-reload
    

    그런 다음 시스템 시작 시 Gitea를 시작하도록 systemd에 지시합니다.

    systemctl enable gitea.service
    

    4단계: Gitea 구성

    초기 구성에는 포함된 웹 설치 스크립트를 사용하십시오. 먼저 Gitea를 시작합니다.

    systemctl start gitea.service
    

    그런 다음 http://your_domain:3000/install로 이동하고 다음과 같이 필수 매개변수를 입력합니다.

    • 데이터베이스 유형: PostgreSQL\n
    • 호스트: 127.0.0.1:5432\n
    • 사용자 이름: gitea
    • 암호: Postgres 역할 생성 중에 선택한 암호를 입력합니다.\n
    • 데이터베이스 이름: gitea
    • SSL: 비활성화\n
    • 사이트 제목: 원하는 제목.\n
    • 리포지토리 루트 경로: /var/lib/gitea/data/repositories
    • Git LFS 루트 경로: /var/lib/gitea/data/lfs
    • 사용자 이름으로 실행: gitea\n
    • SSH 서버 도메인: your_domain
    • SSH 서버 포트: 22
    • Gitea HTTP 수신 포스트: 3000
    • Gitea 기본 URL: https://your_domain/
    • 로그 경로: /var/lib/gitea/log

    적합하다고 생각되는 이메일 및 나머지 설정을 구성한 다음 "Gitea 설치"를 클릭합니다. 잘못된 URL로 리디렉션됩니다. Nginx 또는 HTTPS를 아직 구성하지 않았으므로 이는 정상입니다. 성능상의 이유로 이제 기본 TCP 포트 대신 Unix 소켓에서 수신하도록 Gitea를 구성합니다.

    진행하기 전에 Gitea를 중지하십시오.

    systemctl stop gitea.service
    

    아래와 같이 /etc/gitea에 대한 권한을 강화합니다. 이렇게 하면 gitea 그룹에 속하지 않은 사람이 데이터베이스 자격 증명을 비롯한 중요한 정보가 포함된 app.ini를 읽을 수 없습니다.

    chmod 750 /etc/gitea
    chown root:gitea /etc/gitea/app.ini
    chmod 640 /etc/gitea/app.ini
    

    구성 파일을 엽니다.

    $EDITOR /etc/gitea/app.ini
    
    Remove the following line from the [server] section:
    HTTP_PORT = 3000
    
    And add the following lines to the [server] section:
    HTTP_ADDR        = /run/gitea/gitea.sock
    PROTOCOL         = unix
    UNIX_SOCKET_PERMISSION = 666
    

    5단계: 역방향 프록시 설정

    Stop Nginx if it is running, as certbot will need to bind to port 80:
    systemctl stop nginx.service
    

    다음 명령을 사용하여 도메인에 대한 인증서를 얻습니다.

    certbot certonly --standalone --agree-tos -m  -d your_domain
    

    Lets Encrypt는 인증서를 발급하기 전에 도메인 소유권을 확인합니다. 인증서, 체인 및 개인 키는 /etc/letsencrypt/live/your_domain/에 저장됩니다.

    이제 Nginx를 구성할 수 있습니다. 새 구성 파일을 만듭니다.

    $EDITOR /etc/nginx/sites-available/gitea
    

    그리고 다음 구성을 입력합니다.

    server {
            listen 80;
            listen [::]:80;
            server_name your_domain;
            return 301 https://$server_name$request_uri;
    	access_log /var/log/nginx/gitea-proxy_access.log;
    	error_log /var/log/nginx/gitea-proxy_error.log;
    }
    server {
            listen 443 ssl;
            listen [::]:443 ssl;
            server_name your_domain;
            ssl on;
            ssl_certificate /etc/letsencrypt/live/your_domain/fullchain.pem;
            ssl_certificate_key /etc/letsencrypt/live/your_domain/privkey.pem;
            location / {
                    proxy_pass http://unix:/var/run/gitea/gitea.sock;
    	}
    	access_log /var/log/nginx/gitea-proxy_access.log;
    	error_log /var/log/nginx/gitea-proxy_error.log;
    }

    첫 번째 서버 블록은 단순히 모든 HTTP 요청을 HTTPS로 리디렉션하는 역할을 합니다. 두 번째 블록은 HTTPS 연결을 수신하고 수신하도록 Gitea를 구성한 유닉스 소켓에 프록시합니다.

    위의 구성을 저장했으면 다음을 실행하여 활성화합니다.

    ln -s /etc/nginx/sites-available/gitea /etc/nginx/sites-enabled
    

    구문 오류가 있는지 확인하고 그에 따라 구성을 편집합니다.

    nginx -t
    

    마지막으로 Nginx와 Gitea를 시작합니다.

    systemctl start nginx.service gitea.service
    

    이제 Gitea 인스턴스가 성공적으로 실행되고 있어야 합니다. 초기 웹 설치 프로그램을 사용하여 관리자 계정을 생성하지 않은 경우 처음 가입한 사용자에게 관리자 역할이 부여됩니다.

    선택적 단계

    로깅 구성

    기본적으로 Gitea는 심각도 수준 정보 이상의 메시지를 기록합니다. 대부분 경고 또는 오류로 변경하고 싶을 것입니다. 이렇게 하려면 /etc/gitea/app.ini를 열고 [log] 섹션의 LEVEL 매개변수를 trace, debug, info, warn, error, critical, fatal, none 중 하나로 변경합니다. 예를 들어 심각도가 경고 이상인 메시지를 기록하려면 다음을 사용합니다.

    [log]
    MODE = file
    LEVEL = warn
    ROOT_PATH = /var/lib/gitea/log
    

    변경 사항을 적용하려면 Gitea를 다시 시작하십시오.

    systemctl restart gitea.service
    

    별도의 SSH 서버

    Gitea는 자체 SSH 서버를 대신 사용할 수 있습니다. 활성화하려면 [server] 구성 섹션에 다음 행을 추가하십시오.

    START_SSH_SERVER = true
    

    예를 들어 SSH 포트를 1000보다 큰 숫자로 변경합니다.

    SSH_PORT = 2222
    

    그런 다음 Gitea를 다시 시작하여 변경 사항을 적용하십시오.