Пълен наръчник за работа с Astro проекта (fedia.eu / fs)

Обединена справка — структура, ежедневни команди, git, деплой, чеклисти

Обновено: 10.09.2026 г.

📘 FEDIA.EU / fs — Пълен наръчник

Статичен сайт (Astro 5 + Tailwind + Content Collections). Накрая се качва само папка dist/ — както при чист HTML. Cloudflare Pages не се интересува дали източникът е бил HTML или Astro.


1. Бърз старт

npm install
npm run dev          # http://localhost:4321
npm run build        # → папка dist/
npm run preview      # преглед на production build локално
КомандаКакво прави
npm run devdev сървър с hot reload
npm run buildгенерира статични файлове в dist/
npm run previewсервира dist/ локално (както online)

Node: >= 18.14


2. Структура на проекта

fs/  (или fedya007/, fedia-astro/)
├── public/                 # статични файлове → копират се 1:1 в dist/
│   ├── books/              # PDF книги
│   ├── covers/              # корици
│   ├── favicon.*
│   ├── fed.webp
│   └── robots.txt
├── scripts/
│   ├── html_md_to_real_md.py   # HTML-в-.md → истински Markdown
│   └── url_to_md.py            # сваля статия от URL → .md
├── src/
│   ├── content/            # ★ СТАТИИТЕ (Markdown)
│   │   ├── docker/*.md
│   │   ├── linux/*.md
│   │   ├── proxmox/*.md
│   │   ├── wsl/*.md
│   │   ├── docs/                 # наръчник(ци)
│   │   └── scripts/               # скриптове (.md)
│   ├── content.config.ts   # schema за frontmatter / колекции
│   ├── components/
│   │   ├── Nav.astro           # главно меню
│   │   ├── GuideNav.astro      # prev/next между части
│   │   └── RelatedPosts.astro  # „Може да ви е интересно"
│   ├── data/
│   │   ├── nav.ts              # меню + динамични guide parts
│   │   ├── articles.ts         # related карти
│   │   └── recommendations.ts  # страница Препоръчвам
│   ├── layouts/
│   │   ├── BaseLayout.astro    # HTML shell, footer, meta
│   │   └── GuideLayout.astro   # layout за статии (hero, author, tags)
│   ├── pages/
│   │   ├── index.astro
│   │   ├── preporychvam.astro
│   │   ├── knigi/knigi.astro
│   │   ├── en/index.astro
│   │   ├── 404.astro
│   │   ├── narachnik.astro       # страница на наръчника
│   │   ├── scripts.astro         # каталог на скриптовете
│   │   ├── scripts/[slug].astro  # шаблон за отделен скрипт
│   │   ├── [slug].astro          # Docker URL-и: /docker, /docker-architecture…
│   │   ├── linux/[slug].astro    # /linux/…
│   │   ├── prox/[slug].astro     # /prox/…
│   │   └── wsl/[slug].astro      # /wsl/…
│   └── styles/global.css       # Tailwind + custom стилове
├── astro.config.mjs
├── tailwind.config.mjs
├── package.json
└── dist/                   # ← това се качва / се билдва от CI

3. Къде пипаш какво

Искам да…Файл / място
Редактирам статияsrc/content/<серия>/<slug>.md
Нова статия в поредицанов .md в същата папка + frontmatter
Нов скриптsrc/content/scripts/<ime>.md
Смяна на менютоsrc/data/nav.ts → mainNav
Prev/next между частиавтоматично от order/part в frontmatter + nav.ts
Related картиsrc/data/articles.ts
Страница Препоръчвамsrc/data/recommendations.ts
Книги (PDF линкове, текст)src/pages/knigi/knigi.astro
Каталог на скриптовеsrc/pages/scripts.astro
Наръчник (тази страница)src/content/docs/narachnik.md → src/pages/narachnik.astro
Начална страницаsrc/pages/index.astro
Englishsrc/pages/en/index.astro
404src/pages/404.astro
Глобални стиловеsrc/styles/global.css
Layout / footer / SEO metasrc/layouts/BaseLayout.astro
Hero, author, tags над статияsrc/layouts/GuideLayout.astro
PDF / картинки статичниpublic/ (път /books/..., /covers/...)
Снимка към статия (hero)src/content/<серия>/images/ + heroImage във frontmatter

URL-и (не ги сменяй без redirect):

КолекцияПримерен URL
docker/docker, /docker-architecture, /dockerfile…
linux/linux/linux-foundation, /linux/security…
proxmox/prox/uvod, /prox/vm…
wsl/wsl/uvod, /wsl/nastroika…
скриптове/scripts, /scripts/<slug>
наръчник/narachnik

4. Frontmatter

4.1. Статия (docker/linux/proxmox/wsl)

---
title: "Част 1: Linux — основата | Федя Серафиев — FEDIA.EU"
description: "Кратко SEO описание (1–2 изречения)."
series: linux
author: "Федя Серафиев"
pubDate: 2024-08-01
updatedDate: 2026-09-08
lang: bg
draft: false
part: 1
order: 1
tags: ["linux", "sysadmin"]
categories: ["Linux"]
heroImage: "./images/linux.webp"
heroImageAlt: "Linux терминал"
---

# Част 1: Linux — основата

Текст на **Markdown**.

## Подзаглавие

- списък
- още

`inline code`

​```bash
echo "code block"
​```
ПолеЗадължителноБележка
titleдаи за <title> / OG
descriptionдаmeta description
seriesдаdocker | linux | proxmox | wsl
authorнеdefault: Федя Серафиев
pubDateнедата на публикуване
updatedDateнеако си обновявал
langнеbg / en
draftнеtrue = не се билдва и не е в GuideNav
part / orderпрепоръчителноподредба в поредицата
tags / categoriesнепоказват се в layout
heroImageнелокално ./images/... или URL

Снимки за hero: src/content/linux/images/cloudflare.webp и във frontmatter heroImage: "./images/cloudflare.webp".

4.2. Скрипт (src/content/scripts/*.md)

---
title: Заглавие
description: Описание
version: 1.0.0
author: Федя Серафиев
category: Автоматизация
tags: ['tag1', 'tag2']
date: 2026-09-10
featured: false
---

# Заглавие

Съдържание...

5. Скриптове за миграция на съдържание

5.1. HTML вътре в .md → истински Markdown

pip install beautifulsoup4 markdownify
python scripts/html_md_to_real_md.py
python scripts/html_md_to_real_md.py src/content/linux
python scripts/html_md_to_real_md.py --force   # всички файлове

5.2. Статия от live URL → .md

pip install requests beautifulsoup4 markdownify
python scripts/url_to_md.py https://fedia.eu/linux/linux-foundation
# → md_output/<slug>.md  → копираш в src/content/<series>/

6. Изчистване на кеша (когато нещо не се обновява)

rm -rf node_modules/.astro .astro dist
npm run dev

7. Deploy: GitHub → Cloudflare Pages

Astro build = статични HTML/CSS/JS в dist/. Същият модел като при HTML сайт; Cloudflare само билдва вместо теб.

7.1. Първоначален push в GitHub

git init   # ако още няма repo
git add .
git commit -m "FEDIA.EU Astro site"
git remote add origin https://github.com/<user>/<repo>.git
git branch -M main
git push -u origin main

Не качвай в git (ако има .gitignore — ок): node_modules/, dist/ (CI ще го генерира), .env с тайни.

Препоръчителен .gitignore:

node_modules/
dist/
.astro/
.env
.DS_Store
md_output/

7.2. Настройка на Cloudflare Pages

  1. Cloudflare Dashboard → Workers & Pages → Create → Pages → свържи GitHub repo
  2. Настройки на build:
ПолеСтойност
Framework presetAstro (или None)
Build commandnpm run build
Build output directorydist
Root directory/ (или подпапката, ако repo-то е монорепо)
Node version18 или 20 (Environment variables → NODE_VERSION=20)
  1. Save and Deploy
  2. След успех: Custom domain → fedia.eu

7.3. Redirects (стари .html линкове)

Файл public/_redirects или Cloudflare Pages → Redirects:

/docker.html  /docker  301
/linux/linux-foundation.html  /linux/linux-foundation  301

(Добави само ако реално има стари .html URL-и в Google/bookmarks.)


8. HTML vs Astro — губиш ли нещо при смяна?

Не за посетителя.

Стар HTMLAstro
Onlineстатични файловестатични файлове (dist/)
Cloudflareкачваш файлове / PagesPages build → dist/
URL-исъщите (ако ги запазим)същите
Скоростдобрачесто по-добра (билднат CSS, без Tailwind CDN)

Ти като автор: редактираш .md + npm run build (или push → автоматичен build), вместо ръчно да пипаш десетки HTML файлове.


9. Git — ежедневна работа

9.1. Проверка на статуса

git status               # какво е променено
git status -s            # кратък формат
git branch               # в кой клон си
git log --oneline -10    # последни 10 commits

9.2. Commit и push

git add .                                    # добави всички промени
git add src/content/scripts/нова-статия.md   # или конкретен файл
git commit -m "Add: Нов скрипт за backup"
git push

9.3. Работа с клонове

git checkout -b feature/нова-функция   # нов клон
git branch -a                          # всички клонове
git checkout main                      # върни на main
git merge feature/нова-функция         # слеи клон
git branch -d feature/нова-функция     # изтрий клон

9.4. Спасяване при грешка

git checkout -- .              # откажи неозапазените промени
git reset --soft HEAD~1        # откажи последен commit (запази промените)
git reset --hard HEAD~1        # откажи последен commit (ИЗТРИВА промените!)
git stash                      # скрий промените временно
git stash pop                  # върни ги
git revert HEAD                # безопасен откат на вече push-нат commit

9.5. Типични commit съобщения

git commit -m "Add: Нов скрипт за Docker backup"
git commit -m "Fix: Поправен линк в навигацията"
git commit -m "Update: Обновен README"
git commit -m "Remove: Изтрит стар скрипт"
git commit -m "Docs: Добавена документация"
git commit -m "Style: Форматиране на CSS"
git commit -m "Refactor: Преименувани променливи"

10. NPM команди

npm install                  # инсталирай зависимости
npm install пакет-име        # конкретен пакет
npm install --save-dev ИМЕ   # само за разработка
npm update                   # обнови всички
npm outdated                 # провери остарели
npm info astro               # информация за пакет

11. Търсене и проверка

find src/content/scripts -name "*.md"        # всички .md файлове
ls src/content/scripts/*.md | wc -l          # брой
grep -r "docker" src/content/scripts/        # търси текст
head -15 src/content/scripts/ИМЕ.md          # провери frontmatter
tree src/ -L 3                               # структура
npm run build 2>&1 | grep -i "error"         # провери за грешки

12. Типични сценарии

Сценарий 1: Добавяне на нов скрипт

cd /mnt/c/Users/fedia/Desktop/fs
nano src/content/scripts/docker-cleanup.md
# постави шаблона (виж 4.2)
# Ctrl+O → Enter → Ctrl+X

# ако dev сървърът работи → виж http://localhost:4321/scripts/
# ако НЕ се появи:
rm -rf node_modules/.astro .astro
npm run dev

git add src/content/scripts/docker-cleanup.md
git commit -m "Add: Docker cleanup скрипт"
git push

Сценарий 2: Промяна на дизайна

nano src/pages/scripts.astro
# промени CSS-а в <style> блока
# Ctrl+O → Enter → Ctrl+X

# hard refresh: Ctrl + Shift + R

git add src/pages/scripts.astro
git commit -m "Style: Обновен дизайн на каталога"
git push

Сценарий 3: Нещо се счупи

git status              # виж какво е променено
git diff                # виж разликите
git checkout -- .       # откажи неозапазените промени

# ако си направил лош commit:
git reset --hard HEAD~1    # ВНИМАНИЕ: изтрива промените!

# ако си направил лош push:
git revert HEAD
git push

Сценарий 4: Pull от друга машина

cd /mnt/c/Users/fedia/Desktop/fs
git pull
rm -rf node_modules/.astro .astro dist
npm run dev

Сценарий 5: Нова статия / промяна на съдържание (общ цикъл)

# 1. Пишеш/редактираш src/content/.../*.md
# 2. npm run dev — гледаш локално
npm run dev

# 3. git add → commit → push
git add .
git commit -m "Fix: overwrite sitemap.xml with correct trailing-slash version"
git push

# 4. Cloudflare Pages билдва автоматично

13. Често срещани проблеми

СимптомРешение
Build: грешка за { в съдържаниев MD не е проблем; ако е .astro страница — escape {'{'}
# заглавие „не се вижда”вече е оправено в global.css (.article-content h1)
Няма стиловеnpm run build / hard refresh; Tailwind е през @astrojs/tailwind, не CDN
Статия липсва onlinedraft: true или файл извън src/content/<series>/
Docker prev/next води към /docker/dockerоправено в nav.ts — вземи актуалния файл
PDF 404файлът трябва да е в public/books/ и линкът /books/ime.pdf
Cloudflare build failпровери Node 18+, npm run build локално първо
Скрипт/статия не се появява след добавянеизчисти кеша (виж т. 6)

14. Чеклист преди първо качване (initial deploy)

npm install
npm run build
npm run preview

После отвори и провери:

  • / начална
  • /docker + prev/next към следваща част
  • /linux/linux-foundation — заглавия # / ## изглеждат нормално
  • /linux/astro-cloudflare-pages — hero снимка
  • /prox/uvod, /wsl/uvod
  • /knigi/knigi — PDF линковете свалят файлове
  • /preporychvam — външни линкове (spirachki, itpraktika)
  • /en
  • /scripts — каталогът се зарежда
  • /narachnik — наръчникът се зарежда
  • умишлен грешен URL → 404 страница
  • меню (desktop + мобилен hamburger)
  • npm run build без грешки в терминала

Ако всичко отгоре е зелено → качвай спокойно (GitHub + Cloudflare Pages).

15. Чеклист преди всеки push (ежедневен)

  • npm run dev работи без грешки?
  • Новото съдържание се появява на съответната страница?
  • Отделната страница/скрипт се отваря правилно?
  • Бутони / интерактивни елементи работят (напр. „📋 Копирай”)?
  • npm run build минава без грешки?
  • git status показва само това, което искаш?

Ако всичко е ✅ → git push 🚀


16. Полезни пътища (резюме на един екран)

Статия              → src/content/<series>/<slug>.md
Скрипт              → src/content/scripts/<slug>.md
Наръчник            → src/content/docs/narachnik.md
Меню                → src/data/nav.ts
Препоръчвам         → src/data/recommendations.ts
Related             → src/data/articles.ts
Книги               → src/pages/knigi/knigi.astro
Каталог скриптове   → src/pages/scripts.astro
Шаблон скрипт       → src/pages/scripts/[slug].astro
Стилове             → src/styles/global.css
Колекции (schema)   → src/content.config.ts
Layout              → src/layouts/BaseLayout.astro
Build изход         → dist/
Скриптове (python)  → scripts/

Край на наръчника.