diff --git a/.obsidian/app.json b/.obsidian/app.json index 9e26dfe..6abe4c1 100644 --- a/.obsidian/app.json +++ b/.obsidian/app.json @@ -1 +1,3 @@ -{} \ No newline at end of file +{ + "alwaysUpdateLinks": true +} \ No newline at end of file diff --git a/Second Mind Setup/second_mind_overview.md b/Second Mind Setup/second_mind_overview.md deleted file mode 100644 index 9b2a8be..0000000 --- a/Second Mind Setup/second_mind_overview.md +++ /dev/null @@ -1,100 +0,0 @@ -# Second Mind - Обзор системы - -## Описание - -Second Mind - система автоматической публикации заметок Obsidian через Quartz с использованием Git-based workflow. Позволяет превращать локальные заметки в красивый статический сайт автоматически при каждом commit'е. - -## Архитектура системы - -```mermaid -graph TB - A[Gitea Repository] --> B[Webhook Service] - B --> C[Quartz Builder] - C --> D[Static Files] - D --> E[Nginx Server] - F[PostgreSQL] --> A - G[Traefik Proxy] --> A - G --> E - G --> B -``` - -## Основные компоненты - -### Git-сервер (Gitea) -- **Назначение**: Хранение и версионирование заметок -- **Домен**: `git.aepif.ru` -- **База данных**: PostgreSQL -- **Особенности**: SSH доступ на порту 2222, webhook'и при push - -### Webhook Service -- **Назначение**: Автоматическая пересборка при изменениях -- **Домен**: `webhook.aepif.ru` -- **Технология**: Node.js + Express -- **Функции**: - - Получение webhook'ов от Gitea - - Обновление локальной копии репозитория - - Запуск сборки Quartz - - Копирование результата для Nginx - -### Quartz Builder -- **Назначение**: Генерация статического сайта из Markdown -- **Репозиторий**: Кастомный форк `ssh://git@git.aepif.ru:2222/aep/quartz.git` -- **Особенности**: Поддержка Obsidian-flavored Markdown, граф связей, поиск - -### Веб-сервер (Nginx) -- **Назначение**: Раздача статического контента -- **Домен**: `notes.aepif.ru` -- **Особенности**: Кэширование, сжатие, защита через Authelia - -### Reverse Proxy (Traefik) -- **Назначение**: Маршрутизация трафика и SSL -- **Функции**: Автоматические SSL сертификаты, балансировка, middleware - -## Workflow использования - -1. **Создание заметок** в Obsidian локально -2. **Commit и push** изменений в Gitea репозиторий -3. **Автоматический webhook** от Gitea запускает пересборку -4. **Webhook сервис** обновляет локальную копию и запускает Quartz -5. **Quartz генерирует** обновленный статический сайт -6. **Nginx раздает** новый контент посетителям - -## Домены и доступ - -| Сервис | Домен | Описание | Защита | -|--------|-------|----------|---------| -| Git-сервер | `git.aepif.ru` | Интерфейс Gitea | Авторизация | -| Статический сайт | `notes.aepif.ru` | Опубликованные заметки | Authelia | -| Webhook | `webhook.aepif.ru` | API для автоматизации | Секретный токен | - -## Структура файлов - -``` -/DOCKER/second-mind/ -├── docker-compose.yml # Основная конфигурация -├── Dockerfile # Образ для webhook сервиса -├── .env # Переменные окружения -├── nginx.conf # Конфигурация Nginx -├── webhook-server/ # Код webhook сервиса -│ ├── server.js -│ └── package.json -├── obsidian_repo/ # Локальная копия репозитория -└── quartz_build/ # Собранный статический сайт -``` - -## Преимущества решения - -- **Автоматизация**: Публикация происходит автоматически при push -- **Версионирование**: Полная история изменений через Git -- **Безопасность**: Многоуровневая защита доступа -- **Производительность**: Статический сайт быстро загружается -- **Кастомизация**: Возможность настройки внешнего вида через Quartz -- **Поиск**: Полнотекстовый поиск по заметкам -- **Связи**: Визуализация связей между заметками - -## Следующие шаги - -Для развертывания системы изучите: -- [[Second Mind - Конфигурации]] - настройки всех сервисов -- [[Second Mind - Развертывание]] - пошаговая инструкция установки -- [[Second Mind - Администрирование]] - обслуживание и мониторинг \ No newline at end of file diff --git a/Second Mind Setup/Second Mind - Администрирование.md b/Second Mind Setup/Администрирование.md similarity index 99% rename from Second Mind Setup/Second Mind - Администрирование.md rename to Second Mind Setup/Администрирование.md index dc59cf9..4bdd05f 100644 --- a/Second Mind Setup/Second Mind - Администрирование.md +++ b/Second Mind Setup/Администрирование.md @@ -447,4 +447,4 @@ http { } ``` -Система администрирования настроена! Для дальнейшего изучения см. [[Second Mind - Обзор системы]] \ No newline at end of file +Система администрирования настроена! Для дальнейшего изучения см. [[Обзор системы]] \ No newline at end of file diff --git a/Second Mind Setup/Second Mind - Конфигурации.md b/Second Mind Setup/Конфигурации.md similarity index 99% rename from Second Mind Setup/Second Mind - Конфигурации.md rename to Second Mind Setup/Конфигурации.md index 49cb7be..a72fbf7 100644 --- a/Second Mind Setup/Second Mind - Конфигурации.md +++ b/Second Mind Setup/Конфигурации.md @@ -1,5 +1,3 @@ - - ## Docker Compose ### Основной файл docker-compose.yml @@ -300,4 +298,4 @@ ssh-keyscan -p 2222 git.aepif.ru >> ~/.ssh/known_hosts - Environment переменных контейнеров - Примонтированных SSH ключах -Следующий документ: [[Second Mind - Развертывание]] \ No newline at end of file +Следующий документ: [[Развертывание]] \ No newline at end of file diff --git a/Second Mind Setup/second_mind_deployment.md b/Second Mind Setup/Обзор системы.md similarity index 93% rename from Second Mind Setup/second_mind_deployment.md rename to Second Mind Setup/Обзор системы.md index 9b2a8be..0687c09 100644 --- a/Second Mind Setup/second_mind_deployment.md +++ b/Second Mind Setup/Обзор системы.md @@ -1,5 +1,3 @@ -# Second Mind - Обзор системы - ## Описание Second Mind - система автоматической публикации заметок Obsidian через Quartz с использованием Git-based workflow. Позволяет превращать локальные заметки в красивый статический сайт автоматически при каждом commit'е. @@ -95,6 +93,6 @@ graph TB ## Следующие шаги Для развертывания системы изучите: -- [[Second Mind - Конфигурации]] - настройки всех сервисов -- [[Second Mind - Развертывание]] - пошаговая инструкция установки -- [[Second Mind - Администрирование]] - обслуживание и мониторинг \ No newline at end of file +- [[Конфигурации]] - настройки всех сервисов +- [[Развертывание]] - пошаговая инструкция установки +- [[Администрирование]] - обслуживание и мониторинг \ No newline at end of file diff --git a/Second Mind Setup/Развертывание.md b/Second Mind Setup/Развертывание.md new file mode 100644 index 0000000..4eb181b --- /dev/null +++ b/Second Mind Setup/Развертывание.md @@ -0,0 +1,342 @@ +## Предварительные требования + +### Системные требования +- Ubuntu/Debian сервер с Docker и Docker Compose +- Доступ к интернету для скачивания образов +- Настроенный Traefik с сетью `proxy` +- Домен с настроенными DNS записями + +### Необходимые поддомены +- `git.aepif.ru` → IP сервера +- `notes.aepif.ru` → IP сервера +- `webhook.aepif.ru` → IP сервера + +## Пошаговая установка + +### 1. Подготовка директорий + +```bash +# Создание основной директории проекта +mkdir -p /DOCKER/second-mind +cd /DOCKER/second-mind + +# Создание рабочих папок +mkdir -p webhook-server obsidian_repo quartz_build + +# Установка прав доступа +chmod 755 obsidian_repo quartz_build +``` + +### 2. Настройка SSH ключей + +```bash +# Генерация SSH ключа для webhook сервиса +ssh-keygen -t ed25519 -C "second-mind-webhook" -f ~/.ssh/id_ed25519 + +# Просмотр публичного ключа (для добавления в Gitea позже) +cat ~/.ssh/id_ed25519.pub + +# Настройка SSH конфигурации +cat >> ~/.ssh/config << EOF +Host git.aepif.ru + Port 2222 + User git + IdentityFile ~/.ssh/id_ed25519 + StrictHostKeyChecking no +EOF + +# Установка правильных прав +chmod 600 ~/.ssh/id_ed25519 +chmod 644 ~/.ssh/id_ed25519.pub +chmod 600 ~/.ssh/config +``` + +### 3. Создание конфигурационных файлов + +#### Создание .env файла + +```bash +cat > .env << 'EOF' +DOMAIN=aepif.ru +GITEA_ADMIN_USER=admin +GITEA_ADMIN_PASSWORD=Creonila1 +GITEA_DB_PASSWORD=sG7hZXBQDAtRab9A +GITEA_SECRET=okPnnPYzdKkkpO6oS8LqI5PHm7fH/OCl +WEBHOOK_SECRET=MHtue5Zclp/dr69OFdwquGzCVHUGiEHP +REPO_NAME=second-mind-aep +EOF +``` + +#### Создание Dockerfile + +```bash +cat > Dockerfile << 'EOF' +FROM node:22 +WORKDIR /app + +# Установка Git и SSH клиента +RUN apt-get update && apt-get install -y git openssh-client && rm -rf /var/lib/apt/lists/* + +# Создание .ssh директории и настройка SSH +RUN mkdir -p /root/.ssh && chmod 700 /root/.ssh + +# Настройка SSH для автоматического принятия ключей хоста +RUN echo "Host git.aepif.ru\n\tStrictHostKeyChecking no\n\tUserKnownHostsFile=/dev/null" > /root/.ssh/config + +# Клонирование кастомного Quartz репозитория +RUN git clone ssh://git@git.aepif.ru:2222/aep/quartz.git /quartz +WORKDIR /quartz +RUN npm install + +# Копирование и настройка webhook сервиса +COPY webhook-server/ /webhook/ +WORKDIR /webhook +RUN npm install + +EXPOSE 3000 +WORKDIR /webhook +CMD ["node", "server.js"] +EOF +``` + +#### Создание nginx.conf + +```bash +cat > nginx.conf << 'EOF' +events { + worker_connections 1024; +} + +http { + include /etc/nginx/mime.types; + default_type application/octet-stream; + sendfile on; + keepalive_timeout 65; + gzip on; + + server { + listen 80; + root /usr/share/nginx/html; + index index.html; + + location / { + try_files $uri $uri/ $uri.html =404; + } + + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2)$ { + expires 1y; + add_header Cache-Control "public, immutable"; + } + } +} +EOF +``` + +#### Создание docker-compose.yml + +```bash +# Скопировать содержимое из документа "Second Mind - Конфигурации" +# Файл слишком большой для вставки здесь +``` + +### 4. Настройка webhook сервиса + +#### Создание package.json + +```bash +cat > webhook-server/package.json << 'EOF' +{ + "name": "quartz-webhook", + "version": "1.0.0", + "main": "server.js", + "dependencies": { + "express": "^4.18.0" + } +} +EOF +``` + +#### Копирование server.js + +```bash +# Скопировать готовый server.js в webhook-server/server.js +# (используйте существующий файл) +``` + +### 5. Первый запуск + +```bash +# Сборка и запуск всех сервисов +docker-compose up -d + +# Проверка статуса +docker-compose ps + +# Просмотр логов +docker-compose logs -f +``` + +### 6. Настройка Gitea + +#### Первоначальная настройка + +1. Открыть `https://git.aepif.ru` +2. Пройти первоначальную настройку: + - Database Type: PostgreSQL + - Host: `db:5432` + - Database Name: `gitea` + - Username: `gitea` + - Password: `sG7hZXBQDAtRab9A` + - SSH Server Domain: `git.aepif.ru` + - SSH Port: `2222` + - HTTP Port: `3000` + - Application URL: `https://git.aepif.ru/` + +#### Добавление SSH ключа + +1. Войти под админом (`admin` / `Creonila1`) +2. Settings → SSH / GPG Keys +3. Add Key → вставить содержимое `~/.ssh/id_ed25519.pub` +4. Сохранить + +#### Создание репозитория заметок + +1. New Repository +2. Repository Name: `second-mind-aep` +3. Visibility: Private +4. Initialize Repository: Yes +5. Create Repository + +#### Создание репозитория Quartz + +1. New Repository +2. Repository Name: `quartz` +3. Visibility: Private +4. **НЕ** инициализировать (будем форкать) + +### 7. Форк и настройка Quartz + +```bash +# Клонирование оригинального Quartz +git clone https://github.com/jackyzha0/quartz.git temp-quartz +cd temp-quartz + +# Изменение remote на наш Gitea +git remote set-url origin ssh://git@git.aepif.ru:2222/aep/quartz.git + +# Push в наш репозиторий +git push -u origin main + +# Удаление временной папки +cd .. +rm -rf temp-quartz +``` + +### 8. Настройка webhook'а + +1. В Gitea перейти в репозиторий `second-mind-aep` +2. Settings → Webhooks → Add Webhook → Gitea +3. Настройки: + - Target URL: `https://webhook.aepif.ru/webhook` + - HTTP Method: `POST` + - POST Content Type: `application/json` + - Secret: `MHtue5Zclp/dr69OFdwquGzCVHUGiEHP` + - Trigger On: `Push events` + - Active: ✓ +4. Add Webhook + +### 9. Первый тест + +#### Создание тестовой заметки + +```bash +# Клонирование репозитория заметок +git clone ssh://git@git.aepif.ru:2222/admin/second-mind-aep.git test-notes +cd test-notes + +# Создание тестовой заметки +cat > README.md << 'EOF' +--- +title: "Добро пожаловать" +--- + +# AEP Second Mind + +Это главная страница базы знаний. + +## Тестовая заметка + +Проверка автоматической сборки. +EOF + +# Commit и push +git add . +git commit -m "Initial test note" +git push origin main +``` + +#### Проверка работы + +1. Проверить логи webhook сервиса: + ```bash + docker-compose logs -f quartz-webhook + ``` + +2. Проверить появление файлов: + ```bash + ls -la quartz_build/ + ``` + +3. Открыть `https://notes.aepif.ru` и проверить сайт + +## Возможные проблемы и решения + +### SSH ключи не работают + +```bash +# Проверка SSH подключения +ssh -p 2222 git@git.aepif.ru + +# Если не работает, пересоздать ключи +rm ~/.ssh/id_ed25519* +ssh-keygen -t ed25519 -C "webhook" -f ~/.ssh/id_ed25519 +# Добавить новый публичный ключ в Gitea +``` + +### Контейнер webhook не запускается + +```bash +# Проверить логи сборки +docker-compose build quartz-webhook + +# Проверить что SSH ключи примонтированы +docker exec -it second_mind_webhook ls -la /root/.ssh/ +``` + +### Webhook не срабатывает + +1. Проверить URL webhook'а в настройках Gitea +2. Проверить секретный токен +3. Посмотреть логи delivery в Gitea: Repository → Settings → Webhooks → Recent Deliveries + +### 404 на главной странице + +```bash +# Проверить наличие index.html +docker exec -it second_mind_nginx ls -la /usr/share/nginx/html/ + +# Если нет - создать index.md в репозитории +# или проверить работу webhook'а +``` + +## Завершение установки + +После успешного развертывания у вас будет: + +- ✅ Gitea сервер на `git.aepif.ru` +- ✅ Защищенный сайт заметок на `notes.aepif.ru` +- ✅ Автоматическая пересборка при каждом push'е +- ✅ Полнотекстовый поиск и граф связей +- ✅ SSL сертификаты для всех доменов + +Следующий документ: [[Администрирование]] \ No newline at end of file