vault backup: 2025-08-04 12:34:05
This commit is contained in:
4
.obsidian/app.json
vendored
4
.obsidian/app.json
vendored
@@ -1 +1,3 @@
|
|||||||
{}
|
{
|
||||||
|
"alwaysUpdateLinks": true
|
||||||
|
}
|
||||||
@@ -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 - Администрирование]] - обслуживание и мониторинг
|
|
||||||
@@ -447,4 +447,4 @@ http {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Система администрирования настроена! Для дальнейшего изучения см. [[Second Mind - Обзор системы]]
|
Система администрирования настроена! Для дальнейшего изучения см. [[Обзор системы]]
|
||||||
@@ -1,5 +1,3 @@
|
|||||||
|
|
||||||
|
|
||||||
## Docker Compose
|
## Docker Compose
|
||||||
|
|
||||||
### Основной файл docker-compose.yml
|
### Основной файл docker-compose.yml
|
||||||
@@ -300,4 +298,4 @@ ssh-keyscan -p 2222 git.aepif.ru >> ~/.ssh/known_hosts
|
|||||||
- Environment переменных контейнеров
|
- Environment переменных контейнеров
|
||||||
- Примонтированных SSH ключах
|
- Примонтированных SSH ключах
|
||||||
|
|
||||||
Следующий документ: [[Second Mind - Развертывание]]
|
Следующий документ: [[Развертывание]]
|
||||||
@@ -1,5 +1,3 @@
|
|||||||
# Second Mind - Обзор системы
|
|
||||||
|
|
||||||
## Описание
|
## Описание
|
||||||
|
|
||||||
Second Mind - система автоматической публикации заметок Obsidian через Quartz с использованием Git-based workflow. Позволяет превращать локальные заметки в красивый статический сайт автоматически при каждом commit'е.
|
Second Mind - система автоматической публикации заметок Obsidian через Quartz с использованием Git-based workflow. Позволяет превращать локальные заметки в красивый статический сайт автоматически при каждом commit'е.
|
||||||
@@ -95,6 +93,6 @@ graph TB
|
|||||||
## Следующие шаги
|
## Следующие шаги
|
||||||
|
|
||||||
Для развертывания системы изучите:
|
Для развертывания системы изучите:
|
||||||
- [[Second Mind - Конфигурации]] - настройки всех сервисов
|
- [[Конфигурации]] - настройки всех сервисов
|
||||||
- [[Second Mind - Развертывание]] - пошаговая инструкция установки
|
- [[Развертывание]] - пошаговая инструкция установки
|
||||||
- [[Second Mind - Администрирование]] - обслуживание и мониторинг
|
- [[Администрирование]] - обслуживание и мониторинг
|
||||||
342
Second Mind Setup/Развертывание.md
Normal file
342
Second Mind Setup/Развертывание.md
Normal file
@@ -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 сертификаты для всех доменов
|
||||||
|
|
||||||
|
Следующий документ: [[Администрирование]]
|
||||||
Reference in New Issue
Block a user