Nginx 리버스 에이전트를 사용하여 SSL 구성 Buildbot을 사용하는 방법

Nginx 리버스 에이전트를 사용하여 SSL 구성 Buildbot을 사용하는 방법

2022-06-01 last update

13 minutes reading Ubuntu Ubuntu 16.04 CI/CD Let's Encrypt Nginx
참고: 이 강좌에서는 Buildbot의 이전 버전을 설명하므로 이 설명은 현재 버전에서 사용할 수 없습니다.본문을 업데이트하기 전에, 당신은 official Buildbot reverse proxy configuration documentation을 사용할 수 있습니다.

소개


Buildbot은 Python 기반의 지속적인 통합 시스템으로 소프트웨어 구축, 테스트, 발표 과정을 자동화하는 데 사용된다.앞의 강좌에서 우리는 서버의 init 시스템 관리 프로세스를 허용하기 위해 installed Buildbotcreated systemd Unit files을 소개했다.Buildbot은 내장된 웹 서버, 감청 포트 8010을 가지고 있으며, SSL로 웹 인터페이스를 보호하기 위해 역방향 에이전트를 설정해야 합니다.
이 강좌에서는 SSL로 보호된 브라우저 요청을 Buildbot의 웹 인터페이스로 지정하기 위해 Nginx를 역방향 에이전트로 설정하는 방법을 보여 줍니다.

선결 조건


