Traefik tls enable

This commit is contained in:
2026-04-25 11:33:50 +03:00
parent b15786b26d
commit 1adf39749d
7 changed files with 300 additions and 45 deletions

View File

@@ -182,9 +182,9 @@ wrk-search: ## Нагрузочный тест поиска (wrk2)
http://localhost:8080/v1/search?type=event\&q=test
wrk-health: ## Нагрузочный тест health (wrk2)
wrk -t4 -c10000 -d30s -t200 \
wrk -t4 -c100 -d30s -t100 \
-H "Host: api.eventhub.local" \
http://localhost/health
https://api.eventhub.local/health
# ============================================================================
# CODE QUALITY

View File

@@ -1,35 +1,35 @@
# docker/docker-compose.yml
services:
# ================== Балансировщик нагрузки ==================
# ================== Балансировщик нагрузки (HTTPS/WSS) ==================
traefik:
image: traefik:latest
user: "0:1001" # группа docker на хосте (подберите при необходимости, см. ls -la /var/run/docker.sock)
user: "0:1001" # группа docker на хосте (подберите под свою систему, см. ls -la /var/run/docker.sock)
command:
- "--api.insecure=true" # дашборд (можно отключить в production)
- "--api.insecure=true" # дашборд (можно удалить в production)
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80" # пользовательский REST
- "--entrypoints.ws.address=:8081" # пользовательский WebSocket
- "--entrypoints.admin-web.address=:8445" # админский REST
- "--entrypoints.admin-ws.address=:8446" # админский WebSocket
# === Включаем метрики Prometheus ===
- "--providers.file.filename=/etc/traefik/dynamic_conf.yml" # самоподписанный сертификат и редирект
- "--entrypoints.web.address=:80" # HTTP (для редиректа)
- "--entrypoints.websecure.address=:443" # HTTPS/WSS
# Метрики Prometheus
- "--metrics.prometheus=true"
- "--metrics.prometheus.buckets=0.1,0.3,1.2,5.0"
- "--metrics.prometheus.addEntryPointsLabels=true"
- "--metrics.prometheus.addServicesLabels=true"
ports:
- "80:80"
- "443:443"
# порт дашборда (опционально)
- "8080:8080"
- "8081:8081"
- "8445:8445"
- "8446:8446"
volumes:
- "/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:
- eventhub-net
restart: unless-stopped
# ================== Кластер EventHub ==================
# ================== Кластер EventHub (3 ноды) ==================
eventhub-node1:
build:
context: ..
@@ -46,25 +46,41 @@ services:
- eventhub-node1-data:/app/data
labels:
- "traefik.enable=true"
# REST API пользователей
# --- REST API пользователей ---
- "traefik.http.routers.api.rule=Host(`api.eventhub.local`)"
- "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"
# WebSocket пользователей
# --- WebSocket пользователей (WSS через websecure) ---
- "traefik.http.routers.ws.rule=Host(`ws.eventhub.local`)"
- "traefik.http.routers.ws.entrypoints=ws"
- "traefik.http.routers.ws.service=ws"
- "traefik.http.routers.ws.entrypoints=web"
- "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"
# Админский REST
# --- Админский REST ---
- "traefik.http.routers.admin-api.rule=Host(`admin.eventhub.local`)"
- "traefik.http.routers.admin-api.entrypoints=admin-web"
- "traefik.http.routers.admin-api.service=admin-api"
- "traefik.http.routers.admin-api.entrypoints=web"
- "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"
# Админский WebSocket
# --- Админский WebSocket (WSS) ---
- "traefik.http.routers.admin-ws.rule=Host(`admin-ws.eventhub.local`)"
- "traefik.http.routers.admin-ws.entrypoints=admin-ws"
- "traefik.http.routers.admin-ws.service=admin-ws"
- "traefik.http.routers.admin-ws.entrypoints=web"
- "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"
restart: unless-stopped
@@ -86,19 +102,35 @@ services:
- "traefik.enable=true"
- "traefik.http.routers.api.rule=Host(`api.eventhub.local`)"
- "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.routers.ws.rule=Host(`ws.eventhub.local`)"
- "traefik.http.routers.ws.entrypoints=ws"
- "traefik.http.routers.ws.service=ws"
- "traefik.http.routers.ws.entrypoints=web"
- "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.routers.admin-api.rule=Host(`admin.eventhub.local`)"
- "traefik.http.routers.admin-api.entrypoints=admin-web"
- "traefik.http.routers.admin-api.service=admin-api"
- "traefik.http.routers.admin-api.entrypoints=web"
- "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.routers.admin-ws.rule=Host(`admin-ws.eventhub.local`)"
- "traefik.http.routers.admin-ws.entrypoints=admin-ws"
- "traefik.http.routers.admin-ws.service=admin-ws"
- "traefik.http.routers.admin-ws.entrypoints=web"
- "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"
restart: unless-stopped
@@ -120,19 +152,35 @@ services:
- "traefik.enable=true"
- "traefik.http.routers.api.rule=Host(`api.eventhub.local`)"
- "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.routers.ws.rule=Host(`ws.eventhub.local`)"
- "traefik.http.routers.ws.entrypoints=ws"
- "traefik.http.routers.ws.service=ws"
- "traefik.http.routers.ws.entrypoints=web"
- "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.routers.admin-api.rule=Host(`admin.eventhub.local`)"
- "traefik.http.routers.admin-api.entrypoints=admin-web"
- "traefik.http.routers.admin-api.service=admin-api"
- "traefik.http.routers.admin-api.entrypoints=web"
- "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.routers.admin-ws.rule=Host(`admin-ws.eventhub.local`)"
- "traefik.http.routers.admin-ws.entrypoints=admin-ws"
- "traefik.http.routers.admin-ws.service=admin-ws"
- "traefik.http.routers.admin-ws.entrypoints=web"
- "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"
restart: unless-stopped
@@ -144,9 +192,8 @@ services:
- '--storage.tsdb.path=/prometheus'
- '--web.console.libraries=/usr/share/prometheus/console_libraries'
- '--web.console.templates=/usr/share/prometheus/consoles'
# === Ограничение retention ===
- '--storage.tsdb.retention.time=30d' # хранить данные 30 дней
- '--storage.tsdb.retention.size=15GB' # максимальный размер 15 ГБ
- '--storage.tsdb.retention.time=30d'
- '--storage.tsdb.retention.size=15GB'
volumes:
- ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus-data:/prometheus
@@ -160,9 +207,9 @@ services:
image: grafana/grafana:latest
environment:
- GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_ADMIN_PASSWORD}
- GF_SECURITY_DISABLE_INITIAL_ADMIN_PASSWORD_CHANGE=false # обязательно сменить пароль после первого входа
- GF_USERS_ALLOW_SIGN_UP=false # запретить самостоятельную регистрацию
- GF_AUTH_ANONYMOUS_ENABLED=false # запретить анонимный доступ
- GF_SECURITY_DISABLE_INITIAL_ADMIN_PASSWORD_CHANGE=false
- GF_USERS_ALLOW_SIGN_UP=false
- GF_AUTH_ANONYMOUS_ENABLED=false
volumes:
- ./grafana/provisioning:/etc/grafana/provisioning
- ./grafana/dashboards:/etc/grafana/dashboards

