f
This commit is contained in:
@@ -0,0 +1,11 @@
|
||||
apiVersion: 1
|
||||
|
||||
providers:
|
||||
- name: "default"
|
||||
orgId: 1
|
||||
folder: ""
|
||||
type: file
|
||||
disableDeletion: false
|
||||
editable: true
|
||||
options:
|
||||
path: /etc/grafana/provisioning/dashboards
|
||||
@@ -0,0 +1,198 @@
|
||||
{
|
||||
"annotations": {
|
||||
"list": [
|
||||
{
|
||||
"builtIn": 1,
|
||||
"datasource": "-- Grafana --",
|
||||
"enable": true,
|
||||
"hide": true,
|
||||
"iconColor": "rgba(0, 211, 255, 1)",
|
||||
"name": "Annotations & Alerts",
|
||||
"type": "dashboard"
|
||||
}
|
||||
]
|
||||
},
|
||||
"editable": true,
|
||||
"gnetId": null,
|
||||
"graphTooltip": 0,
|
||||
"id": null,
|
||||
"links": [],
|
||||
"panels": [
|
||||
{
|
||||
"datasource": "Jaeger",
|
||||
"fieldConfig": {
|
||||
"defaults": {
|
||||
"custom": {},
|
||||
"mappings": [],
|
||||
"thresholds": {
|
||||
"mode": "absolute",
|
||||
"steps": [
|
||||
{
|
||||
"color": "green",
|
||||
"value": null
|
||||
},
|
||||
{
|
||||
"color": "red",
|
||||
"value": 80
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"overrides": []
|
||||
},
|
||||
"gridPos": {
|
||||
"h": 8,
|
||||
"w": 12,
|
||||
"x": 0,
|
||||
"y": 0
|
||||
},
|
||||
"id": 1,
|
||||
"options": {
|
||||
"showThresholdLabels": false,
|
||||
"showThresholdMarkers": true
|
||||
},
|
||||
"pluginVersion": "7.5.0",
|
||||
"targets": [
|
||||
{
|
||||
"query": "hyapi-server",
|
||||
"refId": "A"
|
||||
}
|
||||
],
|
||||
"title": "HYAPI服务链路追踪",
|
||||
"type": "jaeger"
|
||||
},
|
||||
{
|
||||
"datasource": "Prometheus",
|
||||
"fieldConfig": {
|
||||
"defaults": {
|
||||
"custom": {
|
||||
"align": null,
|
||||
"filterable": false
|
||||
},
|
||||
"mappings": [],
|
||||
"thresholds": {
|
||||
"mode": "absolute",
|
||||
"steps": [
|
||||
{
|
||||
"color": "green",
|
||||
"value": null
|
||||
},
|
||||
{
|
||||
"color": "red",
|
||||
"value": 80
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"overrides": []
|
||||
},
|
||||
"gridPos": {
|
||||
"h": 8,
|
||||
"w": 12,
|
||||
"x": 12,
|
||||
"y": 0
|
||||
},
|
||||
"id": 2,
|
||||
"options": {
|
||||
"colorMode": "value",
|
||||
"graphMode": "area",
|
||||
"justifyMode": "auto",
|
||||
"orientation": "auto",
|
||||
"reduceOptions": {
|
||||
"values": false,
|
||||
"calcs": ["lastNotNull"],
|
||||
"fields": ""
|
||||
},
|
||||
"textMode": "auto"
|
||||
},
|
||||
"pluginVersion": "7.5.0",
|
||||
"targets": [
|
||||
{
|
||||
"expr": "rate(http_requests_total[5m])",
|
||||
"interval": "",
|
||||
"legendFormat": "{{method}} {{path}}",
|
||||
"refId": "A"
|
||||
}
|
||||
],
|
||||
"title": "HTTP请求速率",
|
||||
"type": "stat"
|
||||
},
|
||||
{
|
||||
"datasource": "Prometheus",
|
||||
"fieldConfig": {
|
||||
"defaults": {
|
||||
"custom": {},
|
||||
"mappings": [],
|
||||
"thresholds": {
|
||||
"mode": "absolute",
|
||||
"steps": [
|
||||
{
|
||||
"color": "green",
|
||||
"value": null
|
||||
},
|
||||
{
|
||||
"color": "yellow",
|
||||
"value": 0.5
|
||||
},
|
||||
{
|
||||
"color": "red",
|
||||
"value": 1
|
||||
}
|
||||
]
|
||||
},
|
||||
"unit": "s"
|
||||
},
|
||||
"overrides": []
|
||||
},
|
||||
"gridPos": {
|
||||
"h": 8,
|
||||
"w": 24,
|
||||
"x": 0,
|
||||
"y": 8
|
||||
},
|
||||
"id": 3,
|
||||
"options": {
|
||||
"displayMode": "list",
|
||||
"orientation": "horizontal",
|
||||
"reduceOptions": {
|
||||
"values": false,
|
||||
"calcs": ["lastNotNull"],
|
||||
"fields": ""
|
||||
},
|
||||
"showUnfilled": true
|
||||
},
|
||||
"pluginVersion": "7.5.0",
|
||||
"targets": [
|
||||
{
|
||||
"expr": "histogram_quantile(0.95, rate(http_request_duration_seconds_bucket[5m]))",
|
||||
"interval": "",
|
||||
"legendFormat": "95th percentile - {{method}} {{path}}",
|
||||
"refId": "A"
|
||||
},
|
||||
{
|
||||
"expr": "histogram_quantile(0.50, rate(http_request_duration_seconds_bucket[5m]))",
|
||||
"interval": "",
|
||||
"legendFormat": "50th percentile - {{method}} {{path}}",
|
||||
"refId": "B"
|
||||
}
|
||||
],
|
||||
"title": "HTTP请求延迟分布",
|
||||
"type": "bargauge"
|
||||
}
|
||||
],
|
||||
"schemaVersion": 27,
|
||||
"style": "dark",
|
||||
"tags": ["jaeger", "tracing", "hyapi"],
|
||||
"templating": {
|
||||
"list": []
|
||||
},
|
||||
"time": {
|
||||
"from": "now-6h",
|
||||
"to": "now"
|
||||
},
|
||||
"timepicker": {},
|
||||
"timezone": "",
|
||||
"title": "HYAPI链路追踪监控",
|
||||
"uid": "hyapi-tracing",
|
||||
"version": 1
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
apiVersion: 1
|
||||
|
||||
datasources:
|
||||
- name: Prometheus
|
||||
type: prometheus
|
||||
access: proxy
|
||||
url: http://prometheus:9090
|
||||
isDefault: true
|
||||
editable: true
|
||||
|
||||
- name: Jaeger
|
||||
type: jaeger
|
||||
access: proxy
|
||||
url: http://jaeger:16686
|
||||
isDefault: false
|
||||
editable: true
|
||||
jsonData:
|
||||
httpMethod: GET
|
||||
# 启用节点图功能
|
||||
nodeGraph:
|
||||
enabled: true
|
||||
# 启用追踪链路图
|
||||
traceQuery:
|
||||
timeShiftEnabled: true
|
||||
spanStartTimeShift: "1h"
|
||||
spanEndTimeShift: "1h"
|
||||
# 配置标签
|
||||
tracesToLogs:
|
||||
datasourceUid: "loki"
|
||||
tags: ["job", "instance", "pod", "namespace"]
|
||||
mappedTags: [{ key: "service.name", value: "service" }]
|
||||
mapTagNamesEnabled: false
|
||||
spanStartTimeShift: "1h"
|
||||
spanEndTimeShift: "1h"
|
||||
filterByTraceID: false
|
||||
filterBySpanID: false
|
||||
109
deployments/docker/jaeger-sampling-prod.json
Normal file
109
deployments/docker/jaeger-sampling-prod.json
Normal file
@@ -0,0 +1,109 @@
|
||||
{
|
||||
"service_strategies": [
|
||||
{
|
||||
"service": "hyapi-server",
|
||||
"type": "probabilistic",
|
||||
"param": 0.01,
|
||||
"max_traces_per_second": 50,
|
||||
"operation_strategies": [
|
||||
{
|
||||
"operation": "GET /health",
|
||||
"type": "probabilistic",
|
||||
"param": 0.001
|
||||
},
|
||||
{
|
||||
"operation": "GET /metrics",
|
||||
"type": "probabilistic",
|
||||
"param": 0.001
|
||||
},
|
||||
{
|
||||
"operation": "GET /api/v1/health",
|
||||
"type": "probabilistic",
|
||||
"param": 0.001
|
||||
},
|
||||
{
|
||||
"operation": "POST /api/v1/users/register",
|
||||
"type": "probabilistic",
|
||||
"param": 0.2
|
||||
},
|
||||
{
|
||||
"operation": "POST /api/v1/users/login",
|
||||
"type": "probabilistic",
|
||||
"param": 0.1
|
||||
},
|
||||
{
|
||||
"operation": "POST /api/v1/users/logout",
|
||||
"type": "probabilistic",
|
||||
"param": 0.05
|
||||
},
|
||||
{
|
||||
"operation": "POST /api/v1/users/refresh",
|
||||
"type": "probabilistic",
|
||||
"param": 0.05
|
||||
},
|
||||
{
|
||||
"operation": "GET /api/v1/users/profile",
|
||||
"type": "probabilistic",
|
||||
"param": 0.02
|
||||
},
|
||||
{
|
||||
"operation": "PUT /api/v1/users/profile",
|
||||
"type": "probabilistic",
|
||||
"param": 0.1
|
||||
},
|
||||
{
|
||||
"operation": "POST /api/v1/sms/send",
|
||||
"type": "probabilistic",
|
||||
"param": 0.3
|
||||
},
|
||||
{
|
||||
"operation": "POST /api/v1/sms/verify",
|
||||
"type": "probabilistic",
|
||||
"param": 0.3
|
||||
},
|
||||
{
|
||||
"operation": "error",
|
||||
"type": "probabilistic",
|
||||
"param": 1.0
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"default_strategy": {
|
||||
"type": "probabilistic",
|
||||
"param": 0.01,
|
||||
"max_traces_per_second": 50
|
||||
},
|
||||
"per_operation_strategies": [
|
||||
{
|
||||
"operation": "health_check",
|
||||
"type": "probabilistic",
|
||||
"param": 0.001
|
||||
},
|
||||
{
|
||||
"operation": "metrics",
|
||||
"type": "probabilistic",
|
||||
"param": 0.001
|
||||
},
|
||||
{
|
||||
"operation": "database_query",
|
||||
"type": "probabilistic",
|
||||
"param": 0.01
|
||||
},
|
||||
{
|
||||
"operation": "redis_operation",
|
||||
"type": "probabilistic",
|
||||
"param": 0.005
|
||||
},
|
||||
{
|
||||
"operation": "external_api_call",
|
||||
"type": "probabilistic",
|
||||
"param": 0.2
|
||||
},
|
||||
{
|
||||
"operation": "error",
|
||||
"type": "probabilistic",
|
||||
"param": 1.0
|
||||
}
|
||||
]
|
||||
}
|
||||
109
deployments/docker/jaeger-sampling.json
Normal file
109
deployments/docker/jaeger-sampling.json
Normal file
@@ -0,0 +1,109 @@
|
||||
{
|
||||
"service_strategies": [
|
||||
{
|
||||
"service": "hyapi-server",
|
||||
"type": "probabilistic",
|
||||
"param": 0.1,
|
||||
"max_traces_per_second": 200,
|
||||
"operation_strategies": [
|
||||
{
|
||||
"operation": "GET /health",
|
||||
"type": "probabilistic",
|
||||
"param": 0.01
|
||||
},
|
||||
{
|
||||
"operation": "GET /metrics",
|
||||
"type": "probabilistic",
|
||||
"param": 0.01
|
||||
},
|
||||
{
|
||||
"operation": "GET /api/v1/health",
|
||||
"type": "probabilistic",
|
||||
"param": 0.01
|
||||
},
|
||||
{
|
||||
"operation": "POST /api/v1/users/register",
|
||||
"type": "probabilistic",
|
||||
"param": 0.8
|
||||
},
|
||||
{
|
||||
"operation": "POST /api/v1/users/login",
|
||||
"type": "probabilistic",
|
||||
"param": 0.8
|
||||
},
|
||||
{
|
||||
"operation": "POST /api/v1/users/logout",
|
||||
"type": "probabilistic",
|
||||
"param": 0.3
|
||||
},
|
||||
{
|
||||
"operation": "POST /api/v1/users/refresh",
|
||||
"type": "probabilistic",
|
||||
"param": 0.3
|
||||
},
|
||||
{
|
||||
"operation": "GET /api/v1/users/profile",
|
||||
"type": "probabilistic",
|
||||
"param": 0.2
|
||||
},
|
||||
{
|
||||
"operation": "PUT /api/v1/users/profile",
|
||||
"type": "probabilistic",
|
||||
"param": 0.6
|
||||
},
|
||||
{
|
||||
"operation": "POST /api/v1/sms/send",
|
||||
"type": "probabilistic",
|
||||
"param": 0.9
|
||||
},
|
||||
{
|
||||
"operation": "POST /api/v1/sms/verify",
|
||||
"type": "probabilistic",
|
||||
"param": 0.9
|
||||
},
|
||||
{
|
||||
"operation": "error",
|
||||
"type": "probabilistic",
|
||||
"param": 1.0
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"default_strategy": {
|
||||
"type": "probabilistic",
|
||||
"param": 0.1,
|
||||
"max_traces_per_second": 200
|
||||
},
|
||||
"per_operation_strategies": [
|
||||
{
|
||||
"operation": "health_check",
|
||||
"type": "probabilistic",
|
||||
"param": 0.01
|
||||
},
|
||||
{
|
||||
"operation": "metrics",
|
||||
"type": "probabilistic",
|
||||
"param": 0.01
|
||||
},
|
||||
{
|
||||
"operation": "database_query",
|
||||
"type": "probabilistic",
|
||||
"param": 0.1
|
||||
},
|
||||
{
|
||||
"operation": "redis_operation",
|
||||
"type": "probabilistic",
|
||||
"param": 0.05
|
||||
},
|
||||
{
|
||||
"operation": "external_api_call",
|
||||
"type": "probabilistic",
|
||||
"param": 0.8
|
||||
},
|
||||
{
|
||||
"operation": "error",
|
||||
"type": "probabilistic",
|
||||
"param": 1.0
|
||||
}
|
||||
]
|
||||
}
|
||||
46
deployments/docker/jaeger-ui-config.json
Normal file
46
deployments/docker/jaeger-ui-config.json
Normal file
@@ -0,0 +1,46 @@
|
||||
{
|
||||
"monitor": {
|
||||
"menuEnabled": true
|
||||
},
|
||||
"dependencies": {
|
||||
"menuEnabled": true
|
||||
},
|
||||
"archiveEnabled": true,
|
||||
"tracking": {
|
||||
"gaID": null,
|
||||
"trackErrors": false
|
||||
},
|
||||
"menu": [
|
||||
{
|
||||
"label": "HYAPI 文档",
|
||||
"url": "http://localhost:3000/docs",
|
||||
"anchorTarget": "_blank"
|
||||
},
|
||||
{
|
||||
"label": "Grafana 监控",
|
||||
"url": "http://localhost:3000",
|
||||
"anchorTarget": "_blank"
|
||||
},
|
||||
{
|
||||
"label": "Prometheus 指标",
|
||||
"url": "http://localhost:9090",
|
||||
"anchorTarget": "_blank"
|
||||
}
|
||||
],
|
||||
"search": {
|
||||
"maxLookback": {
|
||||
"label": "2 days",
|
||||
"value": "2d"
|
||||
},
|
||||
"maxLimit": 1500
|
||||
},
|
||||
"scripts": [],
|
||||
"linkPatterns": [
|
||||
{
|
||||
"type": "process",
|
||||
"key": "jaeger.version",
|
||||
"url": "https://github.com/jaegertracing/jaeger/releases/tag/#{jaeger.version}",
|
||||
"text": "#{jaeger.version} release notes"
|
||||
}
|
||||
]
|
||||
}
|
||||
234
deployments/docker/nginx.conf
Normal file
234
deployments/docker/nginx.conf
Normal file
@@ -0,0 +1,234 @@
|
||||
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;
|
||||
|
||||
# 日志格式
|
||||
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 uct="$upstream_connect_time" '
|
||||
'uht="$upstream_header_time" urt="$upstream_response_time"';
|
||||
|
||||
access_log /var/log/nginx/access.log main;
|
||||
|
||||
# 基本设置
|
||||
sendfile on;
|
||||
tcp_nopush on;
|
||||
tcp_nodelay on;
|
||||
keepalive_timeout 65;
|
||||
types_hash_max_size 2048;
|
||||
server_tokens off;
|
||||
|
||||
# 客户端设置
|
||||
client_max_body_size 10M;
|
||||
client_body_timeout 60s;
|
||||
client_header_timeout 60s;
|
||||
|
||||
# Gzip 压缩
|
||||
gzip on;
|
||||
gzip_vary on;
|
||||
gzip_proxied any;
|
||||
gzip_comp_level 6;
|
||||
gzip_types
|
||||
text/plain
|
||||
text/css
|
||||
text/xml
|
||||
text/javascript
|
||||
application/json
|
||||
application/javascript
|
||||
application/xml+rss
|
||||
application/atom+xml;
|
||||
|
||||
# 上游服务器配置
|
||||
upstream hyapi_backend {
|
||||
server hyapi-app:8080;
|
||||
keepalive 32;
|
||||
}
|
||||
|
||||
upstream grafana_backend {
|
||||
server grafana:3000;
|
||||
keepalive 16;
|
||||
}
|
||||
|
||||
upstream prometheus_backend {
|
||||
server prometheus:9090;
|
||||
keepalive 16;
|
||||
}
|
||||
|
||||
upstream minio_backend {
|
||||
server minio:9000;
|
||||
keepalive 16;
|
||||
}
|
||||
|
||||
upstream minio_console_backend {
|
||||
server minio:9001;
|
||||
keepalive 16;
|
||||
}
|
||||
|
||||
upstream jaeger_backend {
|
||||
server jaeger:16686;
|
||||
keepalive 16;
|
||||
}
|
||||
|
||||
upstream pgadmin_backend {
|
||||
server pgadmin:80;
|
||||
keepalive 16;
|
||||
}
|
||||
|
||||
# HTTP 服务器配置
|
||||
server {
|
||||
listen 80;
|
||||
server_name _;
|
||||
|
||||
# 健康检查端点
|
||||
location /health {
|
||||
proxy_pass http://hyapi_backend/health;
|
||||
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/ {
|
||||
proxy_pass http://hyapi_backend;
|
||||
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_connect_timeout 30s;
|
||||
proxy_send_timeout 60s;
|
||||
proxy_read_timeout 60s;
|
||||
|
||||
# 缓冲设置
|
||||
proxy_buffering on;
|
||||
proxy_buffer_size 4k;
|
||||
proxy_buffers 8 4k;
|
||||
}
|
||||
|
||||
# Swagger 文档
|
||||
location /swagger/ {
|
||||
proxy_pass http://hyapi_backend;
|
||||
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 = / {
|
||||
return 301 /swagger/index.html;
|
||||
}
|
||||
|
||||
# Grafana 仪表盘
|
||||
location /grafana/ {
|
||||
proxy_pass http://grafana_backend/;
|
||||
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;
|
||||
|
||||
# WebSocket 支持
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
}
|
||||
|
||||
# Prometheus 监控
|
||||
location /prometheus/ {
|
||||
proxy_pass http://prometheus_backend/;
|
||||
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;
|
||||
}
|
||||
|
||||
# Jaeger 链路追踪
|
||||
location /jaeger/ {
|
||||
proxy_pass http://jaeger_backend/;
|
||||
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;
|
||||
}
|
||||
|
||||
# MinIO 对象存储 API
|
||||
location /minio/ {
|
||||
proxy_pass http://minio_backend/;
|
||||
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;
|
||||
|
||||
# MinIO 需要的特殊头
|
||||
proxy_set_header X-Forwarded-Host $host;
|
||||
client_max_body_size 1000M;
|
||||
}
|
||||
|
||||
# MinIO 控制台
|
||||
location /minio-console/ {
|
||||
proxy_pass http://minio_console_backend/;
|
||||
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;
|
||||
|
||||
# WebSocket 支持
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
}
|
||||
|
||||
# pgAdmin 数据库管理
|
||||
location /pgadmin/ {
|
||||
proxy_pass http://pgadmin_backend/;
|
||||
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_set_header X-Script-Name /pgadmin;
|
||||
}
|
||||
|
||||
# 限制某些路径的访问
|
||||
location ~* \.(git|env|log)$ {
|
||||
deny all;
|
||||
return 404;
|
||||
}
|
||||
}
|
||||
|
||||
# HTTPS 服务器配置 (可选,需要SSL证书)
|
||||
# server {
|
||||
# listen 443 ssl http2;
|
||||
# server_name your-domain.com;
|
||||
|
||||
# ssl_certificate /etc/nginx/ssl/server.crt;
|
||||
# ssl_certificate_key /etc/nginx/ssl/server.key;
|
||||
# ssl_protocols TLSv1.2 TLSv1.3;
|
||||
# ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384;
|
||||
# ssl_prefer_server_ciphers off;
|
||||
|
||||
# # HSTS
|
||||
# add_header Strict-Transport-Security "max-age=63072000" always;
|
||||
|
||||
# location / {
|
||||
# proxy_pass http://hyapi_backend;
|
||||
# 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;
|
||||
# }
|
||||
# }
|
||||
}
|
||||
1
deployments/docker/pgadmin-passfile
Normal file
1
deployments/docker/pgadmin-passfile
Normal file
@@ -0,0 +1 @@
|
||||
postgres:5432:hyapi_dev:postgres:Qm8kZ3nR7pL4wT9y
|
||||
15
deployments/docker/pgadmin-servers.json
Normal file
15
deployments/docker/pgadmin-servers.json
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"Servers": {
|
||||
"1": {
|
||||
"Name": "HYAPI PostgreSQL",
|
||||
"Group": "Development Servers",
|
||||
"Host": "postgres",
|
||||
"Port": 5432,
|
||||
"MaintenanceDB": "hyapi_dev",
|
||||
"Username": "postgres",
|
||||
"PassFile": "/var/lib/pgadmin/passfile",
|
||||
"SSLMode": "prefer",
|
||||
"Comment": "HYAPI Development Database"
|
||||
}
|
||||
}
|
||||
}
|
||||
28
deployments/docker/postgresql.conf
Normal file
28
deployments/docker/postgresql.conf
Normal file
@@ -0,0 +1,28 @@
|
||||
# PostgreSQL配置文件
|
||||
# 时区设置
|
||||
timezone = 'Asia/Shanghai'
|
||||
log_timezone = 'Asia/Shanghai'
|
||||
|
||||
# 字符编码
|
||||
client_encoding = 'UTF8'
|
||||
|
||||
# 连接设置
|
||||
max_connections = 100
|
||||
shared_buffers = 128MB
|
||||
|
||||
# 日志设置
|
||||
log_destination = 'stderr'
|
||||
logging_collector = on
|
||||
log_directory = 'log'
|
||||
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
|
||||
log_rotation_age = 1d
|
||||
log_rotation_size = 100MB
|
||||
|
||||
# 性能设置
|
||||
effective_cache_size = 1GB
|
||||
work_mem = 4MB
|
||||
maintenance_work_mem = 64MB
|
||||
|
||||
# 查询优化
|
||||
random_page_cost = 1.1
|
||||
effective_io_concurrency = 200
|
||||
39
deployments/docker/prometheus.yml
Normal file
39
deployments/docker/prometheus.yml
Normal file
@@ -0,0 +1,39 @@
|
||||
global:
|
||||
scrape_interval: 15s
|
||||
evaluation_interval: 15s
|
||||
|
||||
rule_files:
|
||||
# - "first_rules.yml"
|
||||
# - "second_rules.yml"
|
||||
|
||||
scrape_configs:
|
||||
# Prometheus 自身监控
|
||||
- job_name: "prometheus"
|
||||
static_configs:
|
||||
- targets: ["localhost:9090"]
|
||||
|
||||
# HYAPI 应用监控
|
||||
- job_name: "hyapi-server"
|
||||
static_configs:
|
||||
- targets: ["host.docker.internal:8080"]
|
||||
metrics_path: "/metrics"
|
||||
scrape_interval: 10s
|
||||
|
||||
# PostgreSQL 监控 (如果启用了 postgres_exporter)
|
||||
- job_name: "postgres"
|
||||
static_configs:
|
||||
- targets: ["postgres:5432"]
|
||||
scrape_interval: 30s
|
||||
|
||||
# Redis 监控 (如果启用了 redis_exporter)
|
||||
- job_name: "redis"
|
||||
static_configs:
|
||||
- targets: ["redis:6379"]
|
||||
scrape_interval: 30s
|
||||
|
||||
# Docker 容器监控 (如果启用了 cadvisor)
|
||||
- job_name: "docker"
|
||||
static_configs:
|
||||
- targets: ["host.docker.internal:8080"]
|
||||
metrics_path: "/docker/metrics"
|
||||
scrape_interval: 30s
|
||||
104
deployments/docker/redis.conf
Normal file
104
deployments/docker/redis.conf
Normal file
@@ -0,0 +1,104 @@
|
||||
# Redis Configuration for HYAPI Server Development
|
||||
|
||||
# Network
|
||||
bind 0.0.0.0
|
||||
port 6379
|
||||
timeout 0
|
||||
tcp-keepalive 300
|
||||
|
||||
# General
|
||||
daemonize no
|
||||
supervised no
|
||||
pidfile /var/run/redis_6379.pid
|
||||
loglevel notice
|
||||
logfile ""
|
||||
databases 16
|
||||
|
||||
# Snapshotting
|
||||
save 900 1
|
||||
save 300 10
|
||||
save 60 10000
|
||||
stop-writes-on-bgsave-error yes
|
||||
rdbcompression yes
|
||||
rdbchecksum yes
|
||||
dbfilename dump.rdb
|
||||
dir ./
|
||||
|
||||
# Replication
|
||||
# slaveof <masterip> <masterport>
|
||||
# masterauth <master-password>
|
||||
slave-serve-stale-data yes
|
||||
slave-read-only yes
|
||||
repl-diskless-sync no
|
||||
repl-diskless-sync-delay 5
|
||||
repl-ping-slave-period 10
|
||||
repl-timeout 60
|
||||
repl-disable-tcp-nodelay no
|
||||
repl-backlog-size 1mb
|
||||
repl-backlog-ttl 3600
|
||||
slave-priority 100
|
||||
|
||||
# Security
|
||||
# requirepass foobared
|
||||
# rename-command FLUSHDB ""
|
||||
# rename-command FLUSHALL ""
|
||||
|
||||
# Limits
|
||||
maxclients 10000
|
||||
maxmemory 256mb
|
||||
maxmemory-policy allkeys-lru
|
||||
maxmemory-samples 5
|
||||
|
||||
# Append only file
|
||||
appendonly yes
|
||||
appendfilename "appendonly.aof"
|
||||
appendfsync everysec
|
||||
no-appendfsync-on-rewrite no
|
||||
auto-aof-rewrite-percentage 100
|
||||
auto-aof-rewrite-min-size 64mb
|
||||
aof-load-truncated yes
|
||||
|
||||
# Lua scripting
|
||||
lua-time-limit 5000
|
||||
|
||||
# Slow log
|
||||
slowlog-log-slower-than 10000
|
||||
slowlog-max-len 128
|
||||
|
||||
# Latency monitor
|
||||
latency-monitor-threshold 100
|
||||
|
||||
# Event notification
|
||||
notify-keyspace-events Ex
|
||||
|
||||
# Hash
|
||||
hash-max-ziplist-entries 512
|
||||
hash-max-ziplist-value 64
|
||||
|
||||
# List
|
||||
list-max-ziplist-size -2
|
||||
list-compress-depth 0
|
||||
|
||||
# Set
|
||||
set-max-intset-entries 512
|
||||
|
||||
# Sorted set
|
||||
zset-max-ziplist-entries 128
|
||||
zset-max-ziplist-value 64
|
||||
|
||||
# HyperLogLog
|
||||
hll-sparse-max-bytes 3000
|
||||
|
||||
# Active rehashing
|
||||
activerehashing yes
|
||||
|
||||
# Client output buffer limits
|
||||
client-output-buffer-limit normal 0 0 0
|
||||
client-output-buffer-limit slave 256mb 64mb 60
|
||||
client-output-buffer-limit pubsub 32mb 8mb 60
|
||||
|
||||
# Hz
|
||||
hz 10
|
||||
|
||||
# AOF rewrite
|
||||
aof-rewrite-incremental-fsync yes
|
||||
Reference in New Issue
Block a user