본 강좌를 배우려면 다음이 필요합니다.
  • Ubuntu 16.04 서버 1대, 최소 1GB RAM, Ubuntu 16.04 initial server setup guide
  • 에 비루트 사용자 sudo 및 방화벽 구성
    또한 서버에서 다음 자습서를 완성해야 합니다.
  • How To Install Buildbot on Ubuntu 16.04
  • How To Create Systemd Unit Files for Buildbot
  • How To Install Nginx on Ubuntu 16.04
  • How To Secure Nginx with Let’s Encrypt on Ubuntu 16.04 .
  • 당신이 이러한 요구를 완성한 후에 시작할 수 있습니다.

    1단계 - Nginx 구성


    필수 자습서 How to Secure Nginx with Let’s Encrypt on Ubuntu 16.04에서 Nginx를 /etc/nginx/sites-available/default 파일에서 SSL을 사용하도록 구성합니다.시작하기 전에 작업 프로필을 백업합니다.
    1. sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.ssl.bak
    다음은 default을 열고 역방향 프록시 설정을 추가합니다.
    1. sudo nano /etc/nginx/sites-available/default
    우선 SSL server 블록에 특정 액세스 및 오류 로그를 추가합니다.
    /etc/nginx/sites available/default
    . . . 
    server {
            # SSL Configuration
            #
    . . .
             # include snippets/snakeoil.conf;
             access_log            /var/log/nginx/buildbot.access.log;
             error_log            /var/log/nginx/buildbot.error.log;
    . . .        
            
    
    다음은 프록시 설정을 설정합니다.
    Buildbot에 모든 요청을 보내고 있기 때문에 기본 try_files줄을 삭제하거나 주석을 달아야 합니다. 쓴 바와 같이 이 줄은 요청이 Buildbot에 도착하기 전에 404개의 오류를 되돌려줍니다.
    참고: 대부분의 응용 프로그램과 달리 Buildbot은 try_files 설정을 사용하면 파일 루트 디렉터리에 200개의 요청 응답을 되돌려줍니다.브라우저에 자산이 캐시되어 있으면 Buildbot이 작업 중인 것처럼 보일 수 있습니다.캐시된 자산이 없으면 빈 페이지로 돌아갑니다.
    그런 다음 리버스 프록시 구성을 추가합니다.첫 번째 줄에는 호스트 이름, 클라이언트가 요청한 프로토콜, 클라이언트 IP 주소 등 정보가 로그 파일에서 사용할 수 있도록 Nginx에서 제공하는 proxy_params이 포함되어 있습니다.proxy_pass은 프록시 서버의 프로토콜과 주소를 설정합니다. 이 예에서 프록시 서버는 포트 8010의 로컬 호스트에서 접근하는 Buildbot 서버입니다.
    /etc/nginx/sites available/default
    . . .
            location / {
                    # First attempt to serve request as file, then
                    # as directory, then fall back to displaying a 404.
                    # try_files $uri $uri/ =404;
    
                    # Reverse proxy settings
                    include proxy_params;
                    proxy_pass http://localhost:8010;
                 }
    . . . 
    
    
    이 섹션 이후에 /sse/ws의 다른 두 위치를 직접 구성합니다.

  • 클라이언트가 이벤트에 가입할 수 있도록 하는 WebSocket에 비해 서버 전송 이벤트(SSE) 설정 Server Sent Events은 더욱 간단하고 REST에 부합되는 프로토콜입니다.Buildbot SSE 노드에는 proxy_pass의 자체 설정이 필요하며 proxy_buffering을 닫으면 이점이 있습니다.

  • WebSocket 설정 WebSocket은 웹 서버와 웹 브라우저 간에 메시지를 전달하는 데 사용되는 프로토콜입니다.SSE 프로토콜과 마찬가지로 proxy_pass 설정이 필요합니다.헤더 정보를 전달하려면 다른 설정이 필요합니다.Nginx WebSocket proxying documentation에서 더 많은 설정을 알 수 있습니다.
  • /etc/nginx/sites available/default
    . . .
            # Server sent event (sse) settings
            location /sse {
                    proxy_buffering off;
                    proxy_pass http://localhost:8010;
            }
    
            # Websocket settings
            location /ws {
                  proxy_http_version 1.1;
                  proxy_set_header Upgrade $http_upgrade;
                  proxy_set_header Connection "upgrade";
                  proxy_pass http://localhost:8010;
                  proxy_read_timeout 6000s;
            }
     . . .
    
    변경 사항을 완료하면 파일을 저장하고 종료합니다.
    마지막으로 ssl_params.conf을 편집하고 ssl_session_timeout을 프로젝트에 대한 권장 설정 1440분(24시간)으로 늘려 더 긴 구축에 적응하도록 하겠습니다.
    1. sudo nano /etc/nginx/snippets/ssl-params.conf
    파일 아래쪽에 다음 행을 추가합니다.
    /etc/nginx/snippets/ssl 매개 변수.형태
     . . . 
    ssl_session_timeout 1440m;
    
    완료되면 파일을 저장하고 종료합니다.
    참고: Buildbot 문서의 예제 Nginx 파일은 ssl_session_cache 크기를 1440MB로 설정하고 500여만 개의 연결을 허용합니다.메모리 집약도가 낮은 10MB 설정을 유지합니다.메가바이트당 약 4000개의 세션을 저장할 수 있기 때문에 이것은 약 40000개의 세션을 저장할 것이다. 이것은 대부분의 용례에 있어서 충분하다.
    Buildbot을 구성하기 전에는 Nginx를 다시 시작하지 않지만 오류가 발생하면 구성을 테스트합니다.
    1. sudo nginx -t
    모든 것이 정상적이면 명령이 반환됩니다.
    Output
    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
    없으면 테스트가 통과될 때까지 보고된 오류를 복구하십시오.

    2단계 - Buildbot 구성


    Buildbot은 웹 인터페이스에서 루트 상대 링크를 사용하고 master.cfg에서 기본 URL을 정의해야 링크가 정상적으로 작동할 수 있습니다.
    1. sudo nano /home/buildbot/master/master.cfg
    buildbotURL 설정을 찾아 httphttps으로 변경하고 localhost을 도메인으로 변경합니다.Nginx가 기존 웹 포트에 대한 요청을 에이전트하기 때문에 포트 사양(:8010)을 삭제합니다.중요 프롬프트: 프로토콜은 https이어야 하며 정의는 꼬리 슬래시를 포함해야 합니다.
    /홈페이지/buildbot/master/master.cfg
     . . .
     c['buildbotURL'] = "https://your.ssl.domain.name/"
     . . .
    
    호스트가 다른 호스트에서 실행되는 작업 프로그램의 직접 연결을 받지 않도록 로컬 링 인터페이스에 연결할 것입니다.기존 프로토콜 행 c['protocols'] = {'pb': {'port': 9989}}을 다음과 같이 주석 또는 대체합니다.
    /홈페이지/buildbot/master/master.cfg
    . . .
    c['protocols'] = {"pb": {"port": "tcp:9989:interface=127.0.0.1"}}
    . . .
    
    완료되면 파일을 저장하고 종료합니다.
    현재 HTTPS와 도메인 이름을 사용하고 있습니다. service_identity module을 설치할 것입니다. 인증서가 예상한 용도에 유효한지 확인하는 도구를 제공합니다.
    1. sudo -H pip install service_identity
    이 단계를 건너뛰면 Buildbot이 다시 시작되지만 "서비스\uidentity 모듈의 정상적인 설치가 없습니다"는 경고가 표시됩니다. 이것은 시스템d의 status 명령의 출력에서 볼 수 있습니다.

    3단계 - 서비스 재시작


    이제 Nginx를 다시 시작할 수 있습니다.
    1. sudo systemctl restart nginx
    systemctl은 출력을 제공하지 않기 때문에, status 명령을 사용하여 Nginx가 실행 중인지 확인합니다.
    1. sudo systemctl status nginx
    출력은 다음과 같이 Active:Active(실행)를 강조 표시해야 합니다.
    Output
    May 08 18:07:52 buildbot-server systemd[1]: Started A high performance web server and a reverse proxy server.
    다음은 systemctl을 사용하여buildmaster와worker를 다시 시작합니다. 이것은 previous tutorial에서 설정한 것입니다.
    먼저 구성 파일에서 구문 오류를 확인합니다.
    1. sudo buildbot checkconfig /home/buildbot/master/
    Output
    Config file is good!
    오류가 보고되지 않으면 서비스를 다시 시작하십시오.
    1. sudo systemctl restart buildbot-master
    2. sudo systemctl status buildbot-master
    출력은 다음과 같이 Active:Active(실행)를 강조 표시해야 합니다.
    Output
    May 10 21:28:05 buildbot-server systemd[1]: Started BuildBot master service.
    이제 작업 프로세스를 다시 시작합니다.
    1. sudo systemctl restart buildbot-worker
    2. sudo systemctl status buildbot-worker
    마찬가지로 출력은 다음과 같이 Active:Active(running)를 강조 표시해야 합니다.
    Output
    May 10 21:28:05 buildbot-server systemd[1]: Started BuildBot worker service.
    이제 Nginx,buildmaster,worker를 다시 시작했습니다. 역방향 에이전트가 예상대로 작동하는지 검증할 준비가 되어 있습니다.우리가 http을 통해 사이트를 방문할 때, 우리는 https으로 방향을 바꾸어 우리의 Buildbot 사이트를 성공적으로 방문해야 한다.
    웹 브라우저에서 "http://your.ssl.domain.name"을 입력하면 도메인을 your.ssl.domain.name으로 바꿉니다.enter 키를 누르면 URL은 https으로 시작하고 위치 표시줄은 연결이 안전하다는 것을 표시해야 합니다.

    다음은 웹 플러그인과 서버가 보낸 이벤트가 정확한 에이전트를 받았는지 확인하는 데 시간이 좀 걸릴 것입니다.
    먼저 /sse 디렉토리에 액세스합니다.리디렉션이 정상적으로 작동하면 브라우저는 다음 페이지로 돌아가야 합니다.페이지가 계속 로드됩니다. 이것은 정상적인 동작입니다.

    다음은/ws 디렉터리에 접근합니다.프록시 리디렉터리가 올바르지 않으면 /ws 디렉터리에 접근하면 404 Not Found 오류가 반환됩니다.브라우저가 정상적이면 다음 페이지로 돌아가야 합니다.

    마지막으로, 내장된 웹 서버가 모든 인터페이스를 탐지하기 때문에, IP 주소를 통해 서버에 접근할 때 암호화되지 않은 연결이 발생하지 않도록 외부 통신을 허용하는 규칙을 삭제합니다.
    1. sudo ufw delete allow 8010
    Output
    Rule updated Rule updated (v6)
    이제 Nginx를 리버스 프록시로 구성하여 사용자가 HTTP을 사용하여 Buildbot에 액세스하는 것을 막았습니다.

    결론


    이 강좌에서, 우리는 인증서와 웹 인터페이스를 통해 전송되는 다른 정보를 보호하기 위해 Nginx를 Buildbot 내장 웹 서버의 역방향 에이전트로 설정합니다.Buildbot의 초보자라면 the Buildbot project’s Quick Tour 안내서를 참조하십시오.완전한 연속 통합 프로세스를 설정하는 방법을 배울 준비가 되었을 때, 우리의 How To Set Up Continuous Integration with Buildbot on Ubuntu 16.04 안내서를 보십시오.