-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdeploy-remote.sh
More file actions
145 lines (127 loc) · 3.54 KB
/
deploy-remote.sh
File metadata and controls
145 lines (127 loc) · 3.54 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
#!/usr/bin/env bash
set -euo pipefail
COMPOSE_FILE="${1:-docker-compose.yml}"
DEPLOY_MODE="${2:-oneclick}"
PROJECT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REMOTE_ENV_TEMPLATE="deploy/.env.ecs.example"
SWAP_FILE="/swapfile"
SWAP_SIZE_MB="${SWAP_SIZE_MB:-2048}"
MIN_MEM_KB_FOR_SWAP="${MIN_MEM_KB_FOR_SWAP:-3145728}"
cd "$PROJECT_DIR"
if [[ ! -f "$COMPOSE_FILE" ]]; then
echo "Error: compose file not found: $COMPOSE_FILE"
exit 1
fi
if [[ -f "$REMOTE_ENV_TEMPLATE" ]]; then
cp "$REMOTE_ENV_TEMPLATE" .env
echo "Synchronized .env from $REMOTE_ENV_TEMPLATE"
elif [[ ! -f ".env" ]]; then
echo "Warning: .env not found in project root, compose may use host env"
fi
TOTAL_MEM_KB="$(awk '/MemTotal/ {print $2}' /proc/meminfo 2>/dev/null || echo 0)"
TOTAL_SWAP_KB="$(awk '/SwapTotal/ {print $2}' /proc/meminfo 2>/dev/null || echo 0)"
if [[ "$TOTAL_SWAP_KB" -eq 0 && "$TOTAL_MEM_KB" -lt "$MIN_MEM_KB_FOR_SWAP" ]]; then
echo "Detected low-memory host without swap; creating ${SWAP_SIZE_MB}MB swap..."
if command -v fallocate >/dev/null 2>&1; then
fallocate -l "${SWAP_SIZE_MB}M" "$SWAP_FILE" || true
fi
if [[ ! -f "$SWAP_FILE" ]]; then
dd if=/dev/zero of="$SWAP_FILE" bs=1M count="$SWAP_SIZE_MB"
fi
chmod 600 "$SWAP_FILE"
mkswap "$SWAP_FILE"
swapon "$SWAP_FILE"
if ! grep -q "^$SWAP_FILE " /etc/fstab; then
echo "$SWAP_FILE swap swap defaults 0 0" >> /etc/fstab
fi
free -h || true
fi
if ! command -v docker >/dev/null 2>&1; then
echo "Error: docker is not installed"
exit 1
fi
if docker compose version >/dev/null 2>&1; then
COMPOSE_COMMAND="docker compose"
elif command -v docker-compose >/dev/null 2>&1; then
COMPOSE_COMMAND="docker-compose"
else
echo "Error: neither docker compose plugin nor docker-compose is available"
exit 1
fi
export DOCKER_BUILDKIT=0
export COMPOSE_DOCKER_CLI_BUILD=0
run_prepare() {
echo "[prepare] Done. .env synchronized, compose detected, low-memory guard applied."
}
run_build_app() {
echo "[build-app] Building backend image..."
$COMPOSE_COMMAND -f "$COMPOSE_FILE" build app
}
run_build_frontend() {
echo "[build-frontend] Building frontend image..."
$COMPOSE_COMMAND -f "$COMPOSE_FILE" build frontend
}
run_up() {
echo "[up] Starting all services..."
$COMPOSE_COMMAND -f "$COMPOSE_FILE" up -d --force-recreate --remove-orphans
}
run_up_core() {
echo "[up-core] Starting middleware and app..."
if grep -qE '^\s+minio:' "$COMPOSE_FILE"; then
STORAGE_SVC="minio"
else
STORAGE_SVC="rustfs"
fi
$COMPOSE_COMMAND -f "$COMPOSE_FILE" up -d --force-recreate postgres redis "$STORAGE_SVC" createbuckets app
}
run_up_frontend() {
echo "[up-frontend] Starting frontend..."
$COMPOSE_COMMAND -f "$COMPOSE_FILE" up -d --force-recreate frontend
}
run_status() {
echo "[status] Service status..."
$COMPOSE_COMMAND -f "$COMPOSE_FILE" ps
}
run_logs() {
echo "[logs] Recent logs (last 80 lines)..."
$COMPOSE_COMMAND -f "$COMPOSE_FILE" logs --tail 80 || true
}
case "$DEPLOY_MODE" in
oneclick)
run_build_app
run_build_frontend
run_up
run_status
run_logs
;;
prepare)
run_prepare
;;
build-app)
run_build_app
;;
build-frontend)
run_build_frontend
;;
up)
run_up
;;
up-core)
run_up_core
;;
up-frontend)
run_up_frontend
;;
status)
run_status
;;
logs)
run_logs
;;
*)
echo "Error: unsupported deploy mode: $DEPLOY_MODE"
echo "Supported modes: oneclick|prepare|build-app|build-frontend|up|up-core|up-frontend|status|logs"
exit 1
;;
esac
echo "Deployment on remote host completed."