Enhanced safe-docker-setup.sh to: - Auto-detect and copy SESSION, API_ID, API_HASH from existing .env - Read from environment variables if available - Show configuration status after setup - Provide quick start if credentials are found - Maintain manual setup flow if credentials not found Benefits: - Zero manual configuration if existing setup detected - Seamless transition from bash startup to Docker - Immediate ready-to-start Docker environment - Still preserves existing setup completely
370 lines
12 KiB
Bash
370 lines
12 KiB
Bash
#!/bin/bash
|
||
|
||
# Ultroid Docker Setup - SAFE MODE
|
||
# This script preserves your existing configuration and creates a separate Docker environment
|
||
|
||
set -e
|
||
|
||
RED='\033[0;31m'
|
||
GREEN='\033[0;32m'
|
||
YELLOW='\033[1;33m'
|
||
BLUE='\033[0;34m'
|
||
NC='\033[0m'
|
||
|
||
echo -e "${BLUE}"
|
||
echo "╔══════════════════════════════════════════════════════════════╗"
|
||
echo "║ 🛡️ ULTROID DOCKER - SAFE MODE ║"
|
||
echo "║ Preserves Your Existing Configuration ║"
|
||
echo "╚══════════════════════════════════════════════════════════════╝"
|
||
echo -e "${NC}"
|
||
|
||
echo -e "${GREEN}✅ This script will:${NC}"
|
||
echo " • Create a separate Docker environment"
|
||
echo " • Keep your existing bot configuration untouched"
|
||
echo " • Use different ports to avoid conflicts"
|
||
echo " • Create isolated volumes for Docker data"
|
||
echo " • Allow you to run both setups side by side"
|
||
echo ""
|
||
|
||
echo -e "${YELLOW}⚠️ What this script WON'T do:${NC}"
|
||
echo " • Modify your existing .env file"
|
||
echo " • Touch your current session files"
|
||
echo " • Interfere with your running bot"
|
||
echo " • Change any existing configurations"
|
||
echo ""
|
||
|
||
read -p "Continue with safe Docker setup? (y/n): " -n 1 -r
|
||
echo
|
||
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
||
echo "Setup cancelled."
|
||
exit 0
|
||
fi
|
||
|
||
# Enhanced detection for existing bot setup
|
||
echo -e "\n${BLUE}🔍 Checking for existing bot setup...${NC}"
|
||
|
||
EXISTING_SETUP=false
|
||
STARTUP_METHOD=""
|
||
|
||
# Check for existing .env file with session
|
||
if [ -f ".env" ] && grep -q "SESSION=.\+" .env; then
|
||
EXISTING_SETUP=true
|
||
STARTUP_METHOD="Environment file (.env)"
|
||
fi
|
||
|
||
# Check for existing session files
|
||
if [ -f "resources/session/"* ] 2>/dev/null || [ -f "*.session" ] 2>/dev/null; then
|
||
EXISTING_SETUP=true
|
||
STARTUP_METHOD="${STARTUP_METHOD}, Session files"
|
||
fi
|
||
|
||
# Check for running processes (including startup script)
|
||
if pgrep -f "pyUltroid\|startup\|multi_client" > /dev/null 2>&1; then
|
||
EXISTING_SETUP=true
|
||
STARTUP_METHOD="${STARTUP_METHOD}, Running bot process"
|
||
fi
|
||
|
||
# Check if startup script exists and is executable (indicates active setup)
|
||
if [ -f "startup" ] && [ -x "startup" ]; then
|
||
EXISTING_SETUP=true
|
||
STARTUP_METHOD="${STARTUP_METHOD}, Startup script (bash startup)"
|
||
fi
|
||
|
||
if [ "$EXISTING_SETUP" = true ]; then
|
||
echo -e "${GREEN}✅ EXISTING ULTROID BOT DETECTED!${NC}"
|
||
echo ""
|
||
echo -e "${BLUE}📋 Detected setup method:${STARTUP_METHOD}${NC}"
|
||
echo -e "${GREEN}🛡️ Perfect! This safe Docker setup will create an isolated environment.${NC}"
|
||
echo -e "${YELLOW}Your current 'bash startup' method will remain completely untouched!${NC}"
|
||
echo ""
|
||
echo -e "${BLUE}You'll be able to run both:${NC}"
|
||
echo -e " • ${YELLOW}bash startup${NC} (your current bot)"
|
||
echo -e " • ${YELLOW}cd docker-ultroid && ./manage.sh start${NC} (new Docker bot)"
|
||
echo ""
|
||
else
|
||
echo -e "${GREEN}✅ No existing setup detected. Creating fresh Docker environment.${NC}"
|
||
fi
|
||
|
||
# Create Docker-specific directory
|
||
DOCKER_DIR="docker-ultroid"
|
||
echo -e "\n${BLUE}📁 Creating separate Docker environment...${NC}"
|
||
|
||
if [ -d "$DOCKER_DIR" ]; then
|
||
echo -e "${YELLOW}⚠️ Docker directory already exists. Remove it? (y/n):${NC}"
|
||
read -p "" -n 1 -r
|
||
echo
|
||
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||
rm -rf "$DOCKER_DIR"
|
||
else
|
||
echo "Using existing directory..."
|
||
fi
|
||
fi
|
||
|
||
mkdir -p "$DOCKER_DIR"/{downloads,uploads,logs,resources/session,backups}
|
||
|
||
# Create Docker-specific .env file
|
||
echo -e "${BLUE}⚙️ Creating Docker-specific configuration...${NC}"
|
||
|
||
# Auto-populate from existing config if available
|
||
AUTO_SESSION=""
|
||
AUTO_API_ID=""
|
||
AUTO_API_HASH=""
|
||
AUTO_BOT_TOKEN=""
|
||
AUTO_LOG_CHANNEL=""
|
||
|
||
# Try to extract from existing .env file
|
||
if [ -f "../.env" ]; then
|
||
echo -e "${GREEN}📋 Found existing .env file, copying credentials...${NC}"
|
||
AUTO_SESSION=$(grep "^SESSION=" ../.env 2>/dev/null | cut -d'=' -f2- | tr -d '"' | tr -d "'")
|
||
AUTO_API_ID=$(grep "^API_ID=" ../.env 2>/dev/null | cut -d'=' -f2- | tr -d '"' | tr -d "'")
|
||
AUTO_API_HASH=$(grep "^API_HASH=" ../.env 2>/dev/null | cut -d'=' -f2- | tr -d '"' | tr -d "'")
|
||
AUTO_BOT_TOKEN=$(grep "^BOT_TOKEN=" ../.env 2>/dev/null | cut -d'=' -f2- | tr -d '"' | tr -d "'")
|
||
AUTO_LOG_CHANNEL=$(grep "^LOG_CHANNEL=" ../.env 2>/dev/null | cut -d'=' -f2- | tr -d '"' | tr -d "'")
|
||
fi
|
||
|
||
# Try to extract from environment variables (if running in current session)
|
||
if [ -z "$AUTO_SESSION" ] && [ ! -z "$SESSION" ]; then
|
||
AUTO_SESSION="$SESSION"
|
||
fi
|
||
if [ -z "$AUTO_API_ID" ] && [ ! -z "$API_ID" ]; then
|
||
AUTO_API_ID="$API_ID"
|
||
fi
|
||
if [ -z "$AUTO_API_HASH" ] && [ ! -z "$API_HASH" ]; then
|
||
AUTO_API_HASH="$API_HASH"
|
||
fi
|
||
|
||
cat > "$DOCKER_DIR/.env" << EOF
|
||
# Ultroid Docker Environment - Auto-populated from existing setup
|
||
# This is completely separate from your main bot configuration
|
||
|
||
# === REQUIRED (Auto-populated from your existing setup) ===
|
||
SESSION=${AUTO_SESSION}
|
||
API_ID=${AUTO_API_ID}
|
||
API_HASH=${AUTO_API_HASH}
|
||
|
||
# === DOCKER DATABASE (Isolated) ===
|
||
REDIS_URI=redis://redis:6380
|
||
REDIS_PASSWORD=ultroid_docker_123
|
||
|
||
# === OPTIONAL (Auto-populated if available) ===
|
||
BOT_TOKEN=${AUTO_BOT_TOKEN}
|
||
LOG_CHANNEL=${AUTO_LOG_CHANNEL}
|
||
|
||
# === DOCKER-SPECIFIC SETTINGS ===
|
||
BOT_MODE=True
|
||
DUAL_MODE=True
|
||
TZ=Asia/Kolkata
|
||
|
||
# === DATABASE CREDENTIALS ===
|
||
MONGO_USER=ultroid_docker
|
||
MONGO_PASSWORD=ultroid_docker_123
|
||
EOF
|
||
|
||
# Create Docker-specific compose file with different ports
|
||
echo -e "${BLUE}🐳 Creating isolated Docker configuration...${NC}"
|
||
|
||
cat > "$DOCKER_DIR/docker-compose.yml" << 'EOF'
|
||
version: '3.8'
|
||
|
||
services:
|
||
# Redis Database (Different port to avoid conflicts)
|
||
redis:
|
||
image: redis:7-alpine
|
||
container_name: ultroid-docker-redis
|
||
restart: unless-stopped
|
||
ports:
|
||
- "6380:6379" # Different port!
|
||
volumes:
|
||
- ultroid_docker_redis_data:/data
|
||
environment:
|
||
- REDIS_PASSWORD=ultroid_docker_123
|
||
command: redis-server --requirepass ultroid_docker_123
|
||
networks:
|
||
- ultroid-docker-network
|
||
|
||
# MongoDB Database (Different port to avoid conflicts)
|
||
mongodb:
|
||
image: mongo:6
|
||
container_name: ultroid-docker-mongo
|
||
restart: unless-stopped
|
||
ports:
|
||
- "27018:27017" # Different port!
|
||
volumes:
|
||
- ultroid_docker_mongo_data:/data/db
|
||
environment:
|
||
- MONGO_INITDB_ROOT_USERNAME=ultroid_docker
|
||
- MONGO_INITDB_ROOT_PASSWORD=ultroid_docker_123
|
||
networks:
|
||
- ultroid-docker-network
|
||
|
||
# Ultroid Bot (Isolated)
|
||
ultroid:
|
||
build:
|
||
context: ..
|
||
dockerfile: Dockerfile
|
||
container_name: ultroid-docker-bot
|
||
restart: unless-stopped
|
||
depends_on:
|
||
- redis
|
||
volumes:
|
||
- ./downloads:/root/TeamUltroid/downloads
|
||
- ./uploads:/root/TeamUltroid/uploads
|
||
- ./logs:/root/TeamUltroid/logs
|
||
- ./resources:/root/TeamUltroid/resources
|
||
- ./.env:/root/TeamUltroid/.env
|
||
- ../credentials.json:/root/TeamUltroid/credentials.json:ro
|
||
environment:
|
||
- REDIS_URI=redis://redis:6379
|
||
- REDIS_PASSWORD=ultroid_docker_123
|
||
networks:
|
||
- ultroid-docker-network
|
||
|
||
volumes:
|
||
ultroid_docker_redis_data:
|
||
ultroid_docker_mongo_data:
|
||
|
||
networks:
|
||
ultroid-docker-network:
|
||
driver: bridge
|
||
EOF
|
||
|
||
# Create Docker management script
|
||
cat > "$DOCKER_DIR/manage.sh" << 'EOF'
|
||
#!/bin/bash
|
||
|
||
# Docker Ultroid Management Script
|
||
|
||
case "$1" in
|
||
start)
|
||
echo "🚀 Starting Docker Ultroid..."
|
||
docker-compose up -d
|
||
;;
|
||
stop)
|
||
echo "⏹️ Stopping Docker Ultroid..."
|
||
docker-compose down
|
||
;;
|
||
restart)
|
||
echo "🔄 Restarting Docker Ultroid..."
|
||
docker-compose restart ultroid
|
||
;;
|
||
logs)
|
||
echo "📝 Showing Docker Ultroid logs..."
|
||
docker-compose logs -f ultroid
|
||
;;
|
||
status)
|
||
echo "📊 Docker Ultroid status:"
|
||
docker-compose ps
|
||
;;
|
||
shell)
|
||
echo "🐚 Accessing Docker Ultroid shell..."
|
||
docker-compose exec ultroid bash
|
||
;;
|
||
backup)
|
||
echo "💾 Backing up Docker database..."
|
||
mkdir -p backups
|
||
docker-compose exec redis redis-cli BGSAVE
|
||
docker cp ultroid-docker-redis:/data/dump.rdb backups/docker-backup-$(date +%Y%m%d-%H%M%S).rdb
|
||
;;
|
||
clean)
|
||
echo "🧹 Cleaning Docker Ultroid..."
|
||
docker-compose down --rmi all --volumes --remove-orphans
|
||
;;
|
||
*)
|
||
echo "🐳 Docker Ultroid Management"
|
||
echo "Usage: $0 {start|stop|restart|logs|status|shell|backup|clean}"
|
||
echo ""
|
||
echo "Commands:"
|
||
echo " start - Start Docker Ultroid"
|
||
echo " stop - Stop Docker Ultroid"
|
||
echo " restart - Restart Docker Ultroid"
|
||
echo " logs - View logs"
|
||
echo " status - Show status"
|
||
echo " shell - Access shell"
|
||
echo " backup - Backup database"
|
||
echo " clean - Remove everything"
|
||
;;
|
||
esac
|
||
EOF
|
||
|
||
chmod +x "$DOCKER_DIR/manage.sh"
|
||
|
||
# Create instructions file
|
||
cat > "$DOCKER_DIR/README.md" << 'EOF'
|
||
# Docker Ultroid - Isolated Setup
|
||
|
||
This is a completely separate Docker environment that won't interfere with your existing bot.
|
||
|
||
## Quick Start
|
||
|
||
1. **Configure credentials:**
|
||
```bash
|
||
nano .env
|
||
# Add your SESSION, API_ID, API_HASH
|
||
```
|
||
|
||
2. **Start Docker bot:**
|
||
```bash
|
||
./manage.sh start
|
||
```
|
||
|
||
## Management Commands
|
||
|
||
```bash
|
||
./manage.sh start # Start Docker bot
|
||
./manage.sh stop # Stop Docker bot
|
||
./manage.sh restart # Restart Docker bot
|
||
./manage.sh logs # View logs
|
||
./manage.sh status # Check status
|
||
./manage.sh shell # Access container
|
||
./manage.sh backup # Backup database
|
||
./manage.sh clean # Remove everything
|
||
```
|
||
|
||
## Differences from Main Bot
|
||
|
||
- **Different ports:** Redis (6380), MongoDB (27018)
|
||
- **Isolated data:** Separate downloads, uploads, logs
|
||
- **Separate database:** Won't conflict with existing setup
|
||
- **Independent:** Can run alongside your main bot
|
||
|
||
## Safety Features
|
||
|
||
- ✅ Uses different container names
|
||
- ✅ Uses different network
|
||
- ✅ Uses different ports
|
||
- ✅ Isolated volumes
|
||
- ✅ Separate configuration
|
||
- ✅ Won't touch existing files
|
||
|
||
Your existing bot setup remains completely untouched!
|
||
EOF
|
||
|
||
echo -e "\n${GREEN}✅ Safe Docker environment created!${NC}"
|
||
echo -e "\n${BLUE}📁 Location: ${DOCKER_DIR}/${NC}"
|
||
|
||
# Show configuration status
|
||
echo -e "\n${BLUE}📋 Configuration Status:${NC}"
|
||
if [ ! -z "$AUTO_SESSION" ] && [ ! -z "$AUTO_API_ID" ] && [ ! -z "$AUTO_API_HASH" ]; then
|
||
echo -e " ${GREEN}✅ SESSION, API_ID, API_HASH auto-populated from existing setup${NC}"
|
||
echo -e " ${GREEN}✅ Ready to start immediately!${NC}"
|
||
echo -e "\n${YELLOW}<EFBFBD> Quick Start:${NC}"
|
||
echo -e " 1. ${BLUE}cd ${DOCKER_DIR}${NC}"
|
||
echo -e " 2. ${BLUE}./manage.sh start${NC}"
|
||
else
|
||
echo -e " ${YELLOW}⚠️ Please manually add your credentials${NC}"
|
||
echo -e "\n${YELLOW}<EFBFBD>📋 Next steps:${NC}"
|
||
echo -e " 1. ${BLUE}cd ${DOCKER_DIR}${NC}"
|
||
echo -e " 2. ${BLUE}nano .env${NC} (add your SESSION, API_ID, API_HASH)"
|
||
echo -e " 3. ${BLUE}./manage.sh start${NC}"
|
||
fi
|
||
echo ""
|
||
echo -e "${GREEN}🛡️ Your existing bot configuration is completely safe!${NC}"
|
||
echo -e "${BLUE}📖 Check ${DOCKER_DIR}/README.md for detailed instructions${NC}"
|
||
|
||
echo -e "\n${YELLOW}💡 Port differences to avoid conflicts:${NC}"
|
||
echo -e " Redis: 6380 (instead of 6379)"
|
||
echo -e " MongoDB: 27018 (instead of 27017)"
|
||
echo -e " All containers have 'docker' prefix"
|
||
echo ""
|
||
echo -e "${GREEN}🎉 You can now run both setups side by side safely!${NC}"
|