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

9.4 KiB
Raw Blame History

Процесс настройки VDS агентом

📋 Полная последовательность настройки VDS

🎯 Что делает агент при настройке VDS:

1. Создание SSH ключей агентом на хосте (Этап 1-2)

# Агент создает 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)

# Создание пользователя 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)

# Установка 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)

# Настройка UFW
sudo ufw --force enable
sudo ufw allow ssh
sudo ufw allow 80
sudo ufw allow 443

5. Сохранение ключа шифрования (Этап 8)

# Создание директории для ключей
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)

# Установка 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)

# Создание 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)

# Проверка наличия 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)

# Запуск приложения
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 подключений
  • Автоматическое исправление прав доступа
  • Сохранена вся существующая функциональность

Для применения исправлений:

# Пересборка контейнера с исправлениями
docker compose build dapp-webssh-agent
docker compose restart dapp-webssh-agent