9.4 KiB
9.4 KiB
Процесс настройки 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}}"
✅ Результат настройки:
Что получается после настройки:
- ✅ SSH ключи созданы агентом автоматически
- ✅ Пользователи Ubuntu и Docker созданы БЕЗ паролей (только SSH ключи)
- ✅ Docker и Docker Compose установлены
- ✅ Firewall настроен (SSH, HTTP, HTTPS)
- ✅ Ключ шифрования передан с локальной машины
- ✅ Nginx установлен и настроен
- ✅ SSL сертификат получен от Let's Encrypt
- ✅ Docker образы экспортированы и переданы с локальной машины
- ✅ Docker контейнеры запущены и работают
- ✅ Приложение доступно по HTTPS
URL приложения:
- HTTP:
http://example.com - HTTPS:
https://example.com✅ (основной)
🚨 Важные моменты:
Предварительные требования:
- Домен должен указывать на IP VDS сервера (A запись)
- VDS сервер должен быть доступен по SSH
- Пользователь должен иметь права sudo на VDS
- Порты 80 и 443 должны быть открыты
Что НЕ настраивается агентом:
- База данных - создается при первом запуске контейнеров
- Данные приложения - нужно будет восстановить отдельно
- Резервное копирование - настраивается отдельно
📝 Логи настройки:
Агент выводит подробные логи каждого этапа настройки, что позволяет отслеживать прогресс и выявлять проблемы.
🔧 Исправления SSH проблем (v1.1):
Проблема:
SSH команды падали с ошибкой Bad owner or permissions on /root/.ssh/config, что препятствовало подключению к VDS серверам.
Решение:
- Dockerfile: Добавлено создание SSH конфига с правильными правами доступа (600)
- SSH утилиты: Добавлена функция
fixSshPermissions()для автоматического исправления прав - Создание ключей: Улучшена функция создания SSH ключей с установкой правильных прав доступа
- Предварительная проверка: Каждая SSH/SCP команда теперь автоматически исправляет права доступа
Результат:
- ✅ Устранена ошибка "Bad owner or permissions on /root/.ssh/config"
- ✅ Повышена надежность SSH подключений
- ✅ Автоматическое исправление прав доступа
- ✅ Сохранена вся существующая функциональность
Для применения исправлений:
# Пересборка контейнера с исправлениями
docker compose build dapp-webssh-agent
docker compose restart dapp-webssh-agent