feat(架构): 完善基础架构设计
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,206 @@
|
||||
{
|
||||
"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": "tyapi-server",
|
||||
"refId": "A"
|
||||
}
|
||||
],
|
||||
"title": "TYAPI服务链路追踪",
|
||||
"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",
|
||||
"tyapi"
|
||||
],
|
||||
"templating": {
|
||||
"list": []
|
||||
},
|
||||
"time": {
|
||||
"from": "now-6h",
|
||||
"to": "now"
|
||||
},
|
||||
"timepicker": {},
|
||||
"timezone": "",
|
||||
"title": "TYAPI链路追踪监控",
|
||||
"uid": "tyapi-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": "tyapi-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": "tyapi-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": "TYAPI 文档",
|
||||
"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 tyapi_backend {
|
||||
server tyapi-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://tyapi_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://tyapi_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://tyapi_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://tyapi_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:tyapi_dev:postgres:Pg9mX4kL8nW2rT5y
|
||||
15
deployments/docker/pgadmin-servers.json
Normal file
15
deployments/docker/pgadmin-servers.json
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"Servers": {
|
||||
"1": {
|
||||
"Name": "TYAPI PostgreSQL",
|
||||
"Group": "Development Servers",
|
||||
"Host": "postgres",
|
||||
"Port": 5432,
|
||||
"MaintenanceDB": "tyapi_dev",
|
||||
"Username": "postgres",
|
||||
"PassFile": "/var/lib/pgadmin/passfile",
|
||||
"SSLMode": "prefer",
|
||||
"Comment": "TYAPI Development Database"
|
||||
}
|
||||
}
|
||||
}
|
||||
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"]
|
||||
|
||||
# TYAPI 应用监控
|
||||
- job_name: "tyapi-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
|
||||
Reference in New Issue
Block a user