Files
webstatus/readme.md
2026-01-04 16:56:37 +08:00

8.6 KiB
Raw Permalink Blame History

服务状态监控系统

项目概述

这是一个基于Django框架开发的服务状态监控系统用于实时监控各种服务的运行状态支持多种检测方式并提供Web界面和REST API接口。

主要功能

1. 服务管理

  • 支持服务分组管理
  • 可添加多种类型的服务监控:
    • Ping检测通过ICMP ping检查主机可达性
    • TCP端口检测检查指定主机的TCP端口是否开放
    • HTTP请求发送HTTP请求检查Web服务状态
    • 自定义脚本:支持通过自定义脚本进行服务检测
  • 支持服务启用/禁用功能

2. 状态监控

  • 实时记录服务状态变化
  • 保存服务检测历史记录
  • 记录响应时间和错误信息
  • 自动更新服务状态

3. Web界面

  • 服务列表展示
  • 服务详细信息查看
  • 检测记录历史查询
  • 直观的状态可视化

4. REST API

  • 提供完整的API接口
  • 支持服务信息查询
  • 支持检测记录查询
  • 支持API文档浏览

技术栈

  • 后端框架Django 4.2
  • API框架Django REST Framework
  • 数据库SQLite默认支持扩展到MySQL/PostgreSQL
  • 语言Python 3.8+
  • 前端Django模板系统

安装部署

1. 环境准备Ubuntu 22.04/24.04

# 更新系统包
sudo apt update && sudo apt upgrade -y

# 安装Python3和pip
sudo apt install python3 python3-pip python3-venv python3-dev -y

# 安装Git
sudo apt install git -y

# 克隆项目(示例路径,根据实际情况调整)
cd /opt
sudo git clone https://your-repo-url/statuspage.git
cd statuspage

# 创建虚拟环境
sudo python3 -m venv venv

# 激活虚拟环境
source venv/bin/activate

# 安装依赖
pip install --upgrade pip
pip install -r requirements.txt

2. 数据库迁移

# 激活虚拟环境(如果未激活)
source venv/bin/activate

# 执行数据库迁移使用自定义settings文件
python manage.py migrate --settings=statuspage.生产系统settings

# 创建超级用户(用于后台管理)
python manage.py createsuperuser --settings=statuspage.生产系统settings

3. 收集静态文件

# 激活虚拟环境(如果未激活)
source venv/bin/activate

# 收集静态文件使用自定义settings文件
python manage.py collectstatic --noinput --settings=statuspage.生产系统settings

4. 开发服务器(仅用于测试)

# 激活虚拟环境(如果未激活)
source venv/bin/activate

# 启动开发服务器仅本地访问使用自定义settings文件
python manage.py runserver --settings=statuspage.生产系统settings

# 或允许外部访问(开发环境)
python manage.py runserver 0.0.0.0:8000 --settings=statuspage.生产系统settings

访问地址:http://your-server-ip:8000

5. 生产环境部署Ubuntu

5.1 安装Gunicorn和Nginx

# 激活虚拟环境
source venv/bin/activate

# 安装Gunicorn
pip install gunicorn

# 退出虚拟环境
deactivate

# 安装Nginx
sudo apt install nginx -y

5.2 创建Gunicorn系统服务

# 创建服务文件
sudo nano /etc/systemd/system/statuspage.service

在文件中添加以下内容:

[Unit]
Description=Gunicorn instance to serve statuspage
After=network.target

[Service]
User=www-data
Group=www-data
WorkingDirectory=/opt/statuspage
Environment="PATH=/opt/statuspage/venv/bin"
Environment="DJANGO_SETTINGS_MODULE=statuspage.生产系统settings"
ExecStart=/opt/statuspage/venv/bin/gunicorn --workers 3 --bind unix:/opt/statuspage/statuspage.sock statuspage.wsgi:application

[Install]
WantedBy=multi-user.target

启动并启用服务:

# 重新加载systemd
sudo systemctl daemon-reload

# 启动服务
sudo systemctl start statuspage

# 开机自启
sudo systemctl enable statuspage

# 查看服务状态
sudo systemctl status statuspage

5.3 配置Nginx

# 创建Nginx配置文件
sudo nano /etc/nginx/sites-available/statuspage

添加以下配置:

