Refactor code structure for improved readability and maintainability

This commit is contained in:
ada
2025-08-19 08:11:05 +03:00
parent d782e77271
commit 16efb7276f
14 changed files with 168 additions and 7 deletions
+1 -1
View File
@@ -46,7 +46,7 @@ defaults:
type: "posts" type: "posts"
values: values:
layout: single layout: single
toc: true toc: false
author_profile: true author_profile: true
# --- Навигация (подключим _data/navigation.yml) --- # --- Навигация (подключим _data/navigation.yml) ---
+1 -1
View File
@@ -2,7 +2,7 @@
created: 04.08.2025 created: 04.08.2025
title: Как Дима сервер домашний поднимал... title: Как Дима сервер домашний поднимал...
layout: single layout: single
author_profile: true
--- ---
Как я и обещал, запускаю небольшой цикл постов о моём маленьком проекте: "Домашняя виртуализация на базе мини-ПК" Как я и обещал, запускаю небольшой цикл постов о моём маленьком проекте: "Домашняя виртуализация на базе мини-ПК"
+52
View File
@@ -0,0 +1,52 @@
---
title: Коробочки-коробочки...
layout: single
---
Мы возвращаемся к нашей эпопее с домашним сервером, напомню, мы в прошлый раз обсуждали, что такое *виртуализация* - это технология, с помощью которой мы можем на одном устройстве (сервере, ПК и т.д.) разместить множество "виртуальных устройств".
Сегодня мы поговорим о таких вещах, как *контейнеризация* и заденем при этом понятие *гипервизора*.
---
Начнем, пожалуй, как раз с *гипервизора*, кратко, емко, четко:
## Гипервизоры
***Гипервизор*** - программа, позволяющая управлять виртуальными машинами и контейнерами (есть небольшое различие, но об этом дальше). На этом, в общем-то, всё, стоит ещё сказать, что гипервизоры бывают двух типов:
1) <u>*Bare-metal*</u> - т.е. гипервизоры представляющие собой "операционную систему", которая устанавливается напрямую на "железо". Это обеспечивает **наибольшую** производительность и совместимость, но, очевидно, что это сложнее, чем просто поставить VirtualBox)
> Примеры: Proxmox, ESXi, oVirt(и производные)
2) *<u>Hosted</u>* - гипервизор, являющийся натурально программой для уже существующей системы. Такие гипервизоры проще в освоении и используются для пользовательского использования (на винду линукс накатить попробовать).
Меньшая производительность т.к. комплектующие эмулируются для машин, но проще в использовании.
> Примеры: VMWare Workstation, VirtualBox, QEMU/KVM VM Manager.
![alt text](../assets/images/hs2/hypervisiors1.png)
## Контейнеризация
Как мы уже говорили, очень круто изолировать каждую программу в отдельной машине, отдельный инструментарий и всё такое, но в чем же проблема?
А проблема в том, что мы для каждой программки поднимаем *полноценную (иногда урезанную) ОС*, со своим ядром, своими особенностями и т.д.
И, разумеется, это всё надо питать ресурсами, что дорого, очень дорого, особенно, если у нас отказоустойчивый кластер с *десятками*, а то и *сотнями* машин.
**Какой же выход?** А очень простой, давайте не поднимать для каждой "машины" отдельную ОС с ядром, а использовать одно - которое предоставляет ОС сервера, а приложения запускать в изолированных "окружениях".
> [!info] Пример
> Я не уверен, что смогу объяснить, как это работает, простым языком, но просто представьте, что мы работаем в ресторане и наша задача держать сырье (продукты) в холоде, чтоб те не испортились.
>
> Вот виртуализация, это если мы для каждого ящика с продуктами будем покупать отдельный холодильник, да, это круто, что выход из строя одного холодильника не повлияет на другие, но пипец, как затратно и по деньгам и по электричеству.
>
> С другой же стороны, мы можем выделить целую комнату под холодильник, там наладить централизованное охлаждение и туда уже сгружать ящики с продуктами, вот это контейнеризация, когда мы отдельные ящики охлаждаем общей системой.
> К слову, почему я сказал, что гипервизоры для контейнеров и виртуалок отличаются? В сущности, для контейнеров нет как таковой системы, но есть CRI - Container Runtime Interface, то, с помощью чего, контейнеры и запускаются.
> ВМ такого не надо, у них у каждой своё ядро. (Но я не хочу разделять понятия, потому что сейчас гипервизоры универсальны и имеют как среду для ВМ, так и CRI)
>
> <img src="../assets/images/hs2/serv_container1.png" alt="Описание" width="30%">
В общем-то, на этом всё, но напоследок скажу, что в продакшене часто используют смешанный тип, т.е. мы на виртуализации разворачиваем среду для контейнеризации и в машинах разворчиваем контейнеры смежных приложений, так мы изолируем группы программ друг от друга.
Спасибо за внимание, в следующей статье мы уже перейдем к конкретным решениям, которые использую я.
+110
View File
@@ -0,0 +1,110 @@
---
title: Новое начало
layout: single
---
Доброго вечера, коллеги!
Перейдем таки к конкретике:
Изначально, я хотел старый компьютер превратить в сервер (ну вот страсть у меня появилась, ничего не поделать)
Взял я несколько старых ПК, в т.ч. с дачи, вытащил из них всё, что можно вытащить.
Собрал, по итогу, страшную штуку, которую положил себе под кровать в общежитии (поменял ещё кулеры, чтоб не шумел), но надежды не увенчались успехом, соседу не понравился шум ПК(хоть его и не было слышно...). Ладно, подумал было я, сервер, работающий только днем - не сервер.
Отложил я идею, все комплектующие из сервера в основной ПК, все харды (HDD), оперативную память, сделал себе убер-машину.
Прошло пару месяцев и вот я загорелся идеей купить мини-пк (те, что ставят в офисе обычным работника, которым не нужны огромные мощности, но вашна компактность) и на базе него сделать домашний сервер.
Спустя некоторое время поисков, я нашел хороший вариант, а именно - китайский мини-пк с неплохими характеристиками и аж 4-мя слотами под m.2 SSD (потом расскажу, зачем и что это вообще такое)
![alt text](../assets/images/hs3/gmktec.png)
Значит, недолго думая, я его заказал, он пришел, круто, классно, что дальше?
А дальше, мы начинаем новую главу нашего рассказа:
## Proxmox
Как я уже рассказывал, существует несколько видов [[Коробочки-коробочки...#Гипервизоры|гипервизоров]], мы поставим на наш сервер гипервизор первого типа, т.е. непосредственно на "железо".
Это нам позволяет независимо друг от друга запускать ВМ-ки и контейнеры.
Что такое конкретно ***Proxmox***? Это Open-Source решение для виртуализации, т.е. бесплатное, т.е. разрабатывается открытым сообществом (ну, сейчас уже не совсем, но так или иначе).
Почему именно это решение? Есть oVirt, который тоже бесплатный, но это прям совсем Enterprise решение, там очень много фишек, которые обычному пользователю не нужны, да и Proxmox с этой точки зрения более *коробочное* решение.
![alt text](../assets/images/hs3/pve_ui.png)
Вот как выглядит установленный Proxmox (ну, точнее уже с несколькими развернутыми контейнерами).
Тут вы сможете обнаружить список уже развернутых систем, краткую сводку по системе и много-много другое. Интерфейс слегка страшный, но только на первый взгляд.
Идем дальше, кратко расскажу, как я (и вы) получили доступ к этому сайту (у меня есть ещё несколько, но они скрыты от публики)
Представьте, у вас есть комьютер в домашней сети. У него есть опредлеленный ip-адрес (его ему выдал DHCP-сервер, но об этом в другой раз) формата `192.168.*.*`, это его внутренний ip, т.е. он за NAT'ом
> [!info] NAT
> NAT (Network Address Translation) — это как переводчик между твоей домашней сетью и Интернетом.
> Внутри дома у всех устройств есть свои «внутренние» IP-адреса, которые снаружи никто не видит.
> Когда ты выходишь в Интернет, роутер меняет этот адрес на один «внешний» общий для всей сети.
Если ещё проще, то он просто маскирует твой личный ip под общий для всей сети. Более того, ip твоего роутера тоже не статичный *зачастую*, а динамический, выдаваемый провайдером.
---
Итого, у нашего сервера постоянно меняющийся ip, к которому мы не можем обращаться из интернета (это круто, да, безопасность, но вопрос об удаленном доступе уходит сам собой:)).
Что делать? Вариантов несколько, но практически везде, кодовое слово "*туннель*":
1) Tailscale - это готовое решения для создания виртуальной локальной сети (каждому устройству в сети выдается "виртуальный ip")
***Плюсы***: Быстро, бесплатно, почти автоматически.
***Минусы***: Никакой гибкости, решение только для индивидуального доступа (вот такой сайт не сделать), безопасность перекладывается на внешнего вендора.
![alt text](../assets/images/hs3/tailscale.png)
---
2) VPS - сервер
**Решение**: Мы покупаем маленький внешний сервер у провайдера (в моем случае Timecloud.Web, *не реклама*, у них явно маркетинг не на мой канал направлен), у него есть белый IP.
Что дальше? А дальше, мы поднимаем на этом VPS "обратный прокси", т.е. веб-сервер, но который не сам по себе будет выводить картинку, а "переадресовывать" запросы пользователя на наш внутренний сервер.
***Плюсы***: Гибко, интересно.
***Минусы***: Стоит денег, сложно в настройке, безопасность ложится на нас.
> VPS (Virtual Private Server) — это как отдельный «компьютер» внутри большого компьютера, который тебе сдают в аренду.
![alt text](../assets/images/hs3/vps.png)
---
Как вы понимаете, я - мазозист и выбрал VPS (ну, ещё мне нужен был вывод сайта в публичное поле).
Но вот проблема, наш VPS точно так же не видит нащ сервер, что делать? ТУННЕЛЬ!
Мы поднимаем буквально VPN (Virtual Private Network) - проще говоря, делаем такой же tailscale, но сами)
Вот поднимаем туннель, т.е. зашифрованное соединение между двумя клиентами (peer2peer), они друг друга видят, притом VPS может свободно обращаться устройствам внутри сервера, что нам и нужно.
Не буду углубляться в детали происходящего, но я использую WireGuard, как туннель.
![alt text](../assets/images/hs3/wireguard1.png)
Притом, что удобно, мы этот самый WG используем и как способ защиты от нежелательных гостей, ведь мы можем настроить наши сайты так, чтобы они пускали к себе только пользователей, которые тоже являются участниками это приватной сети. Кайфы, да?
Отвечу за вас, да!
У нас есть классный способ "проникать" на наши ресурсы, притом четко разграничивать доступы (вы этот сайт видите, а некоторые не видите).
Последнее, что я опишу в этой огромной статье - это домен - dg.ada-dev.ru (dg - digitalgarden).
В данном случае, это поддомен домена ada-dev.ru, который зарегистрирован на меня в том же TimeCloud.Web.
На него я выписываю сертификаты, поэтому на вас не ругается браузер, когда вы заходите на этот сайт по http**s**, что делает наше с вами соединение безопасным)
На этом на сегодня все, рассказывайте, что было понятно, что не понятно, что пояснить, куда что добавить и о чем сделать следующую статью:
1) Продолжаем про сервер
2) Поговорим о сторонних вещах (DNS, DHCP, или что-то ещё)
Всем спокойной ночи и прекрасных выходных!
![alt text](../assets/images/hs3/cat1.png)
Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 660 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 265 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

