Static HTML/CSS/JS site with local fonts and icons, certificate gallery, work section and homelab diagrams, ready for rezayaghobi.ir. 🤖 Generated with Codebuff Co-Authored-By: Codebuff <noreply@codebuff.com>
596 lines
34 KiB
HTML
596 lines
34 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<title>Reza Yaghobi · Junior DevOps engineer</title>
|
|
<meta name="description" content="Reza Yaghobi is a junior DevOps engineer working with Docker, Kubernetes, GitLab CI/CD, Ansible, Prometheus and Grafana.">
|
|
<meta name="theme-color" content="#0a0d14">
|
|
<link rel="canonical" href="https://rezayaghobi.ir/">
|
|
|
|
<meta property="og:type" content="website">
|
|
<meta property="og:url" content="https://rezayaghobi.ir/">
|
|
<meta property="og:title" content="Reza Yaghobi · Junior DevOps engineer">
|
|
<meta property="og:description" content="Reza Yaghobi is a junior DevOps engineer working with Docker, Kubernetes, GitLab CI/CD, Ansible, Prometheus and Grafana.">
|
|
<meta property="og:image" content="/assets/img/og.png">
|
|
<meta property="og:image:alt" content="Reza Yaghobi — Junior DevOps engineer">
|
|
<meta property="og:image:width" content="1200">
|
|
<meta property="og:image:height" content="630">
|
|
<meta name="twitter:card" content="summary_large_image">
|
|
<meta name="twitter:title" content="Reza Yaghobi · Junior DevOps engineer">
|
|
<meta name="twitter:description" content="Junior DevOps engineer working with Docker, Kubernetes, GitLab CI/CD, Ansible, Prometheus and Grafana.">
|
|
<meta name="twitter:image" content="/assets/img/og.png">
|
|
|
|
<link rel="icon" href="favicon.svg" type="image/svg+xml">
|
|
<link rel="preload" href="assets/fonts/bricolage-grotesque-latin-wght-normal.woff2" as="font" type="font/woff2" crossorigin>
|
|
<link rel="preload" href="assets/fonts/instrument-sans-latin-wght-normal.woff2" as="font" type="font/woff2" crossorigin>
|
|
<link rel="stylesheet" href="assets/brand.css">
|
|
<link rel="stylesheet" href="assets/style.css">
|
|
<script src="assets/boot.js"></script>
|
|
</head>
|
|
<body>
|
|
<a class="skip-link" href="#main">Skip to content</a>
|
|
<div class="progress" aria-hidden="true"></div>
|
|
|
|
<header class="site-header">
|
|
<div class="wrap site-header__inner">
|
|
<a class="brand" href="#main">Reza Yaghobi</a>
|
|
<nav class="site-nav" aria-label="Main">
|
|
<a href="#stack">Stack</a>
|
|
<a href="#certificates">Certificates</a>
|
|
<a href="#work">Work</a>
|
|
<a href="#contact">Contact</a>
|
|
</nav>
|
|
</div>
|
|
</header>
|
|
|
|
<main id="main">
|
|
<section class="hero" aria-labelledby="hero-title">
|
|
<div class="wrap">
|
|
<p class="hero__label">Junior DevOps engineer</p>
|
|
<h1 class="hero__title" id="hero-title">Reza Yaghobi</h1>
|
|
<p class="hero__lede">I build and run containerized infrastructure: Docker, Kubernetes, GitLab CI/CD, Ansible and full observability with Prometheus and Grafana.</p>
|
|
<div class="hero__actions">
|
|
<a class="action" href="mailto:rezay5639@gmail.com">
|
|
<span class="action__label">Email</span>
|
|
<span class="action__meta">rezay5639@gmail.com</span>
|
|
</a>
|
|
<a class="action" href="https://github.com/rezayaghobi-dev" rel="noopener noreferrer">
|
|
<span class="action__label">GitHub</span>
|
|
<span class="action__meta">rezayaghobi-dev</span>
|
|
</a>
|
|
<a class="action" href="https://t.me/Rezay5639" rel="noopener noreferrer">
|
|
<span class="action__label">Telegram</span>
|
|
<span class="action__meta">@Rezay5639</span>
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="section section--stack reveal" id="stack" aria-labelledby="stack-title">
|
|
<div class="wrap">
|
|
<div class="section__head">
|
|
<h2 class="section__title" id="stack-title">Stack</h2>
|
|
</div>
|
|
|
|
<h3 class="group-title">Platform</h3>
|
|
<ul class="tiles">
|
|
<li class="tile brand--docker">
|
|
<img class="tile__icon" src="assets/icons/docker.svg" alt="" width="38" height="38" decoding="async" aria-hidden="true">
|
|
<span class="tile__name">Docker</span>
|
|
</li>
|
|
<li class="tile brand--kubernetes">
|
|
<img class="tile__icon" src="assets/icons/kubernetes.svg" alt="" width="38" height="38" decoding="async" aria-hidden="true">
|
|
<span class="tile__name">Kubernetes</span>
|
|
</li>
|
|
<li class="tile brand--rancher">
|
|
<img class="tile__icon" src="assets/icons/rancher.svg" alt="" width="38" height="38" decoding="async" aria-hidden="true">
|
|
<span class="tile__name">Rancher</span>
|
|
</li>
|
|
<li class="tile brand--helm">
|
|
<img class="tile__icon" src="assets/icons/helm.svg" alt="" width="38" height="38" decoding="async" aria-hidden="true">
|
|
<span class="tile__name">Helm</span>
|
|
</li>
|
|
<li class="tile brand--linux">
|
|
<img class="tile__icon" src="assets/icons/linux.svg" alt="" width="38" height="38" decoding="async" aria-hidden="true">
|
|
<span class="tile__name">Linux</span>
|
|
</li>
|
|
<li class="tile brand--vmware">
|
|
<img class="tile__icon" src="assets/icons/vmware.svg" alt="" width="38" height="38" decoding="async" aria-hidden="true">
|
|
<span class="tile__name">VMware ESXi<span class="tile__note">server virtualization</span></span>
|
|
</li>
|
|
<li class="tile brand--traefik">
|
|
<img class="tile__icon" src="assets/icons/traefik.svg" alt="" width="38" height="38" decoding="async" aria-hidden="true">
|
|
<span class="tile__name">Traefik</span>
|
|
</li>
|
|
<li class="tile brand--nginx">
|
|
<img class="tile__icon" src="assets/icons/nginx.svg" alt="" width="38" height="38" decoding="async" aria-hidden="true">
|
|
<span class="tile__name">nginx</span>
|
|
</li>
|
|
<li class="tile brand--haproxy">
|
|
<img class="tile__icon" src="assets/icons/haproxy.svg" alt="" width="38" height="38" decoding="async" aria-hidden="true">
|
|
<span class="tile__name">HAProxy</span>
|
|
</li>
|
|
<li class="tile brand--keepalived">
|
|
<img class="tile__icon" src="assets/icons/keepalived.svg" alt="" width="38" height="38" decoding="async" aria-hidden="true">
|
|
<span class="tile__name">Keepalived</span>
|
|
</li>
|
|
<li class="tile brand--minio">
|
|
<img class="tile__icon" src="assets/icons/minio.svg" alt="" width="38" height="38" decoding="async" aria-hidden="true">
|
|
<span class="tile__name">MinIO</span>
|
|
</li>
|
|
<li class="tile brand--ceph">
|
|
<img class="tile__icon" src="assets/icons/ceph.svg" alt="" width="38" height="38" decoding="async" aria-hidden="true">
|
|
<span class="tile__name">Ceph</span>
|
|
</li>
|
|
</ul>
|
|
|
|
<h3 class="group-title">Automation and delivery</h3>
|
|
<ul class="tiles">
|
|
<li class="tile brand--gitlab">
|
|
<img class="tile__icon" src="assets/icons/gitlab.svg" alt="" width="38" height="38" decoding="async" aria-hidden="true">
|
|
<span class="tile__name">GitLab</span>
|
|
</li>
|
|
<li class="tile brand--gitlab-ci">
|
|
<img class="tile__icon" src="assets/icons/gitlab-ci.svg" alt="" width="38" height="38" decoding="async" aria-hidden="true">
|
|
<span class="tile__name">GitLab CI/CD</span>
|
|
</li>
|
|
<li class="tile brand--git">
|
|
<img class="tile__icon" src="assets/icons/git.svg" alt="" width="38" height="38" decoding="async" aria-hidden="true">
|
|
<span class="tile__name">Git</span>
|
|
</li>
|
|
<li class="tile brand--ansible">
|
|
<img class="tile__icon" src="assets/icons/ansible.svg" alt="" width="38" height="38" decoding="async" aria-hidden="true">
|
|
<span class="tile__name">Ansible</span>
|
|
</li>
|
|
<li class="tile brand--terraform">
|
|
<img class="tile__icon" src="assets/icons/terraform.svg" alt="" width="38" height="38" decoding="async" aria-hidden="true">
|
|
<span class="tile__name">Terraform</span>
|
|
</li>
|
|
<li class="tile brand--argocd">
|
|
<img class="tile__icon" src="assets/icons/argocd.svg" alt="" width="38" height="38" decoding="async" aria-hidden="true">
|
|
<span class="tile__name">Argo CD</span>
|
|
</li>
|
|
<li class="tile brand--gitops">
|
|
<img class="tile__icon" src="assets/icons/gitops.svg" alt="" width="38" height="38" decoding="async" aria-hidden="true">
|
|
<span class="tile__name">GitOps</span>
|
|
</li>
|
|
<li class="tile brand--nexus">
|
|
<img class="tile__icon" src="assets/icons/nexus.svg" alt="" width="38" height="38" decoding="async" aria-hidden="true">
|
|
<span class="tile__name">Nexus Repository</span>
|
|
</li>
|
|
<li class="tile brand--bash">
|
|
<img class="tile__icon" src="assets/icons/bash.svg" alt="" width="38" height="38" decoding="async" aria-hidden="true">
|
|
<span class="tile__name">Shell scripting<span class="tile__note">Bash</span></span>
|
|
</li>
|
|
</ul>
|
|
|
|
<h3 class="group-title">Observability</h3>
|
|
<ul class="tiles">
|
|
<li class="tile brand--prometheus">
|
|
<img class="tile__icon" src="assets/icons/prometheus.svg" alt="" width="38" height="38" decoding="async" aria-hidden="true">
|
|
<span class="tile__name">Prometheus</span>
|
|
</li>
|
|
<li class="tile brand--grafana">
|
|
<img class="tile__icon" src="assets/icons/grafana.svg" alt="" width="38" height="38" decoding="async" aria-hidden="true">
|
|
<span class="tile__name">Grafana</span>
|
|
</li>
|
|
<li class="tile brand--loki">
|
|
<img class="tile__icon" src="assets/icons/loki.svg" alt="" width="38" height="38" decoding="async" aria-hidden="true">
|
|
<span class="tile__name">Loki</span>
|
|
</li>
|
|
<li class="tile brand--alloy">
|
|
<img class="tile__icon" src="assets/icons/alloy.svg" alt="" width="38" height="38" decoding="async" aria-hidden="true">
|
|
<span class="tile__name">Alloy</span>
|
|
</li>
|
|
<li class="tile brand--elasticsearch">
|
|
<img class="tile__icon" src="assets/icons/elasticsearch.svg" alt="" width="38" height="38" decoding="async" aria-hidden="true">
|
|
<span class="tile__name">Elasticsearch</span>
|
|
</li>
|
|
<li class="tile brand--zabbix">
|
|
<img class="tile__icon" src="assets/icons/zabbix.svg" alt="" width="38" height="38" decoding="async" aria-hidden="true">
|
|
<span class="tile__name">Zabbix</span>
|
|
</li>
|
|
</ul>
|
|
|
|
<h3 class="group-title">Languages and data</h3>
|
|
<ul class="tiles">
|
|
<li class="tile brand--python">
|
|
<img class="tile__icon" src="assets/icons/python.svg" alt="" width="38" height="38" decoding="async" aria-hidden="true">
|
|
<span class="tile__name">Python</span>
|
|
</li>
|
|
<li class="tile brand--csharp">
|
|
<img class="tile__icon" src="assets/icons/csharp.svg" alt="" width="38" height="38" decoding="async" aria-hidden="true">
|
|
<span class="tile__name">C#</span>
|
|
</li>
|
|
<li class="tile brand--postgresql">
|
|
<img class="tile__icon" src="assets/icons/postgresql.svg" alt="" width="38" height="38" decoding="async" aria-hidden="true">
|
|
<span class="tile__name">PostgreSQL</span>
|
|
</li>
|
|
<li class="tile brand--mysql">
|
|
<img class="tile__icon" src="assets/icons/mysql.svg" alt="" width="38" height="38" decoding="async" aria-hidden="true">
|
|
<span class="tile__name">MySQL</span>
|
|
</li>
|
|
<li class="tile brand--mssql">
|
|
<img class="tile__icon" src="assets/icons/mssql.svg" alt="" width="38" height="38" decoding="async" aria-hidden="true">
|
|
<span class="tile__name">Microsoft SQL Server</span>
|
|
</li>
|
|
<li class="tile brand--keras">
|
|
<img class="tile__icon" src="assets/icons/keras.svg" alt="" width="38" height="38" decoding="async" aria-hidden="true">
|
|
<span class="tile__name">Keras<span class="tile__note">for ML/DL</span></span>
|
|
</li>
|
|
</ul>
|
|
|
|
<h3 class="group-title">Networking and Windows</h3>
|
|
<ul class="chips">
|
|
<li class="chip">Routing</li>
|
|
<li class="chip">DNS administration</li>
|
|
<li class="chip">Active Directory</li>
|
|
<li class="chip">Windows Server</li>
|
|
<li class="chip">Network+ knowledge</li>
|
|
</ul>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="section section--certs reveal" id="certificates" aria-labelledby="certs-title">
|
|
<div class="wrap">
|
|
<div class="section__head">
|
|
<h2 class="section__title" id="certs-title">Certificates</h2>
|
|
</div>
|
|
|
|
<p class="cert-ielts">IELTS · Band 7.0 · 2024</p>
|
|
|
|
<ol class="ladder" aria-label="ArvanCloud DevOps track">
|
|
<li class="cert-step">
|
|
<span class="cert-step__num">01</span>
|
|
<h3 class="cert-step__name">Associate DevOps Engineer</h3>
|
|
<p class="cert-step__meta">22 h · 2026</p>
|
|
<p class="cert-step__issuer">ArvanCloud</p>
|
|
</li>
|
|
<li class="cert-step">
|
|
<span class="cert-step__num">02</span>
|
|
<h3 class="cert-step__name">Professional DevOps Engineer</h3>
|
|
<p class="cert-step__meta">100 h · 2026</p>
|
|
<p class="cert-step__issuer">ArvanCloud</p>
|
|
</li>
|
|
<li class="cert-step">
|
|
<span class="cert-step__num">03</span>
|
|
<h3 class="cert-step__name">Expert DevOps Engineer</h3>
|
|
<p class="cert-step__meta">18 h · 2026</p>
|
|
<p class="cert-step__issuer">ArvanCloud</p>
|
|
</li>
|
|
</ol>
|
|
|
|
<div class="certs-block">
|
|
<h3 class="group-title">Completed courses</h3>
|
|
<p class="group-sub">Course only, no certificate issued</p>
|
|
<ul class="courses">
|
|
<li class="course">
|
|
<span class="course__name">LPIC-1</span>
|
|
<span class="course__meta">26 h · 2024</span>
|
|
</li>
|
|
<li class="course">
|
|
<span class="course__name">Network+</span>
|
|
<span class="course__meta">72 h · 2024</span>
|
|
</li>
|
|
<li class="course">
|
|
<span class="course__name">LPIC-2</span>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="section reveal" id="certificate-images" aria-labelledby="cert-images-title">
|
|
<div class="wrap">
|
|
<div class="section__head">
|
|
<h2 class="section__title" id="cert-images-title">ArvanCloud certificates</h2>
|
|
</div>
|
|
|
|
<ul class="cert-gallery">
|
|
<li class="cert-shot">
|
|
<a class="cert-shot__frame" href="assets/img/cert-associate.webp" target="_blank" rel="noopener">
|
|
<img src="assets/img/cert-associate.webp" width="1000" height="707" alt="ArvanCloud Associate DevOps Engineer certificate" loading="lazy" decoding="async">
|
|
</a>
|
|
<p class="cert-shot__caption">Associate DevOps Engineer</p>
|
|
</li>
|
|
<li class="cert-shot">
|
|
<a class="cert-shot__frame" href="assets/img/cert-professional.webp" target="_blank" rel="noopener">
|
|
<img src="assets/img/cert-professional.webp" width="1000" height="703" alt="ArvanCloud Professional DevOps Engineer certificate" loading="lazy" decoding="async">
|
|
</a>
|
|
<p class="cert-shot__caption">Professional DevOps Engineer</p>
|
|
</li>
|
|
<li class="cert-shot">
|
|
<a class="cert-shot__frame" href="assets/img/cert-expert.webp" target="_blank" rel="noopener">
|
|
<img src="assets/img/cert-expert.webp" width="1000" height="706" alt="ArvanCloud Expert DevOps Engineer certificate" loading="lazy" decoding="async">
|
|
</a>
|
|
<p class="cert-shot__caption">Expert DevOps Engineer</p>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="section reveal" id="work" aria-labelledby="work-title">
|
|
<div class="wrap">
|
|
<div class="section__head">
|
|
<h2 class="section__title" id="work-title">Selected work</h2>
|
|
</div>
|
|
|
|
<ul class="work-list">
|
|
<li class="work-row">
|
|
<h3 class="work-row__title">Homelab</h3>
|
|
<p class="work-row__text">Self-hosted Docker and K3s services behind Traefik, with a Prometheus, Grafana and Loki monitoring stack and CI/CD.</p>
|
|
<a class="work-row__link" href="https://github.com/rezayaghobi-dev/homelab" rel="noopener noreferrer">View on GitHub ↗</a>
|
|
</li>
|
|
<li class="work-row">
|
|
<h3 class="work-row__title">devops-test</h3>
|
|
<p class="work-row__text">A DevOps assessment task for a company, covering a 6-stage GitLab CI/CD pipeline, firewalling with iptables, monitoring and a web app.</p>
|
|
<a class="work-row__link" href="https://github.com/rezayaghobi-dev/devops-test" rel="noopener noreferrer">View on GitHub ↗</a>
|
|
</li>
|
|
</ul>
|
|
|
|
<p class="work-more">Also on GitHub: <a href="https://github.com/rezayaghobi-dev/agents" rel="noopener noreferrer">agents</a> · <a href="https://github.com/rezayaghobi-dev/ML-portfolio" rel="noopener noreferrer">ML portfolio</a> · <a href="https://github.com/rezayaghobi-dev/DL-portfolio" rel="noopener noreferrer">DL portfolio</a></p>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="section reveal" id="diagrams" aria-labelledby="diagrams-title">
|
|
<div class="wrap">
|
|
<div class="section__head">
|
|
<h2 class="section__title" id="diagrams-title">Diagrams</h2>
|
|
</div>
|
|
|
|
<div class="diagram-block">
|
|
<div class="diagram">
|
|
<h3 class="diagram__title">Homelab architecture</h3>
|
|
<svg class="diagram--wide" viewBox="0 0 1000 320" role="img" aria-labelledby="hl-w-title hl-w-desc">
|
|
<title id="hl-w-title">Homelab architecture</title>
|
|
<desc id="hl-w-desc">Internet traffic reaches Traefik, which proxies to Docker and K3s workloads. A monitoring group runs Prometheus, Grafana, Loki and Alloy, and GitLab CI/CD deploys the workloads.</desc>
|
|
<defs>
|
|
<marker id="arrow-hl-w" viewBox="0 0 8 8" refX="7" refY="4" markerWidth="6" markerHeight="6" orient="auto">
|
|
<path d="M0 0 L8 4 L0 8 Z" fill="#6fe3b0"/>
|
|
</marker>
|
|
</defs>
|
|
|
|
<path class="dg-line dg-soft draw" pathLength="1" d="M636 84 H552" marker-end="url(#arrow-hl-w)"/>
|
|
<path class="dg-line dg-soft draw d2" pathLength="1" d="M636 228 H552" marker-end="url(#arrow-hl-w)"/>
|
|
<path class="dg-line draw" pathLength="1" d="M142 160 H190" marker-end="url(#arrow-hl-w)"/>
|
|
<path class="dg-line draw d2" pathLength="1" d="M344 154 C370 154 380 84 402 84" marker-end="url(#arrow-hl-w)"/>
|
|
<path class="dg-line draw d3" pathLength="1" d="M344 166 C370 166 380 228 402 228" marker-end="url(#arrow-hl-w)"/>
|
|
|
|
<rect class="dg-box" x="24" y="136" width="118" height="48" rx="7"/>
|
|
<text class="dg-text" x="83" y="160" text-anchor="middle" dominant-baseline="middle">Internet</text>
|
|
|
|
<rect class="dg-box dg-box--accent" x="196" y="136" width="148" height="48" rx="7"/>
|
|
<text class="dg-text" x="270" y="154" text-anchor="middle" dominant-baseline="middle">Traefik</text>
|
|
<text class="dg-sub" x="270" y="171" text-anchor="middle" dominant-baseline="middle">reverse proxy</text>
|
|
|
|
<rect class="dg-box" x="408" y="60" width="138" height="48" rx="7"/>
|
|
<text class="dg-text" x="477" y="78" text-anchor="middle" dominant-baseline="middle">Docker</text>
|
|
<text class="dg-sub" x="477" y="95" text-anchor="middle" dominant-baseline="middle">containers</text>
|
|
|
|
<rect class="dg-box" x="408" y="204" width="138" height="48" rx="7"/>
|
|
<text class="dg-text" x="477" y="222" text-anchor="middle" dominant-baseline="middle">K3s</text>
|
|
<text class="dg-sub" x="477" y="239" text-anchor="middle" dominant-baseline="middle">cluster</text>
|
|
|
|
<rect class="dg-box" x="640" y="36" width="336" height="116" rx="8"/>
|
|
<text class="dg-sub" x="660" y="58" dominant-baseline="middle">MONITORING</text>
|
|
<circle class="dg-node" cx="661" cy="86" r="2.5"/>
|
|
<text class="dg-text" x="674" y="87" dominant-baseline="middle">Prometheus</text>
|
|
<circle class="dg-node" cx="831" cy="86" r="2.5"/>
|
|
<text class="dg-text" x="844" y="87" dominant-baseline="middle">Grafana</text>
|
|
<circle class="dg-node" cx="661" cy="118" r="2.5"/>
|
|
<text class="dg-text" x="674" y="119" dominant-baseline="middle">Loki</text>
|
|
<circle class="dg-node" cx="831" cy="118" r="2.5"/>
|
|
<text class="dg-text" x="844" y="119" dominant-baseline="middle">Alloy</text>
|
|
|
|
<rect class="dg-box" x="640" y="196" width="336" height="94" rx="8"/>
|
|
<text class="dg-text" x="660" y="228" dominant-baseline="middle">GitLab · CI/CD</text>
|
|
<text class="dg-sub" x="660" y="250" dominant-baseline="middle">BUILD · TEST · DEPLOY</text>
|
|
|
|
<text class="dg-sub" x="594" y="74" text-anchor="middle">METRICS · LOGS</text>
|
|
<text class="dg-sub" x="594" y="246" text-anchor="middle">DEPLOY</text>
|
|
</svg>
|
|
|
|
<svg class="diagram--narrow" viewBox="0 0 340 560" role="img" aria-labelledby="hl-n-title hl-n-desc">
|
|
<title id="hl-n-title">Homelab architecture</title>
|
|
<desc id="hl-n-desc">Internet traffic reaches Traefik, which proxies to Docker and K3s workloads. A monitoring group runs Prometheus, Grafana, Loki and Alloy, and GitLab CI/CD deploys the workloads.</desc>
|
|
<defs>
|
|
<marker id="arrow-hl-n" viewBox="0 0 8 8" refX="7" refY="4" markerWidth="6" markerHeight="6" orient="auto">
|
|
<path d="M0 0 L8 4 L0 8 Z" fill="#6fe3b0"/>
|
|
</marker>
|
|
</defs>
|
|
|
|
<path class="dg-line draw" pathLength="1" d="M170 58 V88" marker-end="url(#arrow-hl-n)"/>
|
|
<path class="dg-line draw d2" pathLength="1" d="M170 140 V156 H94 V176" marker-end="url(#arrow-hl-n)"/>
|
|
<path class="dg-line draw d2" pathLength="1" d="M170 156 H248 V176" marker-end="url(#arrow-hl-n)"/>
|
|
<path class="dg-line dg-soft draw d3" pathLength="1" d="M94 276 V234" marker-end="url(#arrow-hl-n)"/>
|
|
<path class="dg-line dg-soft draw d3" pathLength="1" d="M248 276 V234" marker-end="url(#arrow-hl-n)"/>
|
|
<path class="dg-line dg-soft draw d4" pathLength="1" d="M316 472 H330 V205 H320" marker-end="url(#arrow-hl-n)"/>
|
|
|
|
<rect class="dg-box" x="95" y="16" width="150" height="42" rx="7"/>
|
|
<text class="dg-text" x="170" y="37" text-anchor="middle" dominant-baseline="middle">Internet</text>
|
|
|
|
<rect class="dg-box dg-box--accent" x="90" y="94" width="160" height="46" rx="7"/>
|
|
<text class="dg-text" x="170" y="111" text-anchor="middle" dominant-baseline="middle">Traefik</text>
|
|
<text class="dg-sub" x="170" y="127" text-anchor="middle" dominant-baseline="middle">reverse proxy</text>
|
|
|
|
<rect class="dg-box" x="24" y="182" width="140" height="46" rx="7"/>
|
|
<text class="dg-text" x="94" y="205" text-anchor="middle" dominant-baseline="middle">Docker</text>
|
|
|
|
<rect class="dg-box" x="180" y="182" width="136" height="46" rx="7"/>
|
|
<text class="dg-text" x="248" y="205" text-anchor="middle" dominant-baseline="middle">K3s</text>
|
|
|
|
<rect class="dg-box" x="24" y="276" width="292" height="100" rx="8"/>
|
|
<text class="dg-sub" x="40" y="298" dominant-baseline="middle">MONITORING</text>
|
|
<circle class="dg-node" cx="41" cy="326" r="2.5"/>
|
|
<text class="dg-text" x="54" y="327" dominant-baseline="middle">Prometheus</text>
|
|
<circle class="dg-node" cx="181" cy="326" r="2.5"/>
|
|
<text class="dg-text" x="194" y="327" dominant-baseline="middle">Grafana</text>
|
|
<circle class="dg-node" cx="41" cy="352" r="2.5"/>
|
|
<text class="dg-text" x="54" y="353" dominant-baseline="middle">Loki</text>
|
|
<circle class="dg-node" cx="181" cy="352" r="2.5"/>
|
|
<text class="dg-text" x="194" y="353" dominant-baseline="middle">Alloy</text>
|
|
|
|
<rect class="dg-box" x="24" y="424" width="292" height="96" rx="8"/>
|
|
<text class="dg-text" x="40" y="452" dominant-baseline="middle">GitLab · CI/CD</text>
|
|
<text class="dg-sub" x="40" y="474" dominant-baseline="middle">BUILD · TEST · DEPLOY</text>
|
|
<text class="dg-sub" x="40" y="496" dominant-baseline="middle">DEPLOY TO WORKLOADS</text>
|
|
</svg>
|
|
</div>
|
|
|
|
<figure class="shot">
|
|
<div class="shot__frame">
|
|
<img src="assets/img/dashboard-1200.webp" width="1200" height="568" alt="Grafana dashboard showing a metrics graph" loading="lazy" decoding="async">
|
|
</div>
|
|
<figcaption>Grafana dashboard</figcaption>
|
|
</figure>
|
|
</div>
|
|
|
|
<div class="diagram-block">
|
|
<div class="diagram">
|
|
<h3 class="diagram__title">CI/CD pipeline</h3>
|
|
<svg class="diagram--wide" viewBox="0 0 1000 220" role="img" aria-labelledby="ci-w-title ci-w-desc">
|
|
<title id="ci-w-title">CI/CD pipeline</title>
|
|
<desc id="ci-w-desc">A commit is pushed, then the pipeline runs the test, build, publish and deploy stages in order, and ends with a healthy container.</desc>
|
|
<defs>
|
|
<marker id="arrow-ci-w" viewBox="0 0 8 8" refX="7" refY="4" markerWidth="6" markerHeight="6" orient="auto">
|
|
<path d="M0 0 L8 4 L0 8 Z" fill="#6fe3b0"/>
|
|
</marker>
|
|
</defs>
|
|
|
|
<path class="dg-line draw" pathLength="1" d="M116 118 H146" marker-end="url(#arrow-ci-w)"/>
|
|
<path class="dg-line draw d2" pathLength="1" d="M292 118 H322" marker-end="url(#arrow-ci-w)"/>
|
|
<path class="dg-line draw d3" pathLength="1" d="M468 118 H498" marker-end="url(#arrow-ci-w)"/>
|
|
<path class="dg-line draw d4" pathLength="1" d="M644 118 H674" marker-end="url(#arrow-ci-w)"/>
|
|
<path class="dg-line draw d5" pathLength="1" d="M820 118 H850" marker-end="url(#arrow-ci-w)"/>
|
|
|
|
<rect class="dg-box" x="20" y="98" width="96" height="40" rx="7"/>
|
|
<text class="dg-text" x="68" y="119" text-anchor="middle" dominant-baseline="middle">git push</text>
|
|
|
|
<rect class="dg-box" x="152" y="80" width="140" height="76" rx="8"/>
|
|
<text class="dg-sub" x="278" y="98" text-anchor="end">01</text>
|
|
<text class="dg-text" x="222" y="112" text-anchor="middle" dominant-baseline="middle">Test</text>
|
|
<text class="dg-sub" x="222" y="132" text-anchor="middle" dominant-baseline="middle">pytest</text>
|
|
|
|
<rect class="dg-box" x="328" y="80" width="140" height="76" rx="8"/>
|
|
<text class="dg-sub" x="454" y="98" text-anchor="end">02</text>
|
|
<text class="dg-text" x="398" y="112" text-anchor="middle" dominant-baseline="middle">Build</text>
|
|
<text class="dg-sub" x="398" y="132" text-anchor="middle" dominant-baseline="middle">docker image</text>
|
|
|
|
<rect class="dg-box" x="504" y="80" width="140" height="76" rx="8"/>
|
|
<text class="dg-sub" x="630" y="98" text-anchor="end">03</text>
|
|
<text class="dg-text" x="574" y="112" text-anchor="middle" dominant-baseline="middle">Publish</text>
|
|
<text class="dg-sub" x="574" y="132" text-anchor="middle" dominant-baseline="middle">optional</text>
|
|
|
|
<rect class="dg-box" x="680" y="80" width="140" height="76" rx="8"/>
|
|
<text class="dg-sub" x="806" y="98" text-anchor="end">04</text>
|
|
<text class="dg-text" x="750" y="112" text-anchor="middle" dominant-baseline="middle">Deploy</text>
|
|
<text class="dg-sub" x="750" y="132" text-anchor="middle" dominant-baseline="middle">compose</text>
|
|
|
|
<rect class="dg-box dg-box--accent" x="856" y="98" width="120" height="40" rx="7"/>
|
|
<text class="dg-text" x="916" y="119" text-anchor="middle" dominant-baseline="middle">healthy</text>
|
|
</svg>
|
|
|
|
<svg class="diagram--narrow" viewBox="0 0 340 520" role="img" aria-labelledby="ci-n-title ci-n-desc">
|
|
<title id="ci-n-title">CI/CD pipeline</title>
|
|
<desc id="ci-n-desc">A commit is pushed, then the pipeline runs the test, build, publish and deploy stages in order, and ends with a healthy container.</desc>
|
|
<defs>
|
|
<marker id="arrow-ci-n" viewBox="0 0 8 8" refX="7" refY="4" markerWidth="6" markerHeight="6" orient="auto">
|
|
<path d="M0 0 L8 4 L0 8 Z" fill="#6fe3b0"/>
|
|
</marker>
|
|
</defs>
|
|
|
|
<path class="dg-line draw" pathLength="1" d="M170 56 V84" marker-end="url(#arrow-ci-n)"/>
|
|
<path class="dg-line draw d2" pathLength="1" d="M170 154 V178" marker-end="url(#arrow-ci-n)"/>
|
|
<path class="dg-line draw d3" pathLength="1" d="M170 248 V272" marker-end="url(#arrow-ci-n)"/>
|
|
<path class="dg-line draw d4" pathLength="1" d="M170 342 V366" marker-end="url(#arrow-ci-n)"/>
|
|
<path class="dg-line draw d5" pathLength="1" d="M170 436 V460" marker-end="url(#arrow-ci-n)"/>
|
|
|
|
<rect class="dg-box" x="110" y="16" width="120" height="40" rx="7"/>
|
|
<text class="dg-text" x="170" y="37" text-anchor="middle" dominant-baseline="middle">git push</text>
|
|
|
|
<rect class="dg-box" x="50" y="90" width="240" height="64" rx="8"/>
|
|
<text class="dg-sub" x="276" y="108" text-anchor="end">01</text>
|
|
<text class="dg-text" x="170" y="116" text-anchor="middle" dominant-baseline="middle">Test</text>
|
|
<text class="dg-sub" x="170" y="137" text-anchor="middle" dominant-baseline="middle">pytest</text>
|
|
|
|
<rect class="dg-box" x="50" y="184" width="240" height="64" rx="8"/>
|
|
<text class="dg-sub" x="276" y="202" text-anchor="end">02</text>
|
|
<text class="dg-text" x="170" y="210" text-anchor="middle" dominant-baseline="middle">Build</text>
|
|
<text class="dg-sub" x="170" y="231" text-anchor="middle" dominant-baseline="middle">docker image</text>
|
|
|
|
<rect class="dg-box" x="50" y="278" width="240" height="64" rx="8"/>
|
|
<text class="dg-sub" x="276" y="296" text-anchor="end">03</text>
|
|
<text class="dg-text" x="170" y="304" text-anchor="middle" dominant-baseline="middle">Publish</text>
|
|
<text class="dg-sub" x="170" y="325" text-anchor="middle" dominant-baseline="middle">optional</text>
|
|
|
|
<rect class="dg-box" x="50" y="372" width="240" height="64" rx="8"/>
|
|
<text class="dg-sub" x="276" y="390" text-anchor="end">04</text>
|
|
<text class="dg-text" x="170" y="398" text-anchor="middle" dominant-baseline="middle">Deploy</text>
|
|
<text class="dg-sub" x="170" y="419" text-anchor="middle" dominant-baseline="middle">compose</text>
|
|
|
|
<rect class="dg-box dg-box--accent" x="100" y="460" width="140" height="40" rx="7"/>
|
|
<text class="dg-text" x="170" y="481" text-anchor="middle" dominant-baseline="middle">healthy</text>
|
|
</svg>
|
|
</div>
|
|
|
|
<figure class="shot">
|
|
<div class="shot__frame">
|
|
<img src="assets/img/pipeline-1200.webp" width="1200" height="575" alt="Green GitLab CI pipeline, all stages passed" loading="lazy" decoding="async">
|
|
</div>
|
|
<figcaption>GitLab CI pipeline</figcaption>
|
|
</figure>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="section reveal" id="background" aria-labelledby="background-title">
|
|
<div class="wrap">
|
|
<div class="section__head">
|
|
<h2 class="section__title" id="background-title">Background</h2>
|
|
</div>
|
|
<ol class="timeline">
|
|
<li class="timeline__item">
|
|
<span class="timeline__when">2025 to present</span>
|
|
<p class="timeline__what">Bachelor's degree in Computer Networks, Shamsipoor, currently term 3</p>
|
|
</li>
|
|
<li class="timeline__item">
|
|
<span class="timeline__when">March to June 2026</span>
|
|
<p class="timeline__what">IT Help Desk, Jahad Sharif University</p>
|
|
</li>
|
|
</ol>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="section reveal" id="contact" aria-labelledby="contact-title">
|
|
<div class="wrap">
|
|
<div class="section__head">
|
|
<h2 class="section__title" id="contact-title">Contact</h2>
|
|
</div>
|
|
<p class="contact__lede">Open to junior and associate DevOps roles, on-site or remote.</p>
|
|
<div class="contact-rows">
|
|
<a class="contact-row" href="mailto:rezay5639@gmail.com">
|
|
<span class="contact-row__label">Email</span>
|
|
<span class="contact-row__value">rezay5639@gmail.com <span class="contact-row__arrow" aria-hidden="true">→</span></span>
|
|
</a>
|
|
<a class="contact-row" href="https://github.com/rezayaghobi-dev" rel="noopener noreferrer">
|
|
<span class="contact-row__label">GitHub</span>
|
|
<span class="contact-row__value">rezayaghobi-dev <span class="contact-row__arrow" aria-hidden="true">→</span></span>
|
|
</a>
|
|
<a class="contact-row" href="https://t.me/Rezay5639" rel="noopener noreferrer">
|
|
<span class="contact-row__label">Telegram</span>
|
|
<span class="contact-row__value">@Rezay5639 <span class="contact-row__arrow" aria-hidden="true">→</span></span>
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
</main>
|
|
|
|
<footer class="site-footer">
|
|
<div class="wrap">© 2026 Reza Yaghobi · Hosted on my own homelab</div>
|
|
</footer>
|
|
|
|
<script src="assets/app.js" defer></script>
|
|
</body>
|
|
</html>
|