View 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"

View File

@@ -0,0 +1,30 @@
-----BEGIN CERTIFICATE-----
MIIFFzCCAv+gAwIBAgIUUX5W2zeEC7Z8wSBPoFSDNLpV6U0wDQYJKoZIhvcNAQEL
BQAwGzEZMBcGA1UEAwwQKi5ldmVudGh1Yi5sb2NhbDAeFw0yNjA0MjUwNzAzNTZa
Fw0zNjA0MjIwNzAzNTZaMBsxGTAXBgNVBAMMECouZXZlbnRodWIubG9jYWwwggIi
MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDAKnFa4rgzqERaAHGh1sKLy++A
AqFKBIJAtK+8YPz45jtHElT0BJfE2kOo3wZ+iucbE+dg4yfrKkD4bfa6zbwCYP2h
hEHT6w1tI1BMZCrgY+eqEjvgTYLb5oq9J9zs9GawmaW+XCnUVAOWdOFU3MQlBcbn
FJrDAwz4BjmaRFGVMm95Nk2eGD3cObuqQUVMR95YgZxHyX5M7F8jIAdUO6DoB+fT
MQEEudkU/po/Xp2Xx3GJavRDMPoZ4HEGpQlPmU5JzeMAHVVx6Zj8Ls45eGX4qwf7
4OXbAmBRntpjDIz8qQVAl11QakM2ZW2ALEkIqRU6tIiiyk/PO3fuq11IMGNlx1oL
9L8ClSsgsA3UX7YmjpFmvDJX0anBHiUKonHXzroPu4opm9RpUhYkUTiNLoQxOWwz
FeBmfg5vzJ/fd/w/796CU56vCRctG5UpXWD9dQxjXkWVZIoRvuIeGIIW2qy+NkJA
OuF0aTAphm4Hns9yT4EvfJIvLSZKQyFu6oIfvR4e1RTlZmzgVUQ+O50Kk7z6Jwnt
DkFburi/HnJ8I5YS6zeLrNykKhTPOZu8SfFm5UA71SJZorzftE3R6jz9iPj2Ev48
F7rCWhMqfGtiIp70ASx9xv+5ZTQPLEQkvH+R4JYOqWUwmJhtiso6z8a8zB+3MbGX
f2VTurQ1nB6+C9SaIQIDAQABo1MwUTAdBgNVHQ4EFgQU/EItSTyuc3hQdo4uZdh9
L8o6kkMwHwYDVR0jBBgwFoAU/EItSTyuc3hQdo4uZdh9L8o6kkMwDwYDVR0TAQH/
BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAY0UTqk6ICLlyFKNoTyybd1Mf+Hsz
Wn39zJnfdfTbw7DTZgAxU+rPkwWVtpAQpzKS9WugoYa7AEUZDphDHQBlzhuT8xd7
0Gy47kZEklY29FaNDKaiStZ+GEU323irC22y2od0AVHVssKGG/tLWL4hUViMYTWx
Yj6zpzovM2BrIzzAvjIQ0DAAFcVEr5lyvCduz83NiqQH6M/onTGXM01nXhUoIZnZ
QV0O4Rsnsi5VcnP8pUI3aKkxZ7rkVb/AktNTe7rX7xRztdTt0BGOOVR0u7Q97cQ6
kjXbrwIf6cura9J1FyyUeGA7B9z1huYm5XslpkhJ3ILd8DHBvKv5n7wDNuNbocGo
FrVza3sruJDwQzJSDmUyC+xoRv112X2R51sjOe9j17zxfSFqjVckWXTvI+ZvoLoX
g3pbAMQ06bmXpDYcg6er9NG/eycZvpYbSCCRS+TRDLSMshg/F6JoGVcHJtCNkTl9
Sl70z3+/ytjdOl/+XYQ6sEUzd4qtBrslCBX78y4elcO8qQIBWBkvYr+BI09MJyW0
C+Zae0G3mifyhWCfqm6Eq5lKhVhO9bF5rL6E+n4QSYK4PQ6GqAkNZ8/yVo8YcI0Z
fYNOIjQTEz9qqTlwDS8PTO0fFZLeiB64P86jf6m6WNhuQ+CC3BP6HP5ACImhy26N
ctzWkY+lExmP/1o=
-----END CERTIFICATE-----

View File

@@ -0,0 +1,52 @@
-----BEGIN PRIVATE KEY-----
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
OcJYMreefpqPopJhaO1krD+TWml5ciw=
-----END PRIVATE KEY-----

View 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
View 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