+4 -5
View File
@@ -2,6 +2,7 @@
title: Домашняя страница title: Домашняя страница
layout: home layout: home
classes: wide classes: wide
author_profile: true
--- ---
Привет! Меня зовут Дима (**ada**) и это мой маленький цифровой садик. Привет! Меня зовут Дима (**ada**) и это мой маленький цифровой садик.
Цифровой сад - это метафора на базу знаний, которой я хочу поделиться с общественностью. Цифровой сад - это метафора на базу знаний, которой я хочу поделиться с общественностью.
@@ -9,11 +10,9 @@ classes: wide
Этот сайт, словно сад (или лес, как угодно), будет разрастаться новыми и новыми знаниями. Этот сайт, словно сад (или лес, как угодно), будет разрастаться новыми и новыми знаниями.
Пока что здесь будет только моя эпопея с домашним сервером, но дальше мы будем углубляться в новые и новые темы Пока что здесь будет только моя эпопея с домашним сервером, но дальше мы будем углубляться в новые и новые темы
## Эпопея про домашний сервер ## Эпопея про домашний сервер <br>
1) [Как Дима сервер домашний поднимал...]({% link _notes/hs1.md %}) <br>
1) [Как Дима сервер домашний поднимал...]({% link _notes/hs1.md %}) 2) [Коробочки-коробочки...] <br>
2) [[Коробочки-коробочки...]] <br>
3) [[Новое начало]] <br> 3) [[Новое начало]] <br>
> Забавно, если все это называется садом, то отдельные фрагменты под общей темой - грядка) > Забавно, если все это называется садом, то отдельные фрагменты под общей темой - грядка)