tudor-constantin/monitor

GitHub: tudor-constantin/monitor

一个自托管的 Laravel 网站可用性监控应用,提供响应时间跟踪、故障通知和公开状态页面功能。

Stars: 0 | Forks: 0

# 监控 Monitor 是一个自托管的 Laravel 13 应用程序,用于网站可用性监控、响应时间跟踪、故障事件通知以及公开状态页面展示。 ## 技术栈 - Laravel 13,使用 Blade、Livewire、Flux UI 和 Tailwind CSS - MySQL 8.4 - Redis 7.4 - Laravel Horizon 和 Scheduler - SMTP 通知 - Nginx 和 PHP 8.4 ## 本地配置 ### 1. 配置环境 创建本地环境文件: ``` cp .env.example .env ``` 生成 application key: ``` docker run --rm php:8.4.23-cli-alpine php -r 'echo "base64:".base64_encode(random_bytes(32)).PHP_EOL;' ``` 将生成的值复制到 `APP_KEY` 中,并在 `.env` 中配置密码和 SMTP 凭证。如需进行本地 HTTP 访问,请使用: ``` APP_ENV=local APP_DEBUG=true APP_URL=http://localhost:8000 APP_PORT=8000 REGISTRATION_ENABLED=true SESSION_SECURE_COOKIE=false ``` 保留这些 Docker 服务主机: ``` DB_HOST=mysql REDIS_HOST=redis ``` ### 2. 启动应用程序 构建并启动 Laravel、MySQL 和 Redis: ``` docker compose -f compose.yaml -f compose.local.yaml up -d --build ``` 运行数据库迁移: ``` docker compose exec app php artisan migrate ``` 打开 [http://localhost:8000](http://localhost:8000)。 在 [http://localhost:8000/register](http://localhost:8000/register) 注册首位管理员。然后设置: ``` REGISTRATION_ENABLED=false ``` 通过重新创建 application container 来应用更改: ``` docker compose -f compose.yaml -f compose.local.yaml up -d --force-recreate app ``` ### 3. 常用命令 ``` docker compose ps docker compose logs -f app docker compose exec app php artisan about docker compose exec app php artisan horizon:status docker compose exec app php artisan migrate:status ``` 在更改 PHP 或前端源码文件后重新构建应用程序: ``` docker compose -f compose.yaml -f compose.local.yaml up -d --build app ``` 停止本地环境: ``` docker compose -f compose.yaml -f compose.local.yaml down ``` 仅当您确定要删除本地 MySQL、Redis 和已上传的 favicon 数据时,才添加 `--volumes` 参数: ``` docker compose -f compose.yaml -f compose.local.yaml down --volumes ``` ## 生产环境部署 ### 1. 配置环境 根据 `.env.example` 创建生产环境文件,或者在 Dockploy 中添加相同的变量。至少需要设置: - `APP_KEY` - `APP_URL` - `DB_PASSWORD` - `MYSQL_ROOT_PASSWORD` - `REDIS_PASSWORD` - `MAIL_HOST` - `MAIL_PORT` - `MAIL_USERNAME` - `MAIL_PASSWORD` - `MAIL_FROM_ADDRESS` - `HORIZON_ALLOWED_EMAILS` - `REGISTRATION_ENABLED` 生产环境的值必须包含: ``` APP_ENV=production APP_DEBUG=false APP_URL=https://monitor.example.com SESSION_SECURE_COOKIE=true ``` 使用 `MAIL_SCHEME=smtp` 配合端口 `587` 以支持 STARTTLS,或使用 `MAIL_SCHEME=smtps` 配合端口 `465` 以支持隐式 TLS。 ### 2. 创建管理员 在首次部署时,设置: ``` REGISTRATION_ENABLED=true ``` 部署应用程序,访问 `/register`,并创建管理员账号。随后立即将该变量更改为: ``` REGISTRATION_ENABLED=false ``` 重新部署 `app` 服务。注册页面、注册 endpoint 和注册链接将不再可用。 ### 3. 使用 Dockploy 部署 1. 将 GitHub 仓库连接到 Dockploy。 2. 选择 Docker Compose 部署并使用 `compose.yaml`。 3. 添加生产环境变量。 4. 部署该技术栈。 5. 将域名路由到端口 `8080` 上的 `app` 服务。 6. 在 application container 中运行数据库迁移: ``` php artisan migrate --force ``` 应用程序的健康检查 endpoint 为 `/up`。 ### 4. 验证部署 在服务器项目目录下执行: ``` docker compose ps docker compose logs --tail=100 app ``` 在 Dockploy 的 `app` 服务终端中执行: ``` php artisan about php artisan horizon:status php artisan migrate:status php artisan queue:failed ``` 从公开状态页面提交一个订阅,以验证 SMTP 投递和 Horizon queue 是否正常。 ## 应用程序进程 `app` 容器负责监管: - Nginx - PHP-FPM - Laravel Horizon - Laravel Scheduler Horizon 负责处理网站检查和通知。Scheduler 根据每个网站配置的间隔时间来分发检查任务。 ## 更新生产环境 拉取新版本并运行: ``` docker compose build --pull app docker compose up -d docker compose exec app php artisan migrate --force docker compose exec app php artisan horizon:status ``` ## 受控的依赖更新 Composer、npm、PHP、Node.js、MySQL、Redis 以及生产镜像依赖均使用明确的版本号。Docker 基础镜像也通过摘要(digest)进行了固定。所有更新都是有计划进行的:更改所需的版本,重新生成相关的 lock 文件,在必要时更新镜像摘要,重新构建生产镜像,并在提交前运行所有的质量检查。 Dependabot 仅提供 GitHub Actions 的更新建议供审查。它不会自动合并或部署这些更新。 ## 持久化数据 Docker 将 MySQL、Redis 和公共 favicon 数据存储在命名卷(named volumes)中。请定期备份 MySQL 卷,并将生产凭证保存在 Dockploy 的环境管理中。 切勿提交 `.env`、`APP_KEY` 或生产凭证。严禁在生产环境中使用 `docker compose down --volumes`。 ## 质量检查 GitHub Actions 会配合隔离的 MySQL 和 Redis 服务运行自动化测试套件。手动运行测试需要使用一个一次性的 `monitor_testing` 数据库,该数据库需与 `app/phpunit.xml` 中的配置相匹配;切勿将测试套件指向生产环境。 在具备 PHP 8.4、MySQL、Redis 和 Node.js 的环境中执行: ``` cd app php artisan test --compact vendor/bin/pint --test --format agent php vendor/bin/phpstan analyse --memory-limit=1G npm run build ```
标签:Docker, ffuf, Laravel, OpenVAS, PHP, 安全防御评估, 站点状态监控, 自托管, 请求拦截, 运维监控