342 lines
8.9 KiB
Markdown
342 lines
8.9 KiB
Markdown
## Предварительные требования
|
||
|
||
### Системные требования
|
||
- 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 сертификаты для всех доменов
|
||
|
||
Следующий документ: [[Администрирование]] |