server {
    listen 80;
    server_name your-domain.com www.your-domain.com;
    charset utf-8;

    location / {
        include proxy_params;
        proxy_pass http://unix:/opt/statuspage/statuspage.sock;
    }

    location /static/ {
        alias /opt/statuspage/static/;
        expires 30d;
    }

    location /media/ {
        alias /opt/statuspage/media/;
        expires 30d;
    }

    # 错误页面配置
    error_page 404 /404.html;
    error_page 500 502 503 504 /500.html;
    location = /500.html {
        root /opt/statuspage/static;
    }
}

启用站点并重启Nginx

# 启用站点
sudo ln -s /etc/nginx/sites-available/statuspage /etc/nginx/sites-enabled/

# 测试Nginx配置
sudo nginx -t

# 重启Nginx
sudo systemctl restart nginx

5.4 配置防火墙

# 允许SSH、HTTP和HTTPS流量
sudo ufw allow ssh
sudo ufw allow 'Nginx Full'

# 启用防火墙
sudo ufw enable

# 查看防火墙状态
sudo ufw status

5.5 配置HTTPS推荐

使用Certbot获取免费SSL证书

# 安装Certbot
sudo apt install certbot python3-certbot-nginx -y

# 获取并配置SSL证书
sudo certbot --nginx -d your-domain.com -d www.your-domain.com

# 配置自动续约
sudo certbot renew --dry-run

6. 部署验证

访问以下地址验证部署:

7. 生产环境配置注意事项

在生产环境部署前,务必修改以下配置项:

7.1 修改配置文件

编辑 statuspage/生产系统settings.py 文件,修改以下关键配置:

# 1. 关闭DEBUG模式
DEBUG = False

# 2. 设置允许的主机名或IP地址
ALLOWED_HOSTS = ['your-domain.com', 'www.your-domain.com', 'your-server-ip']

# 3. 生成新的SECRET_KEY
# 可以使用Django提供的密钥生成工具
# python -c "from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())"
SECRET_KEY = 'your-new-secret-key-here'

# 4. 可选配置更安全的数据库如PostgreSQL或MySQL
# DATABASES = {
#     'default': {
#         'ENGINE': 'django.db.backends.postgresql_psycopg2',
#         'NAME': 'statuspage',
#         'USER': 'dbuser',
#         'PASSWORD': 'dbpassword',
#         'HOST': 'localhost',
#         'PORT': '5432',
#     }
# }

7.2 重启服务

修改配置后需要重启Gunicorn服务

sudo systemctl restart statuspage

项目结构

.
├── status/                    # 主应用目录
│   ├── migrations/            # 数据库迁移文件
│   ├── templates/             # HTML模板
│   │   └── status/           # 状态相关模板
│   ├── __init__.py
│   ├── admin.py              # Django后台管理
│   ├── api_urls.py           # API路由配置
│   ├── api_views.py          # API视图
│   ├── apps.py               # 应用配置
│   ├── models.py             # 数据模型
│   ├── serializers.py        # API序列化器
│   ├── tests.py              # 测试文件
│   ├── urls.py               # Web路由配置
│   ├── utils.py              # 工具函数
│   └── views.py              # Web视图
├── statuspage/               # 项目配置目录
│   ├── __init__.py
│   ├── asgi.py               # ASGI配置
│   ├── urls.py               # 根路由配置
│   ├── wsgi.py               # WSGI配置
│   └── 生产系统settings.py   # 生产环境配置
├── .gitignore
├── db.sqlite3                # SQLite数据库文件
├── manage.py                 # Django管理脚本
└── requirements.txt          # 项目依赖

使用说明

Web界面

  1. 服务列表:访问首页查看所有服务的状态
  2. 服务详情:点击服务名称查看详细信息和历史记录
  3. API文档:访问 /api/docs/ 查看API文档

API接口

主要API端点

  • GET /api/services/ - 获取所有服务列表
  • GET /api/services/<id>/ - 获取单个服务详情
  • GET /api/services/<id>/records/ - 获取服务检测记录
  • GET /api/groups/ - 获取服务分组列表

开发说明

日志记录

项目使用loguru库进行日志记录在关键操作处添加了日志输出便于调试和监控。

扩展建议

  1. 添加定时检测任务可使用Celery或Django Q
  2. 添加告警功能(邮件、短信、微信通知等)
  3. 添加服务状态统计和图表展示
  4. 实现更完善的权限管理
  5. 添加服务依赖关系管理

许可证

MIT License