Ubuntu 22.04에 Statping을 설치하는 방법


이 페이지에서

  1. 전제 조건
  2. 1단계 - 방화벽 구성\n
  3. 2단계 - Docker 설치
  4. 3단계 - Nginx 설치
  5. 4단계 - SSL 설치
  6. 5단계 - Docker Compose 파일 구성
  7. 6단계 - Nginx 구성
  8. 7단계 - 통계 실행\n
  9. 8단계 - 통계 구성
  10. 9단계 - 통계 업데이트
  11. 결론

Statping은 여러 서버에서 호스팅되는 웹 사이트 및 애플리케이션을 추적하는 오픈 소스 가동 시간 모니터입니다. 다양한 소스에서 실시간 데이터를 가져와 아름다운 상태 페이지를 생성할 수 있습니다. SQLite, MySQL 및 Postgres를 포함한 여러 데이터베이스 시스템에서 작동할 수 있습니다. 튜토리얼에서는 원래 애플리케이션이 더 이상 개발되지 않기 때문에 Statping-ng라고 하는 Statping 포크를 사용합니다.

이 튜토리얼에서는 Docker 및 Nginx 서버를 프록시로 사용하여 Ubuntu 22.04 서버에 Statping을 설치하는 방법을 배웁니다.

전제 조건

  • A server running Ubuntu 22.04.

  • A non-root user with sudo privileges.

  • The uncomplicated Firewall(UFW) is enabled and running.

  • A Fully Qualified domain name (FQDN) pointing to the server like, status.example.com.

  • Everything is updated.

    $ sudo apt update && sudo apt upgrade
    

1단계 - 방화벽 구성

패키지를 설치하기 전에 첫 번째 단계는 HTTP 및 HTTPS 연결을 허용하도록 방화벽을 구성하는 것입니다.

방화벽의 상태를 확인하십시오.

$ sudo ufw status

다음과 같은 내용이 표시되어야 합니다.

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)

HTTP 및 HTTP 포트를 허용합니다.

$ sudo ufw allow http
$ sudo ufw allow https

상태를 다시 확인하여 확인하십시오.

$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443                        ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)

2단계 - 도커 설치

Dockers 공식 GPG 키를 추가합니다.

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker.gpg

다음 명령을 실행하여 Docker 리포지토리를 추가합니다.

$ echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Dockers 리포지토리를 포함하도록 시스템을 업데이트합니다.

$ sudo apt update

Docker 및 Docker Compose 플러그인을 설치합니다.

$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

이 자습서에서는 이전 레거시 바이너리 대신 Docker Compose v2 플러그인을 사용합니다. 따라서 이를 실행하는 명령이 docker-compose에서 docker compose로 변경되었으며 여기에 반영됩니다.

Docker는 높은 권한으로 실행되므로 명령을 실행하려면 sudo를 자주 사용해야 합니다. 더 나은 옵션은 Linux 사용자 계정을 docker 사용자 그룹에 추가하는 것입니다.

$ sudo usermod -aG docker ${USER}

&#36 {USER} 변수는 현재 로그인된 시스템 계정을 선택합니다. 권한을 부여하려는 사용자로 로그인하지 않은 경우 &#36 {USER}를 사용자 이름으로 바꿉니다.

새로운 그룹 가입을 신청하려면 서버에서 로그아웃했다가 다시 로그인하거나 다음 명령을 사용하십시오. 사용자 암호를 묻는 메시지가 나타납니다.

$ su - ${USER}

3단계 - Nginx 설치

Ubuntu 22.04는 이전 버전의 Nginx와 함께 제공됩니다. 최신 버전을 설치하려면 공식 Nginx 저장소를 다운로드해야 합니다.

Nginxs 서명 키를 가져옵니다.

$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

Nginxs 안정 버전용 리포지토리를 추가합니다.

$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list

시스템 리포지토리를 업데이트합니다.

$ sudo apt update

Nginx를 설치합니다.

$ sudo apt install nginx

설치를 확인하십시오.

$ nginx -v
nginx version: nginx/1.22.0

4단계 - SSL 설치

SSL 인증서를 생성하려면 Certbot을 설치해야 합니다. Ubuntus 저장소를 사용하여 Certbot을 설치하거나 Snapd 도구를 사용하여 최신 버전을 가져올 수 있습니다. 우리는 Snapd 버전을 사용할 것입니다.

Ubuntu 22.04는 기본적으로 Snapd가 설치된 상태로 제공됩니다. 다음 명령을 실행하여 Snapd 버전이 최신인지 확인하십시오.

$ sudo snap install core

Certbot을 설치합니다.

$ sudo snap install --classic certbot

다음 명령을 사용하여 /usr/bin 디렉토리에 대한 심볼릭 링크를 생성하여 Certbot 명령을 실행할 수 있는지 확인하십시오.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

다음 명령을 실행하여 SSL 인증서를 생성합니다.

$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m  -d status.example.com

위의 명령은 서버의 /etc/letsencrypt/live/status.example.com 디렉토리에 인증서를 다운로드합니다.

