Statping là một trình giám sát thời gian hoạt động nguồn mở theo dõi các trang web và ứng dụng được lưu trữ trên nhiều máy chủ. Nó có thể tạo ra một trang trạng thái đẹp mắt bằng cách lấy dữ liệu thời gian thực từ nhiều nguồn khác nhau. Nó có thể hoạt động với nhiều hệ thống cơ sở dữ liệu bao gồm SQLite, MySQL và Postgres. Trong hướng dẫn này, chúng tôi sẽ sử dụng nhánh của Statping, được gọi là Statping-ng vì ứng dụng gốc không còn được phát triển nữa.
Trong hướng dẫn này, bạn sẽ học cách cài đặt Statping trên máy chủ Ubuntu 22.04 bằng cách sử dụng Docker và máy chủ Nginx làm proxy.
Kiểm tra trạng thái của tường lửa.
Bạn sẽ thấy nội dung tương tự như sau.
Cho phép HTTP và HTTPs ports.
Kiểm tra lại trạng thái để xác nhận.
Chạy lệnh sau để thêm kho lưu trữ Docker.
Cập nhật hệ thống để bao gồm kho lưu trữ của Docker.
Cài đặt Docker và plugin Docker compose.
Hướng dẫn này sẽ sử dụng plugin Docker Compose v2 thay vì nhị phân cũ. Do đó, lệnh để chạy plugin đã thay đổi từ docker-compose thành docker compose và điều này được phản ánh ở đây.
Docker chạy với các đặc quyền nâng cao nên bạn sẽ cần sử dụng sudo thường xuyên để chạy lệnh. Tùy chọn tốt hơn là thêm tài khoản người dùng Linux của bạn vào nhóm người dùng docker.
Biến ${USER} sẽ chọn tài khoản hệ thống hiện đang đăng nhập. Nếu bạn không đăng nhập bằng người dùng mà bạn muốn cấp quyền, hãy thay thế ${USER} bằng tên người dùng.
Để đăng ký tư cách thành viên nhóm mới, hãy đăng xuất khỏi máy chủ và đăng nhập lại hoặc sử dụng lệnh sau. Bạn sẽ được nhắc nhập mật khẩu của người dùng.
Nhập khóa ký của Nginx.
Thêm kho lưu trữ cho phiên bản ổn định của Nginx.
Cập nhật kho lưu trữ hệ thống.
Cài đặt Nginx.
Xác minh cài đặt.
Ubuntu 22.04 đi kèm với Snapd được cài đặt theo mặc định. Chạy các lệnh sau để đảm bảo rằng phiên bản Snapd của bạn được cập nhật.
Cài đặt Certbot.
Sử dụng lệnh sau để đảm bảo rằng lệnh Certbot có thể chạy được bằng cách tạo liên kết tượng trưng đến thư mục /usr/bin.
Chạy lệnh sau để tạo Chứng chỉ SSL.
Lệnh trên sẽ tải xuống chứng chỉ vào /etc/letsencrypt/live/status.example.com thư mục trên máy chủ của bạn.
Tạo chứng chỉ nhóm Diffie-Hellman.
Mở tệp /etc/letsencrypt/renewal/status.example.com.conf để chỉnh sửa.
Dán mã sau vào cuối.
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.
Chúng tôi đã tạo chứng chỉ SSL bằng tùy chọn độc lập của Certbot. Nó chạy máy chủ web của mình để tạo chứng chỉ, nghĩa là Nginx phải bị tắt trong quá trình gia hạn. Các lệnh pre_hook và post_hook chạy trước và sau khi gia hạn để tự động tắt và khởi động lại máy chủ Nginx, do đó không cần can thiệp thủ công.
Để kiểm tra xem quá trình gia hạn SSL có hoạt động tốt không, hãy chạy thử quy trình.
Nếu bạn không thấy lỗi, bạn đã hoàn tất. Chứng chỉ của bạn sẽ tự động gia hạn.
Chuyển đến thư mục.
Tạo và mở tệp docker compose để chỉnh sửa.
Dán mã sau vào đó.
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.
Chúng tôi đang thiết lập Statping và Postgres docker images. Hầu hết các tệp docker đều dễ theo dõi. Chúng tôi đang sử dụng bản sao lưu đĩa cục bộ để lưu trữ dữ liệu ứng dụng và cơ sở dữ liệu Postgres. Chúng tôi cũng đã định cấu hình một số biến môi trường để định cấu hình ứng dụng và cơ sở dữ liệu. Chúng ta hãy cùng xem xét chúng. Để có danh sách đầy đủ các biến môi trường mà bạn có thể xác định, hãy kiểm tra danh sách chính thức từ kho lưu trữ Statping GitHub.
Thêm dòng sau vào trước dòng include /etc/nginx/conf.d/*.conf;.
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.
Tạo và mở tệp /etc/nginx/conf.d/statusping.conf để chỉnh sửa.
Dán mã sau vào đó. Thay thế status.example.com bằng tên miền của bạn.
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.
Xác minh cấu hình Nginx của bạn.
Khởi động lại máy chủ Nginx.
Tạo và khởi chạy vùng chứa Docker.
Kiểm tra trạng thái của vùng chứa.
Bạn sẽ thấy đầu ra sau.
Bạn cũng có thể sử dụng lệnh docker ps để biết trạng thái chi tiết hơn. Để kiểm tra nhật ký container, hãy sử dụng lệnh docker logs <container name>.
Nhấp vào liên kết Bảng điều khiển ở cuối để truy cập màn hình đăng nhập.
Điền admin làm tên người dùng và mật khẩu mặc định. Đảm bảo bạn cũng nhập tên người dùng mặc dù trông giống như đã được điền sẵn. Nhấp vào nút Đăng nhập để truy cập bảng điều khiển Statping.
Để thêm dịch vụ mới, hãy nhấp vào nút Tạo và điền các giá trị bắt buộc.
Nhấp vào nút Tạo dịch vụ ở cuối để hoàn tất. Để cấu hình email và các thông báo khác, hãy truy cập trang cài đặt. Bạn cũng có thể đặt tên mới cho trang thống kê của mình.
Tiếp theo, dừng và xóa vùng chứa hiện có. Tuy nhiên, dữ liệu của bạn sẽ được giữ lại.
Kéo phiên bản mới nhất của hình ảnh Statping docker.
Khởi động lại các container.
Cài đặt Statping của bạn đã được cập nhật và khởi động lại.
Trong hướng dẫn này, bạn sẽ học cách cài đặt Statping trên máy chủ Ubuntu 22.04 bằng cách sử dụng Docker và máy chủ Nginx làm proxy.
Điều kiện tiên quyết
-
Máy chủ chạy Ubuntu 22.04.
-
Người dùng không phải root có quyền sudo.
-
Tường lửa đơn giản (UFW) được bật và đang chạy.
-
Tên miền đủ điều kiện (FQDN) trỏ đến máy chủ như status.example.com.
-
Mọi thứ đều được cập nhật.
Mã:
$ sudo apt update && sudo apt upgrade
Bước 1 - Cấu hình Tường lửa
Trước khi cài đặt bất kỳ gói nào, bước đầu tiên là cấu hình tường lửa để cho phép kết nối HTTP và HTTPS.Kiểm tra trạng thái của tường lửa.
Mã:
$ sudo ufw status
Mã:
Trạng thái: activeĐến Hành động Từ-- ------ ----OpenSSH CHO PHÉP Mọi nơiOpenSSH (v6) CHO PHÉP Mọi nơi (v6)
Mã:
$ sudo ufw allow http$ sudo ufw allow https
Mã:
$ sudo ufw statusTrạng thái: activeĐến Hành động Từ-- ------ ----OpenSSH ALLOW Anywhere80/tcp ALLOW Anywhere443 ALLOW AnywhereOpenSSH (v6) ALLOW Anywhere (v6)80/tcp (v6) ALLOW Anywhere (v6)443 (v6) ALLOW Anywhere (v6)
Bước 2 - Cài đặt Docker
Thêm khóa GPG chính thức của Docker.
Mã:
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker.gpg
Mã:
$ 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
Mã:
$ sudo apt update
Mã:
$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
Docker chạy với các đặc quyền nâng cao nên bạn sẽ cần sử dụng sudo thường xuyên để chạy lệnh. Tùy chọn tốt hơn là thêm tài khoản người dùng Linux của bạn vào nhóm người dùng docker.
Mã:
$ sudo usermod -aG docker ${USER}
Để đăng ký tư cách thành viên nhóm mới, hãy đăng xuất khỏi máy chủ và đăng nhập lại hoặc sử dụng lệnh sau. Bạn sẽ được nhắc nhập mật khẩu của người dùng.
Mã:
$ su - ${USER}
Bước 3 - Cài đặt Nginx
Ubuntu 22.04 đi kèm với phiên bản Nginx cũ hơn. Để cài đặt phiên bản mới nhất, bạn cần tải xuống kho lưu trữ Nginx chính thức.Nhập khóa ký của Nginx.
Mã:
$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
Mã:
$ 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
Mã:
$ sudo apt update
Mã:
$ sudo apt install nginx
Mã:
$ nginx -vphiên bản nginx: nginx/1.22.0
Bước 4 - Cài đặt SSL
Chúng ta cần cài đặt Certbot để tạo chứng chỉ SSL. Bạn có thể cài đặt Certbot bằng kho lưu trữ của Ubuntu hoặc lấy phiên bản mới nhất bằng công cụ Snapd. Chúng ta sẽ sử dụng phiên bản Snapd.Ubuntu 22.04 đi kèm với Snapd được cài đặt theo mặc định. Chạy các lệnh sau để đảm bảo rằng phiên bản Snapd của bạn được cập nhật.
Mã:
$ sudo snap install core
Mã:
$ sudo snap install --classic certbot
Mã:
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
Mã:
$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [emailprotected] -d status.example.com
Tạo chứng chỉ nhóm Diffie-Hellman.
Mã:
$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096
Mã:
$ sudo nano /etc/letsencrypt/renewal/status.example.com.conf
Mã:
pre_hook = systemctl stop nginxpost_hook = systemctl start nginx
Chúng tôi đã tạo chứng chỉ SSL bằng tùy chọn độc lập của Certbot. Nó chạy máy chủ web của mình để tạo chứng chỉ, nghĩa là Nginx phải bị tắt trong quá trình gia hạn. Các lệnh pre_hook và post_hook chạy trước và sau khi gia hạn để tự động tắt và khởi động lại máy chủ Nginx, do đó không cần can thiệp thủ công.
Để kiểm tra xem quá trình gia hạn SSL có hoạt động tốt không, hãy chạy thử quy trình.
Mã:
$ sudo certbot renew --dry-run
Bước 5 - Cấu hình Tệp Docker Compose
Tạo một thư mục cho tệp Docker compose.
Mã:
$ mkdir ~/statping
Mã:
$ cd ~/statping
Mã:
$ nano docker-compose.yml
Mã:
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: 'Trang Statping Howtoforge' DESCRIPTION: 'Trang demo Statping' 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
Chúng tôi đang thiết lập Statping và Postgres docker images. Hầu hết các tệp docker đều dễ theo dõi. Chúng tôi đang sử dụng bản sao lưu đĩa cục bộ để lưu trữ dữ liệu ứng dụng và cơ sở dữ liệu Postgres. Chúng tôi cũng đã định cấu hình một số biến môi trường để định cấu hình ứng dụng và cơ sở dữ liệu. Chúng ta hãy cùng xem xét chúng. Để có danh sách đầy đủ các biến môi trường mà bạn có thể xác định, hãy kiểm tra danh sách chính thức từ kho lưu trữ Statping GitHub.
- Biến USE_ASSETS cho phép ứng dụng sử dụng các tài sản từ thư mục assets.
- Biến SAMPLE_DATA được đặt thành false để tắt các màn hình mặc định mà Statping cấu hình trong quá trình cài đặt.
- Biến ALLOW_REPORTS được đặt thành false để tắt các báo cáo lỗi ẩn danh mà Statping gửi.
- Các biến ADMIN_USER và ADMIN_PASSWORD được sử dụng để đặt thông tin đăng nhập cho người dùng mặc định.
- Các biến DB_ được sử dụng để đặt thông tin xác thực cơ sở dữ liệu phải khớp với các biến được xác định cho Container Postgres.
Bước 6 - Cấu hình NGinx
Mở tệp /etc/nginx/nginx.conf để chỉnh sửa.
Mã:
$ sudo nano /etc/nginx/nginx.conf
Mã:
server_names_hash_bucket_size 64;
Tạo và mở tệp /etc/nginx/conf.d/statusping.conf để chỉnh sửa.
Mã:
$ sudo nano /etc/nginx/conf.d/statusping.conf
Mã:
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; # Bật 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; # Bật phiên bản TLS (yêu cầu TLSv1.3 sắp tới là HTTP/3 QUIC). ssl_protocols TLSv1.2 TLSv1.3; # Bật 0-RTT của TLSv1.3. Sử dụng $ssl_early_data khi proxy ngược để # ngăn chặn các cuộc tấn công phát lại. # # @xem: 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 bật; ssl_session_cache shared:SSL:50m; # OCSP Stapling --- lấy các bản ghi OCSP từ URL trong ssl_certificate và lưu chúng vào bộ nhớ đệm ssl_stapling bật; ssl_stapling_verify bật; 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 Kết nối ""; proxy_set_header Máy chủ $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 THÀNH CÔNG; 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 1800 giây; proxy_connect_timeout 1800 giây; proxy_http_version 1.1; proxy_pass http://backend; }}# Khối này hữu ích để gỡ lỗi TLS v1.3. Vui lòng xóa khối này# và sử dụng trực tiếp biến `$ssl_early_data` do NGINX cung cấp nếu bạn# muốn làm như vậy.map $ssl_early_data $tls1_3_early_data { "~." $ssl_early_data; default "";}
Xác minh cấu hình Nginx của bạn.
Mã:
$ sudo nginx -t
Mã:
$ sudo systemctl restart nginx
Bước 7 - Chạy Statping
Chuyển đến thư mục Statping.
Mã:
$ cd ~/statping
Mã:
$ docker compose up -d
Mã:
$ docker compose ps
Mã:
TÊN LỆNH CỔNG TRẠNG THÁI DỊCH VỤpostgres "docker-entrypoint.s…" postgres đang chạy 0.0.0.0:5432->5432/tcpstatping "/bin/sh -c 'statpin…" statping đang chạy (khỏe mạnh) 0.0.0.0:8080->8080/tcp
Bước 8 - Cấu hình Statping
Bây giờ container của bạn đang chạy, hãy khởi chạy URL https://status.example.com trong trình duyệt của bạn và bạn sẽ thấy một trang trạng thái trống. Nếu bạn bỏ biến SAMPLE_DATA trong tệp docker compose, bạn sẽ thấy một trang đầy đủ với các dịch vụ khác nhau được xác định trước.Nhấp vào liên kết Bảng điều khiển ở cuối để truy cập màn hình đăng nhập.
Điền admin làm tên người dùng và mật khẩu mặc định. Đảm bảo bạn cũng nhập tên người dùng mặc dù trông giống như đã được điền sẵn. Nhấp vào nút Đăng nhập để truy cập bảng điều khiển Statping.
Để thêm dịch vụ mới, hãy nhấp vào nút Tạo và điền các giá trị bắt buộc.
Nhấp vào nút Tạo dịch vụ ở cuối để hoàn tất. Để cấu hình email và các thông báo khác, hãy truy cập trang cài đặt. Bạn cũng có thể đặt tên mới cho trang thống kê của mình.
Bước 9 - Cập nhật Statping
Nâng cấp Statping là một bước đơn giản. Chuyển sang thư mục soạn thảo Docker của Statping.
Mã:
$ cd ~/statping
Mã:
$ docker compose down --remove-orphans
Mã:
$ docker compose pull
Mã:
$ docker compose up -d