-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathstart
More file actions
executable file
·183 lines (152 loc) · 5.11 KB
/
start
File metadata and controls
executable file
·183 lines (152 loc) · 5.11 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
179
180
181
182
183
#!/usr/bin/env bash
#
# Usage:
#
# $> source start [runtime] [environment] [profile] [--env]
#
#=========================================================================================
# Environment
#
export __script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "${__script_dir}/reactor/initialize.sh" start "${__script_dir}"
if [[ "$PATH" != *"${__script_dir}:"* ]]; then
export PATH="${__script_dir}:${PATH}"
fi
env_only=0
args=()
for arg in "$@"; do
if [ "$arg" == "--env" ]; then
env_only=1
else
args=("${args[@]}" "$arg")
fi
done
export COMPOSE_RUNTIME="${args[0]:-standard}"
export COMPOSE_ENVIRONMENT="${args[1]:-local}"
export COMPOSE_PROFILE="${args[2]:-default}"
export COMPOSE_FILE="${__script_dir}/compose.${COMPOSE_RUNTIME}.${COMPOSE_ENVIRONMENT}.yaml"
if [ ! -f "$COMPOSE_FILE" ]; then
echo "Compose file runtime '${COMPOSE_RUNTIME}' with environment '${COMPOSE_ENVIRONMENT}' not supported"
return
fi
export ZIMAGI_APP_NAME="zimagi-${COMPOSE_ENVIRONMENT}"
#
#=========================================================================================
# Execution
#
#
# 1. Generate Docker Compose passwords and keys to be reused across restarts
#
if [ ! -f "${__zimagi_env_dir}/generated" ]; then
case "$OSTYPE" in
darwin*)
gid="$(awk -F: -v group=docker '$1==group{print $3}' /etc/group)"
if [ ! "$gid" ]; then
gid="$(awk -F: -v group=daemon '$1==group{print $3}' /etc/group)"
fi
export ZIMAGI_DOCKER_GID="$gid"
;;
linux*)
export ZIMAGI_DOCKER_GID="$(cut -d: -f3 < <(getent group docker))"
;;
*) render "Unsupported OS: $OSTYPE"; exit 1 ;;
esac
echo "Storing generated passwords and keys"
echo """
#!/usr/bin/env bash
# System
export ZIMAGI_USER_UID=$(id -u)
export ZIMAGI_DOCKER_GID=$ZIMAGI_DOCKER_GID
# User
export ZIMAGI_ADMIN_DEFAULT_TOKEN=$(hexdump -v -e '/1 "%02x"' -n 16 /dev/urandom)
export ZIMAGI_ADMIN_API_KEY=$(hexdump -v -e '/1 "%02x"' -n 16 /dev/urandom)
# Database
export ZIMAGI_POSTGRES_PASSWORD=$(hexdump -v -e '/1 "%02x"' -n 7 /dev/urandom)
export ZIMAGI_REDIS_PASSWORD=$(hexdump -v -e '/1 "%02x"' -n 7 /dev/urandom)
export ZIMAGI_QDRANT_ACCESS_KEY=$(hexdump -v -e '/1 "%02x"' -n 7 /dev/urandom)
export ZIMAGI_HOST_POSTGRES_PORT=15432
export ZIMAGI_HOST_REDIS_PORT=16379
export ZIMAGI_HOST_QDRANT_PORT=16333
# API Connectivity
export ZIMAGI_COMMAND_PORT=5123
export ZIMAGI_DATA_PORT=5323
export ZIMAGI_MCP_PORT=6123
export ZIMAGI_FLOWER_PORT=5124
""" >"${__zimagi_env_dir}/generated"
fi
source "${__zimagi_env_dir}/generated"
#
# 2. Generate Docker Compose top level .env file used for Docker builds and client execution
#
new_env=0
if [ ! -f "${__script_dir}/.env" ]; then
new_env=1
fi
echo "Initializing Docker Compose build environment"
echo """
# Container environment
ZIMAGI_APP_NAME=${ZIMAGI_APP_NAME}
ZIMAGI_VERSION=$(cat "${__zimagi_app_dir}/VERSION")
ZIMAGI_STANDARD_BASE_IMAGE=${ZIMAGI_STANDARD_PARENT_IMAGE}
ZIMAGI_NVIDIA_BASE_IMAGE=${ZIMAGI_NVIDIA_PARENT_IMAGE}
ZIMAGI_ENVIRONMENT=${COMPOSE_ENVIRONMENT}
ZIMAGI_PROFILE=${COMPOSE_PROFILE}
# User environment
ZIMAGI_USER_UID=${ZIMAGI_USER_UID}
ZIMAGI_DOCKER_GID=${ZIMAGI_DOCKER_GID}
ZIMAGI_DEFAULT_ADMIN_TOKEN=${ZIMAGI_ADMIN_DEFAULT_TOKEN}
ZIMAGI_ADMIN_API_KEY=${ZIMAGI_ADMIN_API_KEY}
# Host directory environment
ZIMAGI_HOST_APP_DIR=${ZIMAGI_HOST_APP_DIR}
ZIMAGI_HOST_SDK_DIR=${ZIMAGI_HOST_SDK_DIR}
ZIMAGI_HOST_DATA_DIR=${ZIMAGI_HOST_DATA_DIR}
ZIMAGI_HOST_LIB_DIR=${ZIMAGI_HOST_LIB_DIR}
# Database environment
ZIMAGI_HOST_POSTGRES_PORT=${ZIMAGI_HOST_POSTGRES_PORT}
ZIMAGI_HOST_REDIS_PORT=${ZIMAGI_HOST_REDIS_PORT}
ZIMAGI_HOST_QDRANT_PORT=${ZIMAGI_HOST_QDRANT_PORT}
ZIMAGI_DOCKER_NETWORK=zimagi-net
ZIMAGI_POSTGRES_HOST=postgresql-zimagi
ZIMAGI_POSTGRES_PORT=5432
ZIMAGI_REDIS_HOST=redis-zimagi
ZIMAGI_REDIS_PORT=6379
ZIMAGI_QDRANT_HOST=qdrant-zimagi
ZIMAGI_QDRANT_PORT=6333
ZIMAGI_POSTGRES_PASSWORD=${ZIMAGI_POSTGRES_PASSWORD}
ZIMAGI_REDIS_PASSWORD=${ZIMAGI_REDIS_PASSWORD}
ZIMAGI_QDRANT_ACCESS_KEY=${ZIMAGI_QDRANT_ACCESS_KEY}
# API connectivity environment
ZIMAGI_COMMAND_HOST=localhost
ZIMAGI_COMMAND_PORT=${ZIMAGI_COMMAND_PORT}
ZIMAGI_DATA_HOST=localhost
ZIMAGI_DATA_PORT=${ZIMAGI_DATA_PORT}
ZIMAGI_MCP_PORT=${ZIMAGI_MCP_PORT}
ZIMAGI_FLOWER_PORT=${ZIMAGI_FLOWER_PORT}
""" >"${__script_dir}/.env"
#
# 3. Copy env/secret file from env/secret.example if it does not exist yet
#
if [ -f "${__zimagi_env_dir}/secret" ]; then
echo "Docker Compose secret environment file exists"
else
echo "Initializing Docker Compose secret environment file"
cp "${__zimagi_env_dir}/secret.example" "${__zimagi_env_dir}/secret"
fi
if [[ $new_env -eq 1 ]] && [[ "${COMPOSE_ENVIRONMENT}" == "local" ]]; then
echo ""
echo "[IMPORTANT]: Check to make sure the environment is correct in the env/generated and env/secret files before proceeding!"
echo ""
echo " -- When correct, execute this command again to run application -- "
return
fi
if [ $env_only -eq 1 ]; then
return
fi
#
# 4. Build Zimagi client Docker image
#
"${__zimagi_docker_dir}/build_client_image.sh" "${COMPOSE_ENVIRONMENT}"
#
# 5. Build Docker Compose images and start services
#
docker compose up --detach --build --wait --wait-timeout=300