Traefik tls enable
This commit is contained in:
4
Makefile
4
Makefile
@@ -182,9 +182,9 @@ wrk-search: ## Нагрузочный тест поиска (wrk2)
|
|||||||
http://localhost:8080/v1/search?type=event\&q=test
|
http://localhost:8080/v1/search?type=event\&q=test
|
||||||
|
|
||||||
wrk-health: ## Нагрузочный тест health (wrk2)
|
wrk-health: ## Нагрузочный тест health (wrk2)
|
||||||
wrk -t4 -c10000 -d30s -t200 \
|
wrk -t4 -c100 -d30s -t100 \
|
||||||
-H "Host: api.eventhub.local" \
|
-H "Host: api.eventhub.local" \
|
||||||
http://localhost/health
|
https://api.eventhub.local/health
|
||||||
|
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
# CODE QUALITY
|
# CODE QUALITY
|
||||||
|
|||||||
@@ -1,35 +1,35 @@
|
|||||||
# docker/docker-compose.yml
|
# docker/docker-compose.yml
|
||||||
services:
|
services:
|
||||||
# ================== Балансировщик нагрузки ==================
|
# ================== Балансировщик нагрузки (HTTPS/WSS) ==================
|
||||||
traefik:
|
traefik:
|
||||||
image: traefik:latest
|
image: traefik:latest
|
||||||
user: "0:1001" # группа docker на хосте (подберите при необходимости, см. ls -la /var/run/docker.sock)
|
user: "0:1001" # группа docker на хосте (подберите под свою систему, см. ls -la /var/run/docker.sock)
|
||||||
command:
|
command:
|
||||||
- "--api.insecure=true" # дашборд (можно отключить в production)
|
- "--api.insecure=true" # дашборд (можно удалить в production)
|
||||||
- "--providers.docker=true"
|
- "--providers.docker=true"
|
||||||
- "--providers.docker.exposedbydefault=false"
|
- "--providers.docker.exposedbydefault=false"
|
||||||
- "--entrypoints.web.address=:80" # пользовательский REST
|
- "--providers.file.filename=/etc/traefik/dynamic_conf.yml" # самоподписанный сертификат и редирект
|
||||||
- "--entrypoints.ws.address=:8081" # пользовательский WebSocket
|
- "--entrypoints.web.address=:80" # HTTP (для редиректа)
|
||||||
- "--entrypoints.admin-web.address=:8445" # админский REST
|
- "--entrypoints.websecure.address=:443" # HTTPS/WSS
|
||||||
- "--entrypoints.admin-ws.address=:8446" # админский WebSocket
|
# Метрики Prometheus
|
||||||
# === Включаем метрики Prometheus ===
|
|
||||||
- "--metrics.prometheus=true"
|
- "--metrics.prometheus=true"
|
||||||
- "--metrics.prometheus.buckets=0.1,0.3,1.2,5.0"
|
- "--metrics.prometheus.buckets=0.1,0.3,1.2,5.0"
|
||||||
- "--metrics.prometheus.addEntryPointsLabels=true"
|
- "--metrics.prometheus.addEntryPointsLabels=true"
|
||||||
- "--metrics.prometheus.addServicesLabels=true"
|
- "--metrics.prometheus.addServicesLabels=true"
|
||||||
ports:
|
ports:
|
||||||
- "80:80"
|
- "80:80"
|
||||||
|
- "443:443"
|
||||||
|
# порт дашборда (опционально)
|
||||||
- "8080:8080"
|
- "8080:8080"
|
||||||
- "8081:8081"
|
|
||||||
- "8445:8445"
|
|
||||||
- "8446:8446"
|
|
||||||
volumes:
|
volumes:
|
||||||
- "/var/run/docker.sock:/var/run/docker.sock:ro"
|
- "/var/run/docker.sock:/var/run/docker.sock:ro"
|
||||||
|
- "./traefik/certs:/etc/traefik/certs:ro" # самоподписанный сертификат
|
||||||
|
- "./traefik/dynamic_conf.yml:/etc/traefik/dynamic_conf.yml:ro"
|
||||||
networks:
|
networks:
|
||||||
- eventhub-net
|
- eventhub-net
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
|
||||||
# ================== Кластер EventHub ==================
|
# ================== Кластер EventHub (3 ноды) ==================
|
||||||
eventhub-node1:
|
eventhub-node1:
|
||||||
build:
|
build:
|
||||||
context: ..
|
context: ..
|
||||||
@@ -46,25 +46,41 @@ services:
|
|||||||
- eventhub-node1-data:/app/data
|
- eventhub-node1-data:/app/data
|
||||||
labels:
|
labels:
|
||||||
- "traefik.enable=true"
|
- "traefik.enable=true"
|
||||||
# REST API пользователей
|
# --- REST API пользователей ---
|
||||||
- "traefik.http.routers.api.rule=Host(`api.eventhub.local`)"
|
- "traefik.http.routers.api.rule=Host(`api.eventhub.local`)"
|
||||||
- "traefik.http.routers.api.entrypoints=web"
|
- "traefik.http.routers.api.entrypoints=web"
|
||||||
- "traefik.http.routers.api.service=api"
|
- "traefik.http.routers.api.middlewares=redirect-to-https@file"
|
||||||
|
- "traefik.http.routers.api-secure.rule=Host(`api.eventhub.local`)"
|
||||||
|
- "traefik.http.routers.api-secure.entrypoints=websecure"
|
||||||
|
- "traefik.http.routers.api-secure.tls=true"
|
||||||
|
- "traefik.http.routers.api-secure.service=api"
|
||||||
- "traefik.http.services.api.loadbalancer.server.port=8080"
|
- "traefik.http.services.api.loadbalancer.server.port=8080"
|
||||||
# WebSocket пользователей
|
# --- WebSocket пользователей (WSS через websecure) ---
|
||||||
- "traefik.http.routers.ws.rule=Host(`ws.eventhub.local`)"
|
- "traefik.http.routers.ws.rule=Host(`ws.eventhub.local`)"
|
||||||
- "traefik.http.routers.ws.entrypoints=ws"
|
- "traefik.http.routers.ws.entrypoints=web"
|
||||||
- "traefik.http.routers.ws.service=ws"
|
- "traefik.http.routers.ws.middlewares=redirect-to-https@file"
|
||||||
|
- "traefik.http.routers.ws-secure.rule=Host(`ws.eventhub.local`)"
|
||||||
|
- "traefik.http.routers.ws-secure.entrypoints=websecure"
|
||||||
|
- "traefik.http.routers.ws-secure.tls=true"
|
||||||
|
- "traefik.http.routers.ws-secure.service=ws"
|
||||||
- "traefik.http.services.ws.loadbalancer.server.port=8081"
|
- "traefik.http.services.ws.loadbalancer.server.port=8081"
|
||||||
# Админский REST
|
# --- Админский REST ---
|
||||||
- "traefik.http.routers.admin-api.rule=Host(`admin.eventhub.local`)"
|
- "traefik.http.routers.admin-api.rule=Host(`admin.eventhub.local`)"
|
||||||
- "traefik.http.routers.admin-api.entrypoints=admin-web"
|
- "traefik.http.routers.admin-api.entrypoints=web"
|
||||||
- "traefik.http.routers.admin-api.service=admin-api"
|
- "traefik.http.routers.admin-api.middlewares=redirect-to-https@file"
|
||||||
|
- "traefik.http.routers.admin-api-secure.rule=Host(`admin.eventhub.local`)"
|
||||||
|
- "traefik.http.routers.admin-api-secure.entrypoints=websecure"
|
||||||
|
- "traefik.http.routers.admin-api-secure.tls=true"
|
||||||
|
- "traefik.http.routers.admin-api-secure.service=admin-api"
|
||||||
- "traefik.http.services.admin-api.loadbalancer.server.port=8445"
|
- "traefik.http.services.admin-api.loadbalancer.server.port=8445"
|
||||||
# Админский WebSocket
|
# --- Админский WebSocket (WSS) ---
|
||||||
- "traefik.http.routers.admin-ws.rule=Host(`admin-ws.eventhub.local`)"
|
- "traefik.http.routers.admin-ws.rule=Host(`admin-ws.eventhub.local`)"
|
||||||
- "traefik.http.routers.admin-ws.entrypoints=admin-ws"
|
- "traefik.http.routers.admin-ws.entrypoints=web"
|
||||||
- "traefik.http.routers.admin-ws.service=admin-ws"
|
- "traefik.http.routers.admin-ws.middlewares=redirect-to-https@file"
|
||||||
|
- "traefik.http.routers.admin-ws-secure.rule=Host(`admin-ws.eventhub.local`)"
|
||||||
|
- "traefik.http.routers.admin-ws-secure.entrypoints=websecure"
|
||||||
|
- "traefik.http.routers.admin-ws-secure.tls=true"
|
||||||
|
- "traefik.http.routers.admin-ws-secure.service=admin-ws"
|
||||||
- "traefik.http.services.admin-ws.loadbalancer.server.port=8446"
|
- "traefik.http.services.admin-ws.loadbalancer.server.port=8446"
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
|
||||||
@@ -86,19 +102,35 @@ services:
|
|||||||
- "traefik.enable=true"
|
- "traefik.enable=true"
|
||||||
- "traefik.http.routers.api.rule=Host(`api.eventhub.local`)"
|
- "traefik.http.routers.api.rule=Host(`api.eventhub.local`)"
|
||||||
- "traefik.http.routers.api.entrypoints=web"
|
- "traefik.http.routers.api.entrypoints=web"
|
||||||
- "traefik.http.routers.api.service=api"
|
- "traefik.http.routers.api.middlewares=redirect-to-https@file"
|
||||||
|
- "traefik.http.routers.api-secure.rule=Host(`api.eventhub.local`)"
|
||||||
|
- "traefik.http.routers.api-secure.entrypoints=websecure"
|
||||||
|
- "traefik.http.routers.api-secure.tls=true"
|
||||||
|
- "traefik.http.routers.api-secure.service=api"
|
||||||
- "traefik.http.services.api.loadbalancer.server.port=8080"
|
- "traefik.http.services.api.loadbalancer.server.port=8080"
|
||||||
- "traefik.http.routers.ws.rule=Host(`ws.eventhub.local`)"
|
- "traefik.http.routers.ws.rule=Host(`ws.eventhub.local`)"
|
||||||
- "traefik.http.routers.ws.entrypoints=ws"
|
- "traefik.http.routers.ws.entrypoints=web"
|
||||||
- "traefik.http.routers.ws.service=ws"
|
- "traefik.http.routers.ws.middlewares=redirect-to-https@file"
|
||||||
|
- "traefik.http.routers.ws-secure.rule=Host(`ws.eventhub.local`)"
|
||||||
|
- "traefik.http.routers.ws-secure.entrypoints=websecure"
|
||||||
|
- "traefik.http.routers.ws-secure.tls=true"
|
||||||
|
- "traefik.http.routers.ws-secure.service=ws"
|
||||||
- "traefik.http.services.ws.loadbalancer.server.port=8081"
|
- "traefik.http.services.ws.loadbalancer.server.port=8081"
|
||||||
- "traefik.http.routers.admin-api.rule=Host(`admin.eventhub.local`)"
|
- "traefik.http.routers.admin-api.rule=Host(`admin.eventhub.local`)"
|
||||||
- "traefik.http.routers.admin-api.entrypoints=admin-web"
|
- "traefik.http.routers.admin-api.entrypoints=web"
|
||||||
- "traefik.http.routers.admin-api.service=admin-api"
|
- "traefik.http.routers.admin-api.middlewares=redirect-to-https@file"
|
||||||
|
- "traefik.http.routers.admin-api-secure.rule=Host(`admin.eventhub.local`)"
|
||||||
|
- "traefik.http.routers.admin-api-secure.entrypoints=websecure"
|
||||||
|
- "traefik.http.routers.admin-api-secure.tls=true"
|
||||||
|
- "traefik.http.routers.admin-api-secure.service=admin-api"
|
||||||
- "traefik.http.services.admin-api.loadbalancer.server.port=8445"
|
- "traefik.http.services.admin-api.loadbalancer.server.port=8445"
|
||||||
- "traefik.http.routers.admin-ws.rule=Host(`admin-ws.eventhub.local`)"
|
- "traefik.http.routers.admin-ws.rule=Host(`admin-ws.eventhub.local`)"
|
||||||
- "traefik.http.routers.admin-ws.entrypoints=admin-ws"
|
- "traefik.http.routers.admin-ws.entrypoints=web"
|
||||||
- "traefik.http.routers.admin-ws.service=admin-ws"
|
- "traefik.http.routers.admin-ws.middlewares=redirect-to-https@file"
|
||||||
|
- "traefik.http.routers.admin-ws-secure.rule=Host(`admin-ws.eventhub.local`)"
|
||||||
|
- "traefik.http.routers.admin-ws-secure.entrypoints=websecure"
|
||||||
|
- "traefik.http.routers.admin-ws-secure.tls=true"
|
||||||
|
- "traefik.http.routers.admin-ws-secure.service=admin-ws"
|
||||||
- "traefik.http.services.admin-ws.loadbalancer.server.port=8446"
|
- "traefik.http.services.admin-ws.loadbalancer.server.port=8446"
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
|
||||||
@@ -120,19 +152,35 @@ services:
|
|||||||
- "traefik.enable=true"
|
- "traefik.enable=true"
|
||||||
- "traefik.http.routers.api.rule=Host(`api.eventhub.local`)"
|
- "traefik.http.routers.api.rule=Host(`api.eventhub.local`)"
|
||||||
- "traefik.http.routers.api.entrypoints=web"
|
- "traefik.http.routers.api.entrypoints=web"
|
||||||
- "traefik.http.routers.api.service=api"
|
- "traefik.http.routers.api.middlewares=redirect-to-https@file"
|
||||||
|
- "traefik.http.routers.api-secure.rule=Host(`api.eventhub.local`)"
|
||||||
|
- "traefik.http.routers.api-secure.entrypoints=websecure"
|
||||||
|
- "traefik.http.routers.api-secure.tls=true"
|
||||||
|
- "traefik.http.routers.api-secure.service=api"
|
||||||
- "traefik.http.services.api.loadbalancer.server.port=8080"
|
- "traefik.http.services.api.loadbalancer.server.port=8080"
|
||||||
- "traefik.http.routers.ws.rule=Host(`ws.eventhub.local`)"
|
- "traefik.http.routers.ws.rule=Host(`ws.eventhub.local`)"
|
||||||
- "traefik.http.routers.ws.entrypoints=ws"
|
- "traefik.http.routers.ws.entrypoints=web"
|
||||||
- "traefik.http.routers.ws.service=ws"
|
- "traefik.http.routers.ws.middlewares=redirect-to-https@file"
|
||||||
|
- "traefik.http.routers.ws-secure.rule=Host(`ws.eventhub.local`)"
|
||||||
|
- "traefik.http.routers.ws-secure.entrypoints=websecure"
|
||||||
|
- "traefik.http.routers.ws-secure.tls=true"
|
||||||
|
- "traefik.http.routers.ws-secure.service=ws"
|
||||||
- "traefik.http.services.ws.loadbalancer.server.port=8081"
|
- "traefik.http.services.ws.loadbalancer.server.port=8081"
|
||||||
- "traefik.http.routers.admin-api.rule=Host(`admin.eventhub.local`)"
|
- "traefik.http.routers.admin-api.rule=Host(`admin.eventhub.local`)"
|
||||||
- "traefik.http.routers.admin-api.entrypoints=admin-web"
|
- "traefik.http.routers.admin-api.entrypoints=web"
|
||||||
- "traefik.http.routers.admin-api.service=admin-api"
|
- "traefik.http.routers.admin-api.middlewares=redirect-to-https@file"
|
||||||
|
- "traefik.http.routers.admin-api-secure.rule=Host(`admin.eventhub.local`)"
|
||||||
|
- "traefik.http.routers.admin-api-secure.entrypoints=websecure"
|
||||||
|
- "traefik.http.routers.admin-api-secure.tls=true"
|
||||||
|
- "traefik.http.routers.admin-api-secure.service=admin-api"
|
||||||
- "traefik.http.services.admin-api.loadbalancer.server.port=8445"
|
- "traefik.http.services.admin-api.loadbalancer.server.port=8445"
|
||||||
- "traefik.http.routers.admin-ws.rule=Host(`admin-ws.eventhub.local`)"
|
- "traefik.http.routers.admin-ws.rule=Host(`admin-ws.eventhub.local`)"
|
||||||
- "traefik.http.routers.admin-ws.entrypoints=admin-ws"
|
- "traefik.http.routers.admin-ws.entrypoints=web"
|
||||||
- "traefik.http.routers.admin-ws.service=admin-ws"
|
- "traefik.http.routers.admin-ws.middlewares=redirect-to-https@file"
|
||||||
|
- "traefik.http.routers.admin-ws-secure.rule=Host(`admin-ws.eventhub.local`)"
|
||||||
|
- "traefik.http.routers.admin-ws-secure.entrypoints=websecure"
|
||||||
|
- "traefik.http.routers.admin-ws-secure.tls=true"
|
||||||
|
- "traefik.http.routers.admin-ws-secure.service=admin-ws"
|
||||||
- "traefik.http.services.admin-ws.loadbalancer.server.port=8446"
|
- "traefik.http.services.admin-ws.loadbalancer.server.port=8446"
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
|
||||||
@@ -144,9 +192,8 @@ services:
|
|||||||
- '--storage.tsdb.path=/prometheus'
|
- '--storage.tsdb.path=/prometheus'
|
||||||
- '--web.console.libraries=/usr/share/prometheus/console_libraries'
|
- '--web.console.libraries=/usr/share/prometheus/console_libraries'
|
||||||
- '--web.console.templates=/usr/share/prometheus/consoles'
|
- '--web.console.templates=/usr/share/prometheus/consoles'
|
||||||
# === Ограничение retention ===
|
- '--storage.tsdb.retention.time=30d'
|
||||||
- '--storage.tsdb.retention.time=30d' # хранить данные 30 дней
|
- '--storage.tsdb.retention.size=15GB'
|
||||||
- '--storage.tsdb.retention.size=15GB' # максимальный размер 15 ГБ
|
|
||||||
volumes:
|
volumes:
|
||||||
- ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
|
- ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
|
||||||
- prometheus-data:/prometheus
|
- prometheus-data:/prometheus
|
||||||
@@ -160,9 +207,9 @@ services:
|
|||||||
image: grafana/grafana:latest
|
image: grafana/grafana:latest
|
||||||
environment:
|
environment:
|
||||||
- GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_ADMIN_PASSWORD}
|
- GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_ADMIN_PASSWORD}
|
||||||
- GF_SECURITY_DISABLE_INITIAL_ADMIN_PASSWORD_CHANGE=false # обязательно сменить пароль после первого входа
|
- GF_SECURITY_DISABLE_INITIAL_ADMIN_PASSWORD_CHANGE=false
|
||||||
- GF_USERS_ALLOW_SIGN_UP=false # запретить самостоятельную регистрацию
|
- GF_USERS_ALLOW_SIGN_UP=false
|
||||||
- GF_AUTH_ANONYMOUS_ENABLED=false # запретить анонимный доступ
|
- GF_AUTH_ANONYMOUS_ENABLED=false
|
||||||
volumes:
|
volumes:
|
||||||
- ./grafana/provisioning:/etc/grafana/provisioning
|
- ./grafana/provisioning:/etc/grafana/provisioning
|
||||||
- ./grafana/dashboards:/etc/grafana/dashboards
|
- ./grafana/dashboards:/etc/grafana/dashboards
|
||||||
|
|||||||
4
docker/traefik/certs/make-traefik-certs.sh
Normal file
4
docker/traefik/certs/make-traefik-certs.sh
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
#mkdir -p docker/traefik/certs
|
||||||
|
cd docker/traefik/certs
|
||||||
|
# Генерируем приватный ключ и самоподписанный сертификат на 10 лет
|
||||||
|
openssl req -x509 -newkey rsa:4096 -keyout traefik.key -out traefik.crt -days 3650 -nodes -subj "/CN=*.eventhub.local"
|
||||||
30
docker/traefik/certs/traefik.crt
Normal file
30
docker/traefik/certs/traefik.crt
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
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
|
||||||
|
ctzWkY+lExmP/1o=
|
||||||
|
-----END CERTIFICATE-----
|
||||||
52
docker/traefik/certs/traefik.key
Normal file
52
docker/traefik/certs/traefik.key
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
-----BEGIN PRIVATE KEY-----
|
||||||
|
MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQDAKnFa4rgzqERa
|
||||||
|
AHGh1sKLy++AAqFKBIJAtK+8YPz45jtHElT0BJfE2kOo3wZ+iucbE+dg4yfrKkD4
|
||||||
|
bfa6zbwCYP2hhEHT6w1tI1BMZCrgY+eqEjvgTYLb5oq9J9zs9GawmaW+XCnUVAOW
|
||||||
|
dOFU3MQlBcbnFJrDAwz4BjmaRFGVMm95Nk2eGD3cObuqQUVMR95YgZxHyX5M7F8j
|
||||||
|
IAdUO6DoB+fTMQEEudkU/po/Xp2Xx3GJavRDMPoZ4HEGpQlPmU5JzeMAHVVx6Zj8
|
||||||
|
Ls45eGX4qwf74OXbAmBRntpjDIz8qQVAl11QakM2ZW2ALEkIqRU6tIiiyk/PO3fu
|
||||||
|
q11IMGNlx1oL9L8ClSsgsA3UX7YmjpFmvDJX0anBHiUKonHXzroPu4opm9RpUhYk
|
||||||
|
UTiNLoQxOWwzFeBmfg5vzJ/fd/w/796CU56vCRctG5UpXWD9dQxjXkWVZIoRvuIe
|
||||||
|
GIIW2qy+NkJAOuF0aTAphm4Hns9yT4EvfJIvLSZKQyFu6oIfvR4e1RTlZmzgVUQ+
|
||||||
|
O50Kk7z6JwntDkFburi/HnJ8I5YS6zeLrNykKhTPOZu8SfFm5UA71SJZorzftE3R
|
||||||
|
6jz9iPj2Ev48F7rCWhMqfGtiIp70ASx9xv+5ZTQPLEQkvH+R4JYOqWUwmJhtiso6
|
||||||
|
z8a8zB+3MbGXf2VTurQ1nB6+C9SaIQIDAQABAoICAAUfLHnGaK/xyG6Yq+6rFXDZ
|
||||||
|
7OZ9y3Q4Vgto9XUhJaTxp/tPNQXy+GOWCK8f0KG/TIUXfPeDXm1BaU1lyul0MdJj
|
||||||
|
aOcs6f8+uNMjmZCLq+vipcpN5ZwnHLmFNcXwYc5L/k+vLLB77t56pcTVFStone65
|
||||||
|
rnE6xpwzgN08dz0SHJWMLFXv+VYhIcb0n/ib+D+d+8Jio/py16OvuiJqyF85nqKI
|
||||||
|
kWh62iLY3D0Xwx80w6EHvxIxUFTZIZVeesy5Sdv+A0zqyKXYYk5gskPocHUuLROZ
|
||||||
|
ZWNUfXPeppgOUpZIv5o9XAc6cZGC34s73VUI+SJatVbk+G5UU5e7p0jsdtZFeeSw
|
||||||
|
94t5Cw9O4E5Rbu0I7iQxuC215m20DRQyh3sHXB4ZtiYgYle7DPsCU5yzQxoo6+Z3
|
||||||
|
3sOIwO79A4epKcHU8JeZChZYi4CAC/OGhjH5WFRA0LoVdKnJmyfIKJMCvwdD05hA
|
||||||
|
L1lHSK43+gFQRz07qRxSLNX6E1E8pmMfnv6iah9DPmQz8uQUTPuPa9dHvD8lpm+m
|
||||||
|
rSGUeNCi7cnlPMszXrS1Q5gDL7nuFA66p1nA5LcMWFrllyj79Snbp7JB+2Yry0G1
|
||||||
|
9pfVsMB2DjKa282iXWjzqiDQAefRSqBKbrqo0m6Qzd+VC4AFeDXieo7/RvecQbzM
|
||||||
|
gbRw5hdX3FxIWiJJHK5FAoIBAQDtX7Bwz5LPqfgq/RmXcKODTqbhVIbMFX/6kWYD
|
||||||
|
zfI2PeRyb85do7uqZLMi81qBS8sLd18RuVPO+FtWjC8IrBWQW1Df8RN3cZsX/azP
|
||||||
|
bi+FbauJG1RO12xVVJ2utjaSPCztGKc4jsTip/Ox4rIpYAv6qdEwIR9TtzGTL7MC
|
||||||
|
GeFWuq+Q7HjCIDC46UNnbOn/ZwZpzO2etvdbjgPeRl+HOGom0b8dDbuIsyHssuUh
|
||||||
|
MnJRh+tWlkdLDjNgDOMGZdERc6b+VEAUKrsi/alhR6NSgQ/J2hUqcumgPjhNRWlL
|
||||||
|
2EUPQcPFT/0nTsPGfrnmG1cgHlhewMyrVWaWbai2o+avi7gVAoIBAQDPPqAqM1CQ
|
||||||
|
Za/UuG7i61LrjLK5+wDEGYMvIPP3sHhTPIzQowqddV5b3kjusXFA3lsAYSYDRyub
|
||||||
|
Qvlt/dpSTkqYt1kTjvhxX98baWTz6Ifu9qGHdAKvVeQz+GQLQsUCAKjEcJLe723O
|
||||||
|
01oZMuvOICa4VMNTndOCSYA6rj5IzgCSetGFJH/1l+1cw4Ty0I1XLBoxtd7ZHUOL
|
||||||
|
LpFUzyqeprT497rvCS9fitCNo8nlhGCeNonhNXtMHoYapf9jZWweNExfsZkxPUYn
|
||||||
|
RORtaKDtWTzWCEpT00uCNiEq1fnBnQVWC9952lkmJJGX+DBd28cZncayn8DiRgtE
|
||||||
|
MgLhiPbC1/DdAoIBAQDWqfmDG4SV/gzqu3bgSEHm5kLudaVtfGf/LmxGNoG7Yd9t
|
||||||
|
SgUjE4YMQwLpMZAAa42UsgAspB/RhTH8o8uJGS5rHNmXm4lSNE/gs00LTYb2MEa3
|
||||||
|
OBrXLePPizUKIchaGMc8J1ZaRGpy2xX8IZmi5zQOHHKMBvgwmfPgOnu1A7iP2UYa
|
||||||
|
Vm+ihr/pCTImnw1CJmZbWbLuHGK3zkdbROLxAyikMHyXhqq4pd6hEus5SUiuyK8f
|
||||||
|
38lba900GJNaXsth7+fuCjzkv/v6WdFKoyFk5Ehl763CdKcoffwmjQX7S/qwIHYt
|
||||||
|
wveaC5XqtQHiwYjaB/c8wTiWHSYoFcVEXhapXD49AoIBAGO7LXRhcVmrtavWfXYx
|
||||||
|
7Jtx/+hEBCBabqjVYNJHWAAmWVVlwIv5mUj4dXx4Y5nl50ENfy+Apll3J3Vo/hEx
|
||||||
|
n/BR+0nQOXrFuiYE2BIQSqoSgbUffNNHsCPaWrqYjRnjm1O9INCrw9oOF4Oc36E4
|
||||||
|
E6oNEFpCzzAZkt2qUErU562V8RHzeKiFTjKf3HDFL99NV+WoMe+lh4WJCWMYttfW
|
||||||
|
Pay5+nlhoCyILsiak2QiCiTY9g0soYMGBV75lycL/bWjUUWTv7bUV9g57PtBqH/P
|
||||||
|
u9j78Fjai7HDvr5Qbnpfx9uapxaKnvAeFPpe81eXlf6b0KzQ+A9ryawtrPk/4g/t
|
||||||
|
vvkCggEBAL46J1suxrPtZFgfhnAQRhmm01nnFhPBp3mVVT1lOu2UMwyAbkaJcyEh
|
||||||
|
OAGel159ed+cg1SSpQLD8lK4L0aUUd8+hiN5bLDXNXV3leD3ZXpl9byUxvNGS/UA
|
||||||
|
Wnm2JTCt20R4cuhp9LjcCWgCiqupblJcbjwga2fKRvM7VquVUBcoyoJcV2IT33iQ
|
||||||
|
qa96afyCoGYExoQ+9SWettHV+FTQEKo+mfvnHdGRgpH49prIFYTKusMxOi1EdqH4
|
||||||
|
MKKj4mvxi2WBMT31OPTNlpn7RkOzo7+RTIz3fC+sqV6X+joT64z5GkWw2kJlvuJS
|
||||||
|
OcJYMreefpqPopJhaO1krD+TWml5ciw=
|
||||||
|
-----END PRIVATE KEY-----
|
||||||
16
docker/traefik/dynamic_conf.yml
Normal file
16
docker/traefik/dynamic_conf.yml
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
tls:
|
||||||
|
stores:
|
||||||
|
default:
|
||||||
|
defaultCertificate:
|
||||||
|
certFile: /etc/traefik/certs/traefik.crt
|
||||||
|
keyFile: /etc/traefik/certs/traefik.key
|
||||||
|
certificates:
|
||||||
|
- certFile: /etc/traefik/certs/traefik.crt
|
||||||
|
keyFile: /etc/traefik/certs/traefik.key
|
||||||
|
|
||||||
|
http:
|
||||||
|
middlewares:
|
||||||
|
redirect-to-https:
|
||||||
|
redirectScheme:
|
||||||
|
scheme: https
|
||||||
|
permanent: true
|
||||||
106
test/wrk/scripts/debug.lua
Normal file
106
test/wrk/scripts/debug.lua
Normal file
@@ -0,0 +1,106 @@
|
|||||||
|
-- Helper Functions:
|
||||||
|
|
||||||
|
-- Resource: http://lua-users.org/wiki/TypeOf
|
||||||
|
function typeof(var)
|
||||||
|
local _type = type(var);
|
||||||
|
if(_type ~= "table" and _type ~= "userdata") then
|
||||||
|
return _type;
|
||||||
|
end
|
||||||
|
local _meta = getmetatable(var);
|
||||||
|
if(_meta ~= nil and _meta._NAME ~= nil) then
|
||||||
|
return _meta._NAME;
|
||||||
|
else
|
||||||
|
return _type;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Resource: https://gist.github.com/lunixbochs/5b0bb27861a396ab7a86
|
||||||
|
local function string(o)
|
||||||
|
return '"' .. tostring(o) .. '"'
|
||||||
|
end
|
||||||
|
|
||||||
|
local function recurse(o, indent)
|
||||||
|
if indent == nil then indent = '' end
|
||||||
|
local indent2 = indent .. ' '
|
||||||
|
if type(o) == 'table' then
|
||||||
|
local s = indent .. '{' .. '\n'
|
||||||
|
local first = true
|
||||||
|
for k,v in pairs(o) do
|
||||||
|
if first == false then s = s .. ', \n' end
|
||||||
|
if type(k) ~= 'number' then k = string(k) end
|
||||||
|
s = s .. indent2 .. '[' .. k .. '] = ' .. recurse(v, indent2)
|
||||||
|
first = false
|
||||||
|
end
|
||||||
|
return s .. '\n' .. indent .. '}'
|
||||||
|
else
|
||||||
|
return string(o)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function var_dump(...)
|
||||||
|
local args = {...}
|
||||||
|
if #args > 1 then
|
||||||
|
var_dump(args)
|
||||||
|
else
|
||||||
|
print(recurse(args[1]))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- @end: Helper Functions
|
||||||
|
|
||||||
|
max_requests = 0
|
||||||
|
counter = 1
|
||||||
|
|
||||||
|
function setup(thread)
|
||||||
|
thread:set("id", counter)
|
||||||
|
|
||||||
|
counter = counter + 1
|
||||||
|
end
|
||||||
|
|
||||||
|
init = function(args)
|
||||||
|
io.write("[init]\n")
|
||||||
|
|
||||||
|
-- Check if arguments are set
|
||||||
|
if not (next(args) == nil) then
|
||||||
|
io.write("[init] Arguments\n")
|
||||||
|
|
||||||
|
-- Loop through passed arguments
|
||||||
|
for index, value in ipairs(args) do
|
||||||
|
io.write("[init] - " .. args[index] .. "\n")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
response = function (status, headers, body)
|
||||||
|
io.write("------------------------------\n")
|
||||||
|
io.write("Response ".. counter .." with status: ".. status .." on thread ".. id .."\n")
|
||||||
|
io.write("------------------------------\n")
|
||||||
|
|
||||||
|
io.write("[response] Headers:\n")
|
||||||
|
|
||||||
|
-- Loop through passed arguments
|
||||||
|
for key, value in pairs(headers) do
|
||||||
|
io.write("[response] - " .. key .. ": " .. value .. "\n")
|
||||||
|
end
|
||||||
|
|
||||||
|
io.write("[response] Body:\n")
|
||||||
|
io.write(body .. "\n")
|
||||||
|
|
||||||
|
-- Stop after max_requests if max_requests is a positive number
|
||||||
|
if (max_requests > 0) and (counter > max_requests) then
|
||||||
|
wrk.thread:stop()
|
||||||
|
end
|
||||||
|
|
||||||
|
counter = counter + 1
|
||||||
|
end
|
||||||
|
|
||||||
|
done = function (summary, latency, requests)
|
||||||
|
io.write("------------------------------\n")
|
||||||
|
io.write("Requests\n")
|
||||||
|
io.write("------------------------------\n")
|
||||||
|
|
||||||
|
io.write(typeof(requests))
|
||||||
|
|
||||||
|
var_dump(summary)
|
||||||
|
var_dump(requests)
|
||||||
|
end
|
||||||
Reference in New Issue
Block a user