|
|
#!/bin/bash |
|
|
# ============================================================================ |
|
|
# DaSiWa API Server — Автоматическая установка |
|
|
# Запуск: chmod +x setup.sh && sudo ./setup.sh |
|
|
# ============================================================================ |
|
|
|
|
|
set -e |
|
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" |
|
|
API_DIR="/root/custom_comfyui" |
|
|
API_PORT=8080 |
|
|
|
|
|
echo "" |
|
|
echo "============================================================" |
|
|
echo "🚀 DaSiWa API Server — Установка" |
|
|
echo "============================================================" |
|
|
echo "" |
|
|
|
|
|
# ============================================================================ |
|
|
# 1. Проверка root |
|
|
# ============================================================================ |
|
|
if [ "$EUID" -ne 0 ]; then |
|
|
echo "❌ Запусти от root: sudo ./setup.sh" |
|
|
exit 1 |
|
|
fi |
|
|
|
|
|
# ============================================================================ |
|
|
# 2. Обновление пакетов |
|
|
# ============================================================================ |
|
|
echo "📦 Обновление пакетов..." |
|
|
apt-get update -qq |
|
|
|
|
|
# ============================================================================ |
|
|
# 3. Python 3 + pip |
|
|
# ============================================================================ |
|
|
echo "🐍 Проверка Python..." |
|
|
if command -v python3 &>/dev/null; then |
|
|
PYTHON_VERSION=$(python3 --version 2>&1) |
|
|
echo " ✅ $PYTHON_VERSION" |
|
|
else |
|
|
echo " 📥 Установка Python 3..." |
|
|
apt-get install -y python3 python3-pip python3-venv |
|
|
fi |
|
|
|
|
|
if ! command -v pip3 &>/dev/null; then |
|
|
apt-get install -y python3-pip |
|
|
fi |
|
|
|
|
|
# ============================================================================ |
|
|
# 4. wget |
|
|
# ============================================================================ |
|
|
if ! command -v wget &>/dev/null; then |
|
|
echo "📥 Установка wget..." |
|
|
apt-get install -y wget |
|
|
fi |
|
|
|
|
|
# ============================================================================ |
|
|
# 5. Копирование файлов API |
|
|
# ============================================================================ |
|
|
echo "" |
|
|
echo "📂 Настройка API директории: $API_DIR" |
|
|
|
|
|
if [ "$SCRIPT_DIR" != "$API_DIR" ]; then |
|
|
mkdir -p "$API_DIR" |
|
|
cp "$SCRIPT_DIR/server.py" "$API_DIR/" |
|
|
cp "$SCRIPT_DIR/hmac_auth.py" "$API_DIR/" |
|
|
cp "$SCRIPT_DIR/requirements.txt" "$API_DIR/" |
|
|
cp "$SCRIPT_DIR/generate_keys.py" "$API_DIR/" |
|
|
|
|
|
[ -f "$SCRIPT_DIR/keys.json" ] && cp "$SCRIPT_DIR/keys.json" "$API_DIR/" && echo " ✅ keys.json скопирован" |
|
|
[ -f "$SCRIPT_DIR/workflow_api.json" ] && cp "$SCRIPT_DIR/workflow_api.json" "$API_DIR/" && echo " ✅ workflow_api.json скопирован" |
|
|
|
|
|
echo " ✅ Файлы скопированы в $API_DIR" |
|
|
else |
|
|
echo " ✅ Уже в правильной директории" |
|
|
fi |
|
|
|
|
|
# ============================================================================ |
|
|
# 6. Установка Python зависимостей |
|
|
# ============================================================================ |
|
|
echo "" |
|
|
echo "📦 Установка Python зависимостей..." |
|
|
pip3 install -r "$API_DIR/requirements.txt" --quiet |
|
|
|
|
|
# ============================================================================ |
|
|
# 7. Генерация ключей (если нет) |
|
|
# ============================================================================ |
|
|
if [ ! -f "$API_DIR/keys.json" ]; then |
|
|
echo "" |
|
|
echo "🔐 Генерация ключей..." |
|
|
cd "$API_DIR" |
|
|
python3 generate_keys.py |
|
|
echo "" |
|
|
echo "⚠️ ВАЖНО: Скопируй keys.json на свой ПК (клиент)!" |
|
|
echo " scp root@<ip_сервера>:$API_DIR/keys.json ." |
|
|
else |
|
|
echo "🔐 keys.json найден — используем существующие ключи" |
|
|
fi |
|
|
|
|
|
# ============================================================================ |
|
|
# 8. Проверка workflow |
|
|
# ============================================================================ |
|
|
if [ ! -f "$API_DIR/workflow_api.json" ]; then |
|
|
echo "" |
|
|
echo "⚠️ workflow_api.json не найден!" |
|
|
echo " Загрузи его: scp workflow_api.json root@<ip>:$API_DIR/" |
|
|
fi |
|
|
|
|
|
# ============================================================================ |
|
|
# 9. Настройка Firewall (UFW) |
|
|
# ============================================================================ |
|
|
echo "" |
|
|
echo "🔥 Настройка Firewall..." |
|
|
if ! command -v ufw &>/dev/null; then |
|
|
apt-get install -y ufw |
|
|
fi |
|
|
|
|
|
ufw allow 22/tcp # SSH |
|
|
ufw allow ${API_PORT}/tcp # API |
|
|
# НЕ открываем 8188 — ComfyUI только через localhost |
|
|
ufw --force enable |
|
|
echo " ✅ UFW: открыты порты 22 (SSH), ${API_PORT} (API)" |
|
|
echo " 🔒 Порт 8188 (ComfyUI) закрыт снаружи" |
|
|
|
|
|
# ============================================================================ |
|
|
# 10. Установка systemd сервиса (автозапуск) |
|
|
# ============================================================================ |
|
|
echo "" |
|
|
echo "⚙️ Настройка systemd сервиса..." |
|
|
|
|
|
cat > /etc/systemd/system/dasiwa-api.service << EOF |
|
|
[Unit] |
|
|
Description=DaSiWa API Server |
|
|
After=network.target |
|
|
|
|
|
[Service] |
|
|
Type=simple |
|
|
User=root |
|
|
WorkingDirectory=$API_DIR |
|
|
Environment=COMFY_HOST=127.0.0.1 |
|
|
Environment=COMFY_PORT=8188 |
|
|
Environment=API_PORT=${API_PORT} |
|
|
Environment=COMFY_OUTPUT_DIR=/ComfyUI/output |
|
|
ExecStart=/usr/bin/python3 $API_DIR/server.py |
|
|
Restart=on-failure |
|
|
RestartSec=5 |
|
|
|
|
|
[Install] |
|
|
WantedBy=multi-user.target |
|
|
EOF |
|
|
|
|
|
systemctl daemon-reload |
|
|
systemctl enable dasiwa-api |
|
|
systemctl start dasiwa-api |
|
|
echo " ✅ Сервис dasiwa-api включён и запущен" |
|
|
echo " ✅ Автозапуск при старте системы: ON" |
|
|
|
|
|
# ============================================================================ |
|
|
# ГОТОВО |
|
|
# ============================================================================ |
|
|
echo "" |
|
|
echo "============================================================" |
|
|
echo "✅ УСТАНОВКА ЗАВЕРШЕНА" |
|
|
echo "============================================================" |
|
|
echo "" |
|
|
echo "📋 Чеклист:" |
|
|
echo " 1. Загрузи модели в /ComfyUI/models/ (если ещё нет)" |
|
|
echo " 2. Загрузи workflow_api.json в $API_DIR/" |
|
|
echo " 3. Скопируй keys.json на свой ПК" |
|
|
echo "" |
|
|
echo "🔧 Управление:" |
|
|
echo " systemctl status dasiwa-api — статус" |
|
|
echo " systemctl restart dasiwa-api — перезапуск" |
|
|
echo " journalctl -u dasiwa-api -f — логи" |
|
|
echo "" |
|
|
echo "🧪 Проверка:" |
|
|
echo " curl http://localhost:${API_PORT}/health" |
|
|
echo "" |
|
|
echo "🔐 API доступен на:" |
|
|
echo " http://<ip_сервера>:${API_PORT}/generate" |
|
|
echo "============================================================"
|
|
|
|