Merge branch 'main' of http://192.168.195.14:3000/outsource/appointment_system
This commit is contained in:
commit
edf68c49c5
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -6,3 +6,4 @@ node-modules
|
|||
/node_modules/
|
||||
**/dist/
|
||||
**/node-modules/
|
||||
server/admin-dist/*
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
|
|||
import path from 'path'
|
||||
|
||||
export default defineConfig({
|
||||
base: '/admin/',
|
||||
plugins: [
|
||||
vue(),
|
||||
AutoImport({
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -56,6 +56,6 @@
|
|||
"supertest": "^6.3.3"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18.0.0"
|
||||
"node": ">=24.0.0"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
53
server/.env
Normal file
53
server/.env
Normal 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
52
server/.env.example
Normal 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
112
server/Makefile
Normal 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
193
server/README.md
Normal 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
|
||||
```
|
||||
0
server/data/logs/api/.gitkeep
Normal file
0
server/data/logs/api/.gitkeep
Normal file
0
server/data/logs/nginx/.gitkeep
Normal file
0
server/data/logs/nginx/.gitkeep
Normal file
209
server/data/logs/nginx/access.log
Normal file
209
server/data/logs/nginx/access.log
Normal 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
|
||||
51
server/data/logs/nginx/error.log
Normal file
51
server/data/logs/nginx/error.log
Normal 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"
|
||||
0
server/data/uploads/.gitkeep
Normal file
0
server/data/uploads/.gitkeep
Normal file
189
server/deploy.sh
Executable file
189
server/deploy.sh
Executable 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
67
server/docker-compose.yml
Normal 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
|
||||
96
server/nginx/conf.d/default.conf
Normal file
96
server/nginx/conf.d/default.conf
Normal 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
51
server/nginx/nginx.conf
Normal 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;
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user