-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdeploy.sh
More file actions
executable file
·178 lines (155 loc) · 5.19 KB
/
Copy pathdeploy.sh
File metadata and controls
executable file
·178 lines (155 loc) · 5.19 KB
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
#!/usr/bin/env bash
set -euo pipefail
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
COMPOSE_DIR="$SCRIPT_DIR/docker"
print_info() { echo -e "${GREEN}[INFO]${NC} $1"; }
print_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
print_error() { echo -e "${RED}[ERROR]${NC} $1"; }
check_docker() {
if ! command -v docker &> /dev/null; then
print_error "Docker is not installed. Please install Docker first."
exit 1
fi
if ! docker info &> /dev/null; then
print_error "Docker daemon is not running. Please start Docker."
exit 1
fi
print_info "Docker is available"
}
init_env() {
if [ ! -f "$COMPOSE_DIR/.env" ]; then
print_info "Creating .env from .env.example..."
cp "$COMPOSE_DIR/.env.example" "$COMPOSE_DIR/.env"
print_warn "Please edit docker/.env to set your admin credentials:"
print_warn " - ADMIN_EMAIL: Your admin email"
print_warn " - ADMIN_PASSWORD: A secure password (min 8 chars)"
echo ""
read -p "Press Enter to continue after editing docker/.env, or Ctrl+C to abort..."
else
print_info ".env file already exists"
fi
}
deploy() {
print_info "Starting deployment..."
check_docker
init_env
print_info "Pulling latest image..."
docker compose -f "$COMPOSE_DIR/docker-compose.yml" pull
print_info "Starting containers..."
docker compose -f "$COMPOSE_DIR/docker-compose.yml" up -d
print_info "Waiting for service to be ready..."
sleep 5
if docker compose -f "$COMPOSE_DIR/docker-compose.yml" ps | grep -q "Up"; then
print_info "Deployment successful!"
echo ""
echo -e "${GREEN}========================================${NC}"
echo -e "${GREEN} HTML2PNG is now running!${NC}"
echo -e "${GREEN} Access: http://localhost:3000${NC}"
echo -e "${GREEN}========================================${NC}"
else
print_error "Deployment failed. Check logs with: $0 logs"
exit 1
fi
}
update() {
print_info "Starting update..."
check_docker
print_info "Pulling latest image..."
docker compose -f "$COMPOSE_DIR/docker-compose.yml" pull
print_info "Restarting containers with new image..."
docker compose -f "$COMPOSE_DIR/docker-compose.yml" up -d
print_info "Waiting for service to be ready..."
sleep 5
if docker compose -f "$COMPOSE_DIR/docker-compose.yml" ps | grep -q "Up"; then
print_info "Update successful!"
else
print_error "Update failed. Check logs with: $0 logs"
exit 1
fi
}
stop() {
print_info "Stopping service..."
docker compose -f "$COMPOSE_DIR/docker-compose.yml" down
print_info "Service stopped"
}
restart() {
print_info "Restarting service..."
docker compose -f "$COMPOSE_DIR/docker-compose.yml" restart
print_info "Service restarted"
}
logs() {
docker compose -f "$COMPOSE_DIR/docker-compose.yml" logs -f --tail=100
}
status() {
echo ""
print_info "Container status:"
docker compose -f "$COMPOSE_DIR/docker-compose.yml" ps
echo ""
print_info "Recent logs:"
docker compose -f "$COMPOSE_DIR/docker-compose.yml" logs --tail=20
}
backup() {
BACKUP_FILE="backup_$(date +%Y%m%d_%H%M%S).db"
CONTAINER_ID=$(docker compose -f "$COMPOSE_DIR/docker-compose.yml" ps -q html2png 2>/dev/null)
if [ -n "$CONTAINER_ID" ]; then
docker cp "$CONTAINER_ID:/app/data/html2png.db" "./$BACKUP_FILE" 2>/dev/null && \
print_info "Database backed up to: ./$BACKUP_FILE" || \
print_warn "No database file found to backup"
else
print_warn "Container is not running. Cannot backup."
fi
}
clean() {
print_warn "This will remove containers and images. Data volumes will be preserved."
read -p "Are you sure? (y/N) " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
docker compose -f "$COMPOSE_DIR/docker-compose.yml" down --rmi all
print_info "Cleanup complete"
else
print_info "Cleanup cancelled"
fi
}
show_help() {
echo "HTML2PNG Deployment Script"
echo ""
echo "Usage: $0 <command>"
echo ""
echo "Commands:"
echo " deploy - First-time deployment (init + pull + start)"
echo " update - Pull latest image and restart"
echo " start - Start the service"
echo " stop - Stop the service"
echo " restart - Restart the service"
echo " status - Show service status and recent logs"
echo " logs - Follow container logs"
echo " backup - Backup the database"
echo " clean - Remove containers and images"
echo " help - Show this help message"
}
case "${1:-}" in
deploy) deploy ;;
update) update ;;
start) docker compose -f "$COMPOSE_DIR/docker-compose.yml" up -d; print_info "Service started" ;;
stop) stop ;;
restart) restart ;;
status) status ;;
logs) logs ;;
backup) backup ;;
clean) clean ;;
help|--help|-h) show_help ;;
*)
if [ -z "${1:-}" ]; then
show_help
else
print_error "Unknown command: $1"
echo ""
show_help
exit 1
fi
;;
esac