This commit is contained in:
18631081161 2025-12-20 18:40:06 +08:00
commit edf68c49c5
19 changed files with 1082 additions and 7 deletions

1
.gitignore vendored
View File

@ -6,3 +6,4 @@ node-modules
/node_modules/
**/dist/
**/node-modules/
server/admin-dist/*

View File

@ -6,6 +6,7 @@ import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
import path from 'path'
export default defineConfig({
base: '/admin/',
plugins: [
vue(),
AutoImport({

View File

@ -20,8 +20,8 @@ JWT_EXPIRES_IN=7d
JWT_REFRESH_EXPIRES_IN=30d
# WeChat Configuration
WECHAT_APP_ID=your-wechat-app-id
WECHAT_APP_SECRET=your-wechat-app-secret
WECHAT_APP_ID=wx5ab1c98df1ec13f3
WECHAT_APP_SECRET=091adc2c6dc3c7fddf198d782b6ac240
# File Upload Configuration
UPLOAD_PATH=./uploads

View File

@ -20,8 +20,8 @@ JWT_EXPIRES_IN=7d
JWT_REFRESH_EXPIRES_IN=30d
# WeChat Configuration
WECHAT_APP_ID=your-wechat-app-id
WECHAT_APP_SECRET=your-wechat-app-secret
WECHAT_APP_ID=wx5ab1c98df1ec13f3
WECHAT_APP_SECRET=091adc2c6dc3c7fddf198d782b6ac240
# File Upload Configuration
UPLOAD_PATH=./uploads

View File

@ -1,5 +1,5 @@
# Build stage
FROM node:18-alpine AS builder
FROM node:24.12.0-alpine AS builder
WORKDIR /app
@ -10,7 +10,7 @@ COPY package*.json ./
RUN npm ci --only=production
# Production stage
FROM node:18-alpine
FROM node:24.12.0-alpine
# Install dumb-init for proper signal handling
RUN apk add --no-cache dumb-init

View File

@ -56,6 +56,6 @@
"supertest": "^6.3.3"
},
"engines": {
"node": ">=18.0.0"
"node": ">=24.0.0"
}
}

53
server/.env Normal file
View File

@ -0,0 +1,53 @@
# ===========================================
# 生产环境配置模板
# 复制此文件为 .env 并填写实际配置
# ===========================================
# 应用端口(唯一对外暴露的端口)
APP_PORT=2701
# ===========================================
# 数据库配置 (外部 MySQL)
# ===========================================
DB_HOST=192.168.195.15
DB_PORT=3306
DB_NAME=overseas_appointment
DB_USER=root
DB_PASSWORD=root123456
# ===========================================
# Redis 配置 (外部 Redis)
# ===========================================
REDIS_HOST=192.168.195.15
REDIS_PORT=6379
REDIS_PASSWORD=
# ===========================================
# JWT 认证配置
# ===========================================
JWT_SECRET=your-super-secret-key-change-in-production
JWT_EXPIRES_IN=7d
JWT_REFRESH_EXPIRES_IN=30d
# ===========================================
# 微信小程序配置
# ===========================================
WECHAT_APP_ID=wx5ab1c98df1ec13f3
WECHAT_APP_SECRET=091adc2c6dc3c7fddf198d782b6ac240
# ===========================================
# 文件上传配置
# ===========================================
UPLOAD_PATH=./uploads
MAX_FILE_SIZE=5242880
# ===========================================
# 限流配置
# ===========================================
RATE_LIMIT_WINDOW=60000
RATE_LIMIT_MAX=100
# ===========================================
# 日志配置
# ===========================================
LOG_LEVEL=info

52
server/.env.example Normal file
View File

@ -0,0 +1,52 @@
# ===========================================
# 生产环境配置模板
# 复制此文件为 .env 并填写实际配置
# ===========================================
# 应用端口(唯一对外暴露的端口)
APP_PORT=2701
# ===========================================
# 数据库配置 (外部 MySQL)
# ===========================================
DB_HOST=192.168.195.15
DB_PORT=3306
DB_NAME=overseas_appointment
DB_USER=root
DB_PASSWORD=your_password_here
# ===========================================
# Redis 配置 (外部 Redis)
# ===========================================
REDIS_HOST=192.168.195.15
REDIS_PORT=6379
REDIS_PASSWORD=
# ===========================================
# JWT 认证配置
# ===========================================
JWT_SECRET=your-super-secret-key-change-in-production
JWT_EXPIRES_IN=7d
JWT_REFRESH_EXPIRES_IN=30d
# ===========================================
# 微信小程序配置
# ===========================================
WECHAT_APP_ID=your-wechat-app-id
WECHAT_APP_SECRET=your-wechat-app-secret
# ===========================================
# 文件上传配置
# ===========================================
MAX_FILE_SIZE=5242880
# ===========================================
# 限流配置
# ===========================================
RATE_LIMIT_WINDOW=60000
RATE_LIMIT_MAX=100
# ===========================================
# 日志配置
# ===========================================
LOG_LEVEL=info

112
server/Makefile Normal file
View File

@ -0,0 +1,112 @@
# ============================================
# 海外预约系统 - Makefile
# ============================================
.PHONY: help deploy build start stop restart logs status clean
# 默认目标
.DEFAULT_GOAL := help
# 颜色定义
GREEN := \033[0;32m
YELLOW := \033[1;33m
BLUE := \033[0;34m
NC := \033[0m
# 检测 docker compose 命令
DOCKER_COMPOSE := $(shell if docker compose version > /dev/null 2>&1; then echo "docker compose"; else echo "docker-compose"; fi)
# 帮助信息
help:
@echo ""
@echo "$(BLUE)============================================$(NC)"
@echo "$(BLUE) 海外预约系统 - 部署命令$(NC)"
@echo "$(BLUE)============================================$(NC)"
@echo ""
@echo "$(GREEN)部署命令:$(NC)"
@echo " make deploy - 完整部署(构建 Admin + 启动服务)"
@echo " make build - 仅构建 Admin 前端"
@echo " make start - 启动服务(跳过构建)"
@echo ""
@echo "$(GREEN)管理命令:$(NC)"
@echo " make stop - 停止服务"
@echo " make restart - 重启服务"
@echo " make status - 查看服务状态"
@echo " make logs - 查看实时日志"
@echo " make logs-api - 查看 API 日志"
@echo " make logs-nginx - 查看 Nginx 日志"
@echo ""
@echo "$(GREEN)其他命令:$(NC)"
@echo " make clean - 清理构建产物"
@echo " make shell-api - 进入 API 容器"
@echo " make shell-nginx - 进入 Nginx 容器"
@echo " make init - 初始化环境配置"
@echo ""
# 完整部署
deploy:
@./deploy.sh
# 仅构建 Admin
build:
@echo "$(YELLOW)构建 Admin 前端...$(NC)"
@cd ../admin && npm install && npm run build
@rm -rf ./admin-dist
@cp -r ../admin/dist ./admin-dist
@echo "$(GREEN)✓ Admin 构建完成$(NC)"
# 启动服务(跳过构建)
start:
@./deploy.sh --skip-build
# 停止服务
stop:
@./deploy.sh --stop
# 重启服务
restart:
@./deploy.sh --restart
# 查看服务状态
status:
@$(DOCKER_COMPOSE) ps
# 查看所有日志
logs:
@$(DOCKER_COMPOSE) logs -f
# 查看 API 日志
logs-api:
@$(DOCKER_COMPOSE) logs -f api
# 查看 Nginx 日志
logs-nginx:
@$(DOCKER_COMPOSE) logs -f nginx
# 进入 API 容器
shell-api:
@docker exec -it overseas-appointment-api sh
# 进入 Nginx 容器
shell-nginx:
@docker exec -it overseas-appointment-nginx sh
# 初始化环境配置
init:
@if [ ! -f .env ]; then \
cp .env.example .env; \
echo "$(GREEN)✓ 已创建 .env 文件,请编辑配置$(NC)"; \
else \
echo "$(YELLOW).env 文件已存在$(NC)"; \
fi
# 清理构建产物
clean:
@echo "$(YELLOW)清理构建产物...$(NC)"
@rm -rf ./admin-dist
@$(DOCKER_COMPOSE) down --rmi local 2>/dev/null || true
@echo "$(GREEN)✓ 清理完成$(NC)"
# 查看健康状态
health:
@curl -s http://localhost:2701/health | python3 -m json.tool 2>/dev/null || curl -s http://localhost:2701/health

193
server/README.md Normal file
View File

@ -0,0 +1,193 @@
# 服务器部署配置
此目录包含生产环境的 Docker 部署配置,使用**外部 MySQL 和 Redis** 服务。
## 目录结构
```
server/
├── docker-compose.yml # Docker Compose 配置
├── deploy.sh # 自动部署脚本
├── .env.example # 环境变量模板
├── .env # 实际环境变量(需手动创建)
├── nginx/ # Nginx 配置
│ ├── nginx.conf
│ └── conf.d/
│ └── default.conf
├── data/ # 数据目录(本地挂载,方便迁移)
│ ├── uploads/ # 用户上传的文件
│ └── logs/
│ ├── api/ # API 服务日志
│ └── nginx/ # Nginx 访问日志
├── admin-dist/ # Admin 打包后的静态文件(需手动放置)
└── README.md
```
## 架构说明
```
┌─────────────────────────────────────┐
│ 外部代理 (SSL) │
└──────────────┬──────────────────────┘
┌──────────────────────────────────────────────────────────────────┐
│ Docker Compose (单一端口 2701) │
│ ┌────────────────────────────────────────────────────────────┐ │
│ │ Nginx │ │
│ │ /admin/* → 静态文件 (Admin 后台) │ │
│ │ /api/* → API 服务 │ │
│ │ /uploads → API 服务 │ │
│ └────────────────────────┬───────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌────────────────────────────────────────────────────────────┐ │
│ │ API 服务 (:3000) │ │
│ └────────────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────────┘
│ │
▼ ▼
┌─────────────┐ ┌─────────────┐
│ MySQL │ │ Redis │
│ (外部服务) │ │ (外部服务) │
└─────────────┘ └─────────────┘
```
## 快速开始
### 1. 配置环境变量
```bash
cd server
cp .env.example .env
vim .env # 编辑配置
```
### 2. 构建 Admin 前端
```bash
cd ../admin
npm install
npm run build
# 将打包产物复制到 server 目录
cp -r dist ../server/admin-dist
```
### 3. 启动服务
```bash
cd server
docker-compose up -d --build
```
### 4. 验证服务
```bash
# 检查服务状态
docker-compose ps
# 访问 Admin 后台
curl http://localhost:2701/admin
# 检查 API
curl http://localhost:2701/health
curl http://localhost:2701/api/v1/services
```
## 访问地址
| 路径 | 说明 |
|------|------|
| `/admin` | Admin 管理后台 |
| `/api/*` | 后端 API 接口 |
| `/api-docs` | API 文档 |
| `/health` | 健康检查 |
| `/uploads/*` | 上传文件 |
## 常用命令
```bash
# 启动
docker-compose up -d
# 停止
docker-compose down
# 重新构建并启动
docker-compose up -d --build
# 查看日志
docker-compose logs -f
docker-compose logs -f api
docker-compose logs -f nginx
# 重启服务
docker-compose restart api
# 进入容器
docker exec -it overseas-appointment-api sh
docker exec -it overseas-appointment-nginx sh
```
## 更新 Admin 前端
```bash
# 1. 重新构建 admin
cd ../admin
npm run build
# 2. 更新静态文件
rm -rf ../server/admin-dist
cp -r dist ../server/admin-dist
# 3. 重启 nginx
cd ../server
docker-compose restart nginx
```
## 外部代理配置示例
### Nginx (外部)
```nginx
server {
listen 443 ssl http2;
server_name your-domain.com;
ssl_certificate /path/to/fullchain.pem;
ssl_certificate_key /path/to/privkey.pem;
location / {
proxy_pass http://127.0.0.1:2701;
proxy_set_header Host $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;
}
}
```
## 故障排查
### Admin 页面 404
确认 `admin-dist` 目录存在且包含 `index.html`
```bash
ls -la server/admin-dist/
```
### API 连接数据库失败
```bash
# 检查数据库连通性
docker exec -it overseas-appointment-api sh
node -e "require('./src/models').sequelize.authenticate().then(() => console.log('OK')).catch(console.error)"
```
### 查看实时日志
```bash
docker-compose logs -f --tail=100
```

View File

View File

View File

@ -0,0 +1,209 @@
172.23.0.1 - - [20/Dec/2025:10:10:29 +0000] "GET /health HTTP/1.1" 200 463 "-" "curl/7.81.0" "-" rt=0.010
192.168.195.35 - - [20/Dec/2025:10:11:24 +0000] "GET /admin HTTP/1.1" 301 169 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.000
172.23.0.1 - - [20/Dec/2025:10:11:34 +0000] "GET /admin HTTP/1.1" 301 169 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.000
172.23.0.1 - - [20/Dec/2025:10:14:20 +0000] "GET /admin HTTP/1.1" 301 169 "-" "curl/7.81.0" "-" rt=0.000
172.23.0.1 - - [20/Dec/2025:10:14:56 +0000] "GET / HTTP/1.1" 302 145 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.000
192.168.195.35 - - [20/Dec/2025:10:16:58 +0000] "GET /admin/ HTTP/1.1" 200 350 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.000
192.168.195.35 - - [20/Dec/2025:10:16:58 +0000] "GET /assets/index-DBvDpYsl.js HTTP/1.1" 404 185 "http://192.168.195.15:2701/admin/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.000
192.168.195.35 - - [20/Dec/2025:10:16:58 +0000] "GET /assets/index-DX18_6uV.css HTTP/1.1" 404 185 "http://192.168.195.15:2701/admin/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.000
192.168.195.35 - - [20/Dec/2025:10:16:58 +0000] "GET /vite.svg HTTP/1.1" 404 185 "http://192.168.195.15:2701/admin/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.000
192.168.195.35 - - [20/Dec/2025:10:17:04 +0000] "GET /assets/index-DX18_6uV.css HTTP/1.1" 404 185 "http://192.168.195.15:2701/admin/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.000
192.168.195.35 - - [20/Dec/2025:10:17:05 +0000] "GET /admin/ HTTP/1.1" 200 350 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.000
192.168.195.35 - - [20/Dec/2025:10:17:05 +0000] "GET /assets/index-DBvDpYsl.js HTTP/1.1" 404 185 "http://192.168.195.15:2701/admin/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.000
192.168.195.35 - - [20/Dec/2025:10:17:05 +0000] "GET /assets/index-DX18_6uV.css HTTP/1.1" 404 185 "http://192.168.195.15:2701/admin/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.000
192.168.195.35 - - [20/Dec/2025:10:17:24 +0000] "GET /api/ HTTP/1.1" 404 91 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.014
192.168.195.35 - - [20/Dec/2025:10:17:24 +0000] "\x16\x03\x01\x06\xA0\x01\x00\x06\x9C\x03\x03\x8CxX\xC0te\x95\x03\x9E\xEA\x9B\x02Y\xBE\x8F\x7F\xBB&7\xFC\xD9>9\x98q\x15\xC4\xA7\x01P\xA4\x1B \xF0\x8D\x96\xF3\xD2\xF2[M\xC3i\xD8\x98\x9D\xB4X\xF4\xBA\xDD\x8Fn*\x0F(\xD1yo-H\x00\xA7~\xF3\x00 ZZ\x13\x01\x13\x02\x13\x03\xC0+\xC0/\xC0,\xC00\xCC\xA9\xCC\xA8\xC0\x13\xC0\x14\x00\x9C\x00\x9D\x00/\x005\x01\x00\x063::\x00\x00\x00\x17\x00\x00\x00\x05\x00\x05\x01\x00\x00\x00\x00\x00" 400 157 "-" "-" "-" rt=0.001
192.168.195.35 - - [20/Dec/2025:10:17:24 +0000] "\x16\x03\x01\x06\xC0\x01\x00\x06\xBC\x03\x03\x01@K\x9A\x14\xED\xCDT\xCC\x9A\xC0\xDDG%_h\x18\xA4Y\x1D\xD5\x99z\x13\x95[\xE8\x92" 400 157 "-" "-" "-" rt=0.001
192.168.195.35 - - [20/Dec/2025:10:17:29 +0000] "GET /admin HTTP/1.1" 301 169 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.000
172.23.0.1 - - [20/Dec/2025:10:18:02 +0000] "GET /admin/ HTTP/1.1" 200 473 "-" "curl/7.81.0" "-" rt=0.000
172.23.0.1 - - [20/Dec/2025:10:21:03 +0000] "GET /health HTTP/1.1" 200 463 "-" "curl/7.81.0" "-" rt=0.002
172.23.0.1 - - [20/Dec/2025:10:21:05 +0000] "GET /api/v1 HTTP/1.1" 404 64 "-" "curl/7.81.0" "-" rt=0.002
172.23.0.1 - - [20/Dec/2025:10:21:16 +0000] "GET /api/v1/services HTTP/1.1" 200 40 "-" "curl/7.81.0" "-" rt=0.015
172.23.0.1 - - [20/Dec/2025:10:21:18 +0000] "GET /api/v1/categories HTTP/1.1" 200 511 "-" "curl/7.81.0" "-" rt=0.002
172.23.0.1 - - [20/Dec/2025:10:21:19 +0000] "POST /api/v1/admin/login HTTP/1.1" 401 65 "-" "curl/7.81.0" "-" rt=0.048
172.23.0.1 - - [20/Dec/2025:10:21:30 +0000] "POST /api/v1/auth/wechat-login HTTP/1.1" 500 112 "-" "curl/7.81.0" "-" rt=0.148
172.23.0.1 - - [20/Dec/2025:10:21:32 +0000] "GET /api/v1/users/profile HTTP/1.1" 401 69 "-" "curl/7.81.0" "-" rt=0.001
172.23.0.1 - - [20/Dec/2025:10:21:33 +0000] "POST /api/v1/appointments HTTP/1.1" 401 69 "-" "curl/7.81.0" "-" rt=0.001
172.23.0.1 - - [20/Dec/2025:10:23:44 +0000] "GET /health HTTP/1.1" 200 463 "-" "curl/7.81.0" "-" rt=0.010
192.168.195.35 - - [20/Dec/2025:10:24:06 +0000] "GET /admin/ HTTP/1.1" 200 355 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.000
192.168.195.35 - - [20/Dec/2025:10:24:06 +0000] "GET /admin/assets/index-9tSwFDBS.js HTTP/1.1" 200 385868 "http://192.168.195.15:2701/admin/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.000
192.168.195.35 - - [20/Dec/2025:10:24:06 +0000] "GET /admin/assets/index-DX18_6uV.css HTTP/1.1" 200 46904 "http://192.168.195.15:2701/admin/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.000
192.168.195.35 - - [20/Dec/2025:10:24:06 +0000] "GET /admin/assets/index-CyhmJedn.css HTTP/1.1" 200 225 "http://192.168.195.15:2701/admin/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.000
192.168.195.35 - - [20/Dec/2025:10:24:06 +0000] "GET /admin/assets/index-yUFFDeZ_.js HTTP/1.1" 200 1043 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.000
192.168.195.35 - - [20/Dec/2025:10:24:06 +0000] "GET /admin/assets/el-button-DPInAG8s.css HTTP/1.1" 200 3817 "http://192.168.195.15:2701/admin/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.000
192.168.195.35 - - [20/Dec/2025:10:24:06 +0000] "GET /admin/assets/el-input-Hm_Blz84.css HTTP/1.1" 200 2609 "http://192.168.195.15:2701/admin/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.000
192.168.195.35 - - [20/Dec/2025:10:25:04 +0000] "POST /api/v1/admin/login HTTP/1.1" 200 447 "http://192.168.195.15:2701/login" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.091
192.168.195.35 - - [20/Dec/2025:10:25:04 +0000] "GET /admin/assets/MainLayout-PEyYQujD.js HTTP/1.1" 200 1620 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.000
192.168.195.35 - - [20/Dec/2025:10:25:04 +0000] "GET /admin/assets/el-tooltip-l0sNRNKZ.js HTTP/1.1" 200 1 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.000
192.168.195.35 - - [20/Dec/2025:10:25:04 +0000] "GET /admin/assets/MainLayout-BIrS3bTX.css HTTP/1.1" 200 3488 "http://192.168.195.15:2701/login" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.000
192.168.195.35 - - [20/Dec/2025:10:25:04 +0000] "GET /admin/assets/el-scrollbar-C4MYcDXd.css HTTP/1.1" 200 869 "http://192.168.195.15:2701/login" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.000
192.168.195.35 - - [20/Dec/2025:10:25:04 +0000] "GET /admin/assets/el-avatar-BmRr_O8d.css HTTP/1.1" 200 355 "http://192.168.195.15:2701/login" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.000
192.168.195.35 - - [20/Dec/2025:10:25:04 +0000] "GET /admin/assets/index-D0laOF8j.css HTTP/1.1" 200 2360 "http://192.168.195.15:2701/login" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.000
192.168.195.35 - - [20/Dec/2025:10:25:04 +0000] "GET /admin/assets/el-tag-6K7tyrw1.css HTTP/1.1" 200 1341 "http://192.168.195.15:2701/login" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.000
192.168.195.35 - - [20/Dec/2025:10:25:04 +0000] "GET /admin/assets/el-radio-group-Bc0vNHmC.css HTTP/1.1" 200 959 "http://192.168.195.15:2701/login" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.000
192.168.195.35 - - [20/Dec/2025:10:25:04 +0000] "GET /admin/assets/el-col-Ds2mGN2S.css HTTP/1.1" 200 3929 "http://192.168.195.15:2701/login" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.000
192.168.195.35 - - [20/Dec/2025:10:25:04 +0000] "GET /admin/assets/el-date-picker-panel-C-Zz6Fhi.css HTTP/1.1" 200 4164 "http://192.168.195.15:2701/login" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.000
192.168.195.35 - - [20/Dec/2025:10:25:04 +0000] "GET /admin/assets/index-DqWkRNN0.js HTTP/1.1" 200 375501 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.000
192.168.195.35 - - [20/Dec/2025:10:25:05 +0000] "GET /api/v1/admin/statistics/user-growth?startDate=2025-11-20&endDate=2025-12-20&groupBy=day HTTP/1.1" 200 68 "http://192.168.195.15:2701/dashboard" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.041
192.168.195.35 - - [20/Dec/2025:10:25:05 +0000] "GET /api/v1/admin/statistics/service-rankings?startDate=2025-11-20&endDate=2025-12-20&limit=10 HTTP/1.1" 200 68 "http://192.168.195.15:2701/dashboard" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.052
192.168.195.35 - - [20/Dec/2025:10:25:05 +0000] "GET /api/v1/admin/statistics/dashboard?startDate=2025-11-20&endDate=2025-12-20 HTTP/1.1" 200 122 "http://192.168.195.15:2701/dashboard" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.059
192.168.195.35 - - [20/Dec/2025:10:25:05 +0000] "GET /api/v1/admin/statistics/financial-report?startDate=2025-11-20&endDate=2025-12-20 HTTP/1.1" 200 143 "http://192.168.195.15:2701/dashboard" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.059
192.168.195.35 - - [20/Dec/2025:10:25:05 +0000] "GET /api/v1/admin/statistics/invitation-conversion?startDate=2025-11-20&endDate=2025-12-20 HTTP/1.1" 200 116 "http://192.168.195.15:2701/dashboard" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.060
192.168.195.35 - - [20/Dec/2025:10:25:10 +0000] "GET /admin/assets/index-CAFdBNHj.css HTTP/1.1" 200 456 "http://192.168.195.15:2701/dashboard" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.000
192.168.195.35 - - [20/Dec/2025:10:25:10 +0000] "GET /admin/assets/index-DEMOZivC.js HTTP/1.1" 200 4181 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.000
192.168.195.35 - - [20/Dec/2025:10:25:10 +0000] "GET /admin/assets/el-overlay-uHqKdL1G.css HTTP/1.1" 200 1051 "http://192.168.195.15:2701/dashboard" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.000
192.168.195.35 - - [20/Dec/2025:10:25:10 +0000] "GET /admin/assets/el-descriptions-item-o9ObloqJ.css HTTP/1.1" 200 615 "http://192.168.195.15:2701/dashboard" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.000
192.168.195.35 - - [20/Dec/2025:10:25:10 +0000] "GET /admin/assets/el-pagination-B1FwbX1n.css HTTP/1.1" 200 1210 "http://192.168.195.15:2701/dashboard" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.000
192.168.195.35 - - [20/Dec/2025:10:25:10 +0000] "GET /admin/assets/el-select-D_oyzAZN.css HTTP/1.1" 200 1943 "http://192.168.195.15:2701/dashboard" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.000
192.168.195.35 - - [20/Dec/2025:10:25:10 +0000] "GET /admin/assets/el-table-column-mti01wbr.css HTTP/1.1" 200 3754 "http://192.168.195.15:2701/dashboard" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.000
192.168.195.35 - - [20/Dec/2025:10:25:10 +0000] "GET /api/v1/admin/users?page=1&limit=20&sortBy=createdAt&sortOrder=DESC HTTP/1.1" 200 119 "http://192.168.195.15:2701/users" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.015
192.168.195.35 - - [20/Dec/2025:10:25:11 +0000] "GET /admin/assets/index-BjmfxVeM.css HTTP/1.1" 200 443 "http://192.168.195.15:2701/users" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.000
192.168.195.35 - - [20/Dec/2025:10:25:11 +0000] "GET /admin/assets/index-Bzxd4dl3.js HTTP/1.1" 200 4250 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.000
192.168.195.35 - - [20/Dec/2025:10:25:11 +0000] "GET /api/v1/categories HTTP/1.1" 200 255 "http://192.168.195.15:2701/appointments" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.008
192.168.195.35 - - [20/Dec/2025:10:25:11 +0000] "GET /api/v1/admin/appointments?page=1&limit=20&sortBy=createdAt&sortOrder=DESC HTTP/1.1" 200 123 "http://192.168.195.15:2701/appointments" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.019
192.168.195.35 - - [20/Dec/2025:10:25:11 +0000] "GET /api/v1/admin/users?page=1&limit=20&sortBy=createdAt&sortOrder=DESC HTTP/1.1" 304 0 "http://192.168.195.15:2701/users" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.006
192.168.195.35 - - [20/Dec/2025:10:25:12 +0000] "GET /api/v1/admin/statistics/user-growth?startDate=2025-11-20&endDate=2025-12-20&groupBy=day HTTP/1.1" 304 0 "http://192.168.195.15:2701/dashboard" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.007
192.168.195.35 - - [20/Dec/2025:10:25:12 +0000] "GET /api/v1/admin/statistics/dashboard?startDate=2025-11-20&endDate=2025-12-20 HTTP/1.1" 304 0 "http://192.168.195.15:2701/dashboard" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.011
192.168.195.35 - - [20/Dec/2025:10:25:12 +0000] "GET /api/v1/admin/statistics/invitation-conversion?startDate=2025-11-20&endDate=2025-12-20 HTTP/1.1" 304 0 "http://192.168.195.15:2701/dashboard" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.013
192.168.195.35 - - [20/Dec/2025:10:25:12 +0000] "GET /api/v1/admin/statistics/service-rankings?startDate=2025-11-20&endDate=2025-12-20&limit=10 HTTP/1.1" 304 0 "http://192.168.195.15:2701/dashboard" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.014
192.168.195.35 - - [20/Dec/2025:10:25:12 +0000] "GET /api/v1/admin/statistics/financial-report?startDate=2025-11-20&endDate=2025-12-20 HTTP/1.1" 304 0 "http://192.168.195.15:2701/dashboard" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.016
192.168.195.35 - - [20/Dec/2025:10:25:13 +0000] "GET /api/v1/admin/users?page=1&limit=20&sortBy=createdAt&sortOrder=DESC HTTP/1.1" 304 0 "http://192.168.195.15:2701/users" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.009
192.168.195.35 - - [20/Dec/2025:10:25:13 +0000] "GET /api/v1/categories HTTP/1.1" 304 0 "http://192.168.195.15:2701/appointments" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.014
192.168.195.35 - - [20/Dec/2025:10:25:13 +0000] "GET /api/v1/admin/appointments?page=1&limit=20&sortBy=createdAt&sortOrder=DESC HTTP/1.1" 304 0 "http://192.168.195.15:2701/appointments" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.021
192.168.195.35 - - [20/Dec/2025:10:25:14 +0000] "GET /admin/assets/index-BZJLAxbW.css HTTP/1.1" 200 498 "http://192.168.195.15:2701/appointments" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.000
192.168.195.35 - - [20/Dec/2025:10:25:14 +0000] "GET /admin/assets/index-DMIKiUqY.js HTTP/1.1" 200 4596 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.000
192.168.195.35 - - [20/Dec/2025:10:25:14 +0000] "GET /admin/assets/el-alert-G57rL0jl.css HTTP/1.1" 200 761 "http://192.168.195.15:2701/appointments" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.000
192.168.195.35 - - [20/Dec/2025:10:25:14 +0000] "GET /admin/assets/el-image-viewer-BoL2ViNC.css HTTP/1.1" 200 829 "http://192.168.195.15:2701/appointments" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.000
192.168.195.35 - - [20/Dec/2025:10:25:14 +0000] "GET /api/v1/admin/withdrawals?page=1&limit=20&sortBy=createdAt&sortOrder=DESC HTTP/1.1" 200 124 "http://192.168.195.15:2701/withdrawals" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.012
192.168.195.35 - - [20/Dec/2025:10:25:14 +0000] "GET /admin/assets/index-C5-HkYUg.css HTTP/1.1" 200 242 "http://192.168.195.15:2701/withdrawals" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.000
192.168.195.35 - - [20/Dec/2025:10:25:14 +0000] "GET /admin/assets/el-divider-BUtF_RGI.css HTTP/1.1" 200 325 "http://192.168.195.15:2701/withdrawals" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.000
192.168.195.35 - - [20/Dec/2025:10:25:14 +0000] "GET /admin/assets/index-C0BspGOI.js HTTP/1.1" 200 3574 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.000
192.168.195.35 - - [20/Dec/2025:10:25:14 +0000] "GET /admin/assets/el-input-number-D6iOyBgb.css HTTP/1.1" 200 927 "http://192.168.195.15:2701/withdrawals" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.000
192.168.195.35 - - [20/Dec/2025:10:25:14 +0000] "GET /api/v1/admin/payment-orders?page=1&limit=20 HTTP/1.1" 200 118 "http://192.168.195.15:2701/payment-orders" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.024
192.168.195.35 - - [20/Dec/2025:10:25:14 +0000] "GET /admin/assets/index-nw1sQhtw.css HTTP/1.1" 200 387 "http://192.168.195.15:2701/payment-orders" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.000
192.168.195.35 - - [20/Dec/2025:10:25:14 +0000] "GET /admin/assets/index-DOFbrGCB.js HTTP/1.1" 200 2376 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.000
192.168.195.35 - - [20/Dec/2025:10:25:14 +0000] "GET /api/v1/admin/commissions/config/commission-rate HTTP/1.1" 200 134 "http://192.168.195.15:2701/commissions" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.020
192.168.195.35 - - [20/Dec/2025:10:25:14 +0000] "GET /api/v1/admin/commissions/stats HTTP/1.1" 200 119 "http://192.168.195.15:2701/commissions" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.021
192.168.195.35 - - [20/Dec/2025:10:25:14 +0000] "GET /api/v1/admin/commissions?page=1&limit=20 HTTP/1.1" 200 118 "http://192.168.195.15:2701/commissions" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.022
192.168.195.35 - - [20/Dec/2025:10:25:14 +0000] "GET /admin/assets/index-DV5Y95yi.css HTTP/1.1" 200 447 "http://192.168.195.15:2701/commissions" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.000
192.168.195.35 - - [20/Dec/2025:10:25:14 +0000] "GET /admin/assets/index-BwvCpBQ-.js HTTP/1.1" 200 5102 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.000
192.168.195.35 - - [20/Dec/2025:10:25:14 +0000] "GET /admin/assets/el-progress-xqkf6s3x.css HTTP/1.1" 200 2566 "http://192.168.195.15:2701/commissions" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.000
192.168.195.35 - - [20/Dec/2025:10:25:15 +0000] "GET /api/v1/admin/services?page=1&limit=10 HTTP/1.1" 200 68 "http://192.168.195.15:2701/services" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.018
192.168.195.35 - - [20/Dec/2025:10:25:15 +0000] "GET /api/v1/admin/categories HTTP/1.1" 200 673 "http://192.168.195.15:2701/services" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.019
192.168.195.35 - - [20/Dec/2025:10:25:15 +0000] "GET /admin/assets/index-BqT4jKpi.css HTTP/1.1" 200 180 "http://192.168.195.15:2701/services" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.000
192.168.195.35 - - [20/Dec/2025:10:25:15 +0000] "GET /admin/assets/index-BT8OkdD3.js HTTP/1.1" 200 1870 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.000
192.168.195.35 - - [20/Dec/2025:10:25:15 +0000] "GET /api/v1/admin/categories HTTP/1.1" 304 0 "http://192.168.195.15:2701/categories" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.006
192.168.195.35 - - [20/Dec/2025:10:25:15 +0000] "GET /api/v1/admin/commissions/config/commission-rate HTTP/1.1" 304 0 "http://192.168.195.15:2701/commissions" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.016
192.168.195.35 - - [20/Dec/2025:10:25:15 +0000] "GET /api/v1/admin/commissions/stats HTTP/1.1" 304 0 "http://192.168.195.15:2701/commissions" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.016
192.168.195.35 - - [20/Dec/2025:10:25:15 +0000] "GET /api/v1/admin/commissions?page=1&limit=20 HTTP/1.1" 304 0 "http://192.168.195.15:2701/commissions" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "-" rt=0.017
192.168.195.17 - - [20/Dec/2025:10:30:49 +0000] "GET / HTTP/1.1" 302 145 "-" "-" "206.189.2.13" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:30:49 +0000] "GET / HTTP/1.1" 302 145 "-" "-" "209.38.208.202" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:30:50 +0000] "GET / HTTP/1.1" 302 145 "-" "Mozilla/5.0 (l9scan/2.0.730313e25363e2235313e25343; +https://leakix.net)" "206.189.2.13" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:30:51 +0000] "GET /admin/ajax.php?brand=x%27+AND+EXTRACTVALUE%281%2CCONCAT%28%27~USER%3A%27%2C%28SELECT+USER%28%29%29%2C%27~%27%29%29+--+&command=model&model=model&module=FreePBX%5Cmodules%5Cendpoint%5Cajax&template=x HTTP/1.1" 200 355 "-" "Mozilla/5.0 (l9scan/2.0.730313e25363e2235313e25343; +https://leakix.net)" "206.189.2.13" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:30:53 +0000] "POST /graphql HTTP/1.1" 404 124 "-" "Mozilla/5.0 (l9scan/2.0.730313e25363e2235313e25343; +https://leakix.net)" "206.189.2.13" rt=0.036
192.168.195.17 - - [20/Dec/2025:10:30:54 +0000] "POST /api HTTP/1.1" 301 169 "-" "Mozilla/5.0 (l9scan/2.0.730313e25363e2235313e25343; +https://leakix.net)" "206.189.2.13" rt=0.297
192.168.195.17 - - [20/Dec/2025:10:30:55 +0000] "POST /api/graphql HTTP/1.1" 404 99 "-" "Mozilla/5.0 (l9scan/2.0.730313e25363e2235313e25343; +https://leakix.net)" "206.189.2.13" rt=0.042
192.168.195.17 - - [20/Dec/2025:10:30:55 +0000] "POST /graphql/api HTTP/1.1" 404 124 "-" "Mozilla/5.0 (l9scan/2.0.730313e25363e2235313e25343; +https://leakix.net)" "206.189.2.13" rt=0.037
192.168.195.17 - - [20/Dec/2025:10:30:56 +0000] "POST /api/gql HTTP/1.1" 404 95 "-" "Mozilla/5.0 (l9scan/2.0.730313e25363e2235313e25343; +https://leakix.net)" "206.189.2.13" rt=0.043
192.168.195.17 - - [20/Dec/2025:10:30:58 +0000] "GET /swagger-ui.html HTTP/1.1" 404 124 "-" "Mozilla/5.0 (l9scan/2.0.730313e25363e2235313e25343; +https://leakix.net)" "206.189.2.13" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:31:00 +0000] "GET /swagger/index.html HTTP/1.1" 404 124 "-" "Mozilla/5.0 (l9scan/2.0.730313e25363e2235313e25343; +https://leakix.net)" "206.189.2.13" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:31:01 +0000] "GET /swagger/swagger-ui.html HTTP/1.1" 404 124 "-" "Mozilla/5.0 (l9scan/2.0.730313e25363e2235313e25343; +https://leakix.net)" "206.189.2.13" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:31:02 +0000] "GET /webjars/swagger-ui/index.html HTTP/1.1" 404 124 "-" "Mozilla/5.0 (l9scan/2.0.730313e25363e2235313e25343; +https://leakix.net)" "206.189.2.13" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:31:04 +0000] "GET /swagger.json HTTP/1.1" 404 124 "-" "Mozilla/5.0 (l9scan/2.0.730313e25363e2235313e25343; +https://leakix.net)" "206.189.2.13" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:31:04 +0000] "GET /swagger/v1/swagger.json HTTP/1.1" 404 124 "-" "Mozilla/5.0 (l9scan/2.0.730313e25363e2235313e25343; +https://leakix.net)" "206.189.2.13" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:31:05 +0000] "GET /v2/api-docs HTTP/1.1" 404 124 "-" "Mozilla/5.0 (l9scan/2.0.730313e25363e2235313e25343; +https://leakix.net)" "206.189.2.13" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:31:06 +0000] "GET /v3/api-docs HTTP/1.1" 404 124 "-" "Mozilla/5.0 (l9scan/2.0.730313e25363e2235313e25343; +https://leakix.net)" "206.189.2.13" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:31:08 +0000] "GET /api-docs/swagger.json HTTP/1.1" 200 1264 "-" "Mozilla/5.0 (l9scan/2.0.730313e25363e2235313e25343; +https://leakix.net)" "206.189.2.13" rt=0.007
192.168.195.17 - - [20/Dec/2025:10:31:10 +0000] "GET /swagger/v1/swagger.json HTTP/1.1" 404 124 "-" "Mozilla/5.0 (l9scan/2.0.730313e25363e2235313e25343; +https://leakix.net)" "206.189.2.13" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:31:11 +0000] "GET /v2/api-docs HTTP/1.1" 404 124 "-" "Mozilla/5.0 (l9scan/2.0.730313e25363e2235313e25343; +https://leakix.net)" "206.189.2.13" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:31:12 +0000] "GET /v3/api-docs HTTP/1.1" 404 124 "-" "Mozilla/5.0 (l9scan/2.0.730313e25363e2235313e25343; +https://leakix.net)" "206.189.2.13" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:31:12 +0000] "GET /api-docs/swagger.json HTTP/1.1" 200 1264 "-" "Mozilla/5.0 (l9scan/2.0.730313e25363e2235313e25343; +https://leakix.net)" "206.189.2.13" rt=0.004
192.168.195.17 - - [20/Dec/2025:10:31:13 +0000] "GET /api/swagger.json HTTP/1.1" 404 103 "-" "Mozilla/5.0 (l9scan/2.0.730313e25363e2235313e25343; +https://leakix.net)" "206.189.2.13" rt=0.005
192.168.195.17 - - [20/Dec/2025:10:31:14 +0000] "GET /swagger.json HTTP/1.1" 404 124 "-" "Mozilla/5.0 (l9scan/2.0.730313e25363e2235313e25343; +https://leakix.net)" "206.189.2.13" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:31:14 +0000] "GET /swagger/properties.json HTTP/1.1" 404 124 "-" "Mozilla/5.0 (l9scan/2.0.730313e25363e2235313e25343; +https://leakix.net)" "206.189.2.13" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:31:15 +0000] "GET /@vite/env HTTP/1.1" 404 124 "-" "Mozilla/5.0 (l9scan/2.0.730313e25363e2235313e25343; +https://leakix.net)" "206.189.2.13" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:31:17 +0000] "GET /actuator/env HTTP/1.1" 404 124 "-" "Mozilla/5.0 (l9scan/2.0.730313e25363e2235313e25343; +https://leakix.net)" "206.189.2.13" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:31:18 +0000] "GET /server HTTP/1.1" 404 124 "-" "Mozilla/5.0 (l9scan/2.0.730313e25363e2235313e25343; +https://leakix.net)" "206.189.2.13" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:31:21 +0000] "GET /about HTTP/1.1" 404 124 "-" "Mozilla/5.0 (l9scan/2.0.730313e25363e2235313e25343; +https://leakix.net)" "206.189.2.13" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:31:22 +0000] "GET /debug/default/view?panel=config HTTP/1.1" 404 124 "-" "Mozilla/5.0 (l9scan/2.0.730313e25363e2235313e25343; +https://leakix.net)" "206.189.2.13" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:31:23 +0000] "GET /v2/_catalog HTTP/1.1" 404 124 "-" "Mozilla/5.0 (l9scan/2.0.730313e25363e2235313e25343; +https://leakix.net)" "206.189.2.13" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:31:24 +0000] "GET /ecp/Current/exporttool/microsoft.exchange.ediscovery.exporttool.application HTTP/1.1" 404 124 "-" "Mozilla/5.0 (l9scan/2.0.730313e25363e2235313e25343; +https://leakix.net)" "206.189.2.13" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:31:25 +0000] "GET /server-status HTTP/1.1" 404 124 "-" "Mozilla/5.0 (l9scan/2.0.730313e25363e2235313e25343; +https://leakix.net)" "206.189.2.13" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:31:26 +0000] "GET /login.action HTTP/1.1" 404 124 "-" "Mozilla/5.0 (l9scan/2.0.730313e25363e2235313e25343; +https://leakix.net)" "206.189.2.13" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:31:27 +0000] "GET /_all_dbs HTTP/1.1" 404 124 "-" "Mozilla/5.0 (l9scan/2.0.730313e25363e2235313e25343; +https://leakix.net)" "206.189.2.13" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:31:32 +0000] "GET /s/730313e25363e2235313e25343/_/;/META-INF/maven/com.atlassian.jira/jira-webapp-dist/pom.properties HTTP/1.1" 404 124 "-" "Mozilla/5.0 (l9scan/2.0.730313e25363e2235313e25343; +https://leakix.net)" "206.189.2.13" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:31:33 +0000] "GET /config.json HTTP/1.1" 404 124 "-" "Mozilla/5.0 (l9scan/2.0.730313e25363e2235313e25343; +https://leakix.net)" "206.189.2.13" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:31:34 +0000] "GET /telescope/requests HTTP/1.1" 404 124 "-" "Mozilla/5.0 (l9scan/2.0.730313e25363e2235313e25343; +https://leakix.net)" "206.189.2.13" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:31:35 +0000] "GET /info.php HTTP/1.1" 404 124 "-" "Mozilla/5.0 (l9scan/2.0.730313e25363e2235313e25343; +https://leakix.net)" "206.189.2.13" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:31:36 +0000] "GET /?rest_route=/wp/v2/users/ HTTP/1.1" 302 145 "-" "Mozilla/5.0 (l9scan/2.0.730313e25363e2235313e25343; +https://leakix.net)" "206.189.2.13" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:31:45 +0000] "GET / HTTP/1.1" 302 145 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36" "95.181.237.143" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:31:45 +0000] "GET /favicon.ico HTTP/1.1" 404 185 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36" "95.181.237.143" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:31:52 +0000] "GET / HTTP/1.1" 302 145 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "45.154.197.14" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:31:52 +0000] "GET /admin HTTP/1.1" 301 169 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "45.154.197.14" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:31:53 +0000] "GET /admin/ HTTP/1.1" 200 355 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "45.154.197.14" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:31:53 +0000] "GET /admin/assets/index-9tSwFDBS.js HTTP/1.1" 200 385868 "https://sub.zpc-xy.com/admin/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "45.154.197.14" rt=0.116
192.168.195.17 - - [20/Dec/2025:10:31:54 +0000] "GET /admin/assets/index-DX18_6uV.css HTTP/1.1" 200 46904 "https://sub.zpc-xy.com/admin/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "45.154.197.14" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:31:55 +0000] "GET /admin/assets/index-CyhmJedn.css HTTP/1.1" 200 225 "https://sub.zpc-xy.com/admin/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "45.154.197.14" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:31:55 +0000] "GET /admin/assets/el-button-DPInAG8s.css HTTP/1.1" 200 3817 "https://sub.zpc-xy.com/admin/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "45.154.197.14" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:31:55 +0000] "GET /admin/assets/index-yUFFDeZ_.js HTTP/1.1" 200 1043 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "45.154.197.14" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:31:55 +0000] "GET /admin/assets/el-input-Hm_Blz84.css HTTP/1.1" 200 2609 "https://sub.zpc-xy.com/admin/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "45.154.197.14" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:31:55 +0000] "GET /vite.svg HTTP/1.1" 404 185 "https://sub.zpc-xy.com/login" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "45.154.197.14" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:32:05 +0000] "GET /admin HTTP/1.1" 301 169 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "45.154.197.14" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:32:06 +0000] "GET /admin/ HTTP/1.1" 200 355 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "45.154.197.14" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:32:06 +0000] "GET / HTTP/1.1" 302 145 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1" "141.148.153.213" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:32:07 +0000] "GET /admin HTTP/1.1" 301 169 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1" "141.148.153.213" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:32:08 +0000] "GET /admin/ HTTP/1.1" 200 485 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1" "141.148.153.213" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:32:08 +0000] "GET /favicon.ico HTTP/1.1" 404 124 "-" "Python/3.13 aiohttp/3.13.2" "141.148.153.213" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:32:08 +0000] "GET /vite.svg HTTP/1.1" 404 124 "-" "Python/3.13 aiohttp/3.13.2" "141.148.153.213" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:32:16 +0000] "POST /api/v1/admin/login HTTP/1.1" 200 446 "https://sub.zpc-xy.com/login" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "45.154.197.14" rt=0.085
192.168.195.17 - - [20/Dec/2025:10:32:17 +0000] "GET /admin/assets/el-scrollbar-C4MYcDXd.css HTTP/1.1" 200 869 "https://sub.zpc-xy.com/login" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "45.154.197.14" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:32:17 +0000] "GET /admin/assets/el-tooltip-l0sNRNKZ.js HTTP/1.1" 200 1 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "45.154.197.14" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:32:17 +0000] "GET /admin/assets/el-tag-6K7tyrw1.css HTTP/1.1" 200 1341 "https://sub.zpc-xy.com/login" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "45.154.197.14" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:32:17 +0000] "GET /admin/assets/MainLayout-PEyYQujD.js HTTP/1.1" 200 1620 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "45.154.197.14" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:32:17 +0000] "GET /admin/assets/MainLayout-BIrS3bTX.css HTTP/1.1" 200 3488 "https://sub.zpc-xy.com/login" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "45.154.197.14" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:32:17 +0000] "GET /admin/assets/el-avatar-BmRr_O8d.css HTTP/1.1" 200 355 "https://sub.zpc-xy.com/login" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "45.154.197.14" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:32:17 +0000] "GET /admin/assets/el-col-Ds2mGN2S.css HTTP/1.1" 200 3929 "https://sub.zpc-xy.com/login" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "45.154.197.14" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:32:17 +0000] "GET /admin/assets/el-date-picker-panel-C-Zz6Fhi.css HTTP/1.1" 200 4164 "https://sub.zpc-xy.com/login" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "45.154.197.14" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:32:17 +0000] "GET /admin/assets/el-radio-group-Bc0vNHmC.css HTTP/1.1" 200 959 "https://sub.zpc-xy.com/login" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "45.154.197.14" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:32:17 +0000] "GET /admin/assets/index-DqWkRNN0.js HTTP/1.1" 200 375501 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "45.154.197.14" rt=0.107
192.168.195.17 - - [20/Dec/2025:10:32:18 +0000] "GET /admin/assets/index-D0laOF8j.css HTTP/1.1" 200 2360 "https://sub.zpc-xy.com/login" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "45.154.197.14" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:32:18 +0000] "GET /api/v1/admin/statistics/user-growth?startDate=2025-11-20&endDate=2025-12-20&groupBy=day HTTP/1.1" 200 68 "https://sub.zpc-xy.com/dashboard" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "45.154.197.14" rt=0.029
192.168.195.17 - - [20/Dec/2025:10:32:18 +0000] "GET /api/v1/admin/statistics/invitation-conversion?startDate=2025-11-20&endDate=2025-12-20 HTTP/1.1" 200 116 "https://sub.zpc-xy.com/dashboard" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "45.154.197.14" rt=0.036
192.168.195.17 - - [20/Dec/2025:10:32:18 +0000] "GET /api/v1/admin/statistics/service-rankings?startDate=2025-11-20&endDate=2025-12-20&limit=10 HTTP/1.1" 200 68 "https://sub.zpc-xy.com/dashboard" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "45.154.197.14" rt=0.039
192.168.195.17 - - [20/Dec/2025:10:32:18 +0000] "GET /api/v1/admin/statistics/financial-report?startDate=2025-11-20&endDate=2025-12-20 HTTP/1.1" 200 143 "https://sub.zpc-xy.com/dashboard" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "45.154.197.14" rt=0.043
192.168.195.17 - - [20/Dec/2025:10:32:19 +0000] "GET /api/v1/admin/statistics/dashboard?startDate=2025-11-20&endDate=2025-12-20 HTTP/1.1" 200 122 "https://sub.zpc-xy.com/dashboard" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "45.154.197.14" rt=0.020
192.168.195.17 - - [20/Dec/2025:10:32:22 +0000] "GET /admin/assets/index-CAFdBNHj.css HTTP/1.1" 200 456 "https://sub.zpc-xy.com/dashboard" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "45.154.197.14" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:32:22 +0000] "GET /admin/assets/el-overlay-uHqKdL1G.css HTTP/1.1" 200 1051 "https://sub.zpc-xy.com/dashboard" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "45.154.197.14" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:32:22 +0000] "GET /admin/assets/el-select-D_oyzAZN.css HTTP/1.1" 200 1943 "https://sub.zpc-xy.com/dashboard" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "45.154.197.14" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:32:22 +0000] "GET /admin/assets/el-table-column-mti01wbr.css HTTP/1.1" 200 3754 "https://sub.zpc-xy.com/dashboard" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "45.154.197.14" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:32:22 +0000] "GET /admin/assets/el-pagination-B1FwbX1n.css HTTP/1.1" 200 1210 "https://sub.zpc-xy.com/dashboard" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "45.154.197.14" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:32:22 +0000] "GET /admin/assets/el-descriptions-item-o9ObloqJ.css HTTP/1.1" 200 615 "https://sub.zpc-xy.com/dashboard" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "45.154.197.14" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:32:22 +0000] "GET /admin/assets/index-DEMOZivC.js HTTP/1.1" 200 4181 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "45.154.197.14" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:32:22 +0000] "GET / HTTP/1.1" 302 145 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36" "51.81.245.138" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:32:23 +0000] "GET /admin HTTP/1.1" 301 169 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36" "51.81.245.138" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:32:23 +0000] "GET /api/v1/admin/users?page=1&limit=20&sortBy=createdAt&sortOrder=DESC HTTP/1.1" 200 119 "https://sub.zpc-xy.com/users" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "45.154.197.14" rt=0.013
192.168.195.17 - - [20/Dec/2025:10:32:24 +0000] "GET /admin/ HTTP/1.1" 200 355 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36" "51.81.245.138" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:32:25 +0000] "GET /favicon.ico HTTP/1.1" 404 124 "-" "python-requests/2.25.1" "51.81.245.138" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:33:11 +0000] "GET / HTTP/1.1" 302 145 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/138.0.7204.156 Mobile/15E148 Safari/604.1" "104.253.247.203" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:33:11 +0000] "GET /admin HTTP/1.1" 301 169 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/138.0.7204.156 Mobile/15E148 Safari/604.1" "104.253.247.203" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:33:11 +0000] "GET /admin/ HTTP/1.1" 200 355 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/138.0.7204.156 Mobile/15E148 Safari/604.1" "104.253.247.203" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:33:13 +0000] "GET /vite.svg HTTP/1.1" 404 124 "https://sub.zpc-xy.com/login" "Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/138.0.7204.156 Mobile/15E148 Safari/604.1" "104.253.247.203" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:33:14 +0000] "GET /vite.svg HTTP/1.1" 404 124 "https://sub.zpc-xy.com/login" "Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/138.0.7204.156 Mobile/15E148 Safari/604.1" "104.253.247.203" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:33:14 +0000] "GET / HTTP/1.1" 302 145 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/138.0.7204.156 Mobile/15E148 Safari/604.1" "103.196.9.100" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:33:14 +0000] "GET /admin HTTP/1.1" 301 169 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/138.0.7204.156 Mobile/15E148 Safari/604.1" "103.196.9.100" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:33:14 +0000] "GET /admin/ HTTP/1.1" 200 355 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/138.0.7204.156 Mobile/15E148 Safari/604.1" "103.196.9.100" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:33:15 +0000] "GET /admin/assets/index-9tSwFDBS.js HTTP/1.1" 200 385868 "http://sub.zpc-xy.com/admin/" "Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/138.0.7204.156 Mobile/15E148 Safari/604.1" "103.196.9.100" rt=0.113
192.168.195.17 - - [20/Dec/2025:10:33:15 +0000] "GET /admin/assets/index-DX18_6uV.css HTTP/1.1" 200 46904 "http://sub.zpc-xy.com/admin/" "Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/138.0.7204.156 Mobile/15E148 Safari/604.1" "103.196.9.100" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:33:16 +0000] "GET /admin/assets/index-CyhmJedn.css HTTP/1.1" 200 225 "http://sub.zpc-xy.com/admin/" "Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/138.0.7204.156 Mobile/15E148 Safari/604.1" "103.196.9.100" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:33:16 +0000] "GET /admin/assets/index-yUFFDeZ_.js HTTP/1.1" 200 1043 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/138.0.7204.156 Mobile/15E148 Safari/604.1" "103.196.9.100" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:33:19 +0000] "GET /admin/assets/el-input-Hm_Blz84.css HTTP/1.1" 200 2609 "http://sub.zpc-xy.com/admin/" "Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/138.0.7204.156 Mobile/15E148 Safari/604.1" "103.196.9.100" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:33:19 +0000] "GET /admin/assets/el-button-DPInAG8s.css HTTP/1.1" 200 3817 "http://sub.zpc-xy.com/admin/" "Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/138.0.7204.156 Mobile/15E148 Safari/604.1" "103.196.9.100" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:33:19 +0000] "GET /vite.svg HTTP/1.1" 404 124 "http://sub.zpc-xy.com/login" "Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/138.0.7204.156 Mobile/15E148 Safari/604.1" "103.196.9.100" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:33:19 +0000] "GET /vite.svg HTTP/1.1" 404 124 "http://sub.zpc-xy.com/login" "Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/138.0.7204.156 Mobile/15E148 Safari/604.1" "103.196.9.100" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:33:26 +0000] "GET /api/ HTTP/1.1" 404 91 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "45.154.197.14" rt=0.004
192.168.195.17 - - [20/Dec/2025:10:33:26 +0000] "GET /favicon.ico HTTP/1.1" 404 185 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0" "45.154.197.14" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:33:43 +0000] "GET / HTTP/1.1" 302 145 "-" "Mozilla/5.0 (compatible; Let's Encrypt validation server; +https://www.letsencrypt.org)" "65.87.7.112" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:33:44 +0000] "GET /admin HTTP/1.1" 301 169 "http://sub.zpc-xy.com" "Mozilla/5.0 (compatible; Let's Encrypt validation server; +https://www.letsencrypt.org)" "65.87.7.112" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:33:44 +0000] "GET / HTTP/1.1" 302 145 "-" "Mozilla/5.0 (compatible; Let's Encrypt validation server; +https://www.letsencrypt.org)" "65.87.7.112" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:33:45 +0000] "GET /admin HTTP/1.1" 301 169 "http://sub.zpc-xy.com" "Mozilla/5.0 (compatible; Let's Encrypt validation server; +https://www.letsencrypt.org)" "65.87.7.112" rt=0.000
192.168.195.17 - - [20/Dec/2025:10:33:45 +0000] "GET /_next HTTP/1.1" 404 153 "-" "Mozilla/5.0 (compatible; Let's Encrypt validation server; +https://www.letsencrypt.org)" "65.87.7.112" rt=0.000

View File

@ -0,0 +1,51 @@
2025/12/20 10:16:58 [error] 21#21: *12 open() "/etc/nginx/html/assets/index-DBvDpYsl.js" failed (2: No such file or directory), client: 192.168.195.35, server: localhost, request: "GET /assets/index-DBvDpYsl.js HTTP/1.1", host: "192.168.195.15:2701", referrer: "http://192.168.195.15:2701/admin/"
2025/12/20 10:16:58 [error] 22#22: *13 open() "/etc/nginx/html/assets/index-DX18_6uV.css" failed (2: No such file or directory), client: 192.168.195.35, server: localhost, request: "GET /assets/index-DX18_6uV.css HTTP/1.1", host: "192.168.195.15:2701", referrer: "http://192.168.195.15:2701/admin/"
2025/12/20 10:16:58 [error] 22#22: *13 open() "/etc/nginx/html/vite.svg" failed (2: No such file or directory), client: 192.168.195.35, server: localhost, request: "GET /vite.svg HTTP/1.1", host: "192.168.195.15:2701", referrer: "http://192.168.195.15:2701/admin/"
2025/12/20 10:17:04 [error] 22#22: *13 open() "/etc/nginx/html/assets/index-DX18_6uV.css" failed (2: No such file or directory), client: 192.168.195.35, server: localhost, request: "GET /assets/index-DX18_6uV.css HTTP/1.1", host: "192.168.195.15:2701", referrer: "http://192.168.195.15:2701/admin/"
2025/12/20 10:17:05 [error] 22#22: *13 open() "/etc/nginx/html/assets/index-DBvDpYsl.js" failed (2: No such file or directory), client: 192.168.195.35, server: localhost, request: "GET /assets/index-DBvDpYsl.js HTTP/1.1", host: "192.168.195.15:2701", referrer: "http://192.168.195.15:2701/admin/"
2025/12/20 10:17:05 [error] 21#21: *12 open() "/etc/nginx/html/assets/index-DX18_6uV.css" failed (2: No such file or directory), client: 192.168.195.35, server: localhost, request: "GET /assets/index-DX18_6uV.css HTTP/1.1", host: "192.168.195.15:2701", referrer: "http://192.168.195.15:2701/admin/"
2025/12/20 10:30:53 [error] 21#21: *22 open() "/etc/nginx/html/graphql" failed (2: No such file or directory), client: 192.168.195.17, server: localhost, request: "POST /graphql HTTP/1.1", host: "sub.zpc-xy.com"
2025/12/20 10:30:55 [error] 21#21: *26 open() "/etc/nginx/html/graphql/api" failed (2: No such file or directory), client: 192.168.195.17, server: localhost, request: "POST /graphql/api HTTP/1.1", host: "sub.zpc-xy.com"
2025/12/20 10:30:58 [error] 21#21: *28 open() "/etc/nginx/html/swagger-ui.html" failed (2: No such file or directory), client: 192.168.195.17, server: localhost, request: "GET /swagger-ui.html HTTP/1.1", host: "sub.zpc-xy.com"
2025/12/20 10:31:00 [error] 21#21: *29 open() "/etc/nginx/html/swagger/index.html" failed (2: No such file or directory), client: 192.168.195.17, server: localhost, request: "GET /swagger/index.html HTTP/1.1", host: "sub.zpc-xy.com"
2025/12/20 10:31:01 [error] 21#21: *30 open() "/etc/nginx/html/swagger/swagger-ui.html" failed (2: No such file or directory), client: 192.168.195.17, server: localhost, request: "GET /swagger/swagger-ui.html HTTP/1.1", host: "sub.zpc-xy.com"
2025/12/20 10:31:02 [error] 21#21: *31 open() "/etc/nginx/html/webjars/swagger-ui/index.html" failed (2: No such file or directory), client: 192.168.195.17, server: localhost, request: "GET /webjars/swagger-ui/index.html HTTP/1.1", host: "sub.zpc-xy.com"
2025/12/20 10:31:04 [error] 21#21: *32 open() "/etc/nginx/html/swagger.json" failed (2: No such file or directory), client: 192.168.195.17, server: localhost, request: "GET /swagger.json HTTP/1.1", host: "sub.zpc-xy.com"
2025/12/20 10:31:04 [error] 21#21: *33 open() "/etc/nginx/html/swagger/v1/swagger.json" failed (2: No such file or directory), client: 192.168.195.17, server: localhost, request: "GET /swagger/v1/swagger.json HTTP/1.1", host: "sub.zpc-xy.com"
2025/12/20 10:31:05 [error] 21#21: *34 open() "/etc/nginx/html/v2/api-docs" failed (2: No such file or directory), client: 192.168.195.17, server: localhost, request: "GET /v2/api-docs HTTP/1.1", host: "sub.zpc-xy.com"
2025/12/20 10:31:06 [error] 21#21: *35 open() "/etc/nginx/html/v3/api-docs" failed (2: No such file or directory), client: 192.168.195.17, server: localhost, request: "GET /v3/api-docs HTTP/1.1", host: "sub.zpc-xy.com"
2025/12/20 10:31:10 [error] 21#21: *38 open() "/etc/nginx/html/swagger/v1/swagger.json" failed (2: No such file or directory), client: 192.168.195.17, server: localhost, request: "GET /swagger/v1/swagger.json HTTP/1.1", host: "sub.zpc-xy.com"
2025/12/20 10:31:11 [error] 21#21: *39 open() "/etc/nginx/html/v2/api-docs" failed (2: No such file or directory), client: 192.168.195.17, server: localhost, request: "GET /v2/api-docs HTTP/1.1", host: "sub.zpc-xy.com"
2025/12/20 10:31:12 [error] 21#21: *40 open() "/etc/nginx/html/v3/api-docs" failed (2: No such file or directory), client: 192.168.195.17, server: localhost, request: "GET /v3/api-docs HTTP/1.1", host: "sub.zpc-xy.com"
2025/12/20 10:31:14 [error] 21#21: *45 open() "/etc/nginx/html/swagger.json" failed (2: No such file or directory), client: 192.168.195.17, server: localhost, request: "GET /swagger.json HTTP/1.1", host: "sub.zpc-xy.com"
2025/12/20 10:31:14 [error] 21#21: *46 open() "/etc/nginx/html/swagger/properties.json" failed (2: No such file or directory), client: 192.168.195.17, server: localhost, request: "GET /swagger/properties.json HTTP/1.1", host: "sub.zpc-xy.com"
2025/12/20 10:31:15 [error] 21#21: *47 open() "/etc/nginx/html/@vite/env" failed (2: No such file or directory), client: 192.168.195.17, server: localhost, request: "GET /@vite/env HTTP/1.1", host: "sub.zpc-xy.com"
2025/12/20 10:31:17 [error] 21#21: *48 open() "/etc/nginx/html/actuator/env" failed (2: No such file or directory), client: 192.168.195.17, server: localhost, request: "GET /actuator/env HTTP/1.1", host: "sub.zpc-xy.com"
2025/12/20 10:31:18 [error] 21#21: *49 open() "/etc/nginx/html/server" failed (2: No such file or directory), client: 192.168.195.17, server: localhost, request: "GET /server HTTP/1.1", host: "sub.zpc-xy.com"
2025/12/20 10:31:19 [error] 21#21: *50 access forbidden by rule, client: 192.168.195.17, server: localhost, request: "GET /.vscode/sftp.json HTTP/1.1", host: "sub.zpc-xy.com"
2025/12/20 10:31:21 [error] 21#21: *51 open() "/etc/nginx/html/about" failed (2: No such file or directory), client: 192.168.195.17, server: localhost, request: "GET /about HTTP/1.1", host: "sub.zpc-xy.com"
2025/12/20 10:31:22 [error] 21#21: *52 open() "/etc/nginx/html/debug/default/view" failed (2: No such file or directory), client: 192.168.195.17, server: localhost, request: "GET /debug/default/view?panel=config HTTP/1.1", host: "sub.zpc-xy.com"
2025/12/20 10:31:23 [error] 21#21: *53 open() "/etc/nginx/html/v2/_catalog" failed (2: No such file or directory), client: 192.168.195.17, server: localhost, request: "GET /v2/_catalog HTTP/1.1", host: "sub.zpc-xy.com"
2025/12/20 10:31:24 [error] 21#21: *54 open() "/etc/nginx/html/ecp/Current/exporttool/microsoft.exchange.ediscovery.exporttool.application" failed (2: No such file or directory), client: 192.168.195.17, server: localhost, request: "GET /ecp/Current/exporttool/microsoft.exchange.ediscovery.exporttool.application HTTP/1.1", host: "sub.zpc-xy.com"
2025/12/20 10:31:25 [error] 21#21: *55 open() "/etc/nginx/html/server-status" failed (2: No such file or directory), client: 192.168.195.17, server: localhost, request: "GET /server-status HTTP/1.1", host: "sub.zpc-xy.com"
2025/12/20 10:31:26 [error] 21#21: *56 open() "/etc/nginx/html/login.action" failed (2: No such file or directory), client: 192.168.195.17, server: localhost, request: "GET /login.action HTTP/1.1", host: "sub.zpc-xy.com"
2025/12/20 10:31:27 [error] 21#21: *57 open() "/etc/nginx/html/_all_dbs" failed (2: No such file or directory), client: 192.168.195.17, server: localhost, request: "GET /_all_dbs HTTP/1.1", host: "sub.zpc-xy.com"
2025/12/20 10:31:28 [error] 21#21: *58 access forbidden by rule, client: 192.168.195.17, server: localhost, request: "GET /.DS_Store HTTP/1.1", host: "sub.zpc-xy.com"
2025/12/20 10:31:29 [error] 21#21: *59 access forbidden by rule, client: 192.168.195.17, server: localhost, request: "GET /.env HTTP/1.1", host: "sub.zpc-xy.com"
2025/12/20 10:31:31 [error] 21#21: *60 access forbidden by rule, client: 192.168.195.17, server: localhost, request: "GET /.git/config HTTP/1.1", host: "sub.zpc-xy.com"
2025/12/20 10:31:32 [error] 21#21: *61 open() "/etc/nginx/html/s/730313e25363e2235313e25343/_/;/META-INF/maven/com.atlassian.jira/jira-webapp-dist/pom.properties" failed (2: No such file or directory), client: 192.168.195.17, server: localhost, request: "GET /s/730313e25363e2235313e25343/_/;/META-INF/maven/com.atlassian.jira/jira-webapp-dist/pom.properties HTTP/1.1", host: "sub.zpc-xy.com"
2025/12/20 10:31:33 [error] 21#21: *62 open() "/etc/nginx/html/config.json" failed (2: No such file or directory), client: 192.168.195.17, server: localhost, request: "GET /config.json HTTP/1.1", host: "sub.zpc-xy.com"
2025/12/20 10:31:34 [error] 21#21: *63 open() "/etc/nginx/html/telescope/requests" failed (2: No such file or directory), client: 192.168.195.17, server: localhost, request: "GET /telescope/requests HTTP/1.1", host: "sub.zpc-xy.com"
2025/12/20 10:31:35 [error] 21#21: *64 open() "/etc/nginx/html/info.php" failed (2: No such file or directory), client: 192.168.195.17, server: localhost, request: "GET /info.php HTTP/1.1", host: "sub.zpc-xy.com"
2025/12/20 10:31:45 [error] 21#21: *67 open() "/etc/nginx/html/favicon.ico" failed (2: No such file or directory), client: 192.168.195.17, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "sub.zpc-xy.com"
2025/12/20 10:31:55 [error] 21#21: *77 open() "/etc/nginx/html/vite.svg" failed (2: No such file or directory), client: 192.168.195.17, server: localhost, request: "GET /vite.svg HTTP/1.1", host: "sub.zpc-xy.com", referrer: "https://sub.zpc-xy.com/login"
2025/12/20 10:32:08 [error] 21#21: *83 open() "/etc/nginx/html/favicon.ico" failed (2: No such file or directory), client: 192.168.195.17, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "sub.zpc-xy.com"
2025/12/20 10:32:08 [error] 21#21: *84 open() "/etc/nginx/html/vite.svg" failed (2: No such file or directory), client: 192.168.195.17, server: localhost, request: "GET /vite.svg HTTP/1.1", host: "sub.zpc-xy.com"
2025/12/20 10:32:25 [error] 21#21: *117 open() "/etc/nginx/html/favicon.ico" failed (2: No such file or directory), client: 192.168.195.17, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "sub.zpc-xy.com"
2025/12/20 10:33:01 [error] 21#21: *118 access forbidden by rule, client: 192.168.195.17, server: localhost, request: "GET /.git/config HTTP/1.1", host: "sub.zpc-xy.com"
2025/12/20 10:33:13 [error] 21#21: *123 open() "/etc/nginx/html/vite.svg" failed (2: No such file or directory), client: 192.168.195.17, server: localhost, request: "GET /vite.svg HTTP/1.1", host: "sub.zpc-xy.com", referrer: "https://sub.zpc-xy.com/login"
2025/12/20 10:33:14 [error] 21#21: *122 open() "/etc/nginx/html/vite.svg" failed (2: No such file or directory), client: 192.168.195.17, server: localhost, request: "GET /vite.svg HTTP/1.1", host: "sub.zpc-xy.com", referrer: "https://sub.zpc-xy.com/login"
2025/12/20 10:33:19 [error] 22#22: *134 open() "/etc/nginx/html/vite.svg" failed (2: No such file or directory), client: 192.168.195.17, server: localhost, request: "GET /vite.svg HTTP/1.1", host: "sub.zpc-xy.com", referrer: "http://sub.zpc-xy.com/login"
2025/12/20 10:33:19 [error] 21#21: *133 open() "/etc/nginx/html/vite.svg" failed (2: No such file or directory), client: 192.168.195.17, server: localhost, request: "GET /vite.svg HTTP/1.1", host: "sub.zpc-xy.com", referrer: "http://sub.zpc-xy.com/login"
2025/12/20 10:33:26 [error] 21#21: *137 open() "/etc/nginx/html/favicon.ico" failed (2: No such file or directory), client: 192.168.195.17, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "sub.zpc-xy.com"
2025/12/20 10:33:45 [error] 21#21: *142 open() "/etc/nginx/html/_next" failed (2: No such file or directory), client: 192.168.195.17, server: localhost, request: "GET /_next HTTP/1.1", host: "sub.zpc-xy.com"

View File

189
server/deploy.sh Executable file
View File

@ -0,0 +1,189 @@
#!/bin/bash
# ============================================
# 海外预约系统 - 自动部署脚本
# ============================================
set -e # 遇到错误立即退出
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 项目根目录
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
# 检测 docker compose 命令
if docker compose version > /dev/null 2>&1; then
DOCKER_COMPOSE="docker compose"
elif docker-compose version > /dev/null 2>&1; then
DOCKER_COMPOSE="docker-compose"
else
echo -e "${RED}错误: 未找到 docker compose 命令${NC}"
exit 1
fi
echo -e "${BLUE}============================================${NC}"
echo -e "${BLUE} 海外预约系统 - 自动部署脚本${NC}"
echo -e "${BLUE}============================================${NC}"
echo ""
# 检查 Docker 是否运行
check_docker() {
echo -e "${YELLOW}[1/5] 检查 Docker 环境...${NC}"
if ! docker info > /dev/null 2>&1; then
echo -e "${RED}错误: Docker 未运行,请先启动 Docker${NC}"
exit 1
fi
echo -e "${GREEN}✓ Docker 运行正常 (使用 $DOCKER_COMPOSE)${NC}"
}
# 检查环境变量文件
check_env() {
echo -e "${YELLOW}[2/5] 检查环境配置...${NC}"
if [ ! -f "$SCRIPT_DIR/.env" ]; then
echo -e "${YELLOW} .env 文件不存在,从模板创建...${NC}"
cp "$SCRIPT_DIR/.env.example" "$SCRIPT_DIR/.env"
echo -e "${YELLOW} 请编辑 $SCRIPT_DIR/.env 配置数据库等信息${NC}"
echo -e "${RED} 首次部署请先配置 .env 文件后重新运行脚本${NC}"
exit 1
fi
echo -e "${GREEN}✓ 环境配置已就绪${NC}"
}
# 构建 Admin 前端
build_admin() {
echo -e "${YELLOW}[3/5] 构建 Admin 前端...${NC}"
cd "$PROJECT_ROOT/admin"
# 检查 node_modules
if [ ! -d "node_modules" ]; then
echo -e "${YELLOW} 安装依赖...${NC}"
npm install
fi
echo -e "${YELLOW} 执行构建...${NC}"
npm run build
# 复制构建产物
echo -e "${YELLOW} 复制构建产物到 server/admin-dist...${NC}"
rm -rf "$SCRIPT_DIR/admin-dist"
cp -r dist "$SCRIPT_DIR/admin-dist"
echo -e "${GREEN}✓ Admin 构建完成${NC}"
}
# 构建并启动 Docker 服务
deploy_docker() {
echo -e "${YELLOW}[4/5] 构建并启动 Docker 服务...${NC}"
cd "$SCRIPT_DIR"
# 停止旧容器(如果存在)
echo -e "${YELLOW} 停止旧容器...${NC}"
$DOCKER_COMPOSE down 2>/dev/null || true
# 构建并启动
echo -e "${YELLOW} 构建镜像并启动容器...${NC}"
$DOCKER_COMPOSE up -d --build
echo -e "${GREEN}✓ Docker 服务已启动${NC}"
}
# 检查服务状态
check_status() {
echo -e "${YELLOW}[5/5] 检查服务状态...${NC}"
sleep 3
# 检查容器状态
echo ""
$DOCKER_COMPOSE ps
echo ""
# 等待服务就绪
echo -e "${YELLOW} 等待服务就绪...${NC}"
for i in {1..30}; do
if curl -s http://localhost:2701/health > /dev/null 2>&1; then
echo -e "${GREEN}✓ 服务已就绪${NC}"
break
fi
if [ $i -eq 30 ]; then
echo -e "${YELLOW} 服务启动中,请稍后检查...${NC}"
fi
sleep 1
done
}
# 显示访问信息
show_info() {
echo ""
echo -e "${GREEN}============================================${NC}"
echo -e "${GREEN} 部署完成!${NC}"
echo -e "${GREEN}============================================${NC}"
echo ""
echo -e " 访问地址:"
echo -e " Admin 后台: ${BLUE}http://localhost:2701/admin${NC}"
echo -e " API 接口: ${BLUE}http://localhost:2701/api/v1${NC}"
echo -e " 健康检查: ${BLUE}http://localhost:2701/health${NC}"
echo ""
echo -e " 常用命令:"
echo -e " 查看日志: ${YELLOW}cd server && $DOCKER_COMPOSE logs -f${NC}"
echo -e " 停止服务: ${YELLOW}cd server && $DOCKER_COMPOSE down${NC}"
echo -e " 重启服务: ${YELLOW}cd server && $DOCKER_COMPOSE restart${NC}"
echo ""
}
# 主流程
main() {
check_docker
check_env
build_admin
deploy_docker
check_status
show_info
}
# 处理命令行参数
case "${1:-}" in
--skip-build)
echo -e "${YELLOW}跳过 Admin 构建${NC}"
check_docker
check_env
deploy_docker
check_status
show_info
;;
--restart)
echo -e "${YELLOW}重启服务${NC}"
cd "$SCRIPT_DIR"
$DOCKER_COMPOSE restart
check_status
;;
--stop)
echo -e "${YELLOW}停止服务${NC}"
cd "$SCRIPT_DIR"
$DOCKER_COMPOSE down
echo -e "${GREEN}✓ 服务已停止${NC}"
;;
--logs)
cd "$SCRIPT_DIR"
$DOCKER_COMPOSE logs -f
;;
--help)
echo "用法: ./deploy.sh [选项]"
echo ""
echo "选项:"
echo " (无参数) 完整部署(构建 Admin + 启动服务)"
echo " --skip-build 跳过 Admin 构建,直接部署"
echo " --restart 重启服务"
echo " --stop 停止服务"
echo " --logs 查看日志"
echo " --help 显示帮助"
;;
*)
main
;;
esac

67
server/docker-compose.yml Normal file
View File

@ -0,0 +1,67 @@
# 生产环境 Docker Compose 配置
# 使用外部 MySQL 和 Redis 服务
# 只暴露一个端口SSL 由外部代理处理
services:
# Backend API Service
api:
build:
context: ../backend
dockerfile: Dockerfile
container_name: overseas-appointment-api
restart: unless-stopped
expose:
- "3000"
environment:
- NODE_ENV=production
- PORT=3000
- DB_HOST=${DB_HOST}
- DB_PORT=${DB_PORT:-3306}
- DB_NAME=${DB_NAME}
- DB_USER=${DB_USER}
- DB_PASSWORD=${DB_PASSWORD}
- REDIS_HOST=${REDIS_HOST}
- REDIS_PORT=${REDIS_PORT:-6379}
- REDIS_PASSWORD=${REDIS_PASSWORD:-}
- JWT_SECRET=${JWT_SECRET}
- JWT_EXPIRES_IN=${JWT_EXPIRES_IN:-7d}
- JWT_REFRESH_EXPIRES_IN=${JWT_REFRESH_EXPIRES_IN:-30d}
- WECHAT_APP_ID=${WECHAT_APP_ID:-}
- WECHAT_APP_SECRET=${WECHAT_APP_SECRET:-}
- UPLOAD_PATH=/app/uploads
- MAX_FILE_SIZE=${MAX_FILE_SIZE:-5242880}
- RATE_LIMIT_WINDOW=${RATE_LIMIT_WINDOW:-60000}
- RATE_LIMIT_MAX=${RATE_LIMIT_MAX:-100}
- LOG_LEVEL=${LOG_LEVEL:-info}
volumes:
- ./data/uploads:/app/uploads
- ./data/logs/api:/app/logs
networks:
- app-network
healthcheck:
test: ["CMD", "node", "-e", "require('http').get('http://localhost:3000/health', (r) => process.exit(r.statusCode === 200 ? 0 : 1))"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
# Nginx - 托管 Admin 静态文件 + 代理 API
nginx:
image: nginx:alpine
container_name: overseas-appointment-nginx
restart: unless-stopped
ports:
- "${APP_PORT:-2701}:80"
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
- ./nginx/conf.d:/etc/nginx/conf.d:ro
- ./admin-dist:/usr/share/nginx/html/admin:ro
- ./data/logs/nginx:/var/log/nginx
depends_on:
- api
networks:
- app-network
networks:
app-network:
driver: bridge

View File

@ -0,0 +1,96 @@
server {
listen 80;
server_name localhost;
# 使用相对路径重定向,避免端口映射问题
absolute_redirect off;
# Client body size limit
client_max_body_size 10M;
# Admin 后台静态文件
location /admin {
alias /usr/share/nginx/html/admin;
index index.html;
try_files $uri $uri/ /admin/index.html;
# 缓存静态资源
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
}
# API 接口代理
location /api/ {
limit_req zone=api_limit burst=20 nodelay;
limit_conn conn_limit 10;
proxy_pass http://api_servers;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $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_cache_bypass $http_upgrade;
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
# Health check
location /health {
proxy_pass http://api_servers;
proxy_http_version 1.1;
proxy_set_header Host $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;
}
# API 文档
location /api-docs {
proxy_pass http://api_servers;
proxy_http_version 1.1;
proxy_set_header Host $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;
}
# 上传文件访问
location /uploads/ {
proxy_pass http://api_servers;
proxy_http_version 1.1;
proxy_set_header Host $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_cache_valid 200 1d;
expires 1d;
add_header Cache-Control "public, immutable";
}
# 根路径重定向到 admin
location = / {
return 302 /admin;
}
# 禁止访问隐藏文件
location ~ /\. {
deny all;
access_log off;
log_not_found off;
}
# 错误页面
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
internal;
}
}

51
server/nginx/nginx.conf Normal file
View File

@ -0,0 +1,51 @@
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
use epoll;
multi_accept on;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Logging format
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" '
'rt=$request_time';
access_log /var/log/nginx/access.log main;
# Performance optimizations
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# Gzip compression
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_types text/plain text/css text/xml application/json application/javascript
application/xml application/xml+rss text/javascript;
# Rate limiting zones
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;
limit_conn_zone $binary_remote_addr zone=conn_limit:10m;
# Upstream API server
upstream api_servers {
least_conn;
server api:3000 weight=1 max_fails=3 fail_timeout=30s;
keepalive 32;
}
include /etc/nginx/conf.d/*.conf;
}