Пока делал блог, столкнулся с некоторыми вопросам:
- Какими технологиями пользоваться?
- Какие инструменты понядобятся?
- Где опубликовать?
Делать какой-то большой самостоятельный обзор мне нее хотелось, поэтому я задал свои вопросы AI. И вот что я получил в ответ.
Самый простой и качественный способ создать персональный блог зависит от ваших целей:
✅ Если вы хотите быстро, бесплатно и без кода — используйте современные headless CMS + SSG (static site generators)
🔹 Вариант 1: Astro + Content Collections
- ✅ Бесплатно, локально, быстро, легко поддерживать
- ✅ Markdown-файлы как «база данных»
- ✅ Минимальный JS во фронтенде → отличная производительность
- ✅ Лёгкое развёртывание на GitHub Pages, Vercel, Netlify
- ✅ Вы можете позже добавить CMS (например, Decap CMS или TinaCMS)
- 📦 Шаблон для старта:
npm create astro@latest -- --template blog
🔹 Вариант 2: Hugo (Go-based, сверхбыстрый)
- ✅ Написан на Go → сборка в мгновение ока (идеально, если вы уже в экосистеме Go)
- ✅ Огромное количество тем (например, PaperMod)
- ✅ Полностью статический → безопасен и дёшев в хостинге
- ✅ Поддержка Markdown, автоматическая генерация RSS, SEO-метатегов и т.д.
⚡ Совет: если вы — Go-разработчик (как следует из памяти), Hugo будет особенно уместен: без зависимостей, один бинарник, легко встроить в CI через Makefile.
✅ Если хочется CMS с UI-редактором (но всё ещё бесплатно и просто)
| Инструмент | Плюсы | Минусы |
|---|---|---|
| Ghost | Чистый, ориентирован на блоги, markdown-редактор, встроенный SEO | Бесплатно только self-hosted (нужен VPS/хостинг), облачный — от $9/мес |
| Hashnode | Бесплатно, поддомен yourname.hashnode.dev, поддержка кастомного домена, community | Менее гибкий, реклама в бесплатной версии |
| Dev.to | Бесплатно, отличная аудитория разработчиков | Не ваш собственный домен «по-настоящему», ограниченная кастомизация |
💡 Для технического блога (особенно про Go, Docker, backend) Hashnode или Dev.to — отличный старт: низкий порог входа, встроенная аудитория.
✅ Если вы хотите «свой» блог с полным контролем (и готовы к минимальной разработке)
Стек:
- Backend: Go (например, простой HTTP-сервер с шаблонами
html/template) - Frontend: базовый HTML/CSS (Tailwind CDN — без сборки)
- Контент: Markdown → рендер через goldmark
- Хостинг: VPS (например, Hetzner Cloud €4.5/мес) + Caddy/nginx
- CI/CD: GitHub Actions → сборка и деплой через
scpилиrsync
- Backend: Go (например, простой HTTP-сервер с шаблонами
Шаблон-стартер:
- qvl/astro-blog
- spf13/hugo-templates
- go-blog-starter (если хочется полноценный Go API + SSR)
🔚 Рекомендация от меня (с учётом вашего профиля):
🚀 Начните с Hugo + GitHub Pages
- Просто, бесплатно, быстро
- Контент хранится в Git — как код
- Можно позже добавить API, форму комментариев (через Utterances или Giscus)
- Всё это легко автоматизировать через Makefile и CI (вы уже этим занимаетесь)
Меня не пришлось долго уговаривать, я выбрал Hugo. Перейдем к описанию того, что необходимо сделать для того, чтобы получить такой блог, который сейчас перед вашими глазами.
- Установка Hugo
- Создание нового блога
- Создание и редактирование постов
- Локальный запуск
- Настройка GitHub Pages
- Публикация изменений
- Полезные команды
- Дополнительные ресурсы
Установка Hugo
Для Linux (Ubuntu/Debian)
- Скачайте последнюю версию Hugo Extended (важно: нужна именно Extended версия для поддержки темы PaperMod):
# Узнайте последнюю версию на https://github.com/gohugoio/hugo/releases
# Например, для версии 0.146.0:
wget wget https://github.com/gohugoio/hugo/releases/download/v0.148.0/hugo_extended_0.148.0_linux-amd64.deb
- Установите пакет:
sudo dpkg -i hugo_extended_0.148.0_linux-amd64.deb
- Проверьте установку:
hugo version
Должно вывести:
Создание нового блога
- Создайте директорию для проекта:
mkdir -p ~/projects/myblog
cd ~/projects/myblog
- Инициализируйте новый сайт Hugo:
hugo new site . --force
- Добавьте тему PaperMod как git submodule:
git init
git submodule add -b main https://github.com/adityatelange/hugo-PaperMod.git themes/PaperMod
- Создайте файл конфигурации
hugo.toml:
baseURL = 'https://yourusername.github.io/myblog/'
languageCode = "ru-ru"
title = "Заголовок Вашего блога"
theme = "PaperMod"
[params]
author = "ваше_имя"
description = "Описание Вашего блога"
defaultTheme = "auto" # light/dark/auto
[markup.highlight]
noClasses = false
Важно: Замените yourusername на ваш GitHub username и myblog на название вашего репозитория.
- Создайте первую директорию для постов:
mkdir -p content/posts
- Создайте первый пост (см. раздел Создание постов)
Создание и редактирование постов
Создание нового поста
- Создайте новый файл в директории
content/posts/:
hugo new posts/nazvanie-vashego-posta.md
Или создайте файл вручную:
nano content/posts/nazvanie-vashego-posta.md
- Структура файла поста:
---
title: "Заголовок вашего поста"
date: 2025-12-06T10:00:00+03:00
draft: false
---
Ваш контент здесь. Вы можете использовать **Markdown** синтаксис.
## Заголовок второго уровня
- Список
- Элементов
**Жирный текст**, *курсив*, `код`.
```go
// Пример кода
func main() {
fmt.Println("Hello, World!")
}
Параметры front matter
title- заголовок постаdate- дата публикации (формат:2025-12-06T10:00:00+03:00)draft- черновик (true/false). Еслиtrue, пост не будет показан на сайтеtags- теги (опционально):tags: ["go", "hugo", "блог"]categories- категории (опционально):categories: ["разработка"]
Пример полного поста
---
title: "Почему я завёл этот блог"
date: 2025-12-06T10:00:00+03:00
draft: false
tags: ["блог", "размышления"]
categories: ["личное"]
---
Всем привет! 👋
Это мой первый пост в личном блоге.
## Подзаголовок
Текст с **жирным** и *курсивом*.
- Список
- Элементов
```go
func example() {
// код
}
Редактирование существующего поста
- Откройте файл поста:
nano content/posts/moy-pervyj-post.md
Или используйте любой текстовый редактор (VS Code, vim, gedit и т.д.)
Внесите изменения и сохраните
Проверьте результат локально (см. раздел Локальный запуск)
Полезные команды для работы с постами
# Создать новый пост с шаблоном
hugo new posts/nazvanie-posta.md
# Создать пост в черновике (draft: true)
hugo new posts/chernovik.md --buildDrafts
# Показать все посты (включая черновики)
hugo list drafts
Локальный запуск
- Запустите локальный сервер разработки:
cd ~/projects/myblog
hugo server -D
Флаг -D включает черновики (посты с draft: true).
- Откройте браузер и перейдите по адресу:
Автоматическая перезагрузка: Hugo автоматически перезагружает страницу при изменении файлов.
Остановка сервера: Нажмите
Ctrl+Cв терминале.
Дополнительные опции запуска
# Запуск на другом порту
hugo server -D -p 8080
# Запуск с привязкой к внешнему IP (для доступа с других устройств)
hugo server -D --bind 0.0.0.0
# Запуск с минификацией (как в production)
hugo server -D --minify
Настройка GitHub Pages
1. Создание репозитория на GitHub
- Создайте новый репозиторий на GitHub (например,
myblog) - Важно: Название репозитория должно совпадать с путем в
baseURLвhugo.toml
2. Настройка GitHub Pages
- Перейдите в Settings → Pages вашего репозитоапараметррия
- В разделе Source выберите GitHub Actions
3. Настройка workflow
Workflow файл уже должен быть создан в .github/workflows/deploy.yml. Проверьте, что он содержит:
name: Deploy Blog to GitHub Pages
on:
push:
branches: [main]
workflow_dispatch:
permissions:
contents: read
pages: write
id-token: write
concurrency:
group: "pages"
cancel-in-progress: true
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
submodules: true
fetch-depth: 0
- name: Setup Pages
id: pages
uses: actions/configure-pages@v5
- name: Setup Hugo
uses: peaceiris/actions-hugo@v3
with:
hugo-version: '0.146.0'
extended: true
- name: Build
run: hugo --minify --baseURL ${{ steps.pages.outputs.base_url }}
- name: Upload artifact
uses: actions/upload-pages-artifact@v3
with:
path: ./public
deploy:
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
needs: build
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
4. Настройка .gitignore
Убедитесь, что в .gitignore есть:
Публикация изменений
Первая публикация
- Инициализируйте git репозиторий (если еще не сделано):
cd ~/projects/myblog
git init
- Добавьте удаленный репозиторий:
git remote add origin https://github.com/yourusername/myblog.git
- Добавьте все файлы:
git add .
- Создайте первый коммит:
git commit -m "Initial commit: Hugo blog setup"
- Запушьте в main ветку:
git branch -M main
git push -u origin main
Публикация новых постов и изменений
Создайте или отредактируйте пост (см. раздел Создание постов)
Проверьте локально:
hugo server -D
Убедитесь, что
draft: falseв файле постаЗакоммитьте и запушьте изменения:
git add .
git commit -m "Добавлен новый пост: название поста"
git push
GitHub Actions автоматически соберет и задеплоит сайт
Проверьте статус деплоя:
- Перейдите в Actions вкладку вашего репозитория на GitHub
- Дождитесь завершения workflow (обычно 1-2 минуты)
Сайт будет доступен по адресу:
https://yourusername.github.io/myblog/
Полезные команды
# Сборка сайта для production
hugo --minify
# Сборка с включением черновиков
hugo -D --minify
# Показать статистику сайта
hugo --templateMetrics
# Очистить кэш и пересобрать
hugo --cleanDestinationDir
# Показать все посты
hugo list all