mirror of
https://github.com/ada-dmitry/ada-dmitry.github.io.git
synced 2026-09-24 09:20:40 +00:00
Обновить заголовки в markdown-файлах, добавив кавычки для улучшения совместимости
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
---
|
||||
created: 04.08.2025
|
||||
title: Как Дима сервер домашний поднимал...
|
||||
title: "Как Дима сервер домашний поднимал..."
|
||||
layout: single
|
||||
---
|
||||
Как я и обещал, запускаю небольшой цикл постов о моём маленьком проекте: "Домашняя виртуализация на базе мини-ПК"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
---
|
||||
title: Коробочки-коробочки...
|
||||
title: "Коробочки-коробочки..."
|
||||
layout: single
|
||||
---
|
||||
Мы возвращаемся к нашей эпопее с домашним сервером, напомню, мы в прошлый раз обсуждали, что такое *виртуализация* - это технология, с помощью которой мы можем на одном устройстве (сервере, ПК и т.д.) разместить множество "виртуальных устройств".
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
---
|
||||
title: Новое начало
|
||||
title: "Новое начало"
|
||||
layout: single
|
||||
---
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
---
|
||||
title: SLI, SLO, SLA
|
||||
title: "SLI, SLO, SLA"
|
||||
---
|
||||
|
||||
## ✅ SLI — Service Level Indicator
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
---
|
||||
title: Отказоустойчивость VS Высокая доступность
|
||||
title: "Отказоустойчивость VS Высокая доступность"
|
||||
---
|
||||
|
||||
В мире ИТ надёжность систем — критически важная задача. Часто используют два термина: **отказоустойчивость** и **высокая доступность**. Несмотря на схожесть целей, это разные подходы.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
---
|
||||
title: Автоматизация в программной инфраструктуре
|
||||
title: "Автоматизация в программной инфраструктуре"
|
||||
---
|
||||
|
||||
> 👨🏫 Лектор: *Дмитрий Ширяев* — старший системный инженер (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-инженер»
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
---
|
||||
title: Что такое IT-инфраструктура
|
||||
title: "Что такое IT-инфраструктура"
|
||||
---
|
||||
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
---
|
||||
title: Домашняя лаборатория — хаб
|
||||
title: "Домашняя лаборатория — хаб"
|
||||
layout: single
|
||||
permalink: /homelab/
|
||||
description: Центральная страница проекта по домашнему серверу: цели, оглавление, дорожная карта и быстрые ссылки.
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
---
|
||||
title: Домашняя страница
|
||||
title: "Домашняя страница"
|
||||
layout: home
|
||||
classes: wide
|
||||
author_profile: true
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
---
|
||||
layout: single
|
||||
title: Все заметки
|
||||
title: "Все заметки"
|
||||
permalink: /notes/
|
||||
---
|
||||
|
||||
|
||||
@@ -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 + Reverse‑proxy</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
@@ -1,5 +1,5 @@
|
||||
---
|
||||
title: Летняя IT-школа КРОК
|
||||
title: "Летняя IT-школа КРОК"
|
||||
layout: single
|
||||
permalink: /system-engineer/
|
||||
---
|
||||
|
||||
+15
-14
@@ -1,42 +1,43 @@
|
||||
# _plugins/wikilinks.rb
|
||||
# Автоконвертация [[wikilinks]] -> [label](url) по коллекции _notes (и др. коллекциям, если надо)
|
||||
# Конвертирует [[wikilinks]] и [[slug|Текст]] в обычные markdown-ссылки
|
||||
# Ищет цели по коллекции `notes` (title и basename).
|
||||
|
||||
module Wikilinks
|
||||
def self.build_index(site)
|
||||
# Возьмём все документы из коллекции notes
|
||||
notes = site.collections['notes']&.docs || []
|
||||
index = {}
|
||||
col = site.collections['notes']
|
||||
docs = col ? col.docs : []
|
||||
idx = {}
|
||||
|
||||
notes.each do |d|
|
||||
# ключи для поиска: title и basename без расширения
|
||||
docs.each do |d|
|
||||
title = (d.data['title'] || File.basename(d.basename, '.*')).to_s
|
||||
slug = File.basename(d.basename, '.*').to_s
|
||||
|
||||
[title, slug].each do |k|
|
||||
k = k.to_s.downcase.strip
|
||||
next if k.empty?
|
||||
index[k.downcase] = d.url
|
||||
idx[k] = d.url
|
||||
end
|
||||
end
|
||||
|
||||
index
|
||||
idx
|
||||
end
|
||||
|
||||
def self.convert(content, site)
|
||||
return content if content.nil? || content.empty?
|
||||
|
||||
idx = build_index(site)
|
||||
|
||||
content.gsub(/\[\[([^\]|#]+)(?:\|([^\]]+))?\]\]/) do
|
||||
content.gsub(/\[\[([^\]|#]+?)(?:\|([^\]]+))?\]\]/) do
|
||||
key = Regexp.last_match(1).strip
|
||||
label = (Regexp.last_match(2) || key).strip
|
||||
url = idx[key.downcase]
|
||||
|
||||
# если нашли — заменяем, иначе оставляем как есть
|
||||
url ? "[#{label}](#{site.baseurl}#{url})" : Regexp.last_match(0)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# Прогоним через фильтр все страницы/посты/доки до рендера
|
||||
Jekyll::Hooks.register [:pages, :posts, :documents], :pre_render do |doc, payload|
|
||||
site = payload['site']
|
||||
doc.content = Wikilinks.convert(doc.content, site)
|
||||
# Важно: используем doc.site, а не payload['site']
|
||||
Jekyll::Hooks.register [:pages, :posts, :documents], :pre_render do |doc|
|
||||
doc.content = Wikilinks.convert(doc.content, doc.site)
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user