Compare commits

...

17 Commits

Author SHA1 Message Date
forust 726b3ee544 fix(edu): run redis as statefulset
ci / deploy-userbot-panel (push) Has been skipped
ci / lint-ruff (push) Successful in 5s
ci / lint-yaml (push) Successful in 7s
ci / build (push) Successful in 3s
ci / lint-prettier (push) Successful in 11s
ci / lint-dockerfiles (push) Successful in 4s
ci / validate (push) Successful in 5s
Keep the existing Redis PVC and data while migrating the edu-master workload from Deployment to StatefulSet.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-09-10 23:35:59 +02:00
forust 13309b26e0 fix: add checkmk agent entrypoint
ci / lint-dockerfiles (push) Successful in 5s
ci / validate (push) Successful in 5s
ci / deploy-userbot-panel (push) Has been skipped
ci / lint-prettier (push) Successful in 10s
ci / lint-ruff (push) Successful in 5s
ci / lint-yaml (push) Successful in 7s
ci / build (push) Successful in 2s
update traefik to v3.7.13
2026-09-10 14:52:49 +02:00
forust eddc256bed chore: remove esp32/ingress.yaml from main
ci / lint-prettier (push) Successful in 7s
ci / lint-ruff (push) Successful in 4s
ci / deploy-userbot-panel (push) Has been skipped
ci / lint-yaml (push) Successful in 7s
ci / lint-dockerfiles (push) Successful in 5s
ci / validate (push) Successful in 5s
ci / build (push) Successful in 3s
2026-09-10 12:12:54 +02:00
forust 52f821cbba Merge branch 'main' of ssh://gitssh.forust.xyz:2221/forust/homelab
ci / lint-prettier (push) Failing after 8s
ci / lint-ruff (push) Successful in 4s
ci / lint-yaml (push) Failing after 7s
ci / lint-dockerfiles (push) Successful in 5s
ci / validate (push) Successful in 5s
ci / build (push) Has been skipped
ci / deploy-userbot-panel (push) Has been skipped
2026-09-10 11:47:25 +02:00
forust 0dbc2fff13 Merge branch 'sidetree' 2026-09-10 11:47:25 +02:00
forust 91ec83bc1c Merge branch 'main' of ssh://gitssh.forust.xyz:2221/forust/homelab
ci / lint-ruff (push) Successful in 4s
ci / lint-prettier (push) Failing after 8s
ci / lint-yaml (push) Failing after 7s
ci / lint-dockerfiles (push) Successful in 5s
ci / validate (push) Successful in 6s
ci / build (push) Has been skipped
ci / deploy-userbot-panel (push) Has been skipped
2026-09-10 11:47:20 +02:00
forust 9fec1dae39 Merge branch 'sidetree' 2026-09-10 11:47:15 +02:00
forust e5626b7b2d chore: remove untracked README.md
ci / lint-prettier (push) Successful in 7s
ci / lint-ruff (push) Successful in 5s
ci / lint-yaml (push) Successful in 6s
ci / lint-dockerfiles (push) Successful in 4s
ci / validate (push) Successful in 4s
ci / build (push) Has been skipped
ci / deploy-userbot-panel (push) Has been skipped
2026-09-10 11:45:00 +02:00
forust 8fb12a2176 chore: remove untracked README.md
ci / lint-prettier (push) Successful in 7s
ci / lint-ruff (push) Successful in 4s
ci / lint-yaml (push) Successful in 6s
ci / lint-dockerfiles (push) Successful in 4s
ci / validate (push) Successful in 5s
ci / build (push) Has been skipped
ci / deploy-userbot-panel (push) Has been skipped
2026-09-10 11:44:23 +02:00
forust fe0c7067b6 Merge branch 'main' of ssh://gitssh.forust.xyz:2221/forust/homelab
ci / validate (push) Successful in 4s
ci / build (push) Has been skipped
ci / lint-prettier (push) Failing after 8s
ci / lint-ruff (push) Successful in 7s
ci / lint-yaml (push) Failing after 6s
ci / lint-dockerfiles (push) Successful in 4s
ci / deploy-userbot-panel (push) Has been skipped
2026-09-10 11:42:17 +02:00
forust d0f0843774 Merge branch 'sidetree' 2026-09-10 11:41:35 +02:00
forust 81a5b207ac Merge branch 'main' of ssh://gitssh.forust.xyz:2221/forust/homelab
ci / lint-prettier (push) Failing after 8s
ci / lint-ruff (push) Successful in 5s
ci / lint-yaml (push) Failing after 7s
ci / lint-dockerfiles (push) Successful in 4s
ci / validate (push) Successful in 5s
ci / build (push) Has been skipped
ci / deploy-userbot-panel (push) Has been skipped
2026-09-10 11:41:31 +02:00
forust e3d5970ae3 chore: remove untracked README.md
ci / lint-prettier (push) Failing after 11s
ci / lint-ruff (push) Successful in 5s
ci / lint-yaml (push) Failing after 7s
ci / lint-dockerfiles (push) Successful in 4s
ci / validate (push) Successful in 5s
ci / build (push) Has been skipped
ci / deploy-userbot-panel (push) Has been skipped
2026-09-10 11:39:20 +02:00
forust 85f05c26cb feat(edu): activate k8s management for edu-master 2026-09-10 00:55:22 +02:00
forust 68630eb773 fix(edu): read diary event times directly from DOM, drop 25 AJAX clicks
ci / lint-prettier (push) Successful in 9s
ci / lint-ruff (push) Successful in 6s
ci / lint-yaml (push) Successful in 10s
ci / lint-dockerfiles (push) Successful in 7s
ci / validate (push) Successful in 6s
ci / build (push) Has been skipped
ci / deploy-userbot-panel (push) Has been skipped
_collect_event_times re-clicked every a.event-link and waited ~3s per
event for a visible span.data, but the calendar embeds all times in
div.event-full-info[data-event-full-info-id] span.data already. The old
loop took ~109s for 25 events and collected 0 (original divs stay
sf-hidden), effectively hanging /diary. Now a single evaluate reads all
times (~3.7s), parsing HH:MM from p.date span.data.
2026-09-10 00:31:04 +02:00
forust dad9cf2104 feat(edu): parse event times in /diary and drop weekend days
ci / lint-prettier (push) Successful in 9s
ci / lint-ruff (push) Successful in 4s
ci / lint-yaml (push) Successful in 6s
ci / lint-dockerfiles (push) Successful in 5s
ci / validate (push) Successful in 6s
ci / build (push) Has been skipped
ci / deploy-userbot-panel (push) Has been skipped
- fetch each event's time via Playwright (click event-link, read span.data, close fancybox) and render as 'title (HH:MM)'
- '08:00' placeholder renders as localized 'unknown' (time_unknown key in ru/uk/en)
- diary week view shows Mon-Fri only (title ends at Friday)
- diary month view skips Sat/Sun by weekday_idx with name-based fallback
- schedule keyboard drops Sat/Sun day buttons
2026-09-10 00:05:56 +02:00
forust fcc7b0d611 ci(deploy): gate redeploy behind manual workflow_dispatch
ci / lint-prettier (push) Successful in 8s
ci / lint-ruff (push) Successful in 4s
ci / lint-yaml (push) Successful in 7s
ci / lint-dockerfiles (push) Successful in 4s
ci / validate (push) Successful in 5s
ci / build (push) Successful in 2s
ci / deploy-userbot-panel (push) Has been skipped
removes automatic redeploy on push to main; deploy now runs only on
explicit manual trigger
2026-09-06 20:55:40 +02:00
9 changed files with 161 additions and 36 deletions
-3
View File
@@ -1,9 +1,6 @@
name: deploy name: deploy
on: on:
push:
branches:
- main
workflow_dispatch: workflow_dispatch:
concurrency: concurrency:
-3
View File
@@ -1,9 +1,6 @@
name: deploy name: deploy
on: on:
push:
branches:
- main
workflow_dispatch: workflow_dispatch:
concurrency: concurrency:
+1
View File
@@ -41,6 +41,7 @@ traefik/dynamic/fileservers.yml
traefik/dynamic/*.local.y*ml.* traefik/dynamic/*.local.y*ml.*
traefik/dynamic/*.external.y*ml traefik/dynamic/*.external.y*ml
traefik/k8s/fileservers.y*ml traefik/k8s/fileservers.y*ml
traefik/k8s/aliasHeadersStrategy.md
traefik/logs/* traefik/logs/*
+9 -2
View File
@@ -7,8 +7,12 @@ spec:
selector: selector:
app: checkmk app: checkmk
ports: ports:
- port: 5000 - name: web
port: 5000
targetPort: 5000 targetPort: 5000
- name: agent-receiver
port: 8000
targetPort: 8000
--- ---
apiVersion: apps/v1 apiVersion: apps/v1
kind: Deployment kind: Deployment
@@ -34,7 +38,10 @@ spec:
- configMapRef: - configMapRef:
name: checkmk-config name: checkmk-config
ports: ports:
- containerPort: 5000 - name: web
containerPort: 5000
- name: agent-receiver
containerPort: 8000
volumeMounts: volumeMounts:
- name: sites - name: sites
mountPath: /omd/sites mountPath: /omd/sites
+16
View File
@@ -16,6 +16,22 @@ spec:
certResolver: letsencrypt certResolver: letsencrypt
--- ---
apiVersion: traefik.io/v1alpha1 apiVersion: traefik.io/v1alpha1
kind: IngressRouteTCP
metadata:
name: checkmk-agent-receiver
namespace: checkmk
spec:
entryPoints:
- checkmk-agent
routes:
- match: HostSNI(`*`)
services:
- name: checkmk-service
port: 8000
tls:
passthrough: true
---
apiVersion: traefik.io/v1alpha1
kind: IngressRoute kind: IngressRoute
metadata: metadata:
name: checkmk-local name: checkmk-local
View File
+2 -1
View File
@@ -1,11 +1,12 @@
apiVersion: apps/v1 apiVersion: apps/v1
kind: Deployment kind: StatefulSet
metadata: metadata:
name: redis name: redis
namespace: edu-master namespace: edu-master
labels: labels:
app: edu-master-redis app: edu-master-redis
spec: spec:
serviceName: redis
replicas: 1 replicas: 1
selector: selector:
matchLabels: matchLabels:
+108 -20
View File
@@ -115,6 +115,7 @@ TRANSLATIONS = {
'month': '📅 Весь месяц', 'month': '📅 Весь месяц',
'no_events': 'Нет событий', 'no_events': 'Нет событий',
'no_lessons': 'Нет уроков', 'no_lessons': 'Нет уроков',
'time_unknown': 'неизвестно',
'free_period': 'Свободно', 'free_period': 'Свободно',
'unsubscribed': '🔕 Вы отписались от уведомлений.', 'unsubscribed': '🔕 Вы отписались от уведомлений.',
'diary_title': '📅 <b>Дневник</b> — выберите период:', 'diary_title': '📅 <b>Дневник</b> — выберите период:',
@@ -186,6 +187,7 @@ TRANSLATIONS = {
'month': '📅 Весь місяць', 'month': '📅 Весь місяць',
'no_events': 'Немає подій', 'no_events': 'Немає подій',
'no_lessons': 'Немає уроків', 'no_lessons': 'Немає уроків',
'time_unknown': 'невідомо',
'free_period': 'Вільно', 'free_period': 'Вільно',
'unsubscribed': '🔕 Ви відписалися від сповіщень.', 'unsubscribed': '🔕 Ви відписалися від сповіщень.',
'diary_title': '📅 <b>Щоденник</b> — виберіть період:', 'diary_title': '📅 <b>Щоденник</b> — виберіть період:',
@@ -257,6 +259,7 @@ TRANSLATIONS = {
'month': '📅 Whole month', 'month': '📅 Whole month',
'no_events': 'No events', 'no_events': 'No events',
'no_lessons': 'No lessons', 'no_lessons': 'No lessons',
'time_unknown': 'unknown',
'free_period': 'Free', 'free_period': 'Free',
'unsubscribed': '🔕 You have unsubscribed from notifications.', 'unsubscribed': '🔕 You have unsubscribed from notifications.',
'diary_title': '📅 <b>Diary</b> — choose a period:', 'diary_title': '📅 <b>Diary</b> — choose a period:',
@@ -490,7 +493,10 @@ def get_diary_keyboard(user_id: int | None = None):
def _parse_calendar_html(table_html: str) -> tuple: def _parse_calendar_html(table_html: str) -> tuple:
"""Parse calendar HTML table into (month_text, {day_num: {weekday, events}}).""" """Parse calendar HTML table into (month_text, {day_num: {weekday, events}}).
Each event is a dict: {'title': str, 'id': site event id | None, 'time': 'HH:MM' | None}.
"""
days = {} days = {}
weekdays = [] weekdays = []
rows = re.findall(r'<tr[^>]*>(.*?)</tr>', table_html, re.DOTALL) rows = re.findall(r'<tr[^>]*>(.*?)</tr>', table_html, re.DOTALL)
@@ -522,22 +528,72 @@ def _parse_calendar_html(table_html: str) -> tuple:
continue continue
day_num = dm.group(1) day_num = dm.group(1)
# Extract events: title attribute (full name) of ALL <a> tags inside the cell # Extract events: title attribute (full name) of ALL <a> tags inside the cell.
# Each event keeps its site data-event-id and a 'time' slot (filled later
# from the AJAX popup by fetch_diary_data). 'time' is 'HH:MM' or None.
events = [] events = []
for a_match in re.finditer(r'<a[^>]*>(.*?)</a>', cell, re.DOTALL): for a_match in re.finditer(r'<a[^>]*>(.*?)</a>', cell, re.DOTALL):
a_tag = a_match.group(0) a_tag = a_match.group(0)
# Prefer the title attribute (contains full name, not truncated) # Prefer the title attribute (contains full name, not truncated)
title_m = re.search(r'title\s*=\s*"([^"]*)"', a_tag) title_m = re.search(r'title\s*=\s*"([^"]*)"', a_tag)
et = title_m.group(1).strip() if title_m else re.sub(r'<[^>]+>', '', a_match.group(1)).strip() et = title_m.group(1).strip() if title_m else re.sub(r'<[^>]+>', '', a_match.group(1)).strip()
if et: if not et:
events.append(et) continue
id_m = re.search(r'data-event-id\s*=\s*"?(\d+)"?', a_tag)
events.append(
{
'title': et,
'id': id_m.group(1) if id_m else None,
'time': None,
}
)
weekday = weekdays[col_idx] if col_idx < len(weekdays) else '' weekday = weekdays[col_idx] if col_idx < len(weekdays) else ''
days[day_num] = {'weekday': weekday, 'events': events} days[day_num] = {'weekday': weekday, 'weekday_idx': col_idx, 'events': events}
return month_text, days return month_text, days
async def _collect_event_times(page) -> dict:
"""Read event times straight from the rendered calendar DOM.
The diary page embeds `div.event-full-info[data-event-full-info-id]`
containing `span.data` (e.g. "2026-09-02 16:30:00") for every event, so no
AJAX popup clicks are needed. Returns {event_id: 'HH:MM'} for events that
have a date; events without one are simply skipped.
"""
times_by_id: dict[str, str] = {}
try:
raw_times = await page.evaluate(
"""() => {
const out = {};
for (const div of document.querySelectorAll(
'div.event-full-info[data-event-full-info-id]'
)) {
const id = div.getAttribute('data-event-full-info-id');
const date_span = div.querySelector('p.date span.data');
if (id && date_span) {
out[id] = date_span.textContent.trim();
}
}
return out;
}"""
)
except Exception as e:
logger.warning(f'Failed to read diary event times from DOM: {e}')
return times_by_id
for event_id, time_text in (raw_times or {}).items():
if not time_text:
continue
m = re.search(r'(\d{1,2}:\d{2})', time_text)
if m:
times_by_id[event_id] = m.group(1)
logger.info(f'Diary event times collected for {len(times_by_id)} events')
return times_by_id
async def fetch_diary_data(phpsessid: str) -> dict | None: async def fetch_diary_data(phpsessid: str) -> dict | None:
logger.info('Fetching diary data via Playwright...') logger.info('Fetching diary data via Playwright...')
try: try:
@@ -570,6 +626,16 @@ async def fetch_diary_data(phpsessid: str) -> dict | None:
f.write(table_html) f.write(table_html)
month_text, days = _parse_calendar_html(table_html) month_text, days = _parse_calendar_html(table_html)
# Read event times by opening each event's AJAX popup.
times_by_id = await _collect_event_times(page)
if times_by_id:
for day_data in days.values():
for ev in day_data.get('events', []):
eid = ev.get('id')
if eid and eid in times_by_id:
ev['time'] = times_by_id[eid]
logger.info( logger.info(
f'Diary parsed: month={month_text!r}, days_with_events={sum(1 for d in days.values() if d["events"])}/{len(days)}' f'Diary parsed: month={month_text!r}, days_with_events={sum(1 for d in days.values() if d["events"])}/{len(days)}'
) )
@@ -596,6 +662,25 @@ def _parse_diary_month(text: str) -> str:
return text.strip() return text.strip()
def _format_event_line(event, lang: str) -> str:
"""Render one diary event line: 📌 title, with time in parens when known.
'08:00' is the site's placeholder for "no time specified" — show a localized
'time_unknown' mark instead. Unknown/absent time renders as before, no parens.
"""
if isinstance(event, dict):
title = escape(str(event.get('title') or ''))
tme = event.get('time')
else:
title = escape(str(event))
tme = None
if tme == '08:00':
return f'📌 {title} ({_tr(lang, "time_unknown")})'
if tme:
return f'📌 {title} ({escape(str(tme))})'
return f'📌 {title}'
def format_diary_day(data: dict, day_num: int, lang: str = 'en') -> str: def format_diary_day(data: dict, day_num: int, lang: str = 'en') -> str:
days = data.get('days', {}) days = data.get('days', {})
month_str = _parse_diary_month(data.get('monthFullText', '')) month_str = _parse_diary_month(data.get('monthFullText', ''))
@@ -605,7 +690,7 @@ def format_diary_day(data: dict, day_num: int, lang: str = 'en') -> str:
lines.append(_tr(lang, 'no_events')) lines.append(_tr(lang, 'no_events'))
else: else:
for e in day_data['events']: for e in day_data['events']:
lines.append(f'📌 {escape(e)}') lines.append(_format_event_line(e, lang))
lines.append(f'\n🔗 {DIARY_URL}') lines.append(f'\n🔗 {DIARY_URL}')
return '\n'.join(lines) return '\n'.join(lines)
@@ -614,12 +699,12 @@ def format_diary_week(data: dict, today: datetime, lang: str = 'en') -> str:
days = data.get('days', {}) days = data.get('days', {})
_parse_diary_month(data.get('monthFullText', '')) _parse_diary_month(data.get('monthFullText', ''))
monday = today - timedelta(days=today.weekday()) monday = today - timedelta(days=today.weekday())
sunday = monday + timedelta(days=6) friday = monday + timedelta(days=4)
start = f'{monday.day}.{monday.month}' start = f'{monday.day}.{monday.month}'
end = f'{sunday.day}.{sunday.month}' end = f'{friday.day}.{friday.month}'
short = DIARY_WEEKDAYS_SHORT.get(lang, DIARY_WEEKDAYS_SHORT['en']) short = DIARY_WEEKDAYS_SHORT.get(lang, DIARY_WEEKDAYS_SHORT['en'])
lines = [_tr(lang, 'diary_week_title', start=start, end=end) + '\n'] lines = [_tr(lang, 'diary_week_title', start=start, end=end) + '\n']
for i in range(7): for i in range(5):
d = monday + timedelta(days=i) d = monday + timedelta(days=i)
day_data = days.get(str(d.day)) day_data = days.get(str(d.day))
lines.append(f'─ <b>{short[i]} {d.day}.{d.month}</b> ─') lines.append(f'─ <b>{short[i]} {d.day}.{d.month}</b> ─')
@@ -627,7 +712,7 @@ def format_diary_week(data: dict, today: datetime, lang: str = 'en') -> str:
lines.append(_tr(lang, 'no_events') + '\n') lines.append(_tr(lang, 'no_events') + '\n')
else: else:
for e in day_data['events']: for e in day_data['events']:
lines.append(f'📌 {escape(e)}') lines.append(_format_event_line(e, lang))
lines.append('') lines.append('')
lines.append(f'🔗 {DIARY_URL}') lines.append(f'🔗 {DIARY_URL}')
return '\n'.join(lines) return '\n'.join(lines)
@@ -639,6 +724,17 @@ def format_diary_month(data: dict, lang: str = 'en') -> str:
lines = [f'📅 <b>{month_str}</b>\n'] lines = [f'📅 <b>{month_str}</b>\n']
for day_num in sorted(days.keys(), key=int): for day_num in sorted(days.keys(), key=int):
day_data = days[day_num] day_data = days[day_num]
if day_data.get('weekday_idx', 0) >= 5:
continue
if day_data.get('weekday', '').strip().lower() in (
'субота',
'суббота',
'saturday',
'неділя',
'воскресенье',
'sunday',
):
continue
events = day_data.get('events', []) events = day_data.get('events', [])
weekday = day_data.get('weekday', '') weekday = day_data.get('weekday', '')
lines.append(f'─ <b>{weekday} {day_num}</b> ─') lines.append(f'─ <b>{weekday} {day_num}</b> ─')
@@ -646,7 +742,7 @@ def format_diary_month(data: dict, lang: str = 'en') -> str:
lines.append(_tr(lang, 'no_events') + '\n') lines.append(_tr(lang, 'no_events') + '\n')
else: else:
for e in events: for e in events:
lines.append(f'📌 {escape(e)}') lines.append(_format_event_line(e, lang))
lines.append('') lines.append('')
lines.append(f'🔗 {DIARY_URL}') lines.append(f'🔗 {DIARY_URL}')
return '\n'.join(lines) return '\n'.join(lines)
@@ -676,7 +772,7 @@ def get_schedule_day_keyboard(user_id: int | None = None):
tomorrow = today + timedelta(days=1) tomorrow = today + timedelta(days=1)
today_label = _tr(lang, 'today') today_label = _tr(lang, 'today')
tomorrow_label = _tr(lang, 'tomorrow') tomorrow_label = _tr(lang, 'tomorrow')
short_keys = ['day_mon', 'day_tue', 'day_wed', 'day_thu', 'day_fri', 'day_sat', 'day_sun'] short_keys = ['day_mon', 'day_tue', 'day_wed', 'day_thu', 'day_fri']
keyboard = [ keyboard = [
[ [
InlineKeyboardButton( InlineKeyboardButton(
@@ -706,14 +802,6 @@ def get_schedule_day_keyboard(user_id: int | None = None):
InlineKeyboardButton( InlineKeyboardButton(
_tr(lang, short_keys[4]), callback_data=f'schedule_day_{SCHEDULE_WEEKDAYS_CANONICAL[4]}' _tr(lang, short_keys[4]), callback_data=f'schedule_day_{SCHEDULE_WEEKDAYS_CANONICAL[4]}'
), ),
InlineKeyboardButton(
_tr(lang, short_keys[5]), callback_data=f'schedule_day_{SCHEDULE_WEEKDAYS_CANONICAL[5]}'
),
],
[
InlineKeyboardButton(
_tr(lang, short_keys[6]), callback_data=f'schedule_day_{SCHEDULE_WEEKDAYS_CANONICAL[6]}'
),
], ],
] ]
return InlineKeyboardMarkup(keyboard) return InlineKeyboardMarkup(keyboard)
+25 -7
View File
@@ -3,7 +3,7 @@ hostNetwork: false
image: image:
registry: docker.io/library registry: docker.io/library
repository: traefik repository: traefik
tag: v3.7.6 tag: v3.7.13
securityContext: securityContext:
capabilities: capabilities:
@@ -44,6 +44,7 @@ ports:
web: web:
port: 80 port: 80
http: http:
aliasHeadersStrategy: delete
redirections: redirections:
entryPoint: entryPoint:
to: websecure to: websecure
@@ -52,32 +53,54 @@ ports:
websecure: websecure:
port: 443 port: 443
http: http:
aliasHeadersStrategy: delete
tls: tls:
enabled: true enabled: true
traefik:
port: 8080
exposedPort: 8080
protocol: TCP
expose:
default: false
http:
aliasHeadersStrategy: delete
ssh: ssh:
port: 2221 port: 2221
exposedPort: 2221 exposedPort: 2221
protocol: TCP protocol: TCP
expose: expose:
default: true default: true
http:
aliasHeadersStrategy: delete
minecraft-tcp: minecraft-tcp:
port: 25565 port: 25565
exposedPort: 25565 exposedPort: 25565
protocol: TCP protocol: TCP
expose: expose:
default: true default: true
http:
aliasHeadersStrategy: delete
minecraft-udp: minecraft-udp:
port: 19132 port: 19132
exposedPort: 19132 exposedPort: 19132
protocol: UDP protocol: UDP
expose: expose:
default: true default: true
checkmk-agent:
port: 8000
protocol: TCP
expose:
default: true
http:
aliasHeadersStrategy: delete
metrics: metrics:
port: 9100 port: 9100
exposedPort: 9100 exposedPort: 9100
protocol: TCP protocol: TCP
expose: expose:
default: false default: false
http:
aliasHeadersStrategy: delete
metrics: metrics:
prometheus: prometheus:
@@ -122,11 +145,6 @@ additionalArguments:
- "--providers.file.directory=/etc/traefik/dynamic" - "--providers.file.directory=/etc/traefik/dynamic"
- "--providers.file.watch=true" - "--providers.file.watch=true"
- "--providers.kubernetesCRD.allowCrossNamespace=true" - "--providers.kubernetesCRD.allowCrossNamespace=true"
- "--providers.kubernetesCRD.safeNaming=false"
- "--entryPoints.websecure.forwardedHeaders.trustedIPs=173.245.48.0/20,103.21.244.0/22,103.22.200.0/22,103.31.4.0/22,141.101.64.0/18,108.162.192.0/18,190.93.240.0/20,188.114.96.0/20,197.234.240.0/22,198.41.128.0/17,162.158.0.0/15,104.16.0.0/13,104.24.0.0/14,172.64.0.0/13,131.0.72.0/22,192.168.1.1,192.168.1.0/24,192.168.88.0/24,192.168.88.1" - "--entryPoints.websecure.forwardedHeaders.trustedIPs=173.245.48.0/20,103.21.244.0/22,103.22.200.0/22,103.31.4.0/22,141.101.64.0/18,108.162.192.0/18,190.93.240.0/20,188.114.96.0/20,197.234.240.0/22,198.41.128.0/17,162.158.0.0/15,104.16.0.0/13,104.24.0.0/14,172.64.0.0/13,131.0.72.0/22,192.168.1.1,192.168.1.0/24,192.168.88.0/24,192.168.88.1"
- "--entryPoints.web.forwardedHeaders.trustedIPs=173.245.48.0/20,103.21.244.0/22,103.22.200.0/22,103.31.4.0/22,141.101.64.0/18,108.162.192.0/18,190.93.240.0/20,188.114.96.0/20,197.234.240.0/22,198.41.128.0/17,162.158.0.0/15,104.16.0.0/13,104.24.0.0/14,172.64.0.0/13,131.0.72.0/22,192.168.1.1,192.168.1.0/24,192.168.88.0/24,192.168.88.1" - "--entryPoints.web.forwardedHeaders.trustedIPs=173.245.48.0/20,103.21.244.0/22,103.22.200.0/22,103.31.4.0/22,141.101.64.0/18,108.162.192.0/18,190.93.240.0/20,188.114.96.0/20,197.234.240.0/22,198.41.128.0/17,162.158.0.0/15,104.16.0.0/13,104.24.0.0/14,172.64.0.0/13,131.0.72.0/22,192.168.1.1,192.168.1.0/24,192.168.88.0/24,192.168.88.1"
log:
level: INFO
accessLog:
enabled: true
format: common