Files
srcoder.moe/templates/author.html
T
Black_Raven 1ea9e22d8f
Build, Test and Push Flask App / docker-build-and-push (push) Successful in 1m16s
Build, Test and Push Flask App / deploy (push) Successful in 1m31s
fix(html): Littel html css fix
2026-10-08 20:29:54 +03:00

315 lines
22 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Black Raven — SRE/DevOps инженер. Контакты, аккаунты и немного о себе.">
<title>Black Raven</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;600&display=swap" rel="stylesheet">
<link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}">
<link rel="icon" href="{{ url_for('static', filename='images/gitAva.jpeg') }}" type="image/jpeg">
</head>
<body>
<div class="bg-glow" aria-hidden="true"></div>
<div class="grid-overlay" aria-hidden="true"></div>
<header class="site-header" id="top">
<nav class="nav">
<a class="logo" href="{{ url_for('index') }}">
<span class="logo-mark">&lt;/&gt;</span>
<span class="logo-text">srcoder<span class="accent">.moe</span></span>
</a>
<button class="nav-toggle" id="navToggle" aria-label="Меню" aria-expanded="false">
<span></span><span></span><span></span>
</button>
<ul class="nav-links" id="navLinks">
<li><a href="{{ url_for('index') }}">Главная</a></li>
<li><a href="{{ url_for('index') }}#services">Сервисы</a></li>
<li><a href="{{ url_for('author') }}" class="nav-cta" aria-current="page">Об авторе</a></li>
</ul>
</nav>
</header>
<main>
<section class="author-hero">
<img class="author-avatar"
src="{{ url_for('static', filename='images/gitAva.jpeg') }}"
alt="Аватар Black Raven" width="190" height="190" data-reveal>
<h1 class="author-name" data-reveal>Black Raven</h1>
<p class="author-role" data-reveal>SRE / DevOps инженер</p>
<p class="author-bio" data-reveal>
Привет! Собираю инфраструктуру как код, автоматизирую рутину
и держу собственный сервер — именно на нём живёт всё,
что вы видите на главной странице. Здесь коротко о том,
кто я и где меня можно найти.
</p>
<div class="contact-groups" data-reveal>
<div class="contact-group">
<h3>Контактная информация</h3>
<div class="contact-buttons">
<a class="contact-btn" href="https://t.me/simpleRussianProger" target="_blank" rel="noopener">
<img src="{{ url_for('static', filename='images/telegram.svg') }}" alt="" width="18" height="18">
Telegram <span class="handle">@simpleRussianProger</span>
</a>
<a class="contact-btn" href="https://matrix.to/#/@raven:srcoder.moe" target="_blank" rel="noopener">
<img src="{{ url_for('static', filename='images/matrix.svg') }}" alt="" width="18" height="18">
Matrix <span class="handle">@raven:srcoder.moe</span>
</a>
<a class="contact-btn" href="https://discord.com/users/767707485255106590" target="_blank" rel="noopener">
<img src="{{ url_for('static', filename='images/discord.svg') }}" alt="" width="18" height="18">
Discord <span class="handle">профиль</span>
</a>
</div>
</div>
<div class="contact-group">
<h3>Development</h3>
<div class="contact-buttons">
<a class="contact-btn" href="https://github.com/BlackCorbeau" target="_blank" rel="noopener">
<img src="{{ url_for('static', filename='images/github.svg') }}" alt="" width="18" height="18">
GitHub <span class="handle">BlackCorbeau</span>
</a>
<a class="contact-btn" href="https://git.srcoder.moe/Black_Raven" target="_blank" rel="noopener">
<img src="{{ url_for('static', filename='images/gitea.svg') }}" alt="" width="18" height="18">
Gitea <span class="handle">Black_Raven</span>
</a>
</div>
</div>
<div class="contact-group">
<h3>Games</h3>
<div class="contact-buttons">
<a class="contact-btn" href="https://steamcommunity.com/profiles/76561199137306791" target="_blank" rel="noopener">
<img src="{{ url_for('static', filename='images/steam.svg') }}" alt="" width="18" height="18">
Steam <span class="handle">профиль</span>
</a>
</div>
</div>
</div>
</section>
<section class="section" id="details">
<div class="cards author-cards">
<article class="card" data-reveal>
<div class="card-icon">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z"></path><path d="M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z"></path></svg>
</div>
<div class="card-body">
<h3>Образование</h3>
<p><strong>2023–2027, ННГУ им. Лобачевского</strong>, Нижний Новгород —
программная инженерия.</p>
</div>
</article>
<article class="card" data-reveal>
<div class="card-icon">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="8" r="7"></circle><polyline points="8.21 13.89 7 23 12 20 17 23 15.79 13.88"></polyline></svg>
</div>
<div class="card-body">
<h3>Достижения</h3>
<ul class="list">
<li><strong>2025</strong> — хакатон от ИТ-холдинга Т1, 3-е место
<a class="inline-link" href="https://disk.rustprogersteam.ru/shr/kvpwutpbt7tt/%D0%A21_%D0%9A%D0%BE%D0%B4_%D0%9C%D0%B0%D1%80%D1%82_Certificate_2025_04_13_17_33_29_145Z_1_compressed.pdf" target="_blank" rel="noopener">сертификат</a></li>
<li><strong>2026</strong> — ИТ-марафон «Кейс Лаб», направление
«Облачные сервисы»
<a class="inline-link" href="https://disk.rustprogersteam.ru/shr/890gdowwch0y/%D0%A0%D0%B5%D0%BC%D0%B8%D0%B7%D0%BE%D0%B2%20%D0%9A%D0%B8%D1%80%D0%B8%D0%BB%D0%BB%20%D0%9B%D1%8C%D0%B2%D0%BE%D0%B2%D0%B8%D1%87.pdf" target="_blank" rel="noopener">сертификат</a></li>
</ul>
</div>
</article>
<article class="card" data-reveal>
<div class="card-icon">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="10"></circle><line x1="2" y1="12" x2="22" y2="12"></line><path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"></path></svg>
</div>
<div class="card-body">
<h3>Языки</h3>
<ul class="list">
<li>Английский — B2</li>
<li>Французский — A1?</li>
</ul>
</div>
</article>
<article class="card" data-reveal>
<div class="card-icon">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"></path><circle cx="9" cy="7" r="4"></circle><path d="M23 21v-2a4 4 0 0 0-3-3.87"></path><path d="M16 3.13a4 4 0 0 1 0 7.75"></path></svg>
</div>
<div class="card-body">
<h3>Обо мне</h3>
<p>Ответственный и пунктуальный, люблю своё дело,
умею работать в команде и открыт к обмену опытом.</p>
</div>
</article>
<article class="card card-wide" data-reveal>
<div class="card-icon">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="4" y="4" width="16" height="16" rx="2" ry="2"></rect><rect x="9" y="9" width="6" height="6"></rect><line x1="9" y1="1" x2="9" y2="4"></line><line x1="15" y1="1" x2="15" y2="4"></line><line x1="9" y1="20" x2="9" y2="23"></line><line x1="15" y1="20" x2="15" y2="23"></line><line x1="20" y1="9" x2="23" y2="9"></line><line x1="20" y1="14" x2="23" y2="14"></line><line x1="1" y1="9" x2="4" y2="9"></line><line x1="1" y1="14" x2="4" y2="14"></line></svg>
</div>
<div class="card-body">
<h3>Навыки</h3>
<div class="chips">
<span class="chip"><img class="chip-icon" src="{{ url_for('static', filename='images/icons/linux.svg') }}" alt="" width="14" height="14">Linux</span>
<span class="chip"><img class="chip-icon" src="{{ url_for('static', filename='images/icons/docker.svg') }}" alt="" width="14" height="14">Docker / Compose</span>
<span class="chip"><img class="chip-icon" src="{{ url_for('static', filename='images/icons/ansible.svg') }}" alt="" width="14" height="14">Ansible</span>
<span class="chip"><img class="chip-icon" src="{{ url_for('static', filename='images/icons/terraform.svg') }}" alt="" width="14" height="14">Terraform</span>
<span class="chip"><img class="chip-icon" src="{{ url_for('static', filename='images/icons/git.svg') }}" alt="" width="14" height="14">Git</span>
<span class="chip"><img class="chip-icon" src="{{ url_for('static', filename='images/icons/githubactions.svg') }}" alt="" width="14" height="14">GitHub Actions</span>
<span class="chip"><img class="chip-icon" src="{{ url_for('static', filename='images/icons/bash.svg') }}" alt="" width="14" height="14">Bash</span>
<span class="chip"><img class="chip-icon" src="{{ url_for('static', filename='images/icons/python.svg') }}" alt="" width="14" height="14">Python</span>
<span class="chip"><img class="chip-icon" src="{{ url_for('static', filename='images/icons/kubernetes.svg') }}" alt="" width="14" height="14">Kubernetes</span>
<span class="chip"><img class="chip-icon" src="{{ url_for('static', filename='images/icons/argo.svg') }}" alt="" width="14" height="14">Argo CD</span>
<span class="chip"><img class="chip-icon" src="{{ url_for('static', filename='images/icons/vim.svg') }}" alt="" width="14" height="14">Vim</span>
<span class="chip"><svg class="chip-icon chip-icon-svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"></path></svg>сеть и безопасность</span>
</div>
</div>
</article>
<article class="card card-wide card-flyout" data-reveal tabindex="0">
<div class="card-icon">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="16 18 22 12 16 6"></polyline><polyline points="8 6 2 12 8 18"></polyline></svg>
</div>
<div class="card-body">
<h3>Проекты</h3>
<ul class="list">
<li>Отказоустойчивый веб-хостинг в VK Cloud</li>
<li>Мониторинг веб-инфраструктуры в VK Cloud</li>
<li>CI/CD и GitOps для Kubernetes</li>
</ul>
</div>
<span class="flyout-hint">наведите курсор — расскажу подробнее</span>
<div class="flyout">
<div class="flyout-inner">
<div class="project">
<h4 class="project-title">Отказоустойчивый веб-хостинг в VK Cloud <span class="project-year">2026</span></h4>
<div class="project-stack">
<span class="stack-tag">Terraform</span>
<span class="stack-tag">Docker</span>
<span class="stack-tag">GitHub Actions</span>
<span class="stack-tag">PostgreSQL</span>
<span class="stack-tag">L7 Load Balancer</span>
<span class="stack-tag stack-role">личный проект</span>
<span class="stack-tag">GitHub</span>
</div>
<ul class="list project-points">
<li>Спроектировал облачную инфраструктуру: VPC с public/private-подсетями, 2 web-VM в приватном контуре, bastion и управляемую PostgreSQL; веб-доступ организовал через L7 Load Balancer.</li>
<li>Описал инфраструктуру в Terraform, настроил S3 backend для state и security groups: SSH ограничен моим IP, PostgreSQL доступна только из приватной подсети.</li>
<li>Настроил запуск Flask/Gunicorn в Docker и CI/CD в GitHub Actions с этапами plan → apply → destroy; параметры облака передаются через GitHub Secrets.</li>
<li>Проверил отказоустойчивость остановкой контейнера на одном web-сервере и нагрузочным тестом <code>ab -n 1000 -c 10</code>: 999 успешных запросов из 1000, 76.54 req/s.</li>
</ul>
</div>
<div class="project">
<h4 class="project-title">Мониторинг веб-инфраструктуры в VK Cloud <span class="project-year">2026</span></h4>
<div class="project-stack">
<span class="stack-tag">Terraform</span>
<span class="stack-tag">Prometheus</span>
<span class="stack-tag">Grafana</span>
<span class="stack-tag">Alertmanager</span>
<span class="stack-tag">Node Exporter</span>
<span class="stack-tag">L7 Load Balancer</span>
<span class="stack-tag stack-role">личный проект</span>
</div>
<ul class="list project-points">
<li>Развернул через Terraform 2 web-VM в приватной подсети, bastion/monitoring-VM и L7 Load Balancer с HTTP health-check для контроля доступности сервисов.</li>
<li>Автоматизировал установку и запуск Prometheus, Grafana, Alertmanager и Node Exporter через user_data и systemd; Prometheus собирает метрики с monitoring- и web-узлов каждые 15 секунд.</li>
<li>Добавил правило алерта InstanceDown с условием недоступности узла более 5 минут и настроил сетевые правила для мониторинговых endpoints.</li>
</ul>
</div>
<div class="project">
<h4 class="project-title">CI/CD и GitOps для Kubernetes <span class="project-year">2026</span></h4>
<div class="project-stack">
<span class="stack-tag">Terraform</span>
<span class="stack-tag">GitHub Actions</span>
<span class="stack-tag">Kubernetes</span>
<span class="stack-tag">Argo CD</span>
<span class="stack-tag">Kustomize</span>
<span class="stack-tag">GitHub</span>
</div>
<ul class="list project-points">
<li>Описал инфраструктуру VK Cloud и Kubernetes-ресурсы в Git: Deployment, Service, ConfigMap и Kustomize; приложение разворачивается в двух репликах.</li>
<li>Настроил GitHub Actions: validate и plan запускаются для изменений, артефакт tfplan передаётся в этап apply после успешного плана.</li>
<li>Интегрировал pipeline с GitOps-подходом: после Terraform Apply workflow получает IP балансировщика, обновляет ConfigMap и коммитит изменение обратно в Git для дальнейшей синхронизации в Kubernetes.</li>
</ul>
</div>
</div>
</div>
</article>
</div>
</section>
<section class="section" id="listening">
<div class="ym-tracker" data-reveal>
<div class="ym-head">
<div class="ym-title">
<span class="ym-live"><span class="pulse"></span>live</span>
<h2>Что я слушаю</h2>
</div>
<div class="ym-meta">
<span class="ym-updated" id="ymUpdated">подключение…</span>
<button class="ym-refresh" id="ymRefresh" type="button" aria-label="Обновить">↻</button>
</div>
</div>
<div class="ym-now" id="ymNow">
<span class="ym-now-label"><span class="pulse"></span>играет сейчас</span>
<div class="ym-now-body" id="ymNowBody">проверяю…</div>
</div>
<ol class="ym-list" id="ymHistory">
<li class="ym-status" id="ymStatus">Загрузка истории…</li>
</ol>
</div>
</section>
<div class="friend-cta" data-reveal>
<p class="friend-note">Также рекомендую ознакомиться</p>
<a class="friend-btn" href="https://risdeveau.lair.moe" target="_blank" rel="noopener">
risdeveau.lair.moe
</a>
</div>
</main>
<footer class="site-footer">
<div class="footer-inner">
<div class="footer-col footer-left">
<span class="footer-badge"><span class="pulse"></span>Сервер существует с 2025 года</span>
</div>
<div class="footer-col footer-center">
<a href="https://git.srcoder.moe/Black_Raven/srcoder.moe" rel="noopener">
Исходный код сайта
</a>
</div>
<div class="footer-col footer-right">
<a href="mailto:w0ron.black@yandex.ru">w0ron.black@yandex.ru</a>
</div>
</div>
<div class="footer-bottom">
<div class="webring">
<a href="https://nixwebr.ing/prev/srcoder" rel="external prev" title="Предыдущий сайт">&larr;</a>
<a href="https://nixwebr.ing/" rel="external" class="webring-main">Nix webring</a>
<a href="https://nixwebr.ing/next/srcoder" rel="external next" title="Следующий сайт">&rarr;</a>
</div>
</div>
</footer>
<script src="{{ url_for('static', filename='js/main.js') }}"></script>
<script src="{{ url_for('static', filename='js/ym.js') }}"></script>
</body>
</html>