Ubuntu 22.04에 Statping을 설치하는 방법
이 페이지에서
- 전제 조건
- 1단계 - 방화벽 구성\n
- 2단계 - Docker 설치
- 3단계 - Nginx 설치
- 4단계 - SSL 설치
- 5단계 - Docker Compose 파일 구성
- 6단계 - Nginx 구성
- 7단계 - 통계 실행\n
- 8단계 - 통계 구성
- 9단계 - 통계 업데이트
- 결론
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}
$ {USER}
변수는 현재 로그인된 시스템 계정을 선택합니다. 권한을 부여하려는 사용자로 로그인하지 않은 경우 $ {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을 설치하는 방법을 배운 자습서를 마칩니다. 질문이 있으시면 아래 의견에 게시하십시오.