웹사이트 검색

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


이 페이지에서

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

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

    요구 사항

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

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

    참고: 이 가이드에서는 SELinux가 비활성화 또는 허용으로 설정되어 있다고 가정합니다.

    1단계: 시스템 준비

    사용 가능한 업데이트를 설치하고 재부팅하여 시작합니다.

    dnf update -y
    reboot
    

    이 설정에는 몇 가지 소프트웨어 구성 요소가 필요합니다.

    • Git, Gitea의 의존성.
    • PostgreSQL, Gitea는 데이터베이스가 필요합니다.\n
    • 리버스 프록시로 사용될 Nginx.\n
    • Sudo, postgres 시스템 사용자로 명령을 실행합니다.\n
    • Wget
    • Lets Encrypt SSL 인증서를 얻기 위한 유틸리티인 Certbot. Certbot은 CentOS 소프트웨어 리포지토리에서 사용할 수 없으므로 별도로 설치됩니다.\n

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

    dnf install -y git postgresql postgresql-server nginx sudo wget
    

    Certbot-auto는 certbot 설치를 관리하는 스크립트입니다. 다운로드 해:

    wget https://dl.eff.org/certbot-auto -O /usr/local/bin/certbot-auto
    

    올바른 권한이 설정되었는지 확인합니다.

    chmod 0755 /usr/local/bin/certbot-auto
    

    다음을 실행하여 certbot을 설치합니다. 종속성 설치를 확인하라는 패키지 관리자의 메시지가 표시되면 y로 대답합니다.

    certbot-auto --install-only
    

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

    useradd --system --shell /bin/bash --create-home --home-dir /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 /var/run/gitea
    chown -R root:gitea /etc/gitea
    chmod -R 750 /var/lib/gitea
    chmod 770 /etc/gitea
    

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

    포트 80 및 443에 대한 트래픽을 영구적으로 활성화:

    firewall-cmd --add-port 80/tcp --add-port 443/tcp --permanent
    firewall-cmd --reload
    

    포트 3000에 대한 액세스는 Unix 소켓을 대신 사용하도록 gitea를 구성하므로 초기 설정에 일시적으로만 필요합니다.

    firewall-cmd --add-port 3000/tcp

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

    Postgres 초기화:

    postgresql-setup --initdb --unit postgresql
    

    활성화되어 실행 중인지 확인하십시오.

    systemctl enable --now postgresql.service
    

    Postgres에 로그인:

    sudo -u postgres psql
    

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

    postgres=# CREATE ROLE gitea LOGIN ENCRYPTED PASSWORD 'your_password';
    postgres=# CREATE DATABASE gitea;
    postgres=# GRANT ALL PRIVILEGES ON DATABASE gitea TO gitea;
    postgres=# \q
    

    Postgres 클라이언트 인증 구성 파일을 엽니다.

    $EDITOR /var/lib/pgsql/data/pg_hba.conf
    

    # IPv4 로컬 연결 바로 뒤에 다음 줄을 추가합니다.

    # IPv4 local connections:
    host	gitea		gitea		127.0.0.1/32		md5
    

    파일을 저장하고 Postgres를 다시 시작합니다.

    systemctl restart postgresql.service

    3단계: Gitea 설치

    Giteas 다운로드 페이지에서 Gitea의 linux-amd64 바이너리 버전을 다운로드합니다. 예를 들어:

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

    다운로드한 바이너리에 올바른 권한을 설정합니다.

    chmod 755 /usr/local/bin/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
    

    서버 섹션에서 다음 행을 제거하십시오.

    HTTP_PORT = 3000
    

    그리고 서버 섹션에 다음 줄을 추가합니다.

    HTTP_ADDR        = /run/gitea/gitea.sock
    PROTOCOL         = unix
    UNIX_SOCKET_PERMISSION = 666

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

    실행 중인 Nginx를 중지하여 certbot이 포트 80에서 수신할 수 있도록 합니다.

    systemctl stop nginx.service
    

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

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

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

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

    $EDITOR /etc/nginx/conf.d/gitea.conf
    

    그리고 다음 서버 블록을 입력합니다.

    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를 구성한 Unix 소켓에 프록시합니다.

    위의 구성을 저장한 후 구문 오류가 있는지 확인하고 필요한 경우 구성을 편집합니다.

    nginx -t
    

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

    systemctl start nginx.service gitea.service
    

    이제 Gitea 인스턴스가 성공적으로 실행되고 있어야 합니다. https://your_domain에서 액세스

    선택적 단계

    로깅 구성

    기본적으로 Giteas는 심각도 수준 정보 이상의 메시지를 기록합니다. 대부분 경고 또는 오류로 변경하고 싶을 것입니다. 이렇게 하려면 /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 포트를 1024 이상의 숫자로 변경합니다. 예를 들면 다음과 같습니다.

    SSH_PORT = 2222
    

    그런 다음 Gitea를 다시 시작하여 변경 사항을 적용하고 선택한 포트에 대한 트래픽을 활성화합니다.

    firewall-cmd --add-port 2222/tcp --permanent
    firewall-cmd --reload