Diffie-Hellman 그룹 인증서를 생성합니다.

$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

편집을 위해 /etc/letsencrypt/renewal/status.example.com.conf 파일을 엽니다.

$ sudo nano /etc/letsencrypt/renewal/status.example.com.conf

하단에 다음 코드를 붙여넣습니다.

pre_hook = systemctl stop nginx
post_hook = systemctl start nginx

Ctrl + X를 누르고 메시지가 표시되면 Y를 입력하여 파일을 저장합니다.

Certbot의 독립 실행형 옵션을 사용하여 SSL 인증서를 생성했습니다. 갱신 중에 Nginx를 종료해야 함을 의미하는 인증서를 생성하기 위해 웹 서버를 실행합니다. pre_hook 및 post_hook 명령은 갱신 전후에 실행되어 Nginx 서버를 자동으로 종료하고 다시 시작하므로 수동 개입이 필요하지 않습니다.

SSL 갱신이 제대로 작동하는지 확인하려면 프로세스를 시험 실행하십시오.

$ sudo certbot renew --dry-run

오류가 표시되지 않으면 모든 설정이 완료된 것입니다. 인증서가 자동으로 갱신됩니다.

5단계 - Docker Compose 파일 구성

Docker 작성 파일의 디렉터리를 만듭니다.

$ mkdir ~/statping

디렉터리로 전환합니다.

$ cd ~/statping

편집을 위해 docker compose 파일을 만들고 엽니다.

$ nano docker-compose.yml

다음 코드를 붙여넣습니다.

services:
  statping:
    container_name: statping
    image: adamboutcher/statping-ng
    restart: always
    ports:
      - 8080:8080
    volumes:
      - ./statping_data:/app
    links:
      - postgres
    depends_on:
      - postgres
    environment:
      DB_CONN: postgres
      DB_HOST: postgres
      DB_PORT: 5432
      DB_DATABASE: statping
      DB_USER: root
      DB_PASS: password123
      NAME: 'Howtoforge Statping page'
      DESCRIPTION: 'Statping Demo page'
      USE_ASSETS: 'true'
      SAMPLE_DATA: 'false'
      ALLOW_REPORTS: 'false'
      ADMIN_USER: navjot
      ADMIN_PASSWORD: yourpassword

  postgres:
    container_name: postgres
    image: postgres:14-alpine
    ports:
      - 5432:5432
    volumes:
      - ./pg_data:/var/lib/postgresql/data/pg_data
    environment:
      POSTGRES_PASSWORD: password123
      POSTGRES_DB: statping
      POSTGRES_USER: root
      POSTGRES_PORT: 5432
      PGDATA: /var/lib/postgresql/data/pg_data

Ctrl + X를 누르고 메시지가 표시되면 Y를 입력하여 파일을 저장합니다.

Statping 및 Postgres 도커 이미지를 설정하고 있습니다. 대부분의 docker 파일은 따라하기 쉽습니다. 우리는 앱 데이터와 Postgres 데이터베이스를 저장하기 위해 로컬 디스크 백업을 사용하고 있습니다. 또한 애플리케이션과 데이터베이스를 구성하기 위해 여러 환경 변수를 구성했습니다. 그것들을 살펴봅시다. 정의할 수 있는 환경 변수의 전체 목록을 얻으려면 Statping GitHub 리포지토리에서 공식 목록을 확인하세요.

  • USE_ASSETS 변수를 사용하면 앱이 assets 폴더의 자산을 사용할 수 있습니다.\n
  • 설치 중에 Statping이 구성하는 기본 모니터를 비활성화하려면 SAMPLE_DATA 변수를 false로 설정합니다.\n
  • ALLOW_REPORTS 변수는 false로 설정되어 Statping에서 보내는 익명의 오류 보고서를 비활성화합니다.\n
  • ADMIN_USER 및 ADMIN_PASSWORD 변수는 기본 사용자의 로그인 정보를 설정하는 데 사용됩니다.\n
  • DB_ 변수는 Postgres 컨테이너에 대해 정의된 변수와 일치해야 하는 데이터베이스 자격 증명을 설정하는 데 사용됩니다.\n

6단계 - Nginx 구성

편집을 위해 /etc/nginx/nginx.conf 파일을 엽니다.

$ sudo nano /etc/nginx/nginx.conf

