File size: 6,858 Bytes
d8efa31
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
#!/bin/bash

# HTTrack Scraper - Quick Deployment Script
# This script helps you quickly deploy the HTTrack Gradio app

set -e  # Exit on error

# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# Print colored message
print_message() {
    local color=$1
    shift
    echo -e "${color}$@${NC}"
}

print_message $BLUE "╔═══════════════════════════════════════════╗"
print_message $BLUE "β•‘   HTTrack Website Scraper Deployment     β•‘"
print_message $BLUE "β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•"
echo

# Check if Docker is installed
check_docker() {
    if ! command -v docker &> /dev/null; then
        print_message $RED "❌ Docker is not installed!"
        echo "Please install Docker from: https://docs.docker.com/get-docker/"
        exit 1
    fi
    print_message $GREEN "βœ… Docker is installed"
}

# Check if Docker Compose is available
check_docker_compose() {
    if docker compose version &> /dev/null; then
        DOCKER_COMPOSE_CMD="docker compose"
        print_message $GREEN "βœ… Docker Compose V2 is available"
    elif command -v docker-compose &> /dev/null; then
        DOCKER_COMPOSE_CMD="docker-compose"
        print_message $GREEN "βœ… Docker Compose V1 is available"
    else
        print_message $YELLOW "⚠️  Docker Compose not found, will use Docker only"
        DOCKER_COMPOSE_CMD=""
    fi
}

# Build Docker image
build_image() {
    print_message $BLUE "πŸ”¨ Building Docker image..."
    docker build -t httrack-scraper:latest . || {
        print_message $RED "❌ Failed to build Docker image"
        exit 1
    }
    print_message $GREEN "βœ… Docker image built successfully"
}

# Deploy with Docker Compose
deploy_compose() {
    print_message $BLUE "πŸš€ Deploying with Docker Compose..."
    $DOCKER_COMPOSE_CMD up -d || {
        print_message $RED "❌ Failed to deploy with Docker Compose"
        exit 1
    }
    print_message $GREEN "βœ… Deployed successfully with Docker Compose"
}

# Deploy with Docker only
deploy_docker() {
    print_message $BLUE "πŸš€ Deploying with Docker..."
    
    # Stop and remove existing container if it exists
    docker stop httrack-scraper 2>/dev/null || true
    docker rm httrack-scraper 2>/dev/null || true
    
    # Run new container
    docker run -d \
        --name httrack-scraper \
        -p 7860:7860 \
        --restart unless-stopped \
        httrack-scraper:latest || {
        print_message $RED "❌ Failed to deploy with Docker"
        exit 1
    }
    print_message $GREEN "βœ… Deployed successfully with Docker"
}

# Show deployment info
show_info() {
    echo
    print_message $GREEN "╔═══════════════════════════════════════════╗"
    print_message $GREEN "β•‘         Deployment Successful! πŸŽ‰         β•‘"
    print_message $GREEN "β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•"
    echo
    print_message $BLUE "πŸ“ Access the app at: http://localhost:7860"
    print_message $BLUE "🐳 Container name: httrack-scraper"
    echo
    print_message $YELLOW "Useful commands:"
    echo "  β€’ View logs:        docker logs -f httrack-scraper"
    echo "  β€’ Stop app:         docker stop httrack-scraper"
    echo "  β€’ Start app:        docker start httrack-scraper"
    echo "  β€’ Restart app:      docker restart httrack-scraper"
    if [ -n "$DOCKER_COMPOSE_CMD" ]; then
        echo "  β€’ Compose logs:     $DOCKER_COMPOSE_CMD logs -f"
        echo "  β€’ Compose stop:     $DOCKER_COMPOSE_CMD down"
    fi
    echo
}

# Check container health
check_health() {
    print_message $BLUE "πŸ₯ Checking container health..."
    sleep 3
    
    if docker ps | grep -q httrack-scraper; then
        print_message $GREEN "βœ… Container is running"
        
        # Try to curl the endpoint
        if command -v curl &> /dev/null; then
            if curl -s -f http://localhost:7860/ > /dev/null; then
                print_message $GREEN "βœ… App is responding"
            else
                print_message $YELLOW "⚠️  App not responding yet (may need more time to start)"
            fi
        fi
    else
        print_message $RED "❌ Container is not running"
        print_message $YELLOW "Check logs with: docker logs httrack-scraper"
        exit 1
    fi
}

# Main deployment flow
main() {
    # Pre-flight checks
    check_docker
    check_docker_compose
    
    echo
    
    # Build
    build_image
    
    echo
    
    # Deploy based on available tools
    if [ -n "$DOCKER_COMPOSE_CMD" ]; then
        deploy_compose
    else
        deploy_docker
    fi
    
    # Health check
    check_health
    
    # Show info
    show_info
}

# Handle script arguments
case "${1:-}" in
    "build")
        check_docker
        build_image
        ;;
    "deploy")
        main
        ;;
    "stop")
        print_message $BLUE "πŸ›‘ Stopping application..."
        if [ -n "$DOCKER_COMPOSE_CMD" ]; then
            check_docker_compose
            $DOCKER_COMPOSE_CMD down
        else
            docker stop httrack-scraper
        fi
        print_message $GREEN "βœ… Application stopped"
        ;;
    "restart")
        print_message $BLUE "πŸ”„ Restarting application..."
        if [ -n "$DOCKER_COMPOSE_CMD" ]; then
            check_docker_compose
            $DOCKER_COMPOSE_CMD restart
        else
            docker restart httrack-scraper
        fi
        print_message $GREEN "βœ… Application restarted"
        ;;
    "logs")
        if [ -n "$DOCKER_COMPOSE_CMD" ]; then
            check_docker_compose
            $DOCKER_COMPOSE_CMD logs -f
        else
            docker logs -f httrack-scraper
        fi
        ;;
    "clean")
        print_message $YELLOW "🧹 Cleaning up..."
        docker stop httrack-scraper 2>/dev/null || true
        docker rm httrack-scraper 2>/dev/null || true
        docker rmi httrack-scraper:latest 2>/dev/null || true
        print_message $GREEN "βœ… Cleanup complete"
        ;;
    *)
        print_message $YELLOW "Usage: $0 {build|deploy|stop|restart|logs|clean}"
        echo
        echo "Commands:"
        echo "  build   - Build the Docker image only"
        echo "  deploy  - Build and deploy the application"
        echo "  stop    - Stop the running application"
        echo "  restart - Restart the application"
        echo "  logs    - View application logs"
        echo "  clean   - Remove container and image"
        echo
        echo "Quick start: $0 deploy"
        exit 1
        ;;
esac