Files
DLE/docs/vds-agent-setup-process.md

248 lines
9.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Процесс настройки VDS агентом
## 📋 Полная последовательность настройки VDS
### **🎯 Что делает агент при настройке VDS:**
#### **1. Создание SSH ключей агентом на хосте (Этап 1-2)**
```bash
# Агент создает SSH ключи на хосте (не в контейнере!)
ssh-keygen -t rsa -b 4096 -C "email@example.com" -f ~/.ssh/id_rsa -N ""
# Автоматическое исправление прав доступа к SSH конфигу
chmod 600 /root/.ssh/config 2>/dev/null || true
# Установка правильных прав доступа к созданным ключам
chmod 600 /root/.ssh/id_rsa
chmod 644 /root/.ssh/id_rsa.pub
# Ключи автоматически доступны в контейнерах через монтирование:
# ~/.ssh:/root/.ssh:rw (в docker-compose.yml)
# Создание директории .ssh для root на VDS
sudo mkdir -p /root/.ssh
sudo chmod 700 /root/.ssh
# Добавление публичного ключа в authorized_keys на VDS
echo "ssh-rsa AAAAB3NzaC1yc2E..." | sudo tee -a /root/.ssh/authorized_keys
sudo chmod 600 /root/.ssh/authorized_keys
sudo chown root:root /root/.ssh/authorized_keys
```
**⚠️ Важно:** SSH ключи создаются на хосте и автоматически доступны в контейнерах через монтирование `~/.ssh:/root/.ssh:rw` в docker-compose.yml. Это позволяет SSH Key Server находить ключи для health check.
#### **2. Создание пользователей БЕЗ паролей (Этап 3-4)**
```bash
# Создание пользователя Ubuntu БЕЗ пароля
sudo useradd -m -s /bin/bash ubuntu
sudo usermod -aG sudo ubuntu
# Создание пользователя Docker БЕЗ пароля
sudo useradd -m -s /bin/bash docker
sudo usermod -aG sudo docker
sudo usermod -aG docker docker
# Создание директории для приложения
sudo mkdir -p /home/docker/dapp
sudo chown docker:docker /home/docker/dapp
```
#### **3. Установка Docker и Docker Compose (Этап 5-6)**
```bash
# Установка Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker docker
# Установка Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
```
#### **4. Настройка firewall (Этап 7)**
```bash
# Настройка UFW
sudo ufw --force enable
sudo ufw allow ssh
sudo ufw allow 80
sudo ufw allow 443
```
#### **5. Сохранение ключа шифрования (Этап 8)**
```bash
# Создание директории для ключей
sudo mkdir -p /home/docker/dapp/ssl/keys
# Сохранение ключа шифрования
echo 'encryption-key-content' | sudo tee /home/docker/dapp/ssl/keys/full_db_encryption.key
sudo chmod 600 /home/docker/dapp/ssl/keys/full_db_encryption.key
sudo chown docker:docker /home/docker/dapp/ssl/keys/full_db_encryption.key
```
#### **6. Установка Nginx и SSL сертификатов (Этап 9)**
```bash
# Установка Nginx
sudo apt-get install -y nginx
sudo systemctl enable nginx
# Установка Certbot
sudo apt-get install -y certbot python3-certbot-nginx
# Получение SSL сертификата
sudo certbot --nginx -d example.com --email admin@example.com --agree-tos --non-interactive
```
#### **7. Создание конфигурации приложения (Этап 9.4-9.5)**
```bash
# Создание docker-compose.yml
cat > /home/docker/dapp/docker-compose.yml << 'EOF'
version: '3.8'
services:
postgres:
image: postgres:16-alpine
container_name: dapp-postgres
restart: unless-stopped
environment:
- POSTGRES_DB=dapp_db
- POSTGRES_USER=dapp_user
- POSTGRES_PASSWORD=dapp_password
volumes:
- postgres_data:/var/lib/postgresql/data
ollama:
image: dapp-ollama:latest
container_name: dapp-ollama
restart: unless-stopped
volumes:
- ollama_data:/root/.ollama
ports:
- "11434:11434"
vector-search:
image: dapp-vector-search:latest
container_name: dapp-vector-search
restart: unless-stopped
ports:
- "8080:8080"
backend:
image: dapp-backend:latest
container_name: dapp-backend
restart: unless-stopped
environment:
- NODE_ENV=production
- PORT=8000
- FRONTEND_URL=https://${DOMAIN}
depends_on:
- postgres
- ollama
- vector-search
frontend-nginx:
image: dapp-frontend-nginx:latest
container_name: dapp-frontend-nginx
restart: unless-stopped
ports:
- "80:80"
- "443:443"
environment:
- DOMAIN=${DOMAIN}
- BACKEND_CONTAINER=dapp-backend
volumes:
- ./ssl:/etc/ssl/certs:ro
depends_on:
- backend
volumes:
postgres_data:
ollama_data:
EOF
# Создание .env файла
cat > /home/docker/dapp/.env << EOF
DOMAIN=example.com
BACKEND_CONTAINER=dapp-backend
EOF
```
#### **8. Импорт Docker образов (Этап 10)**
```bash
# Проверка наличия Docker образов
if [ -f /home/docker/dapp/docker-images.tar.gz ]; then
echo "Импорт Docker образов..."
cd /home/docker/dapp
sudo chmod +x import-images.sh
./import-images.sh
else
echo "Docker образы не найдены. Образы будут собираться на VDS."
fi
```
#### **9. Запуск приложения (Этап 11-12)**
```bash
# Запуск приложения
cd /home/docker/dapp
sudo docker compose up -d
# Проверка статуса контейнеров
sudo docker ps --format "table {{.Names}}\t{{.Status}}"
```
## ✅ **Результат настройки:**
### **Что получается после настройки:**
1. **✅ SSH ключи** созданы агентом автоматически
2. **✅ Пользователи Ubuntu и Docker** созданы БЕЗ паролей (только SSH ключи)
3. **✅ Docker и Docker Compose** установлены
4. **✅ Firewall** настроен (SSH, HTTP, HTTPS)
5. **✅ Ключ шифрования** передан с локальной машины
6. **✅ Nginx** установлен и настроен
7. **✅ SSL сертификат** получен от Let's Encrypt
8. **✅ Docker образы** экспортированы и переданы с локальной машины
9. **✅ Docker контейнеры** запущены и работают
10. **✅ Приложение** доступно по HTTPS
### **URL приложения:**
- **HTTP:** `http://example.com`
- **HTTPS:** `https://example.com` ✅ (основной)
## 🚨 **Важные моменты:**
### **Предварительные требования:**
1. **Домен** должен указывать на IP VDS сервера (A запись)
2. **VDS сервер** должен быть доступен по SSH
3. **Пользователь** должен иметь права sudo на VDS
4. **Порты 80 и 443** должны быть открыты
### **Что НЕ настраивается агентом:**
1. **База данных** - создается при первом запуске контейнеров
2. **Данные приложения** - нужно будет восстановить отдельно
3. **Резервное копирование** - настраивается отдельно
## 📝 **Логи настройки:**
Агент выводит подробные логи каждого этапа настройки, что позволяет отслеживать прогресс и выявлять проблемы.
## 🔧 **Исправления SSH проблем (v1.1):**
### **Проблема:**
SSH команды падали с ошибкой `Bad owner or permissions on /root/.ssh/config`, что препятствовало подключению к VDS серверам.
### **Решение:**
1. **Dockerfile:** Добавлено создание SSH конфига с правильными правами доступа (600)
2. **SSH утилиты:** Добавлена функция `fixSshPermissions()` для автоматического исправления прав
3. **Создание ключей:** Улучшена функция создания SSH ключей с установкой правильных прав доступа
4. **Предварительная проверка:** Каждая SSH/SCP команда теперь автоматически исправляет права доступа
### **Результат:**
- ✅ Устранена ошибка "Bad owner or permissions on /root/.ssh/config"
- ✅ Повышена надежность SSH подключений
- ✅ Автоматическое исправление прав доступа
- ✅ Сохранена вся существующая функциональность
### **Для применения исправлений:**
```bash
# Пересборка контейнера с исправлениями
docker compose build dapp-webssh-agent
docker compose restart dapp-webssh-agent
```