include /etc/nginx/conf.d/*.conf; 줄 앞에 다음 줄을 추가합니다.

server_names_hash_bucket_size  64;

Ctrl + X를 누르고 메시지가 표시되면 Y를 입력하여 파일을 저장합니다.

편집을 위해 /etc/nginx/conf.d/statusping.conf 파일을 만들고 엽니다.

$ sudo nano /etc/nginx/conf.d/statusping.conf

다음 코드를 붙여넣습니다. status.example.com을 도메인 이름으로 바꿉니다.

upstream backend {
   server 127.0.0.1:8080;
   keepalive 32;
}

server {
  listen 80 default_server;
  server_name status.example.com;
  return 301 https://$server_name$request_uri;
}

server {
   listen 443 ssl http2;
   server_name status.example.com;

   http2_push_preload on; # Enable HTTP/2 Server Push

   ssl_certificate /etc/letsencrypt/live/status.example.com/fullchain.pem;
   ssl_certificate_key /etc/letsencrypt/live/status.example.com/privkey.pem;
   ssl_trusted_certificate /etc/letsencrypt/live/status.example.com/chain.pem;
   ssl_session_timeout 1d;

   # Enable TLS versions (TLSv1.3 is required upcoming HTTP/3 QUIC).
   ssl_protocols TLSv1.2 TLSv1.3;

   # Enable TLSv1.3's 0-RTT. Use $ssl_early_data when reverse proxying to
   # prevent replay attacks.
   #
   # @see: https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_early_data
   ssl_early_data on;

   ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384';
   ssl_prefer_server_ciphers on;
   ssl_session_cache shared:SSL:50m;
   # OCSP Stapling --- fetch OCSP records from URL in ssl_certificate and cache them
   ssl_stapling on;
   ssl_stapling_verify on;
   ssl_dhparam /etc/ssl/certs/dhparam.pem;

   add_header X-Early-Data $tls1_3_early_data;

   access_log /var/log/nginx/statusping.access.log main;
   error_log  /var/log/nginx/statusping.error.log;

   location / {
       client_max_body_size 50M;
       proxy_set_header Connection "";
       proxy_set_header Host $http_host;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header X-Forwarded-Proto $scheme;
       proxy_set_header X-Frame-Options SAMEORIGIN;
       proxy_set_header X-Client-Verify  SUCCESS;
       proxy_set_header X-Client-DN      $ssl_client_s_dn;
       proxy_set_header X-SSL-Subject    $ssl_client_s_dn;
       proxy_set_header X-SSL-Issuer     $ssl_client_i_dn;
       proxy_buffers 256 16k;
       proxy_buffer_size 16k;
       proxy_read_timeout 1800s;
       proxy_connect_timeout 1800s;
       proxy_http_version 1.1;
       proxy_pass http://backend;
   }
}

# This block is useful for debugging TLS v1.3. Please feel free to remove this
# and use the `$ssl_early_data` variable exposed by NGINX directly should you
# wish to do so.
map $ssl_early_data $tls1_3_early_data {
  "~." $ssl_early_data;
  default "";
}

Ctrl + X를 누르고 메시지가 표시되면 Y를 입력하여 파일을 저장합니다.

Nginx 구성을 확인합니다.

$ sudo nginx -t

Nginx 서버를 다시 시작합니다.

$ sudo systemctl restart nginx

7단계 - Statping 실행

Statping 디렉터리로 전환합니다.

$ cd ~/statping

Docker 컨테이너를 만들고 시작합니다.

$ docker compose up -d

컨테이너의 상태를 확인합니다.

$ docker compose ps

다음 출력이 표시됩니다.

NAME                COMMAND                  SERVICE             STATUS              PORTS
postgres            "docker-entrypoint.s…"   postgres            running             0.0.0.0:5432->5432/tcp
statping            "/bin/sh -c 'statpin…"   statping            running (healthy)   0.0.0.0:8080->8080/tcp

docker ps 명령을 사용하여 더 자세한 상태를 얻을 수도 있습니다. 컨테이너 로그를 확인하려면 docker logs <컨테이너 이름> 명령을 사용합니다.

8단계 - Statping 구성

이제 컨테이너가 실행 중이므로 브라우저에서 URL https://status.example.com을 시작하면 빈 상태 페이지가 표시됩니다. docker compose 파일에서 변수 SAMPLE_DATA를 생략하면 미리 정의된 다양한 서비스가 포함된 전체 페이지가 표시됩니다.

하단의 대시보드 링크를 클릭하여 로그인 화면에 액세스합니다.

기본 사용자 이름과 비밀번호로 admin을 입력합니다. 미리 채워진 것처럼 보이더라도 사용자 이름도 입력해야 합니다. 로그인 버튼을 클릭하여 Statping 대시보드에 액세스합니다.

새 서비스를 추가하려면 만들기 버튼을 클릭하고 필요한 값을 입력합니다.

하단의 Create service 버튼을 클릭하여 완료합니다. 이메일 및 기타 알림을 구성하려면 설정 페이지를 방문하세요. 통계 페이지에 새 이름을 지정할 수도 있습니다.

9단계 - Statping 업데이트

Statping 업그레이드는 간단한 단계입니다. Statpings Docker 작성 디렉터리로 전환합니다.

$ cd ~/statping

그런 다음 기존 컨테이너를 중지하고 제거합니다. 귀하의 데이터는 유지됩니다.

$ docker compose down --remove-orphans

Statping Docker 이미지의 최신 버전을 가져옵니다.

$ docker compose pull

컨테이너를 다시 시작하십시오.

$ docker compose up -d

Statping 설치가 업데이트되고 다시 시작됩니다.

결론

이것으로 Ubuntu 22.04 서버에 Statping을 설치하는 방법을 배운 자습서를 마칩니다. 질문이 있으시면 아래 의견에 게시하십시오.