Поиск по сайту:

Как установить статистику в Ubuntu 22.04


На этой странице

  1. Предпосылки
  2. Шаг 1. Настройка брандмауэра
  3. Шаг 2. Установите Docker
  4. Шаг 3. Установите Nginx
  5. Шаг 4. Установите SSL
  6. Шаг 5. Настройка файла Docker Compose
  7. Шаг 6. Настройка NGinx
  8. Шаг 7. Запустите статистику
  9. Шаг 8. Настройка статистики
  10. Шаг 9. Обновление статистики
  11. Заключение

Statping — это монитор времени безотказной работы с открытым исходным кодом, который отслеживает веб-сайты и приложения, размещенные на нескольких серверах. Он может создать красивую страницу состояния, получая данные в реальном времени из различных источников. Он может работать с несколькими системами баз данных, включая SQLite, MySQL и Postgres. В нашем руководстве мы будем использовать ответвление Statping, называемое Statping-ng, поскольку исходное приложение больше не разрабатывается.

В этом руководстве вы узнаете, как установить Statping на сервер Ubuntu 22.04, используя Docker и сервер Nginx в качестве прокси.

Предпосылки

  • 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 и HTTPS.

$ 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 — Установите Докер

Добавьте официальный GPG-ключ Dockers.

$ 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

Добавьте репозиторий для стабильной версии Nginx.

$ 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

Установите Нгинкс.

$ sudo apt install nginx

Проверьте установку.

$ nginx -v
nginx version: nginx/1.22.0

Шаг 4 — Установите SSL

Нам нужно установить Certbot для создания SSL-сертификата. Вы можете либо установить Certbot, используя репозиторий Ubuntu, либо получить последнюю версию с помощью инструмента Snapd. Мы будем использовать версию Snapd.

Ubuntu 22.04 поставляется с установленным по умолчанию Snapd. Выполните следующие команды, чтобы убедиться, что ваша версия Snapd обновлена.

$ sudo snap install core

Установите Сертбот.

$ sudo snap install --classic certbot

Используйте следующую команду, чтобы убедиться, что команду Certbot можно запустить, создав символическую ссылку на каталог /usr/bin.

$ 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 на вашем сервере.

Создайте групповой сертификат Диффи-Хеллмана.

$ 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 при появлении запроса.

Мы создали сертификат SSL, используя автономную опцию Certbot. Он запускает свой веб-сервер для создания сертификата, что означает, что Nginx должен быть отключен во время обновления. Команды pre_hook и post_hook запускаются до и после обновления, чтобы автоматически закрыть и перезапустить сервер Nginx, не требуя ручного вмешательства.

Чтобы проверить, нормально ли работает обновление SSL, выполните пробный запуск процесса.

$ sudo certbot renew --dry-run

Если вы не видите ошибок, все готово. Ваш сертификат будет продлен автоматически.

Шаг 5. Настройте файл Docker Compose

Создайте каталог для файла компоновки Docker.

$ mkdir ~/statping

Перейдите в каталог.

$ cd ~/statping

Создайте и откройте файл компоновки докеров для редактирования.

$ 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.
  • Переменной SAMPLE_DATA присвоено значение false, чтобы отключить мониторы по умолчанию, которые Statping настраивает во время установки.
  • Переменной ALLOW_REPORTS присваивается значение false, чтобы отключить анонимные отчеты об ошибках, отправляемые Statping.
  • Переменные ADMIN_USER и ADMIN_PASSWORD используются для установки информации для входа в систему для пользователя по умолчанию.
  • Переменные DB_ используются для установки учетных данных базы данных, которые должны соответствовать переменным, определенным для контейнера Postgres.

Шаг 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.

$ 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. Настройте статистику

Теперь, когда ваш контейнер запущен, запустите URL-адрес https://status.example.com в своем браузере, и вы увидите пустую страницу состояния. Если вы опустите переменную SAMPLE_DATA в файле компоновки docker, вы увидите полную страницу с предопределенными различными службами.

Щелкните ссылку «Панель инструментов» внизу, чтобы открыть экран входа в систему.

Введите admin как имя пользователя по умолчанию, так и пароль. Убедитесь, что вы также вводите имя пользователя, даже если оно выглядит так, как будто оно уже заполнено. Нажмите кнопку «Войти», чтобы получить доступ к панели статистики.

Чтобы добавить новую услугу, нажмите кнопку «Создать» и заполните необходимые значения.

Нажмите кнопку «Создать сервис» внизу, чтобы закончить. Чтобы настроить электронную почту и другие уведомления, посетите страницу настроек. Вы также можете дать странице статистики новое имя.

Шаг 9 - Обновить статистику

Обновление Statping — это простой шаг. Перейдите в каталог создания Statpings Docker.

$ cd ~/statping

Затем остановите и удалите существующий контейнер. Однако ваши данные будут сохранены.

$ docker compose down --remove-orphans

Получите последнюю версию образа докера Statping.

$ docker compose pull

Запустите контейнеры снова.

$ docker compose up -d

Ваша установка Statping обновлена и запущена снова.

Заключение

На этом урок, в котором вы узнали, как установить Statping на сервер Ubuntu 22.04, завершен. Если у вас есть какие-либо вопросы, задайте их в комментариях ниже.