524 lines
24 KiB
Markdown
524 lines
24 KiB
Markdown
# Задача: Простая настройка VDS с автоматической установкой Ubuntu
|
||
|
||
## 🎯 **Описание задачи:**
|
||
|
||
### **Цель:**
|
||
Создать простую форму для автоматической настройки VDS сервера с установкой Ubuntu и деплоем DLE приложения.
|
||
|
||
### **Проблема:**
|
||
Нужно вручную настраивать VDS сервер, устанавливать Ubuntu и необходимые компоненты для работы DLE приложения.
|
||
|
||
### **Решение:**
|
||
Автоматическая очистка VDS, установка Ubuntu, создание пользователя и деплой DLE приложения через локальную форму.
|
||
|
||
## 📋 **Требования:**
|
||
|
||
### **1. Входные данные (8 полей):**
|
||
- **Домен** - например `example.com` (IP адрес определяется автоматически из DNS)
|
||
- **Email** - для SSL сертификата
|
||
- **Логин Ubuntu** - пользователь для VDS (по умолчанию `ubuntu`, создается БЕЗ пароля)
|
||
- **Логин Docker** - пользователь для Docker (по умолчанию `docker`, создается БЕЗ пароля)
|
||
- **SSH хост** - SSH хост сервера (может отличаться от домена)
|
||
- **SSH порт** - SSH порт сервера (обычно 22)
|
||
- **SSH пользователь** - пользователь для SSH подключения (обычно `root`)
|
||
- **SSH пароль** - пароль для SSH подключения к VDS
|
||
|
||
### **1.1. Требования к домену:**
|
||
- **A запись** `example.com` → IP VDS сервера
|
||
- **CNAME запись** `www.example.com` → `example.com` (опционально)
|
||
- **Домен должен быть активен** и доступен
|
||
- **DNS записи должны распространиться** (проверка перед настройкой)
|
||
|
||
### **2. Что должно происходить:**
|
||
1. **Проверка DNS** - валидация A записи домена
|
||
2. **Подключение** к VDS по SSH (root + пароль)
|
||
3. **Создание SSH ключей на хосте** агентом автоматически (доступны в контейнерах через монтирование)
|
||
4. **Очистка** всего содержимого на VDS
|
||
5. **Создание пользователя Ubuntu** БЕЗ пароля (только SSH ключи)
|
||
6. **Создание пользователя Docker** БЕЗ пароля (только SSH ключи)
|
||
7. **Установка** Docker, Docker Compose, nginx
|
||
8. **Настройка безопасности** (UFW, отключение парольной аутентификации)
|
||
9. **Настройка** nginx для продакшн приложения
|
||
10. **Получение** SSL сертификата
|
||
11. **Экспорт и передача** Docker образов с локальной машины
|
||
12. **Передача ключа шифрования** на VDS
|
||
13. **Запуск** DLE приложения в Docker
|
||
|
||
### **3. Результат:**
|
||
- **VDS полностью очищена** и настроена
|
||
- **Пользователи Ubuntu и Docker** созданы БЕЗ паролей (только SSH ключи)
|
||
- **Базовый софт установлен** (Docker, nginx, SSL)
|
||
- **Безопасность настроена** (UFW, отключение парольной аутентификации)
|
||
- **Docker образы** экспортированы и переданы с локальной машины
|
||
- **Ключ шифрования** передан с локальной машины на VDS
|
||
- **SSH ключи** настроены для безопасного доступа
|
||
- **DLE приложение** работает в Docker на VDS
|
||
- **Домен работает** с SSL
|
||
- **Приложение работает** автономно на VDS
|
||
|
||
## 🏗️ **Архитектура:**
|
||
|
||
```
|
||
Продакшн режим:
|
||
Интернет → VDS nginx (домен) → VDS Docker приложение (автономно)
|
||
|
||
Настройка:
|
||
Локальная машина → WebSSH Agent (Docker) → SSH → VDS сервер → Очистка + Ubuntu + Docker миграция
|
||
```
|
||
|
||
## 🤖 **WebSSH Agent - Автоматизация развертывания:**
|
||
|
||
### 🚀 **Возможности агента:**
|
||
|
||
WebSSH Agent - это мощный инструмент для автоматического развертывания приложения на VDS серверах.
|
||
|
||
**Архитектура:**
|
||
- Агент работает в Docker контейнере `dapp-webssh-agent`
|
||
- Порт 3000 проброшен с контейнера на хост (`0.0.0.0:3000->3000/tcp`)
|
||
- Доступен локально через `http://localhost:3000`
|
||
- Имеет расширенные права для автоматизации развертывания
|
||
|
||
#### 🔐 **Права доступа:**
|
||
- **SSH ключи:** Полный доступ к локальным SSH ключам (`~/.ssh/`)
|
||
- **Docker API:** Полный доступ к Docker socket для управления контейнерами
|
||
- **Файловая система:** Доступ к временным файлам и SSL сертификатам
|
||
- **Сетевые операции:** Выполнение SSH/SCP команд на удаленных серверах
|
||
|
||
#### 🛠️ **Функциональность:**
|
||
- **Автоматическая настройка VDS:** Установка Docker, Nginx, SSL сертификатов
|
||
- **Передача Docker образов:** Экспорт локальных образов и импорт на VDS
|
||
- **Управление пользователями:** Создание системных пользователей с SSH доступом
|
||
- **Безопасность:** Настройка firewall, отключение парольной аутентификации
|
||
- **Мониторинг:** Проверка системных требований и состояния серверов
|
||
|
||
#### 🔒 **Безопасность:**
|
||
- Агент работает в Docker контейнере, порт 3000 проброшен на хост
|
||
- SSH ключи монтируются в режиме только чтения
|
||
- Docker socket доступен только для управления контейнерами
|
||
- Все операции логируются для аудита
|
||
- Доступен локально через `http://localhost:3000`
|
||
|
||
#### 📡 **API Endpoints:**
|
||
- `GET /health` - Проверка состояния агента
|
||
- `POST /vds/check-requirements` - Проверка системных требований VDS
|
||
- `POST /vds/setup` - Полная настройка VDS сервера
|
||
- `POST /vds/transfer-encryption-key` - Передача ключей шифрования
|
||
|
||
### 🚨 **Важно:**
|
||
Агент имеет расширенные права для автоматизации развертывания. Используйте только на доверенных серверах и в защищенных сетях.
|
||
|
||
### 🔍 **Проверка работы агента:**
|
||
|
||
```bash
|
||
# Проверка состояния агента
|
||
curl http://localhost:3000/health
|
||
|
||
# Просмотр логов агента
|
||
docker logs dapp-webssh-agent
|
||
|
||
# Проверка статуса контейнера
|
||
docker ps | grep webssh-agent
|
||
```
|
||
|
||
**Ожидаемый ответ от /health:**
|
||
```json
|
||
{
|
||
"status": "ok",
|
||
"timestamp": "2025-10-02T16:33:16.477Z",
|
||
"version": "1.0.0",
|
||
"vdsConfigured": false,
|
||
"vdsDomain": null
|
||
}
|
||
```
|
||
|
||
## 🔑 **Логика SSH ключей:**
|
||
|
||
### **Автоматическое создание SSH ключей агентом:**
|
||
|
||
#### **📍 На локальной машине (в агенте):**
|
||
- ✅ **id_rsa** (приватный ключ) - создается агентом автоматически
|
||
- ✅ **id_rsa.pub** (публичный ключ) - создается агентом автоматически
|
||
|
||
#### **📍 На VDS сервере:**
|
||
- ✅ **id_rsa.pub** (публичный ключ) - добавляется в `/root/.ssh/authorized_keys`
|
||
- ✅ **id_rsa.pub** (публичный ключ) - добавляется в `/home/ubuntu/.ssh/authorized_keys`
|
||
- ✅ **id_rsa.pub** (публичный ключ) - добавляется в `/home/docker/.ssh/authorized_keys`
|
||
- ❌ **id_rsa** (приватный ключ) - НЕ передается на VDS
|
||
|
||
### **Процесс аутентификации:**
|
||
```
|
||
1. Агент создает SSH ключи на хосте: ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa
|
||
2. Агент добавляет публичный ключ в authorized_keys на VDS
|
||
3. Агент подключается: ssh -i ~/.ssh/id_rsa root@VDS_IP
|
||
4. VDS проверяет подпись с помощью публичного ключа
|
||
5. Доступ разрешен для всех пользователей (root, ubuntu, docker)
|
||
```
|
||
|
||
## 🔧 **Важные особенности архитектуры:**
|
||
|
||
#### **На локальной машине (разработка):**
|
||
- ✅ Git репозиторий с историей изменений
|
||
- ✅ Возможность отката к предыдущим версиям
|
||
- ✅ Разработка и тестирование
|
||
- ✅ Создание архивов для продакшн
|
||
|
||
#### **На VDS сервере (продакшн):**
|
||
- ❌ Git НЕ устанавливается и НЕ нужен
|
||
- ❌ История изменений НЕ хранится
|
||
- ❌ Откат происходит через архивы с локальной машины
|
||
- ✅ Только работающая версия приложения
|
||
- ✅ Полная автономность без внешних зависимостей
|
||
|
||
### **Компоненты:**
|
||
1. **Веб-форма** - настройка VDS (8 полей, без лишних настроек портов)
|
||
2. **WebSSH сервис** - SSH команды к VDS с автоматическим определением IP
|
||
3. **SSH агент** - подключение к VDS
|
||
4. **VDS сервер** - Ubuntu + Docker + nginx + SSL + Node.js
|
||
5. **Docker образы** - мигрированы с локальной машины
|
||
6. **База данных** - с зашифрованными настройками в таблицах
|
||
|
||
## 🚀 **Процесс работы:**
|
||
|
||
### **1. Первоначальная настройка:**
|
||
- Заходит на `http://localhost:5173/settings/interface/webssh`
|
||
- Заполняет форму с данными VDS (8 полей: домен, email, логины, SSH хост/порт/пользователь/пароль)
|
||
- Нажимает "Опубликовать" (настроить VDS)
|
||
|
||
### **2. Система настраивает VDS:**
|
||
- **Получает IP адрес** из DNS записей домена автоматически
|
||
- **Проверяет доступность** домена и IP
|
||
- **Предупреждает** если домен не готов
|
||
- Подключается к VDS по SSH (root + пароль)
|
||
- **Создает SSH ключи** агентом автоматически
|
||
- **Очищает** все содержимое на VDS
|
||
- **Создает пользователя Ubuntu** БЕЗ пароля (только SSH ключи)
|
||
- **Создает пользователя Docker** БЕЗ пароля (только SSH ключи)
|
||
- **Устанавливает** Docker, Docker Compose, nginx
|
||
- **Настраивает безопасность** (UFW, отключение парольной аутентификации)
|
||
- Настраивает nginx для продакшн
|
||
- Получает SSL сертификат
|
||
- **Экспортирует и передает** Docker образы с локальной машины
|
||
- **Передает ключ шифрования** на VDS
|
||
- **Запускает** DLE приложение в Docker
|
||
|
||
### **3. Результат:**
|
||
- **VDS полностью готова** для работы
|
||
- **Пользователи Ubuntu и Docker** созданы БЕЗ паролей (только SSH ключи)
|
||
- **Базовый софт установлен** (Docker, nginx, SSL)
|
||
- **Безопасность настроена** (UFW, отключение парольной аутентификации)
|
||
- **Docker образы** экспортированы и переданы с локальной машины
|
||
- **Ключ шифрования** передан с локальной машины на VDS
|
||
- **SSH ключи** настроены для безопасного доступа
|
||
- **DLE приложение** работает автономно в Docker
|
||
- **Домен доступен** с SSL
|
||
- **Полная автономность** - никаких внешних зависимостей
|
||
|
||
## 🔧 **Детальная логика установки софта на VDS:**
|
||
|
||
### **Этап 1: Проверка и подготовка**
|
||
```bash
|
||
# 1. Получение IP адреса из DNS записей домена
|
||
VDS_IP=$(dig +short $DOMAIN | head -1)
|
||
echo "IP адрес VDS сервера: $VDS_IP"
|
||
|
||
# 2. Проверка подключения к VDS
|
||
ssh -o ConnectTimeout=10 -o BatchMode=yes $SSH_USER@$VDS_IP "echo 'Connection OK'"
|
||
```
|
||
|
||
### **Этап 2: Очистка VDS**
|
||
```bash
|
||
# 1. Подключение к VDS
|
||
ssh $SSH_USER@$VDS_IP
|
||
|
||
# 2. Остановка всех сервисов
|
||
systemctl stop nginx || true
|
||
systemctl stop docker || true
|
||
systemctl stop postgresql || true
|
||
|
||
# 3. Очистка системы
|
||
apt-get autoremove -y
|
||
apt-get autoclean
|
||
rm -rf /var/log/*.log
|
||
rm -rf /tmp/*
|
||
rm -rf /var/tmp/*
|
||
```
|
||
|
||
### **Этап 3: Установка Ubuntu и базовых пакетов**
|
||
```bash
|
||
# 1. Обновление системы
|
||
apt-get update && apt-get upgrade -y
|
||
|
||
# 2. Установка базовых пакетов
|
||
# ВАЖНО: Git НЕ устанавливается - все обновления идут с локальной машины через архивы
|
||
apt-get install -y \
|
||
curl wget nginx certbot python3-certbot-nginx \
|
||
ufw fail2ban nano htop unzip tar gzip \
|
||
openssh-server ca-certificates gnupg lsb-release \
|
||
software-properties-common apt-transport-https
|
||
|
||
# 3. Установка Docker
|
||
curl -fsSL https://get.docker.com -o get-docker.sh
|
||
sh get-docker.sh
|
||
rm get-docker.sh
|
||
|
||
# 4. Установка Docker Compose
|
||
curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
|
||
chmod +x /usr/local/bin/docker-compose
|
||
|
||
# 5. Установка Node.js
|
||
curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
|
||
apt-get install -y nodejs
|
||
```
|
||
|
||
### **Этап 4: Создание пользователей**
|
||
```bash
|
||
# 1. Создание пользователя Ubuntu
|
||
useradd -m -s /bin/bash $UBUNTU_USER
|
||
echo "$UBUNTU_USER:$UBUNTU_PASSWORD" | chpasswd
|
||
usermod -aG sudo $UBUNTU_USER
|
||
|
||
# 2. Создание пользователя Docker
|
||
useradd -m -s /bin/bash $DOCKER_USER
|
||
echo "$DOCKER_USER:$DOCKER_PASSWORD" | chpasswd
|
||
usermod -aG docker $DOCKER_USER
|
||
usermod -aG sudo $DOCKER_USER
|
||
```
|
||
|
||
### **Этап 5: Настройка безопасности**
|
||
```bash
|
||
# 1. Настройка UFW Firewall
|
||
ufw --force enable
|
||
ufw allow ssh
|
||
ufw allow 80
|
||
ufw allow 443
|
||
ufw allow 8000
|
||
ufw allow 5173
|
||
|
||
# 2. Настройка Fail2ban
|
||
systemctl enable fail2ban
|
||
systemctl start fail2ban
|
||
|
||
# 3. Настройка SSH
|
||
sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config
|
||
sed -i 's/#PubkeyAuthentication yes/PubkeyAuthentication yes/' /etc/ssh/sshd_config
|
||
systemctl restart sshd
|
||
```
|
||
|
||
### **Этап 6: Настройка Nginx**
|
||
```bash
|
||
# 1. Создание конфигурации для домена
|
||
cat > /etc/nginx/sites-available/$DOMAIN << EOF
|
||
server {
|
||
listen 80;
|
||
server_name $DOMAIN;
|
||
|
||
# Основной location для фронтенда
|
||
location / {
|
||
proxy_pass http://localhost:5173;
|
||
proxy_set_header Host \$host;
|
||
proxy_set_header X-Real-IP \$remote_addr;
|
||
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
|
||
proxy_set_header X-Forwarded-Proto \$scheme;
|
||
}
|
||
|
||
# API проксирование к backend
|
||
location /api/ {
|
||
proxy_pass http://localhost:8000/api/;
|
||
proxy_set_header Host \$host;
|
||
proxy_set_header X-Real-IP \$remote_addr;
|
||
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
|
||
proxy_set_header X-Forwarded-Proto \$scheme;
|
||
}
|
||
}
|
||
EOF
|
||
|
||
# 2. Активация конфигурации
|
||
ln -sf /etc/nginx/sites-available/$DOMAIN /etc/nginx/sites-enabled/
|
||
rm -f /etc/nginx/sites-enabled/default
|
||
nginx -t && systemctl reload nginx
|
||
```
|
||
|
||
### **Этап 7: Получение SSL сертификата**
|
||
```bash
|
||
# 1. Получение SSL сертификата
|
||
certbot --nginx -d $DOMAIN --non-interactive --agree-tos --email $EMAIL
|
||
|
||
# 2. Настройка автообновления
|
||
echo "0 12 * * * /usr/bin/certbot renew --quiet" | crontab -
|
||
```
|
||
|
||
### **Этап 8: Миграция Docker образов**
|
||
```bash
|
||
# 1. Создание директории для приложения
|
||
mkdir -p /home/$DOCKER_USER/dapp
|
||
cd /home/$DOCKER_USER/dapp
|
||
|
||
# 2. Создание бэкапа на локальной машине
|
||
docker compose down
|
||
docker compose up -d postgres
|
||
sleep 10
|
||
docker compose exec -T postgres pg_dump -U dapp_user dapp_db > postgres-backup.sql
|
||
docker compose exec -T ollama ollama list > ollama-models.txt
|
||
|
||
# 3. Создание архива приложения
|
||
tar -czf app-migration-$(date +%Y%m%d-%H%M%S).tar.gz \
|
||
. \
|
||
postgres-backup.sql \
|
||
ollama-models.txt \
|
||
--exclude='node_modules' \
|
||
--exclude='.git' \
|
||
--exclude='*.log' \
|
||
--exclude='temp' \
|
||
--exclude='sessions'
|
||
|
||
# 4. Копирование архива на VDS
|
||
scp app-migration-*.tar.gz $DOCKER_USER@$VDS_IP:/home/$DOCKER_USER/dapp/
|
||
|
||
# 5. Распаковка на VDS
|
||
ssh $DOCKER_USER@$VDS_IP "cd /home/$DOCKER_USER/dapp && tar -xzf app-migration-*.tar.gz"
|
||
```
|
||
|
||
### **Этап 9: Передача ключей**
|
||
```bash
|
||
# 1. Создание директории для ключей на VDS
|
||
ssh root@$VDS_IP "mkdir -p /home/$DOCKER_USER/dapp/ssl/keys"
|
||
|
||
# 2. Копирование ключа шифрования БД
|
||
scp ./ssl/keys/full_db_encryption.key root@$VDS_IP:/home/$DOCKER_USER/dapp/ssl/keys/
|
||
|
||
# 3. Настройка SSH ключей (выполняется автоматически агентом)
|
||
# Публичный ключ (id_rsa.pub) добавляется в /root/.ssh/authorized_keys
|
||
# Приватный ключ (id_rsa) остается на локальной машине
|
||
```
|
||
|
||
### **Этап 10: Восстановление базы данных с настройками**
|
||
```bash
|
||
# 1. Запуск PostgreSQL на VDS
|
||
ssh $DOCKER_USER@$VDS_IP "cd /home/$DOCKER_USER/dapp && docker compose up -d postgres"
|
||
sleep 10
|
||
|
||
# 2. Восстановление базы данных (включая все таблицы настроек)
|
||
ssh $DOCKER_USER@$VDS_IP "cd /home/$DOCKER_USER/dapp && docker compose exec -T postgres psql -U dapp_user -d dapp_db < postgres-backup.sql"
|
||
```
|
||
|
||
### **Этап 11: Запуск приложения**
|
||
```bash
|
||
# 1. Запуск всех сервисов
|
||
ssh $DOCKER_USER@$VDS_IP "cd /home/$DOCKER_USER/dapp && docker compose up -d"
|
||
|
||
# 2. Проверка статуса
|
||
ssh $DOCKER_USER@$VDS_IP "cd /home/$DOCKER_USER/dapp && docker compose ps"
|
||
|
||
# 3. Проверка логов
|
||
ssh $DOCKER_USER@$VDS_IP "cd /home/$DOCKER_USER/dapp && docker compose logs --tail=20"
|
||
```
|
||
|
||
### **Этап 12: Проверка работоспособности**
|
||
```bash
|
||
# 1. Проверка доступности домена
|
||
curl -I https://$DOMAIN
|
||
|
||
# 2. Проверка API
|
||
curl -I https://$DOMAIN/api/health
|
||
|
||
# 3. Проверка SSL сертификата
|
||
openssl s_client -connect $DOMAIN:443 -servername $DOMAIN
|
||
```
|
||
|
||
## 🔄 **Процесс обновлений приложения:**
|
||
|
||
### **Обновление с локальной машины:**
|
||
```bash
|
||
# 1. На локальной машине - разработка
|
||
git add .
|
||
git commit -m "Новая функция"
|
||
git tag v1.2.0
|
||
|
||
# 2. Создание архива для продакшн
|
||
tar -czf app-update-v1.2.0-$(date +%Y%m%d-%H%M%S).tar.gz \
|
||
. \
|
||
postgres-backup.sql \
|
||
ollama-models.txt \
|
||
--exclude='node_modules' \
|
||
--exclude='.git' \
|
||
--exclude='*.log' \
|
||
--exclude='temp' \
|
||
--exclude='sessions'
|
||
|
||
# 3. Деплой на VDS
|
||
scp app-update-v1.2.0-*.tar.gz $DOCKER_USER@$VDS_IP:/home/$DOCKER_USER/dapp/
|
||
ssh $DOCKER_USER@$VDS_IP "cd /home/$DOCKER_USER/dapp && tar -xzf app-update-v1.2.0-*.tar.gz && docker compose restart"
|
||
```
|
||
|
||
### **Откат к предыдущей версии:**
|
||
```bash
|
||
# 1. На локальной машине - переход к предыдущей версии
|
||
git checkout v1.1.0
|
||
|
||
# 2. Создание архива предыдущей версии
|
||
tar -czf app-rollback-v1.1.0-$(date +%Y%m%d-%H%M%S).tar.gz \
|
||
. \
|
||
postgres-backup.sql \
|
||
ollama-models.txt \
|
||
--exclude='node_modules' \
|
||
--exclude='.git' \
|
||
--exclude='*.log' \
|
||
--exclude='temp' \
|
||
--exclude='sessions'
|
||
|
||
# 3. Деплой предыдущей версии на VDS
|
||
scp app-rollback-v1.1.0-*.tar.gz $DOCKER_USER@$VDS_IP:/home/$DOCKER_USER/dapp/
|
||
ssh $DOCKER_USER@$VDS_IP "cd /home/$DOCKER_USER/dapp && tar -xzf app-rollback-v1.1.0-*.tar.gz && docker compose restart"
|
||
```
|
||
|
||
### **Ключевые принципы:**
|
||
- **Все обновления** идут с локальной машины через архивы
|
||
- **Все откаты** происходят с локальной машины через архивы
|
||
- **VDS** никогда не работает с Git - только с архивами
|
||
- **Полная автономность** - VDS работает без внешних зависимостей
|
||
|
||
## 📁 **Файлы проекта:**
|
||
|
||
### **Frontend:**
|
||
- `frontend/src/components/WebSshForm.vue` - форма управления
|
||
- `frontend/src/services/webSshService.js` - SSH команды к VDS
|
||
|
||
### **Backend:**
|
||
- `backend/routes/vds-management.js` - API для управления VDS
|
||
- `backend/services/sshManager.js` - SSH команды
|
||
- `backend/services/encryptionManager.js` - управление шифрованием
|
||
|
||
### **Scripts:**
|
||
- `scripts/setup-vds.sh` - очистка VDS и установка Ubuntu
|
||
- `scripts/migrate-docker.sh` - миграция Docker образов на VDS
|
||
- `scripts/configure-vds.sh` - настройка nginx и SSL
|
||
- `scripts/transfer-keys.sh` - передача ключей на VDS
|
||
- `scripts/restore-database.sh` - восстановление БД с настройками
|
||
- `scripts/install-ubuntu.sh` - автоматическая установка Ubuntu
|
||
|
||
## ✅ **Статус:**
|
||
|
||
### **Готово:**
|
||
- ✅ Форма WebSSH упрощена
|
||
- ✅ WebSSH сервис обновлен
|
||
- ✅ DNS проверка добавлена
|
||
- ✅ Инструкции по настройке DNS созданы
|
||
- ✅ Поле VDS IP добавлено в форму
|
||
|
||
### **Нужно доработать:**
|
||
- 🔄 SSH агент для очистки и установки Ubuntu
|
||
- 🔄 API для управления VDS
|
||
- 🔄 Миграция Docker образов на VDS
|
||
- 🔄 Передача ключей (шифрования и RSA) на VDS
|
||
- 🔄 Восстановление БД с зашифрованными настройками
|
||
- 🔄 Автоматическая загрузка ключа шифрования в форму
|
||
|
||
## 🎯 **Следующие шаги:**
|
||
|
||
1. **Создать SSH агент** для очистки и установки Ubuntu
|
||
2. **Добавить API** для управления VDS
|
||
3. **Реализовать миграцию** Docker образов на VDS
|
||
4. **Создать скрипты** для передачи ключей на VDS
|
||
5. **Реализовать восстановление** БД с зашифрованными настройками
|
||
6. **Добавить автоматическую загрузку** ключа шифрования в форму
|
||
7. **Протестировать** на реальной VDS |