content: инфраструктурные проекты и раздел об инфраструктуре на /ai-dev/

This commit is contained in:
Nikolay Mamadaev committed 2026-10-07 16:04:04 +02:00
1 parent f383ec350a
commit be7da3d0ec
2 files changed
+170 -2

No files matched your search

+85 -1
View File
@@ -403,6 +403,7 @@
<li><button type="button" class="filter-chip" data-filter-value="mcp" aria-pressed="false">MCP</button></li>
<li><button type="button" class="filter-chip" data-filter-value="plugins" aria-pressed="false">Плагины</button></li>
<li><button type="button" class="filter-chip" data-filter-value="web" aria-pressed="false">Веб</button></li>
<li><button type="button" class="filter-chip" data-filter-value="infra" aria-pressed="false">Инфраструктура</button></li>
</ul>
<ol class="contact-grid ai-projects" id="ai-projects">
@@ -526,6 +527,67 @@
</div>
</article>
</li>
<li data-filter-item data-filter-tag="infra">
<article class="mp-card mp-card--compact" data-glass="false">
<div class="mp-card__media ai-projects__media" aria-hidden="true">
<img class="mp-card__image" src="../assets/ai-dev/placeholder-03.webp" alt="" width="640" height="400" loading="lazy" decoding="async" />
</div>
<div class="mp-card__body">
<h3 class="mp-card__title">Секреты и менеджер паролей</h3>
<p class="ai-projects__stack">Vaultwarden · Docker · Coolify</p>
<p class="mp-card__desc">Своё хранилище паролей с веб-доступом. Отдельный сервис, доступ к API закрыт ключом.</p>
<ul class="mp-card__tags" aria-label="Тип проекта">
<li class="mp-card__tag">Инфраструктура</li>
</ul>
</div>
</article>
</li>
<li data-filter-item data-filter-tag="infra">
<article class="mp-card mp-card--compact" data-glass="false">
<div class="mp-card__media ai-projects__media" aria-hidden="true">
<img class="mp-card__image" src="../assets/ai-dev/placeholder-01.webp" alt="" width="640" height="400" loading="lazy" decoding="async" />
</div>
<div class="mp-card__body">
<h3 class="mp-card__title">Прокси к хранилищу</h3>
<p class="ai-projects__stack">Go · Vaultwarden API · all-cipher</p>
<p class="mp-card__desc">Форк Vaultwarden API с поддержкой всех типов шифрования. Нужен, чтобы читать секреты из агентов и скиллов.</p>
<ul class="mp-card__tags" aria-label="Тип проекта">
<li class="mp-card__tag">Инфраструктура</li>
</ul>
</div>
</article>
</li>
<li data-filter-item data-filter-tag="infra">
<article class="mp-card mp-card--compact" data-glass="false">
<div class="mp-card__media ai-projects__media" aria-hidden="true">
<img class="mp-card__image" src="../assets/ai-dev/placeholder-02.webp" alt="" width="640" height="400" loading="lazy" decoding="async" />
</div>
<div class="mp-card__body">
<h3 class="mp-card__title">Уведомления</h3>
<p class="ai-projects__stack">Go · coturn · Matrix · ntfy</p>
<p class="mp-card__desc">Своя доставка уведомлений: ntfy для себя, Matrix-комната для агентов и WebRTC для звонков.</p>
<ul class="mp-card__tags" aria-label="Тип проекта">
<li class="mp-card__tag">Инфраструктура</li>
</ul>
</div>
</article>
</li>
<li data-filter-item data-filter-tag="infra bots">
<article class="mp-card mp-card--compact" data-glass="false">
<div class="mp-card__media ai-projects__media" aria-hidden="true">
<img class="mp-card__image" src="../assets/ai-dev/placeholder-03.webp" alt="" width="640" height="400" loading="lazy" decoding="async" />
</div>
<div class="mp-card__body">
<h3 class="mp-card__title">Бот для новостей</h3>
<p class="ai-projects__stack">Python · aiogram 3 · PostgreSQL</p>
<p class="mp-card__desc">Telegram-бот, который присылает дайджест новостей по подпискам.</p>
<ul class="mp-card__tags" aria-label="Тип проекта">
<li class="mp-card__tag">Инфраструктура</li>
<li class="mp-card__tag">Боты</li>
</ul>
</div>
</article>
</li>
</ol>
<h2 id="stack">Стек</h2>
@@ -547,6 +609,28 @@
<li class="hero__tag">MCP</li>
</ul>
<h2 id="infra">Инфраструктура</h2>
<p class="section__prose">
Всё, что я делаю, живёт на двух VPS и не зависит от внешних PaaS. Деплой
автоматический: пуш в ветку поднимает контейнер через Coolify, дальше
реверс-прокси и TLS берёт на себя Traefik.
</p>
<ul class="mp-card__tags" aria-label="Состав инфраструктуры">
<li class="mp-card__tag">Coolify · self-hosted панель деплоя</li>
<li class="mp-card__tag">Traefik · прокси и сертификаты</li>
<li class="mp-card__tag">Gitea · свой git и CI/CD</li>
<li class="mp-card__tag">WireGuard · меш из нескольких серверов</li>
<li class="mp-card__tag">XRay · VPN для доступа к API</li>
<li class="mp-card__tag">Docker · изоляция сервисов</li>
<li class="mp-card__tag">PostgreSQL · общая база по схемам</li>
<li class="mp-card__tag">Redis · очереди и состояние FSM</li>
</ul>
<p class="section__prose">
База одна на несколько проектов: каждый бот берёт свою схему, поэтому
сервисы не мешают друг другу, но состояние видно целиком. Доступ между
серверами закрыт WireGuard-туннелями, публичные адреса выдаёт Traefik.
</p>
<h2 id="links">Где я это выкладываю</h2>
<ul class="case-links-grid">
<li>
@@ -577,7 +661,7 @@
<a class="case-link-card" href="https://secrets-4-me.dynv6.net" target="_blank" rel="noopener noreferrer">
<span class="case-link-card__body">
<span class="case-link-card__title">secrets-4-me</span>
<span class="case-link-card__meta">Сервис, который работает сейчас</span>
<span class="case-link-card__meta">Мой менеджер паролей</span>
</span>
</a>
</li>
+85 -1
View File
@@ -100,6 +100,7 @@
<li><button type="button" class="filter-chip" data-filter-value="mcp" aria-pressed="false">MCP</button></li>
<li><button type="button" class="filter-chip" data-filter-value="plugins" aria-pressed="false">Плагины</button></li>
<li><button type="button" class="filter-chip" data-filter-value="web" aria-pressed="false">Веб</button></li>
<li><button type="button" class="filter-chip" data-filter-value="infra" aria-pressed="false">Инфраструктура</button></li>
</ul>
<ol class="contact-grid ai-projects" id="ai-projects">
@@ -223,6 +224,67 @@
</div>
</article>
</li>
<li data-filter-item data-filter-tag="infra">
<article class="mp-card mp-card--compact" data-glass="false">
<div class="mp-card__media ai-projects__media" aria-hidden="true">
<img class="mp-card__image" src="{{assetPrefix}}assets/ai-dev/placeholder-03.webp" alt="" width="640" height="400" loading="lazy" decoding="async" />
</div>
<div class="mp-card__body">
<h3 class="mp-card__title">Секреты и менеджер паролей</h3>
<p class="ai-projects__stack">Vaultwarden · Docker · Coolify</p>
<p class="mp-card__desc">Своё хранилище паролей с веб-доступом. Отдельный сервис, доступ к API закрыт ключом.</p>
<ul class="mp-card__tags" aria-label="Тип проекта">
<li class="mp-card__tag">Инфраструктура</li>
</ul>
</div>
</article>
</li>
<li data-filter-item data-filter-tag="infra">
<article class="mp-card mp-card--compact" data-glass="false">
<div class="mp-card__media ai-projects__media" aria-hidden="true">
<img class="mp-card__image" src="{{assetPrefix}}assets/ai-dev/placeholder-01.webp" alt="" width="640" height="400" loading="lazy" decoding="async" />
</div>
<div class="mp-card__body">
<h3 class="mp-card__title">Прокси к хранилищу</h3>
<p class="ai-projects__stack">Go · Vaultwarden API · all-cipher</p>
<p class="mp-card__desc">Форк Vaultwarden API с поддержкой всех типов шифрования. Нужен, чтобы читать секреты из агентов и скиллов.</p>
<ul class="mp-card__tags" aria-label="Тип проекта">
<li class="mp-card__tag">Инфраструктура</li>
</ul>
</div>
</article>
</li>
<li data-filter-item data-filter-tag="infra">
<article class="mp-card mp-card--compact" data-glass="false">
<div class="mp-card__media ai-projects__media" aria-hidden="true">
<img class="mp-card__image" src="{{assetPrefix}}assets/ai-dev/placeholder-02.webp" alt="" width="640" height="400" loading="lazy" decoding="async" />
</div>
<div class="mp-card__body">
<h3 class="mp-card__title">Уведомления</h3>
<p class="ai-projects__stack">Go · coturn · Matrix · ntfy</p>
<p class="mp-card__desc">Своя доставка уведомлений: ntfy для себя, Matrix-комната для агентов и WebRTC для звонков.</p>
<ul class="mp-card__tags" aria-label="Тип проекта">
<li class="mp-card__tag">Инфраструктура</li>
</ul>
</div>
</article>
</li>
<li data-filter-item data-filter-tag="infra bots">
<article class="mp-card mp-card--compact" data-glass="false">
<div class="mp-card__media ai-projects__media" aria-hidden="true">
<img class="mp-card__image" src="{{assetPrefix}}assets/ai-dev/placeholder-03.webp" alt="" width="640" height="400" loading="lazy" decoding="async" />
</div>
<div class="mp-card__body">
<h3 class="mp-card__title">Бот для новостей</h3>
<p class="ai-projects__stack">Python · aiogram 3 · PostgreSQL</p>
<p class="mp-card__desc">Telegram-бот, который присылает дайджест новостей по подпискам.</p>
<ul class="mp-card__tags" aria-label="Тип проекта">
<li class="mp-card__tag">Инфраструктура</li>
<li class="mp-card__tag">Боты</li>
</ul>
</div>
</article>
</li>
</ol>
<h2 id="stack">Стек</h2>
@@ -244,6 +306,28 @@
<li class="hero__tag">MCP</li>
</ul>
<h2 id="infra">Инфраструктура</h2>
<p class="section__prose">
Всё, что я делаю, живёт на двух VPS и не зависит от внешних PaaS. Деплой
автоматический: пуш в ветку поднимает контейнер через Coolify, дальше
реверс-прокси и TLS берёт на себя Traefik.
</p>
<ul class="mp-card__tags" aria-label="Состав инфраструктуры">
<li class="mp-card__tag">Coolify · self-hosted панель деплоя</li>
<li class="mp-card__tag">Traefik · прокси и сертификаты</li>
<li class="mp-card__tag">Gitea · свой git и CI/CD</li>
<li class="mp-card__tag">WireGuard · меш из нескольких серверов</li>
<li class="mp-card__tag">XRay · VPN для доступа к API</li>
<li class="mp-card__tag">Docker · изоляция сервисов</li>
<li class="mp-card__tag">PostgreSQL · общая база по схемам</li>
<li class="mp-card__tag">Redis · очереди и состояние FSM</li>
</ul>
<p class="section__prose">
База одна на несколько проектов: каждый бот берёт свою схему, поэтому
сервисы не мешают друг другу, но состояние видно целиком. Доступ между
серверами закрыт WireGuard-туннелями, публичные адреса выдаёт Traefik.
</p>
<h2 id="links">Где я это выкладываю</h2>
<ul class="case-links-grid">
<li>
@@ -274,7 +358,7 @@
<a class="case-link-card" href="https://secrets-4-me.dynv6.net" target="_blank" rel="noopener noreferrer">
<span class="case-link-card__body">
<span class="case-link-card__title">secrets-4-me</span>
<span class="case-link-card__meta">Сервис, который работает сейчас</span>
<span class="case-link-card__meta">Мой менеджер паролей</span>
</span>
</a>
</li>