Обновить заголовки в markdown-файлах, добавив кавычки для улучшения совместимости

This commit is contained in:
ada
2025-08-22 12:19:13 +03:00
parent 1f3e306e0a
commit 7e9b229c3d
18 changed files with 127 additions and 30 deletions
@@ -1,6 +1,6 @@
--- ---
created: 04.08.2025 created: 04.08.2025
title: Как Дима сервер домашний поднимал... title: "Как Дима сервер домашний поднимал..."
layout: single layout: single
--- ---
Как я и обещал, запускаю небольшой цикл постов о моём маленьком проекте: "Домашняя виртуализация на базе мини-ПК" Как я и обещал, запускаю небольшой цикл постов о моём маленьком проекте: "Домашняя виртуализация на базе мини-ПК"
@@ -1,5 +1,5 @@
--- ---
title: Коробочки-коробочки... title: "Коробочки-коробочки..."
layout: single layout: single
--- ---
Мы возвращаемся к нашей эпопее с домашним сервером, напомню, мы в прошлый раз обсуждали, что такое *виртуализация* - это технология, с помощью которой мы можем на одном устройстве (сервере, ПК и т.д.) разместить множество "виртуальных устройств". Мы возвращаемся к нашей эпопее с домашним сервером, напомню, мы в прошлый раз обсуждали, что такое *виртуализация* - это технология, с помощью которой мы можем на одном устройстве (сервере, ПК и т.д.) разместить множество "виртуальных устройств".
+1 -1
View File
@@ -1,5 +1,5 @@
--- ---
title: Новое начало title: "Новое начало"
layout: single layout: single
--- ---
+1 -1
View File
@@ -1,5 +1,5 @@
--- ---
title: SLI, SLO, SLA title: "SLI, SLO, SLA"
--- ---
## ✅ SLI — Service Level Indicator ## ✅ SLI — Service Level Indicator
@@ -1,5 +1,5 @@
--- ---
title: Отказоустойчивость VS Высокая доступность title: "Отказоустойчивость VS Высокая доступность"
--- ---
В мире ИТ надёжность систем — критически важная задача. Часто используют два термина: **отказоустойчивость** и **высокая доступность**. Несмотря на схожесть целей, это разные подходы. В мире ИТ надёжность систем — критически важная задача. Часто используют два термина: **отказоустойчивость** и **высокая доступность**. Несмотря на схожесть целей, это разные подходы.
@@ -1,5 +1,5 @@
--- ---
title: Автоматизация в программной инфраструктуре title: "Автоматизация в программной инфраструктуре"
--- ---
> 👨‍🏫 Лектор: *Дмитрий Ширяев* — старший системный инженер (CROC) > 👨‍🏫 Лектор: *Дмитрий Ширяев* — старший системный инженер (CROC)
@@ -1,5 +1,5 @@
--- ---
title: Базовые сетевые службы title: "Базовые сетевые службы"
--- ---
👨‍🏫 *Лектор: Никита Ефимов* 👨‍🏫 *Лектор: Никита Ефимов*
@@ -1,5 +1,5 @@
--- ---
title: Введение в виртуализацию title: "Введение в виртуализацию"
--- ---
> Лектор: Артур Марцинкевич - Системный инженер Департамента инфраструктурных решений и сервисов > Лектор: Артур Марцинкевич - Системный инженер Департамента инфраструктурных решений и сервисов
@@ -1,5 +1,5 @@
--- ---
title: Инфраструктура на уровне железа title: "Инфраструктура на уровне железа"
--- ---
👨‍🏫 *Антон Иванов* 👨‍🏫 *Антон Иванов*
@@ -1,5 +1,5 @@
--- ---
title: Системы мониторинга title: "Системы мониторинга"
--- ---
**Зачем нужен мониторинг:** **Зачем нужен мониторинг:**
@@ -1,5 +1,5 @@
--- ---
title: Системы резервного копирования (СРК) title: "Системы резервного копирования (СРК)"
--- ---
**Источник:** Летняя Школа «System-инженер» **Источник:** Летняя Школа «System-инженер»
@@ -1,5 +1,5 @@
--- ---
title: Что такое IT-инфраструктура title: "Что такое IT-инфраструктура"
--- ---
+1 -1
View File
@@ -1,5 +1,5 @@
--- ---
title: Домашняя лаборатория — хаб title: "Домашняя лаборатория — хаб"
layout: single layout: single
permalink: /homelab/ permalink: /homelab/
description: Центральная страница проекта по домашнему серверу: цели, оглавление, дорожная карта и быстрые ссылки. description: Центральная страница проекта по домашнему серверу: цели, оглавление, дорожная карта и быстрые ссылки.
+1 -1
View File
@@ -1,5 +1,5 @@
--- ---
title: Домашняя страница title: "Домашняя страница"
layout: home layout: home
classes: wide classes: wide
author_profile: true author_profile: true
+1 -1
View File
@@ -1,6 +1,6 @@
--- ---
layout: single layout: single
title: Все заметки title: "Все заметки"
permalink: /notes/ permalink: /notes/
--- ---
+96
View File
@@ -0,0 +1,96 @@
---
title: "Проекты"
layout: single
permalink: /projects/
description: Подборка моих активных проектов: Домашняя лаборатория (Homelab) и конспекты Летней IT‑школы КРОК.
---
# Проекты
Ниже — мои текущие живые проекты. Это не статичные статьи, а развивающиеся хабы с практикой, конспектами и дорожной картой.
<style>
.projects-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 1rem;
margin-top: .75rem;
}
.project-card {
border: 1px solid #e5e7eb;
border-radius: 12px;
padding: 1rem 1.1rem;
background: #fff;
box-shadow: 0 1px 2px rgba(0,0,0,.04);
transition: transform .18s ease, box-shadow .18s ease;
}
.project-card:hover { transform: translateY(-2px); box-shadow: 0 8px 22px rgba(0,0,0,.08); }
.project-title { margin: 0 0 .35rem; font-size: 1.15rem; }
.project-desc { margin: .35rem 0 .75rem; color: #4b5563; }
.badges { display: flex; flex-wrap: wrap; gap: .4rem; margin: 0 0 .8rem; }
.badge {
display: inline-block; padding: .18rem .5rem; border-radius: 999px;
font-size: .8rem; line-height: 1; background: #f3f4f6; color: #374151; border: 1px solid #e5e7eb;
}
.project-actions { display: flex; gap: .5rem; flex-wrap: wrap; }
.btn {
display: inline-block; padding: .45rem .75rem; border-radius: 8px; font-weight: 600;
text-decoration: none; border: 1px solid #111827; color: #111827;
}
.btn:hover { background: #111827; color: #fff; }
.btn.secondary { border-color: #6b7280; color: #374151; }
.btn.secondary:hover { background: #6b7280; color: #fff; }
@media (prefers-color-scheme: dark) {
.project-card { background: #111; border-color: #222; box-shadow: none; }
.project-desc { color: #c7c7c7; }
.badge { background: #1a1a1a; color: #d1d5db; border-color: #2a2a2a; }
.btn { border-color: #e5e7eb; color: #e5e7eb; }
.btn:hover { background: #e5e7eb; color: #111; }
.btn.secondary { border-color: #9ca3af; color: #d1d5db; }
.btn.secondary:hover { background: #9ca3af; color: #111; }
}
</style>
<div class="projects-grid">
<div class="project-card">
<h3 class="project-title">🏠 Домашняя лаборатория (Homelab)</h3>
<div class="badges">
<span class="badge">Proxmox VE</span>
<span class="badge">KVM/LXC</span>
<span class="badge">WireGuard</span>
<span class="badge">VPS + Reverseproxy</span>
</div>
<p class="project-desc">
Практический цикл о мини‑ПК и Proxmox: виртуалки и контейнеры, публикация сервисов через туннели и VPS,
инфраструктурные принципы и безопасность. Внутри — обзор, быстрые ссылки и дорожная карта.
</p>
<div class="project-actions">
<a class="btn" href="/homelab/">Перейти в хаб</a>
<a class="btn secondary" href="/homelab/#публикации">Публикации</a>
</div>
</div>
<div class="project-card">
<h3 class="project-title">📘 Летняя IT‑школа КРОК (Системная инженерия)</h3>
<div class="badges">
<span class="badge">Виртуализация</span>
<span class="badge">Сети</span>
<span class="badge">Мониторинг</span>
<span class="badge">Бэкапы</span>
</div>
<p class="project-desc">
Конспекты и практические заметки по курсу системной инженерии: основы инфраструктуры, автоматизация,
виртуализация, базовые сетевые службы, СРК и мониторинг. Постепенно пополняется.
</p>
<div class="project-actions">
<a class="btn" href="/system-engineer/">Перейти в хаб</a>
<a class="btn secondary" href="/system-engineer/#📘-теория">Оглавление</a>
</div>
</div>
</div>
---
Подобные страницы‑хабы помогают отслеживать прогресс и быстро переходить к нужным разделам. Если видите неточности — дайте знать, поправлю.
+1 -1
View File
@@ -1,5 +1,5 @@
--- ---
title: Летняя IT-школа КРОК title: "Летняя IT-школа КРОК"
layout: single layout: single
permalink: /system-engineer/ permalink: /system-engineer/
--- ---
+15 -14
View File
@@ -1,42 +1,43 @@
# _plugins/wikilinks.rb # _plugins/wikilinks.rb
# Автоконвертация [[wikilinks]] -> [label](url) по коллекции _notes (и др. коллекциям, если надо) # Конвертирует [[wikilinks]] и [[slug|Текст]] в обычные markdown-ссылки
# Ищет цели по коллекции `notes` (title и basename).
module Wikilinks module Wikilinks
def self.build_index(site) def self.build_index(site)
# Возьмём все документы из коллекции notes col = site.collections['notes']
notes = site.collections['notes']&.docs || [] docs = col ? col.docs : []
index = {} idx = {}
notes.each do |d| docs.each do |d|
# ключи для поиска: title и basename без расширения
title = (d.data['title'] || File.basename(d.basename, '.*')).to_s title = (d.data['title'] || File.basename(d.basename, '.*')).to_s
slug = File.basename(d.basename, '.*').to_s slug = File.basename(d.basename, '.*').to_s
[title, slug].each do |k| [title, slug].each do |k|
k = k.to_s.downcase.strip
next if k.empty? next if k.empty?
index[k.downcase] = d.url idx[k] = d.url
end end
end end
index idx
end end
def self.convert(content, site) def self.convert(content, site)
return content if content.nil? || content.empty?
idx = build_index(site) idx = build_index(site)
content.gsub(/\[\[([^\]|#]+)(?:\|([^\]]+))?\]\]/) do content.gsub(/\[\[([^\]|#]+?)(?:\|([^\]]+))?\]\]/) do
key = Regexp.last_match(1).strip key = Regexp.last_match(1).strip
label = (Regexp.last_match(2) || key).strip label = (Regexp.last_match(2) || key).strip
url = idx[key.downcase] url = idx[key.downcase]
# если нашли — заменяем, иначе оставляем как есть
url ? "[#{label}](#{site.baseurl}#{url})" : Regexp.last_match(0) url ? "[#{label}](#{site.baseurl}#{url})" : Regexp.last_match(0)
end end
end end
end end
# Прогоним через фильтр все страницы/посты/доки до рендера # Важно: используем doc.site, а не payload['site']
Jekyll::Hooks.register [:pages, :posts, :documents], :pre_render do |doc, payload| Jekyll::Hooks.register [:pages, :posts, :documents], :pre_render do |doc|
site = payload['site'] doc.content = Wikilinks.convert(doc.content, doc.site)
doc.content = Wikilinks.convert(doc.content, site)
end end