Статический блог DevOps-инженера. Собирается из Markdown в чистый HTML без фреймворков.
- Node.js + ESM
markdown-it+markdown-it-anchorдля рендераshiki(@shikijs/markdown-it) для подсветки синтаксисаgray-matterдля фронт-маттераchokidarдля watch-режима- Собственный сборщик
scripts/build.mjs— никаких фреймворков
posts/ # Markdown-посты с фронт-маттером
templates/ # HTML-шаблоны страниц (index, blog, post, about)
partials/ # head, nav, footer
public/ # статика (картинки, CSS, JS) → копируется as-is в dist/
scripts/ # build.mjs
dist/ # результат сборки (игнорится)
npm install
npm run dev # watch + ребилд
npm run serve # поднять dist/ на :3000Одноразовая сборка:
npm run buildНа выходе в dist/:
index.html,blog.html,about.htmlblog/<slug>/index.htmlдля каждого постаrss.xml,sitemap.xml,_redirects- весь
public/*
Создать файл posts/<slug>.md с фронт-маттером:
---
title: "Заголовок"
description: "Короткое описание для листинга и OG."
date: 2026-04-22
tags: [kubernetes, terraform]
category: kubernetes
draft: false
---
Контент в Markdown.Черновики (draft: true) не попадают в dist/.
- Зайти в Cloudflare Dashboard → Workers & Pages → Create → Pages → Connect to Git.
- Авторизовать GitHub и выбрать репозиторий
VizzleTF/onlyyaml. - Настройки сборки:
- Framework preset:
None - Build command:
npm run build - Build output directory:
dist - Root directory: (пусто)
- Environment variables:
NODE_VERSION=20(или новее)
- Framework preset:
- Нажать Save and Deploy. Каждый push в
main→ автоматический деплой. PR-ветки получают preview-URL.
npm i -g wrangler
wrangler login
npm run build
wrangler pages deploy dist --project-name=onlyyaml --branch=mainДля первого деплоя Cloudflare создаст проект и привяжет его к аккаунту.
В проекте Pages → Custom domains → Set up a custom domain → ввести onlyyaml.dev. Cloudflare сам пропишет CNAME, если домен хостится у них; иначе — добавить CNAME на <project>.pages.dev у регистратора.
scripts/build.mjs генерирует dist/_redirects — Cloudflare Pages читает его автоматически, дополнительной настройки не требуется.