chore(docs): уборка структуры — вся документация в docs/, краткий README, добавлен AGENTS.md
- AGENTS.md: правила проекта (структура доков, стек, статьи, деплой, git, openspec, проверки) - README.md: сокращён до введения + указателей на docs/ - docs/: DEPLOY_INSTRUCTIONS, ROADMAP, PAPERMOD_PARAMS, QWEN, gitea-setup, Telegram_frontend, ssh_setup, archive/PROJECT_SUMMARY (из .qwen/) - tools/: winscp_script.txt переехал из корня к deploy_sftp.py - Makefile и deploy_sftp.py: ссылки на docs/DEPLOY_INSTRUCTIONS.md
This commit is contained in:
@@ -0,0 +1,87 @@
|
|||||||
|
# AGENTS.md — правила работы с проектом dedinit.ru
|
||||||
|
|
||||||
|
## Общие принципы
|
||||||
|
|
||||||
|
1. Взаимодействие и документация — на русском языке.
|
||||||
|
2. Все важные решения и изменения фиксируются в README.md (кратко) и соответствующих документах в `docs/`.
|
||||||
|
3. Перед применением изменений проверяется корректность принятых решений.
|
||||||
|
4. Цель — максимально быстро публиковать контент без поломки сайта.
|
||||||
|
|
||||||
|
## Структура документации
|
||||||
|
|
||||||
|
- `README.md` — ТОЛЬКО краткое введение в проект для репозитория:
|
||||||
|
что это, стек, быстрый старт (сборка/деплой) и указатели на `docs/`.
|
||||||
|
Никакой подробной документации и истории изменений в README не держим.
|
||||||
|
- `docs/` — вся подробная документация проекта:
|
||||||
|
инструкции, справочники, дорожные карты, заметки об опыте настройки.
|
||||||
|
- `AGENTS.md` — правила работы для агентов (этот файл).
|
||||||
|
- Подробная эксплуатационная документация НЕ должна лежать в корне репозитория.
|
||||||
|
Новые документы создавать только в `docs/`.
|
||||||
|
|
||||||
|
## Технологический стек
|
||||||
|
|
||||||
|
| Параметр | Значение |
|
||||||
|
|----------|----------|
|
||||||
|
| Генератор | Hugo Extended 0.165.x |
|
||||||
|
| Тема | rDedInit (форк PaperMod) |
|
||||||
|
| Язык | Русский (ru-ru), timeZone Europe/Moscow |
|
||||||
|
| Формат статей | Bundle: `content/posts/<name>/index.md` (+ hero.svg и др.) |
|
||||||
|
| Git-хостинг | gitverse.ru — источник истины (kpa39l/dedinit.ru) |
|
||||||
|
| Деплой | SFTP на kpa39l.myjino.ru:2222 |
|
||||||
|
|
||||||
|
## Статьи (контент)
|
||||||
|
|
||||||
|
- Новые статьи: `content/posts/<YYYYMMDD - slug>/index.md`.
|
||||||
|
- Frontmatter: `date`, `lastmod` — в прошлом (Hugo молча не публикует
|
||||||
|
страницы с датой в будущем), `draft: false`, `title`, `slug`.
|
||||||
|
- hero.svg для статьи: `viewBox="0 0 1200 400"`, фон `#0a0c10`,
|
||||||
|
паттерн-гексагон `#1a2332`, заголовок моноширинный `#58a6ff`.
|
||||||
|
Копировать hero.svg из последнего поста как базу — единый стиль.
|
||||||
|
- Блочный код с подсветкой — обязателен там, где нужен (цель проекта).
|
||||||
|
|
||||||
|
## Сборка и деплой
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# ЕДИНСТВЕННЫЙ способ деплоя — make deploy. Не заменять на rsync/ssh-exec:
|
||||||
|
# аккаунт Jino SFTP-only (exec request failed on channel 0).
|
||||||
|
export SSHPASS='<пароль SFTP>'
|
||||||
|
make deploy # hugo --minify + mirror public/ → /dedinit.ru
|
||||||
|
make deploy-dry-run # симуляция деплоя
|
||||||
|
make build # только сборка
|
||||||
|
make help # все команды
|
||||||
|
```
|
||||||
|
|
||||||
|
- `public/`, `.venv/`, `.hermes/` — в git не попадают (.gitignore).
|
||||||
|
- Пароль SFTP в открытом виде в репозиторий НЕ коммитить
|
||||||
|
(winscp_script.txt с паролем был вынесен из корня — см. `tools/`).
|
||||||
|
|
||||||
|
## Git
|
||||||
|
|
||||||
|
- Ветка `main`, источник истины — gitverse.ru, пуши через SSH
|
||||||
|
(`git@gitverse.ru:kpa39l/dedinit.ru.git`).
|
||||||
|
- Gitea (bigbox) — pull-mirror, туда отдельно не пушить.
|
||||||
|
- Коммиты — короткие, по смыслу изменений.
|
||||||
|
- Секреты и пароли в коммиты не добавлять.
|
||||||
|
|
||||||
|
## Процессы и планирование
|
||||||
|
|
||||||
|
- Планирование изменений — OpenSpec: `openspec/` (specs + changes).
|
||||||
|
Правки контента/кода — через openspec-скиллы из `.hermes/skills/`
|
||||||
|
(propose → design → apply → archive).
|
||||||
|
- Проверочные действия перед этапами: `hugo version`, `make build`,
|
||||||
|
контроль `hugo.toml`, `make deploy-dry-run`.
|
||||||
|
|
||||||
|
## Обязательные проверки перед публикацией статьи
|
||||||
|
|
||||||
|
1. `date` НЕ в будущем (иначе Hugo молча не публикует, без предупреждения).
|
||||||
|
2. `make build` проходит без ошибок.
|
||||||
|
3. Статья есть в сборке: `ls public/<год>/<slug>/index.html`,
|
||||||
|
`grep -o '<title>[^<]*</title>'`, `grep -o 'hero.svg'`.
|
||||||
|
4. `git push origin main`, затем при необходимости `make deploy`.
|
||||||
|
|
||||||
|
## Правила пользователя
|
||||||
|
|
||||||
|
- Краткие статус-отчёты на русском языке.
|
||||||
|
- Тихие watchdog'и: уведомлять только при реальной проблеме.
|
||||||
|
- НЕ удалять и не перезаписывать данные пользователя без явного подтверждения.
|
||||||
|
- Перед действиями — читать доки проекта (STATUS/PRD/WALKTHROUGH/TODO.md, openspec) и прошлые сессии.
|
||||||
@@ -13,7 +13,7 @@ else
|
|||||||
# Венв .venv создаётся автоматически таргетом venv (нужен paramiko).
|
# Венв .venv создаётся автоматически таргетом venv (нужен paramiko).
|
||||||
DEPLOY_CMD = .venv/bin/python tools/deploy_sftp.py
|
DEPLOY_CMD = .venv/bin/python tools/deploy_sftp.py
|
||||||
DRYRUN_CMD = .venv/bin/python tools/deploy_sftp.py --dry-run
|
DRYRUN_CMD = .venv/bin/python tools/deploy_sftp.py --dry-run
|
||||||
# Пароль берётся из переменной окружения SSHPASS (см. README.md / DEPLOY_INSTRUCTIONS.md)
|
# Пароль берётся из переменной окружения SSHPASS (см. README.md / docs/DEPLOY_INSTRUCTIONS.md)
|
||||||
endif
|
endif
|
||||||
.PHONY: build deploy deploy-dry-run clean rebuild help venv
|
.PHONY: build deploy deploy-dry-run clean rebuild help venv
|
||||||
|
|
||||||
@@ -27,7 +27,7 @@ deploy: build venv
|
|||||||
ifeq ($(PLATFORM),Windows)
|
ifeq ($(PLATFORM),Windows)
|
||||||
$(DEPLOY_CMD)
|
$(DEPLOY_CMD)
|
||||||
else
|
else
|
||||||
@test -n "$$SSHPASS" || (echo "ОШИБКА: переменная SSHPASS (пароль SFTP) не задана. См. README.md / DEPLOY_INSTRUCTIONS.md"; exit 1)
|
@test -n "$$SSHPASS" || (echo "ОШИБКА: переменная SSHPASS (пароль SFTP) не задана. См. README.md / docs/DEPLOY_INSTRUCTIONS.md"; exit 1)
|
||||||
$(DEPLOY_CMD)
|
$(DEPLOY_CMD)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@@ -36,7 +36,7 @@ ifeq ($(PLATFORM),Windows)
|
|||||||
@echo "Выполняем проверку соединения с сервером..."
|
@echo "Выполняем проверку соединения с сервером..."
|
||||||
$(DRYRUN_CMD)
|
$(DRYRUN_CMD)
|
||||||
else
|
else
|
||||||
@test -n "$$SSHPASS" || (echo "ОШИБКА: переменная SSHPASS (пароль SFTP) не задана. См. README.md / DEPLOY_INSTRUCTIONS.md"; exit 1)
|
@test -n "$$SSHPASS" || (echo "ОШИБКА: переменная SSHPASS (пароль SFTP) не задана. См. README.md / docs/DEPLOY_INSTRUCTIONS.md"; exit 1)
|
||||||
$(DRYRUN_CMD)
|
$(DRYRUN_CMD)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@@ -66,4 +66,4 @@ help:
|
|||||||
@echo " make help - показать это сообщение"
|
@echo " make help - показать это сообщение"
|
||||||
@echo ""
|
@echo ""
|
||||||
@echo "Деплой: export SSHPASS='<пароль SFTP>'; make deploy"
|
@echo "Деплой: export SSHPASS='<пароль SFTP>'; make deploy"
|
||||||
@echo "Пароль хранится в DEPLOY_INSTRUCTIONS.md (winscp_script.txt для Windows)."
|
@echo "Пароль хранится в docs/DEPLOY_INSTRUCTIONS.md (winscp_script.txt для Windows)."
|
||||||
@@ -1,100 +1,55 @@
|
|||||||
# dedinit.ru
|
# dedinit.ru
|
||||||
|
|
||||||
## Описание проекта
|
**dedinit.ru** — блог на генераторе статических сайтов [Hugo](https://gohugo.io)
|
||||||
|
(extended) с кастомной темой **rDedInit** (форк [PaperMod](https://github.com/adityatelange/hugo-PaperMod)).
|
||||||
|
Платформа для публикации лонгридов с поддержкой блоков кода и подсветки
|
||||||
|
синтаксиса.
|
||||||
|
|
||||||
Этот проект представляет собой блог на основе генератора статических сайтов Hugo с темой PaperMod. Основная цель проекта - создать платформу для публикации лонгридов с поддержкой блоков кода и подсветки синтаксиса, чего не хватает в других сервисах (Telegraph, VK, Writefreely).
|
## Быстрый старт
|
||||||
|
|
||||||
## Технические детали
|
```bash
|
||||||
|
hugo # сборка в public/
|
||||||
- Генератор статических сайтов: Hugo (расширенная версия)
|
hugo server # локальный сервер: http://localhost:1313
|
||||||
- Тема оформления: PaperMod (<https://github.com/adityatelange/hugo-PaperMod>)
|
make build # сборка через Makefile (hugo --minify)
|
||||||
- Хранение контента: GitVerse (<gitverse.ru:kpa39l/dedinit.ru>) через SSH
|
make deploy # сборка + деплой (требует SSHPASS)
|
||||||
- Настройка: bundle хранение статей
|
|
||||||
|
|
||||||
## Статус проекта
|
|
||||||
|
|
||||||
Проект находится в стадии разработки. Выполненные задачи:
|
|
||||||
|
|
||||||
- Установлена Hugo расширенная версия (0.155.1)
|
|
||||||
- Создан новый сайт dedinit.ru
|
|
||||||
- Установлена и настроена тема PaperMod
|
|
||||||
- Настроено bundle хранение статей
|
|
||||||
- Решена проблема совместимости Hugo и темы PaperMod
|
|
||||||
- Репозиторий подключён к GitVerse (gitverse.ru:kpa39l/dedinit.ru)
|
|
||||||
- **Создана собственная тема rDedInit** на базе PaperMod
|
|
||||||
|
|
||||||
## История изменений
|
|
||||||
|
|
||||||
### 30 августа 2026 года
|
|
||||||
|
|
||||||
- Написана и опубликована статья «Как я перевёл aux-задачи Hermes на локальные модели» (пост `20260830 - local aux models hermes`, slug `local-aux-models-hermes-qwen3`)
|
|
||||||
- Исправлена сборка с современными версиями Hugo: добавлен `defaultContentLanguage = 'ru'` в hugo.toml (Hugo 0.123+ требует, чтобы defaultContentLanguage совпадал с одним из `[languages]`, иначе ошибка `config value "en" does not match any language definition`)
|
|
||||||
- Установлен локальный git identity в репозитории: Storozhenko Evgeny <kpa39l@yandex.ru>
|
|
||||||
- Подробный опыт настройки локальных aux-моделей Hermes задокументирован в [docs/local-aux-models.md](docs/local-aux-models.md)
|
|
||||||
|
|
||||||
### 31 января 2026 года
|
|
||||||
|
|
||||||
- Установлена Hugo расширенная версия 0.155.1
|
|
||||||
- Создан новый сайт dedinit.ru
|
|
||||||
- Установлена тема PaperMod
|
|
||||||
- Настроено bundle хранение статей
|
|
||||||
- Создан пример статьи в формате bundle
|
|
||||||
- Настроена интеграция с Gitea сервером
|
|
||||||
|
|
||||||
### 5 марта 2026 года
|
|
||||||
|
|
||||||
- Миграция репозитория на GitVerse (gitverse.ru:kpa39l/dedinit.ru)
|
|
||||||
|
|
||||||
### 1 февраля 2026 года
|
|
||||||
|
|
||||||
- Разработано решение для деплоя сайта через SFTP
|
|
||||||
- Настроен Makefile для кроссплатформенного деплоя (Windows/Linux/macOS)
|
|
||||||
- Создан скрипт winscp_script.txt для подключения и синхронизации файлов
|
|
||||||
- Обновлены инструкции по деплою в DEPLOY_INSTRUCTIONS.md и README.md
|
|
||||||
|
|
||||||
## Принятые технические решения
|
|
||||||
|
|
||||||
1. **Выбор Hugo**: Выбран генератор статичных сайтов Hugo для быстродействия и гибкости
|
|
||||||
2. **Расширенная версия Hugo**: Используется расширенная версия для поддержки SCSS
|
|
||||||
3. **Тема PaperMod**: Легкая и адаптивная тема с поддержкой темной/светлой темы
|
|
||||||
4. **Bundle хранение статей**: Используется формат bundle (папка с index.md) для удобного хранения статьи и связанных файлов
|
|
||||||
5. **Хранение на GitVerse**: Контент хранится на GitVerse для полного контроля
|
|
||||||
6. **SSH подключение**: Используется SSH для безопасного доступа к репозиторию
|
|
||||||
7. **Структура проекта**: Правильная иерархия папок с .gitignore для исключения ненужных файлов
|
|
||||||
|
|
||||||
## Запуск проекта
|
|
||||||
|
|
||||||
Для генерации сайта и просмотра его в браузере используйте следующие команды:
|
|
||||||
|
|
||||||
- `hugo` - генерирует статический сайт в папку `public`
|
|
||||||
- `hugo server` - запускает локальный сервер для предварительного просмотра сайта в браузере (обычно доступен по адресу <http://localhost:1313>)
|
|
||||||
|
|
||||||
## Деплой сайта
|
|
||||||
|
|
||||||
> **ЕДИНСТВЕННЫЙ способ деплоя сайта — `make deploy`.** Не деплойте вручную
|
|
||||||
> (rsync/ssh-exec напрямую не работают: аккаунт Jino SFTP-only).
|
|
||||||
|
|
||||||
Специальные файлы:
|
|
||||||
|
|
||||||
- `Makefile` — команды сборки и публикации (Unix: SFTP через `tools/deploy_sftp.py`
|
|
||||||
на paramiko; Windows: WinSCP.com)
|
|
||||||
- `tools/deploy_sftp.py` — рекурсивный mirror `public/` → `/dedinit.ru`
|
|
||||||
(с удалением лишнего, как `rsync --delete`), пароль из env `SSHPASS`
|
|
||||||
- `winscp_script.txt` — скрипт для WinSCP (Windows)
|
|
||||||
- `DEPLOY_INSTRUCTIONS.md` — инструкция по деплою
|
|
||||||
|
|
||||||
Для публикации сайта на хостинге:
|
|
||||||
|
|
||||||
```shell
|
|
||||||
export SSHPASS='<пароль SFTP из DEPLOY_INSTRUCTIONS.md>'
|
|
||||||
make deploy
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Первая сборка создаст `.venv/` (paramiko). Для получения полного списка команд:
|
**ЕДИНСТВЕННЫЙ способ деплоя — `make deploy`.** Не заменять на rsync/ssh-exec:
|
||||||
|
аккаунт хостинга SFTP-only. Подробности — в `docs/DEPLOY_INSTRUCTIONS.md`.
|
||||||
|
|
||||||
```shell
|
## Структура
|
||||||
make help
|
|
||||||
|
```
|
||||||
|
dedinit.ru/
|
||||||
|
├── content/posts/ # Статьи блога (bundle: папка с index.md + hero.svg)
|
||||||
|
├── themes/rDedInit/ # Кастомная тема на базе PaperMod
|
||||||
|
├── static/ # Статические ресурсы (favicon и т.д.)
|
||||||
|
├── docs/ # ВСЯ документация проекта
|
||||||
|
├── tools/ # Скрипты деплоя (deploy_sftp.py, winscp_script.txt)
|
||||||
|
├── hugo.toml # Конфигурация Hugo
|
||||||
|
├── Makefile # Сборка и деплой
|
||||||
|
├── README.md # Краткое введение (этот файл)
|
||||||
|
└── AGENTS.md # Правила работы для агентов
|
||||||
```
|
```
|
||||||
|
|
||||||
Процесс кроссплатформенный: на Unix — SFTP (paramiko), на Windows — WinSCP.com.
|
## Документация
|
||||||
НЕ удаляйте `make deploy` и не заменяйте его на прямой rsync.
|
|
||||||
|
Вся подробная документация — в каталоге [`docs/`](docs/):
|
||||||
|
|
||||||
|
| Документ | О чём |
|
||||||
|
|----------|-------|
|
||||||
|
| [DEPLOY_INSTRUCTIONS.md](docs/DEPLOY_INSTRUCTIONS.md) | Деплой через SFTP (kpa39l.myjino.ru:2222) |
|
||||||
|
| [ROADMAP.md](docs/ROADMAP.md) | Дорожная карта проекта |
|
||||||
|
| [PAPERMOD_PARAMS.md](docs/PAPERMOD_PARAMS.md) | Справочник параметров темы rDedInit |
|
||||||
|
| [QWEN.md](docs/QWEN.md) | Настройки взаимодействия и описание проекта |
|
||||||
|
| [gitea-setup.md](docs/gitea-setup.md) | Интеграция с Gitea |
|
||||||
|
| [Telegram_frontend.md](docs/Telegram_frontend.md) | Оформление Telegram-постов |
|
||||||
|
| [favicon-logo-setup.md](docs/favicon-logo-setup.md) | Настройка favicon и логотипа |
|
||||||
|
| [local-aux-models.md](docs/local-aux-models.md) | Опыт: локальные aux-модели Hermes |
|
||||||
|
| [archive/](docs/archive/) | Архив устаревших документов |
|
||||||
|
|
||||||
|
## Конвенции
|
||||||
|
|
||||||
|
- Ветка `main`; источник истины — [gitverse.ru](https://gitverse.ru) (`kpa39l/dedinit.ru`), Gitea — pull-mirror.
|
||||||
|
- Правила работы для агентов — [`AGENTS.md`](AGENTS.md).
|
||||||
|
- Планирование изменений — OpenSpec (`openspec/`).
|
||||||
@@ -172,13 +172,13 @@ metaDataFormat = "yaml"
|
|||||||
|
|
||||||
| Файл | Описание |
|
| Файл | Описание |
|
||||||
|------|----------|
|
|------|----------|
|
||||||
| README.md | Основное описание проекта |
|
| README.md | Основное описание проекта (кратко) |
|
||||||
| ROADMAP.md | Дорожная карта развития |
|
| docs/ROADMAP.md | Дорожная карта развития |
|
||||||
| PAPERMOD_PARAMS.md | Справочник параметров темы |
|
| docs/PAPERMOD_PARAMS.md | Справочник параметров темы |
|
||||||
| DEPLOY_INSTRUCTIONS.md | Инструкция по деплою |
|
| docs/DEPLOY_INSTRUCTIONS.md | Инструкция по деплою |
|
||||||
| gitea-setup.md | Настройка интеграции с Gitea |
|
| docs/gitea-setup.md | Настройка интеграции с Gitea |
|
||||||
| docs/favicon-logo-setup.md | Настройка favicon и логотипа |
|
| docs/favicon-logo-setup.md | Настройка favicon и логотипа |
|
||||||
| Telegram_frontend.md | Оформление Telegram-постов |
|
| docs/Telegram_frontend.md | Оформление Telegram-постов |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -4,7 +4,7 @@
|
|||||||
Используется командой `make deploy` (единственный способ деплоя сайта).
|
Используется командой `make deploy` (единственный способ деплоя сайта).
|
||||||
Jino-аккаунт kpa39l_dedinit — SFTP-only: удалённый exec (rsync/ssh) запрещён,
|
Jino-аккаунт kpa39l_dedinit — SFTP-only: удалённый exec (rsync/ssh) запрещён,
|
||||||
поэтому заливаем через SFTP с рекурсивным mirror и --delete (как rsync).
|
поэтому заливаем через SFTP с рекурсивным mirror и --delete (как rsync).
|
||||||
Пароль — из env SSHPASS (см. README.md / DEPLOY_INSTRUCTIONS.md).
|
Пароль — из env SSHPASS (см. README.md / docs/DEPLOY_INSTRUCTIONS.md).
|
||||||
"""
|
"""
|
||||||
import os
|
import os
|
||||||
import stat as stmod
|
import stat as stmod
|
||||||
@@ -25,7 +25,7 @@ REMOTE = os.environ.get("DEDINIT_REMOTE", "/dedinit.ru")
|
|||||||
DRYRUN = "--dry-run" in sys.argv
|
DRYRUN = "--dry-run" in sys.argv
|
||||||
|
|
||||||
if not PASS:
|
if not PASS:
|
||||||
print("ОШИБКА: переменная SSHPASS (пароль SFTP) не задана. См. README.md / DEPLOY_INSTRUCTIONS.md", file=sys.stderr)
|
print("ОШИБКА: переменная SSHPASS (пароль SFTP) не задана. См. README.md / docs/DEPLOY_INSTRUCTIONS.md", file=sys.stderr)
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
LOCAL = os.path.abspath(LOCAL)
|
LOCAL = os.path.abspath(LOCAL)
|
||||||
|
|||||||
Reference in New Issue
Block a user