как бесплатно поднять документацию на GitHub Pages через MkDocs
Когда заметки, конфиги, инструкции и txt-файлы начинают жить годами - их обычно собирают в документацию.
GitHub Pages + MkDocs + Material theme позволяют сделать это бесплатно, без VPS, Docker, Nginx и отдельного сервера.
Инструкция проверялась на Windows 10 22H2 через cmd.exe.
По итогу получаем:
- сайт с документацией
- публикацию через GitHub Pages
- Markdown статьи
- поиск
- навигацию
- git versioning
- auto deploy через GitHub Actions
- возможность подключить свой домен
- бесплатный хостинг
00. требования
Нужно:
- Windows
- GitHub аккаунт
- интернет
- winget
Warning
Для работы GitHub Pages нужен публичный GitHub repository либо тариф/настройки, которые позволяют публиковать Pages из private repository.
Проверяем winget:
winget --version
Если команда не найдена - установите App Installer из Microsoft Store и перезапустите cmd.
01. установка Python
winget install --id Python.Python.3 --exact
Перезапускаем cmd и проверяем:
python --version
pip --version
Info
Если python или pip не находятся после установки - перезапустите cmd или проверьте PATH.
02. установка Git
winget install --id Git.Git --exact
Перезапускаем cmd и проверяем:
git --version
03. установка MkDocs
python -m pip install mkdocs mkdocs-material
Проверяем:
python -m mkdocs --version
Если mkdocs доступен в PATH, можно использовать короткие команды:
mkdocs serve
mkdocs build
04. создание проекта
cd C:\
python -m mkdocs new infra-docs
cd C:\infra-docs
05. локальный запуск
python -m mkdocs serve
Сайт будет доступен:
http://127.0.0.1:8000
Изменения в .md файлах обычно применяются автоматически после сохранения файла.
Остановить сервер:
Ctrl+C
06. структура проекта
Минимальная структура:
infra-docs/
├─ docs/
│ ├─ index.md
│ ├─ github-pages-mkdocs.md
│ └─ stylesheets/
│ └─ extra.css
├─ mkdocs.yml
Создаем статью:
notepad C:\infra-docs\docs\github-pages-mkdocs.md
07. настройка mkdocs.yml
Редактируем:
C:\infra-docs\mkdocs.yml
Содержимое:
site_name: "infra docs"
site_url: https://USERNAME.github.io/REPO/
theme:
name: material
language: ru
icon:
logo: material/console
palette:
scheme: slate
primary: black
accent: green
features:
- navigation.tabs
- navigation.tabs.sticky
- navigation.top
- search.suggest
- search.highlight
- content.code.copy
plugins:
- search
markdown_extensions:
- admonition
- pymdownx.details
- pymdownx.superfences
- pymdownx.highlight
- tables
extra:
generator: false
extra_css:
- stylesheets/extra.css
nav:
- "Главная": index.md
- "Guides":
- "GitHub Pages + MkDocs": github-pages-mkdocs.md
Warning
site_url должен соответствовать реальному URL сайта. Для GitHub Pages обычно используется: https://USERNAME.github.io/REPO/
08. кастомный CSS
Создаем файл:
C:\infra-docs\docs\stylesheets\extra.css
Содержимое:
/* убрать содержание справа */
.md-sidebar--secondary {
display: none !important;
}
/* расширить контент */
.md-content {
max-width: none;
}
/* списки через дефис */
.md-typeset ul {
list-style: none;
padding-left: 1.2em;
}
.md-typeset ul li {
position: relative;
margin: 0.08em 0;
line-height: 1.25;
}
.md-typeset ul li::marker {
content: "";
}
.md-typeset ul li::before {
content: "- ";
color: var(--md-default-fg-color--light);
margin-left: -1.2em;
position: absolute;
}
09. GitHub repository
Создаем repository на GitHub.
Замените:
USERNAMEна свой GitHub usernameREPOна название repository
Дальше в cmd:
cd C:\infra-docs
git init
git add .
git commit -m "initial commit"
git branch -M main
git remote add origin https://github.com/USERNAME/REPO.git
git push -u origin main
10. GitHub Actions deploy
Создаем файл:
C:\infra-docs\.github\workflows\deploy.yml
Если .github и workflows отсутствуют - создаем вручную.
Содержимое:
name: deploy mkdocs
on:
push:
branches:
- main
permissions:
contents: write
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: 3.x
- run: pip install mkdocs mkdocs-material
- run: mkdocs gh-deploy --force
mkdocs gh-deploy публикует сайт в branch gh-pages.
Info
После первого deploy branch gh-pages создается автоматически.
11. публикация изменений
После изменений:
git add .
git commit -m "update docs"
git push
GitHub Actions автоматически соберет сайт и опубликует его в branch gh-pages.
В GitHub Pages source должен быть выбран:
- branch:
gh-pages - folder:
/(root)
Проверить сайт можно по адресу:
https://USERNAME.github.io/REPO/
Даже если собственный домен еще не настроен.
Info
GitHub Pages обновляется не мгновенно. Первый deploy иногда занимает несколько минут.
12. свой домен
Для домена создаем DNS записи.
Пример:
A @ 185.199.108.153
A @ 185.199.109.153
A @ 185.199.110.153
A @ 185.199.111.153
CNAME www USERNAME.github.io
Warning
DNS записи GitHub Pages лучше периодически сверять с официальной документацией GitHub.
Info
USERNAME- GitHub username@- корень домена
После этого в GitHub:
Settings -> Pages -> Custom domain
указываем свой домен.
После настройки домена желательно включить:
- Enforce HTTPS
13. проверка
Локальный запуск:
python -m mkdocs serve
Проверка сборки:
python -m mkdocs build
Проверка deploy:
git push
Если deploy успешен - workflow в GitHub Actions завершится со статусом Success.
14. типовые проблемы
mkdocs не найден
Проверить:
python -m mkdocs --version
Если команда не работает - обычно помогает перезапуск cmd.
сайт не обновляется
Проверить:
- git push
- GitHub Actions
- branch main
- workflow status
GitHub Actions успешен, но сайт не обновляется
Проверить:
- source branch gh-pages
- cache браузера
- custom domain
- DNS propagation
- GitHub Pages status
CSS не применяется
Проверить:
- путь
docs/stylesheets/extra.css - extra_css в mkdocs.yml
- обновление страницы через
Ctrl + F5
GitHub Pages открывает 404
Проверить:
- включен ли GitHub Pages
- успешен ли deploy
- правильный ли repository URL
www домен не открывается
Проверить:
- CNAME запись
- Custom domain в GitHub Pages
- DNS propagation
15. итог
На базовую настройку обычно уходит:
- пара часов
- один домен
- ноль рублей за хостинг
Если сайт успешно открывается через GitHub Pages URL или собственный домен - документация настроена корректно.
Сайт собран через Material for MkDocs, деплоится через GitHub Actions, опубликован на GitHub Pages и создан ровно по инструкции выше.