Compare commits
7
Commits
6b1f4c3c3f
..
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
493382008f | ||
|
|
062491301d | ||
|
|
4058b9a596 | ||
|
|
936d8d4e47 | ||
|
|
08f79026c0 | ||
|
|
1b1d55a09e | ||
|
|
3562955ce1 |
@@ -0,0 +1,67 @@
|
||||
name: Build and publish site container
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
tags:
|
||||
- "v*"
|
||||
paths:
|
||||
- "site/**"
|
||||
- ".github/workflows/build-site-container.yml"
|
||||
pull_request:
|
||||
paths:
|
||||
- "site/**"
|
||||
- ".github/workflows/build-site-container.yml"
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
packages: write
|
||||
|
||||
env:
|
||||
REGISTRY: ghcr.io
|
||||
IMAGE_NAME: ${{ github.repository }}
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Check out repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v3
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
|
||||
- name: Log in to GHCR
|
||||
if: github.event_name != 'pull_request'
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
registry: ${{ env.REGISTRY }}
|
||||
username: ${{ github.actor }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Generate image metadata
|
||||
id: metadata
|
||||
uses: docker/metadata-action@v5
|
||||
with:
|
||||
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
||||
tags: |
|
||||
type=raw,value=latest,enable={{is_default_branch}}
|
||||
type=ref,event=branch
|
||||
type=ref,event=tag
|
||||
type=sha
|
||||
|
||||
- name: Build and publish container
|
||||
uses: docker/build-push-action@v6
|
||||
with:
|
||||
context: ./site
|
||||
platforms: linux/amd64
|
||||
push: ${{ github.event_name != 'pull_request' }}
|
||||
tags: ${{ steps.metadata.outputs.tags }}
|
||||
labels: ${{ steps.metadata.outputs.labels }}
|
||||
cache-from: type=gha
|
||||
cache-to: type=gha,mode=max
|
||||
@@ -3,15 +3,18 @@
|
||||
|
||||
\newcommand{\ResumeEmail}{gudovdo@my.msu.ru}
|
||||
\newcommand{\ResumeGitHubHandle}{kr0sh512}
|
||||
\newcommand{\ResumeGiteaHandle}{self-hosted Gitea}
|
||||
\newcommand{\ResumeTelegramHandle}{kr0sh\_512}
|
||||
\newcommand{\ResumeGitHubUrl}{https://github.com/kr0sh512}
|
||||
\newcommand{\ResumeGiteaUrl}{https://git.krosh.dev}
|
||||
\newcommand{\ResumeTelegramUrl}{https://t.me/kr0sh_512}
|
||||
|
||||
\newcommand{\ResumeDevOpsStack}{Linux, Docker/OCI, Kubernetes, K3s, RKE2, Helm, Ansible, Traefik, systemd, SSH, Let's Encrypt}
|
||||
\newcommand{\ResumeCiTools}{GitHub Actions, GHCR}
|
||||
\newcommand{\ResumeDevelopmentStack}{Python, C, C++, TypeScript, Shell, SQL; FastAPI, SQLAlchemy, Pydantic, React, Vite}
|
||||
\newcommand{\ResumeDataStores}{PostgreSQL, SQLite, MongoDB}
|
||||
\newcommand{\ResumeQualityTools}{pytest, mypy, Black}
|
||||
\newcommand{\ResumeLinuxStack}{ALT \& Arch Linux, systemd, SSH, Bash, TCP/IP, DNS, TLS}
|
||||
\newcommand{\ResumeContainersStack}{Docker/OCI, Kubernetes, K3s, RKE2,
|
||||
Helm, Traefik}
|
||||
\newcommand{\ResumeCiTools}{Ansible, Git, GitHub Actions, GHCR}
|
||||
\newcommand{\ResumeDevelopmentStack}{Python, C, C++, SQL; FastAPI, SQLAlchemy, pytest}
|
||||
\newcommand{\ResumeObservabilityTools}{Prometheus, Grafana, Alertmanager, Node Exporter}
|
||||
|
||||
\newcommand{\ResumeAltRpmName}{ALT RPM Set Version Research}
|
||||
\newcommand{\ResumeAltRpmUrl}{https://github.com/kr0sh512/alt-rpm-set-version}
|
||||
|
||||
+11
-5
@@ -67,6 +67,8 @@
|
||||
\quad·\quad
|
||||
\href{\ResumeGitHubUrl}{github.com/\ResumeGitHubHandle}
|
||||
\quad·\quad
|
||||
\href{\ResumeGiteaUrl}{\ResumeGiteaHandle}
|
||||
\quad·\quad
|
||||
\href{\ResumeTelegramUrl}{t.me/\ResumeTelegramHandle}
|
||||
\end{minipage}\par
|
||||
|
||||
@@ -82,18 +84,22 @@
|
||||
|
||||
\section{\ResumeSkillsSection}
|
||||
\begin{itemize}
|
||||
\item \textbf{\ResumeDevOpsSkillLabel:} \ResumeDevOpsSkillText.
|
||||
\item \textbf{\ResumeLinuxSkillLabel:} \ResumeLinuxSkillText.
|
||||
\item \textbf{\ResumeContainersSkillLabel:} \ResumeContainersSkillText.
|
||||
\item \textbf{\ResumeCiSkillLabel:} \ResumeCiSkillText.
|
||||
\item \textbf{\ResumeObservabilitySkillLabel:} \ResumeObservabilitySkillText.
|
||||
\item \textbf{\ResumeDevelopmentSkillLabel:} \ResumeDevelopmentSkillText.
|
||||
\item \textbf{\ResumeDataSkillLabel:} \ResumeDataSkillText.
|
||||
\ifdefined\ResumeLanguagesSkillLabel
|
||||
\item \textbf{\ResumeLanguagesSkillLabel:} \ResumeLanguagesSkillText.
|
||||
\fi
|
||||
\end{itemize}
|
||||
|
||||
\section{\ResumeProjectsSection}
|
||||
\project{\href{\ResumeAltRpmUrl}{\ResumeAltRpmName}}{\ResumeAltRpmDescription}
|
||||
\project{\ResumeInfrastructureName}{\ResumeInfrastructureDescription}
|
||||
\project{\href{\ResumeAltRpmUrl}{\ResumeAltRpmName}}{\ResumeAltRpmDescription}
|
||||
% \project{\href{\ResumeNetworkDiagramsUrl}{\ResumeNetworkDiagramsName}}{\ResumeNetworkDiagramsDescription}
|
||||
\project{\href{\ResumeNexusSyncUrl}{\ResumeNexusSyncName}}{\ResumeNexusSyncDescription}
|
||||
% \project{\href{\ResumeVpnBotUrl}{\ResumeVpnBotName}}{\ResumeVpnBotDescription}
|
||||
\project{\href{\ResumePomodoroUrl}{\ResumePomodoroName}}{\ResumePomodoroDescription}
|
||||
\project{\href{\ResumeNetworkDiagramsUrl}{\ResumeNetworkDiagramsName}}{\ResumeNetworkDiagramsDescription}
|
||||
\project{\href{\ResumeVpnBotUrl}{\ResumeVpnBotName}}{\ResumeVpnBotDescription}
|
||||
|
||||
\end{document}
|
||||
|
||||
+31
-15
@@ -3,38 +3,54 @@
|
||||
\newcommand{\ResumeDocumentLanguage}{english}
|
||||
\newcommand{\ResumeName}{Dmitrii Gudov}
|
||||
\newcommand{\ResumePdfTitle}{Resume — Dmitrii Gudov}
|
||||
\newcommand{\ResumeHeadline}{DevOps / Linux Engineer · Systems and Backend Developer}
|
||||
\newcommand{\ResumeHeadline}{DevOps / Linux Engineer · Infrastructure Automation}
|
||||
|
||||
\newcommand{\ResumeSummarySection}{Professional Summary}
|
||||
\newcommand{\ResumeSummaryText}{DevOps-oriented developer and Computer Science student at CMC MSU. I build and operate Linux infrastructure, automate repeatable work, and develop systems and backend tools. My primary interests are ALT Linux and RPM internals, Kubernetes, containers, CI/CD, Python, and C.}
|
||||
\newcommand{\ResumeSummaryText}{Fourth-year student at the Faculty of Computational Mathematics and Cybernetics, Lomonosov Moscow State University, with hands-on experience operating Linux servers, a multi-node K3s cluster, and infrastructure automation. I deploy containerized services, configure CI/CD, monitoring, TLS, and DNS, and automate server configuration with Ansible. I develop systems tools in Python and C and have worked on teams at BaseALT and Yandex. I am seeking a DevOps/Linux internship focused on automation, operations, and troubleshooting.}
|
||||
|
||||
\newcommand{\ResumeExperienceSection}{Experience}
|
||||
\newcommand{\ResumeBaseAltDate}{Present}
|
||||
\newcommand{\ResumeBaseAltDescription}{Linux/RPM tooling and systems research, including ALT Linux dependency mechanisms, RPM performance, and compatibility.}
|
||||
\newcommand{\ResumeBaseAltDescription}{%
|
||||
\begin{itemize}
|
||||
\item Researched the set:version mechanism in ALT RPM and developed an alternative implementation for comparing encoded dependency sets.
|
||||
\item Built a test bench for A/B testing librpm variants against real APT scenarios: check, install, upgrade, autoremove, and dist-upgrade.
|
||||
\item Validated compatibility with differential testing and sanitizers and analyzed performance using hasher and perf.
|
||||
\end{itemize}}
|
||||
\newcommand{\ResumeYandexRole}{Yandex — DevTools Intern, Autonomous Transport}
|
||||
\newcommand{\ResumeYandexDate}{Fall 2025}
|
||||
\newcommand{\ResumeYandexDescription}{Software development in a developer tooling team.}
|
||||
\newcommand{\ResumeYandexDescription}{%
|
||||
\begin{itemize}
|
||||
\item Used Python multithreading to speed up builds of internal components.
|
||||
\item Added block-level tests to CI to support retiring legacy code.
|
||||
\item Refactored Go code to reduce the overall size of rover firmware.
|
||||
\end{itemize}}
|
||||
|
||||
\newcommand{\ResumeEducationSection}{Education}
|
||||
\newcommand{\ResumeUniversityName}{Lomonosov Moscow State University}
|
||||
\newcommand{\ResumeEducationDate}{Current}
|
||||
\newcommand{\ResumeEducationDescription}{Faculty of Computational Mathematics and Cybernetics, Computer Science.}
|
||||
\newcommand{\ResumeEducationDate}{2023--2027}
|
||||
\newcommand{\ResumeEducationDescription}{Faculty of Computational Mathematics and Cybernetics, Bachelor's degree program in Applied Mathematics and Computer Science. Department of Computer Systems Automation (ASVK).}
|
||||
|
||||
\newcommand{\ResumeSkillsSection}{Core Skills}
|
||||
\newcommand{\ResumeDevOpsSkillLabel}{DevOps and infrastructure}
|
||||
\newcommand{\ResumeDevOpsSkillText}{\ResumeDevOpsStack}
|
||||
\newcommand{\ResumeCiSkillLabel}{CI/CD}
|
||||
\newcommand{\ResumeCiSkillText}{\ResumeCiTools, multi-architecture container builds, automated testing, packaging, and publishing}
|
||||
\newcommand{\ResumeLinuxSkillLabel}{Linux and networking}
|
||||
\newcommand{\ResumeLinuxSkillText}{\ResumeLinuxStack}
|
||||
\newcommand{\ResumeContainersSkillLabel}{Containers and orchestration}
|
||||
\newcommand{\ResumeContainersSkillText}{\ResumeContainersStack}
|
||||
\newcommand{\ResumeCiSkillLabel}{Automation and CI/CD}
|
||||
\newcommand{\ResumeCiSkillText}{\ResumeCiTools, multi-architecture container builds, testing, packaging, and publishing}
|
||||
\newcommand{\ResumeObservabilitySkillLabel}{Observability}
|
||||
\newcommand{\ResumeObservabilitySkillText}{\ResumeObservabilityTools}
|
||||
\newcommand{\ResumeDevelopmentSkillLabel}{Development}
|
||||
\newcommand{\ResumeDevelopmentSkillText}{\ResumeDevelopmentStack}
|
||||
\newcommand{\ResumeDataSkillLabel}{Data and quality}
|
||||
\newcommand{\ResumeDataSkillText}{\ResumeDataStores; \ResumeQualityTools, sanitizers, differential testing, benchmarking}
|
||||
\newcommand{\ResumeLanguagesSkillLabel}{Languages}
|
||||
\newcommand{\ResumeLanguagesSkillText}{English — B2}
|
||||
|
||||
\newcommand{\ResumeProjectsSection}{Selected Projects}
|
||||
\newcommand{\ResumeAltRpmDescription}{research into encoded symbol sets and RPM dependency comparison, covering C implementations, hashing, compatibility, sanitizer checks, and APT/RPM benchmarks.}
|
||||
\newcommand{\ResumeNexusSyncDescription}{a client-server system for centralized computer management and approved command dispatch. FastAPI, SQLAlchemy, CLI, YAML configuration, systemd, standalone builds, and CI.}
|
||||
\newcommand{\ResumeInfrastructureName}{Homelab}
|
||||
\newcommand{\ResumeInfrastructureDescription}{Linux server automation with Ansible, multi-node K3s/RKE2 operations, container deployment, ingress and ServiceLB networking, TLS automation, and remote troubleshooting.}
|
||||
\newcommand{\ResumePomodoroDescription}{a browser timer built with React, TypeScript, and Vite; tested and published by GitHub Actions as an unprivileged multi-architecture image in GHCR.}
|
||||
\newcommand{\ResumeAltRpmDescription}{research into encoded symbol sets and RPM dependency comparison in ALT Linux, covering C implementations, hashing, compatibility, sanitizer checks, and APT/RPM benchmarks.}
|
||||
\newcommand{\ResumeNexusSyncDescription}{a client-server system for centralized computer management and approved command execution. FastAPI, SQLAlchemy, CLI, YAML configuration, systemd, standalone builds, and CI.}
|
||||
\newcommand{\ResumeInfrastructureName}{Seven-node K3s homelab}
|
||||
\newcommand{\ResumeInfrastructureDescription}{operating containerized services; configuring Traefik ingress, ServiceLB, TLS certificates, and DNS; monitoring with Prometheus, Grafana, and Node Exporter; alerting with Alertmanager; automating Linux server configuration with Ansible; and troubleshooting network and system issues.}
|
||||
\newcommand{\ResumeNetworkDiagramsDescription}{a Python tool for building and visualizing network topologies.}
|
||||
\newcommand{\ResumeVpnBotDescription}{a containerized Python bot for managing invitations and user lifecycle through the Marzban API.}
|
||||
\newcommand{\ResumePomodoroDescription}{a browser timer built with React, TypeScript, and Vite; tested and published by GitHub Actions as an unprivileged multi-architecture image in GHCR.}
|
||||
|
||||
+36
-13
@@ -3,38 +3,61 @@
|
||||
\newcommand{\ResumeDocumentLanguage}{russian}
|
||||
\newcommand{\ResumeName}{Дмитрий Гудов}
|
||||
\newcommand{\ResumePdfTitle}{Резюме — Дмитрий Гудов}
|
||||
\newcommand{\ResumeHeadline}{DevOps / Linux-инженер · системный и backend-разработчик}
|
||||
\newcommand{\ResumeHeadline}{DevOps / Linux-инженер · Автоматизация инфраструктуры}
|
||||
|
||||
\newcommand{\ResumeSummarySection}{Профессиональный профиль}
|
||||
\newcommand{\ResumeSummaryText}{DevOps-ориентированный разработчик и студент ВМК МГУ. Разрабатываю и сопровождаю Linux-инфраструктуру, автоматизирую повторяемые операции и создаю системные и backend-инструменты. Основные направления: ALT Linux и внутреннее устройство RPM, Kubernetes, контейнеризация, CI/CD, Python и C.}
|
||||
\newcommand{\ResumeSummaryText}{Студент 4 курса ВМК МГУ с практическим опытом эксплуатации Linux-серверов,
|
||||
многоузлового K3s-кластера и автоматизации инфраструктуры. Разворачиваю
|
||||
контейнерные сервисы, настраиваю CI/CD, мониторинг, TLS и DNS, автоматизирую
|
||||
конфигурацию серверов с помощью Ansible. Разрабатываю системные инструменты
|
||||
на Python и C; работал в командах BaseALT и Яндекса. Ищу стажировку в области
|
||||
DevOps/Linux с задачами автоматизации, эксплуатации и диагностики.}
|
||||
|
||||
\newcommand{\ResumeExperienceSection}{Опыт}
|
||||
\newcommand{\ResumeBaseAltDate}{по настоящее время}
|
||||
\newcommand{\ResumeBaseAltDescription}{Инструменты для Linux/RPM и системные исследования: механизмы зависимостей ALT Linux, производительность и совместимость RPM.}
|
||||
\newcommand{\ResumeBaseAltDescription}{%
|
||||
\begin{itemize}
|
||||
\item Исследовал механизм set:version в ALT RPM и разработал альтернативную реализацию сравнения кодированных множеств зависимостей.
|
||||
\item Создал стенд для A/B-тестирования вариантов librpm на реальных сценариях APT: check, install, upgrade, autoremove и dist-upgrade.
|
||||
\item Проверял совместимость дифференциальными тестами и санитайзерами, анализировал производительность с помощью hasher и perf.
|
||||
\end{itemize}}
|
||||
\newcommand{\ResumeYandexRole}{Яндекс — стажёр, команда DevTools автономного транспорта}
|
||||
\newcommand{\ResumeYandexDate}{осень 2025}
|
||||
\newcommand{\ResumeYandexDescription}{Разработка в команде инструментов для разработчиков.}
|
||||
\newcommand{\ResumeYandexDescription}{%
|
||||
\begin{itemize}
|
||||
\item С помощью MultiThreading в python ускорил сборку внутренних компонент.
|
||||
\item Добавление в CI блок-тестов для отказа от legacy-кода.
|
||||
\item Рефактор golang кода для уменьшения общего размера прошивки роверов.
|
||||
\end{itemize}}
|
||||
|
||||
\newcommand{\ResumeEducationSection}{Образование}
|
||||
\newcommand{\ResumeUniversityName}{Московский государственный университет имени М. В. Ломоносова}
|
||||
\newcommand{\ResumeEducationDate}{обучаюсь}
|
||||
\newcommand{\ResumeEducationDescription}{Факультет вычислительной математики и кибернетики, Computer Science.}
|
||||
\newcommand{\ResumeEducationDate}{2023--2027}
|
||||
\newcommand{\ResumeEducationDescription}{Факультет вычислительной математики и кибернетики, бакалавриат, направление «Прикладная математика и информатика» (ПМИ). Кафедра автоматизации систем вычислительных комплексов (АСВК).}
|
||||
|
||||
\newcommand{\ResumeSkillsSection}{Ключевые навыки}
|
||||
\newcommand{\ResumeDevOpsSkillLabel}{DevOps и инфраструктура}
|
||||
\newcommand{\ResumeDevOpsSkillText}{\ResumeDevOpsStack}
|
||||
\newcommand{\ResumeCiSkillLabel}{CI/CD}
|
||||
\newcommand{\ResumeCiSkillText}{\ResumeCiTools, мультиархитектурные сборки контейнеров, автоматизированное тестирование, упаковка и публикация}
|
||||
\newcommand{\ResumeLinuxSkillLabel}{Linux и сети}
|
||||
\newcommand{\ResumeLinuxSkillText}{\ResumeLinuxStack}
|
||||
\newcommand{\ResumeContainersSkillLabel}{Контейнеры и оркестрация}
|
||||
\newcommand{\ResumeContainersSkillText}{\ResumeContainersStack}
|
||||
\newcommand{\ResumeCiSkillLabel}{Автоматизация и CI/CD}
|
||||
\newcommand{\ResumeCiSkillText}{\ResumeCiTools, мультиархитектурные сборки контейнеров, тестирование, упаковка и публикация}
|
||||
\newcommand{\ResumeObservabilitySkillLabel}{Наблюдаемость}
|
||||
\newcommand{\ResumeObservabilitySkillText}{\ResumeObservabilityTools}
|
||||
\newcommand{\ResumeDevelopmentSkillLabel}{Разработка}
|
||||
\newcommand{\ResumeDevelopmentSkillText}{\ResumeDevelopmentStack}
|
||||
\newcommand{\ResumeDataSkillLabel}{Данные и качество}
|
||||
\newcommand{\ResumeDataSkillText}{\ResumeDataStores; \ResumeQualityTools, санитайзеры, дифференциальное тестирование, бенчмаркинг}
|
||||
\newcommand{\ResumeLanguagesSkillLabel}{Языки}
|
||||
\newcommand{\ResumeLanguagesSkillText}{английский B2}
|
||||
|
||||
\newcommand{\ResumeProjectsSection}{Избранные проекты}
|
||||
\newcommand{\ResumeAltRpmDescription}{исследование кодированных множеств символов и сравнения зависимостей RPM: C-реализации, хеширование, совместимость, проверки с санитайзерами и APT/RPM-бенчмарки.}
|
||||
\newcommand{\ResumeAltRpmDescription}{исследование кодированных множеств символов и сравнения зависимостей RPM в ALT Linux: C-реализации, хеширование, совместимость, проверки с санитайзерами и APT/RPM-бенчмарки.}
|
||||
\newcommand{\ResumeNexusSyncDescription}{клиент-серверная система централизованного управления компьютерами и запуска разрешённых команд. FastAPI, SQLAlchemy, CLI, YAML-конфигурация, systemd, автономные сборки и CI.}
|
||||
\newcommand{\ResumeInfrastructureName}{"Домашний" кластер}
|
||||
\newcommand{\ResumeInfrastructureDescription}{homelab, автоматизация Linux-серверов через Ansible, эксплуатация многоузловых K3s/RKE2, контейнерные развёртывания, ingress/ServiceLB, автоматизация TLS и удалённая диагностика.}
|
||||
\newcommand{\ResumePomodoroDescription}{браузерный таймер на React, TypeScript и Vite; тестируется и публикуется GitHub Actions как непривилегированный мультиархитектурный образ в GHCR.}
|
||||
\newcommand{\ResumeInfrastructureDescription}{Homelab: семи-узловой K3s-кластер — эксплуатация контейнерных сервисов,
|
||||
настройка Traefik ingress и ServiceLB, TLS-сертификатов и DNS. Мониторинг через Prometheus, Grafana и Node Exporter, алертинг через Alertmanager.
|
||||
Автоматизация конфигурации Linux-серверов с помощью Ansible; диагностика сетевых и системных неисправностей.}
|
||||
\newcommand{\ResumeNetworkDiagramsDescription}{Python-инструмент для построения и визуализации сетевых топологий.}
|
||||
\newcommand{\ResumeVpnBotDescription}{контейнеризированный Python-бот для управления приглашениями и жизненным циклом пользователей через Marzban API.}
|
||||
\newcommand{\ResumePomodoroDescription}{браузерный таймер на React, TypeScript и Vite; тестируется и публикуется GitHub Actions как непривилегированный мультиархитектурный образ в GHCR.}
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
FROM docker.io/nginxinc/nginx-unprivileged:alpine
|
||||
|
||||
COPY --chown=101:101 --chmod=644 nginx.conf /etc/nginx/conf.d/default.conf
|
||||
COPY --chown=101:101 index.html /usr/share/nginx/html/index.html
|
||||
|
||||
EXPOSE 8080
|
||||
+222
@@ -0,0 +1,222 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ru">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Dmitrii Gudov | kr0sh512</title>
|
||||
<meta name="description" content="DevOps-oriented developer and Computer Science student at CMC MSU">
|
||||
<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@300;400;500;600&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
:root {
|
||||
--bg-color: #ffffff;
|
||||
--text-color: #1a1a1a;
|
||||
--text-secondary: #666666;
|
||||
--accent-color: #2563eb;
|
||||
--border-color: #e5e7eb;
|
||||
--container-width: 800px;
|
||||
}
|
||||
@media (prefers-color-scheme: dark) {
|
||||
:root {
|
||||
--bg-color: #1a1a1a;
|
||||
--text-color: #f0f0f0;
|
||||
--text-secondary: #999999;
|
||||
--accent-color: #3b82f6;
|
||||
--border-color: #333333;
|
||||
}
|
||||
}
|
||||
* { margin: 0; padding: 0; box-sizing: border-box; }
|
||||
body {
|
||||
font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
|
||||
background-color: var(--bg-color);
|
||||
color: var(--text-color);
|
||||
line-height: 1.6;
|
||||
font-size: 16px;
|
||||
}
|
||||
.container { max-width: var(--container-width); margin: 0 auto; padding: 0 20px; }
|
||||
.header { padding: 60px 0; text-align: center; }
|
||||
.header-title { font-size: 2.5rem; font-weight: 600; margin-bottom: 8px; }
|
||||
.header-link { color: var(--text-color); text-decoration: none; }
|
||||
.header-link:hover { color: var(--accent-color); }
|
||||
.header-subtitle { font-size: 1.25rem; color: var(--text-secondary); font-weight: 400; }
|
||||
.main { padding-bottom: 60px; }
|
||||
.section { padding: 40px 0; border-top: 1px solid var(--border-color); }
|
||||
.section:first-of-type { border-top: none; }
|
||||
.section-title { font-size: 1.75rem; font-weight: 600; margin-bottom: 24px; color: var(--text-color); }
|
||||
.about-content p { margin-bottom: 16px; font-size: 1.1rem; }
|
||||
.about-content a { color: var(--accent-color); text-decoration: none; }
|
||||
.about-content a:hover { text-decoration: underline; }
|
||||
.experience-list { display: flex; flex-direction: column; gap: 20px; }
|
||||
.experience-item {
|
||||
display: flex; justify-content: space-between; align-items: flex-start;
|
||||
padding: 16px 0; border-bottom: 1px solid var(--border-color);
|
||||
}
|
||||
.experience-item:last-of-type { border-bottom: none; }
|
||||
.experience-header { display: flex; flex-direction: column; gap: 4px; }
|
||||
.experience-company { font-weight: 600; font-size: 1.1rem; }
|
||||
.experience-role { color: var(--text-secondary); font-size: 1rem; }
|
||||
.experience-period { color: var(--text-secondary); font-size: 0.9rem; white-space: nowrap; }
|
||||
.skills-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 24px; }
|
||||
.skills-category-title { font-size: 1rem; font-weight: 600; margin-bottom: 12px; color: var(--text-color); }
|
||||
.skills-list { list-style: none; display: flex; flex-wrap: wrap; gap: 8px; }
|
||||
.skills-list li {
|
||||
font-size: 0.9rem; color: var(--text-secondary);
|
||||
background-color: var(--border-color); padding: 4px 12px; border-radius: 20px;
|
||||
}
|
||||
.projects-list { display: flex; flex-direction: column; gap: 24px; }
|
||||
.project-card {
|
||||
padding: 20px; border: 1px solid var(--border-color);
|
||||
border-radius: 8px; transition: border-color 0.2s ease;
|
||||
}
|
||||
.project-card:hover { border-color: var(--accent-color); }
|
||||
.project-title { font-size: 1.25rem; font-weight: 600; margin-bottom: 8px; }
|
||||
.project-title a { color: var(--text-color); text-decoration: none; }
|
||||
.project-title a:hover { color: var(--accent-color); }
|
||||
.project-description { color: var(--text-secondary); margin-bottom: 12px; font-size: 1rem; }
|
||||
.project-tech { font-size: 0.85rem; color: var(--accent-color); font-weight: 500; }
|
||||
.contact-links { display: flex; flex-direction: column; gap: 12px; }
|
||||
.contact-link {
|
||||
color: var(--text-color); text-decoration: none;
|
||||
font-size: 1.1rem; transition: color 0.2s ease;
|
||||
}
|
||||
.contact-link:hover { color: var(--accent-color); }
|
||||
.footer { padding: 40px 0; text-align: center; border-top: 1px solid var(--border-color); }
|
||||
.footer-text { color: var(--text-secondary); font-size: 0.9rem; }
|
||||
@media (max-width: 768px) {
|
||||
.header-title { font-size: 2rem; }
|
||||
.header-subtitle { font-size: 1rem; }
|
||||
.section-title { font-size: 1.5rem; }
|
||||
.experience-item { flex-direction: column; gap: 8px; }
|
||||
.experience-period { white-space: normal; }
|
||||
.skills-grid { grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); }
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<header class="header">
|
||||
<div class="container">
|
||||
<h1 class="header-title"><a href="/" class="header-link">Dmitrii Gudov</a></h1>
|
||||
<p class="header-subtitle">DevOps Engineer & CS Student</p>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main class="main">
|
||||
<section class="section about">
|
||||
<div class="container">
|
||||
<h2 class="section-title">About Me</h2>
|
||||
<div class="about-content">
|
||||
<p>I'm a <strong>DevOps-oriented developer</strong> and <strong>Computer Science student</strong> at <a href="https://cmc.msu.ru/" target="_blank" rel="noopener">CMC MSU</a>.</p>
|
||||
<p>I build and operate Linux infrastructure, automate repeatable work, and develop system and backend tools. My current focus is <strong>ALT Linux and RPM internals</strong>, Kubernetes, containers, CI/CD, and Python/C systems tooling.</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="section experience">
|
||||
<div class="container">
|
||||
<h2 class="section-title">Experience</h2>
|
||||
<div class="experience-list">
|
||||
<div class="experience-item">
|
||||
<div class="experience-header">
|
||||
<span class="experience-company">BaseALT</span>
|
||||
<span class="experience-role">Linux/RPM Tooling & Systems Research</span>
|
||||
</div>
|
||||
<span class="experience-period">Current</span>
|
||||
</div>
|
||||
<div class="experience-item">
|
||||
<div class="experience-header">
|
||||
<span class="experience-company">Yandex</span>
|
||||
<span class="experience-role">DevTools Team, Autonomous Transport</span>
|
||||
</div>
|
||||
<span class="experience-period">Fall 2025 Intern</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="section skills">
|
||||
<div class="container">
|
||||
<h2 class="section-title">Skills</h2>
|
||||
<div class="skills-grid">
|
||||
<div class="skills-category">
|
||||
<h3 class="skills-category-title">Languages</h3>
|
||||
<ul class="skills-list"><li>Python</li><li>C</li><li>C++</li><li>Shell</li><li>SQL</li></ul>
|
||||
</div>
|
||||
<div class="skills-category">
|
||||
<h3 class="skills-category-title">Infrastructure & DevOps</h3>
|
||||
<ul class="skills-list"><li>Linux</li><li>Docker</li><li>Kubernetes</li><li>K3s</li><li>Helm</li><li>Ansible</li><li>Traefik</li><li>systemd</li></ul>
|
||||
</div>
|
||||
<div class="skills-category">
|
||||
<h3 class="skills-category-title">CI/CD</h3>
|
||||
<ul class="skills-list"><li>GitHub Actions</li><li>GHCR</li><li>Multi-arch</li><li>Automated testing</li></ul>
|
||||
</div>
|
||||
<div class="skills-category">
|
||||
<h3 class="skills-category-title">Backend & Data</h3>
|
||||
<ul class="skills-list"><li>FastAPI</li><li>SQLAlchemy</li><li>PostgreSQL</li><li>SQLite</li><li>MongoDB</li></ul>
|
||||
</div>
|
||||
<div class="skills-category">
|
||||
<h3 class="skills-category-title">Practices</h3>
|
||||
<ul class="skills-list"><li>pytest</li><li>mypy</li><li>Black</li><li>Sanitizers</li></ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="section projects">
|
||||
<div class="container">
|
||||
<h2 class="section-title">Projects</h2>
|
||||
<div class="projects-list">
|
||||
<article class="project-card">
|
||||
<h3 class="project-title"><a href="https://github.com/kr0sh512/alt-rpm-set-version" target="_blank" rel="noopener">ALT RPM Set Version Research</a></h3>
|
||||
<p class="project-description">Research into ALT Linux RPM's encoded symbol sets and dependency comparison. C implementation, hashing, compatibility testing, and benchmarks.</p>
|
||||
<div class="project-tech">C, RPM, ALT Linux</div>
|
||||
</article>
|
||||
<article class="project-card">
|
||||
<h3 class="project-title"><a href="https://pom.krosh.dev" target="_blank" rel="noopener">Pomodoro</a></h3>
|
||||
<p class="project-description">Customizable browser-based Pomodoro timer and clock built with React and TypeScript.</p>
|
||||
<div class="project-tech">React, TypeScript, Vite</div>
|
||||
</article>
|
||||
<article class="project-card">
|
||||
<h3 class="project-title"><a href="https://github.com/kr0sh512/nexus-sync" target="_blank" rel="noopener">nexus-sync</a></h3>
|
||||
<p class="project-description">Client-server system for centrally managing computers and dispatching approved commands.</p>
|
||||
<div class="project-tech">FastAPI, SQLAlchemy, Python</div>
|
||||
</article>
|
||||
<article class="project-card">
|
||||
<h3 class="project-title"><a href="https://github.com/kr0sh512/network-diagrams-tool" target="_blank" rel="noopener">Network Diagrams Tool</a></h3>
|
||||
<p class="project-description">Python tool for building and visualizing network topologies for CMC MSU coursework.</p>
|
||||
<div class="project-tech">Python, Networking</div>
|
||||
</article>
|
||||
<article class="project-card">
|
||||
<h3 class="project-title"><a href="https://github.com/kr0sh512/profhome-vpn-bot" target="_blank" rel="noopener">Marzban Telegram VPN Bot</a></h3>
|
||||
<p class="project-description">Containerized Python Telegram bot that integrates with Marzban API for VPN management.</p>
|
||||
<div class="project-tech">Python, Telegram API, SQLite</div>
|
||||
</article>
|
||||
<article class="project-card">
|
||||
<h3 class="project-title"><a href="https://github.com/kr0sh512/spotify-to-tg-bio" target="_blank" rel="noopener">Spotify to Telegram Bio</a></h3>
|
||||
<p class="project-description">Script that syncs playing Spotify track with Telegram bio in real-time.</p>
|
||||
<div class="project-tech">Python, Spotify API, Telegram API</div>
|
||||
</article>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="section contact">
|
||||
<div class="container">
|
||||
<h2 class="section-title">Connect with Me</h2>
|
||||
<div class="contact-links">
|
||||
<a href="https://t.me/kr0sh_512" target="_blank" rel="noopener" class="contact-link">Telegram: @kr0sh_512</a>
|
||||
<a href="mailto:gudovdo@my.msu.ru" target="_blank" rel="noopener" class="contact-link">Email: gudovdo@my.msu.ru</a>
|
||||
<a href="https://github.com/kr0sh512" target="_blank" rel="noopener" class="contact-link">GitHub: kr0sh512</a>
|
||||
<a href="https://git.krosh.dev" target="_blank" rel="noopener" class="contact-link">Gitea: git.krosh.dev</a>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</main>
|
||||
|
||||
<footer class="footer">
|
||||
<div class="container">
|
||||
<p class="footer-text">© 2026 Dmitrii Gudov. All rights reserved.</p>
|
||||
</div>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,25 @@
|
||||
server {
|
||||
listen 8080;
|
||||
listen [::]:8080;
|
||||
server_name _;
|
||||
|
||||
root /usr/share/nginx/html;
|
||||
server_tokens off;
|
||||
absolute_redirect off;
|
||||
|
||||
location = / {
|
||||
try_files /index.html =404;
|
||||
}
|
||||
|
||||
location = /index.html {
|
||||
return 308 /;
|
||||
}
|
||||
|
||||
location / {
|
||||
try_files $uri $uri/ @mainpage;
|
||||
}
|
||||
|
||||
location @mainpage {
|
||||
try_files /index.html =404;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user