forked from freeleaps/freeleaps-pub
Update for new change
This commit is contained in:
parent
0aef2aaae6
commit
4c3c0274cc
@ -83,141 +83,161 @@ devbox_init_usage() {
|
|||||||
printf "%s\n" "Options:"
|
printf "%s\n" "Options:"
|
||||||
|
|
||||||
# :command.usage_flags
|
# :command.usage_flags
|
||||||
# :flag.usage
|
# :flag.usage os (auto, linux, darwin, wsl2)
|
||||||
printf " %s\n" "--os OS"
|
printf " %s\n" "--os OS"
|
||||||
printf " Specifies the operating system (auto, linux, darwin, wsl2). Default is auto.\n"
|
printf " Specifies the operating system (auto, linux, darwin, wsl2). Default is auto.\n"
|
||||||
printf " %s\n" "Default: auto"
|
printf " %s\n" "Default: auto"
|
||||||
echo
|
echo
|
||||||
|
|
||||||
# :flag.usage
|
# :flag.usage arch
|
||||||
printf " %s\n" "--arch ARCH"
|
printf " %s\n" "--arch ARCH"
|
||||||
printf " Specifies the architecture (auto, amd64, arm64). Default is auto.\n"
|
printf " Specifies the architecture (auto, amd64, arm64). Default is auto.\n"
|
||||||
printf " %s\n" "Default: auto"
|
printf " %s\n" "Default: auto"
|
||||||
echo
|
echo
|
||||||
|
|
||||||
# :flag.usage
|
# :flag.usage devbox container name
|
||||||
printf " %s\n" "--devbox-container-name DEVBOX_CONTAINER_NAME"
|
printf " %s\n" "--devbox-container-name DEVBOX_CONTAINER_NAME"
|
||||||
printf " Specifies the DevBox container name. Default is devbox.\n"
|
printf " Specifies the DevBox container name. Default is devbox.\n"
|
||||||
printf " %s\n" "Default: devbox"
|
printf " %s\n" "Default: devbox"
|
||||||
echo
|
echo
|
||||||
|
|
||||||
# :flag.usage
|
# :flag.usage devbox container port
|
||||||
printf " %s\n" "--devbox-container-port DEVBOX_CONTAINER_PORT"
|
printf " %s\n" "--devbox-container-port DEVBOX_CONTAINER_PORT"
|
||||||
printf " Specifies the container port for DevBox SSH access. Default is 22222.\n"
|
printf " Specifies the container port for DevBox SSH access. Default is 22222.\n"
|
||||||
printf " %s\n" "Default: 22222"
|
printf " %s\n" "Default: 22222"
|
||||||
echo
|
echo
|
||||||
|
|
||||||
# :flag.usage
|
# :flag.usage devbox image repo
|
||||||
printf " %s\n" "--devbox-image-repo DEVBOX_IMAGE_REPO"
|
printf " %s\n" "--devbox-image-repo DEVBOX_IMAGE_REPO"
|
||||||
printf " Specifies the DevBox container image repository. Default is\n docker.io/freeleaps.\n"
|
printf " Specifies the DevBox container image repository. Default is\n docker.io/freeleaps.\n"
|
||||||
printf " %s\n" "Default: docker.io/freeleaps"
|
printf " %s\n" "Default: docker.io/freeleaps"
|
||||||
echo
|
echo
|
||||||
|
|
||||||
# :flag.usage
|
# :flag.usage devbox frontend port
|
||||||
|
printf " %s\n" "--devbox-frontend-port DEVBOX_FRONTEND_PORT"
|
||||||
|
printf " Specifies the container port for DevBox frontend access. Default is 5173.\n"
|
||||||
|
printf " %s\n" "Default: 5173"
|
||||||
|
echo
|
||||||
|
|
||||||
|
# :flag.usage devbox backend port
|
||||||
|
printf " %s\n" "--devbox-backend-port DEVBOX_BACKEND_PORT"
|
||||||
|
printf " Specifies the container port for DevBox backend access. Default is 8002.\n"
|
||||||
|
printf " %s\n" "Default: 8002"
|
||||||
|
echo
|
||||||
|
|
||||||
|
# :flag.usage devbox image name
|
||||||
printf " %s\n" "--devbox-image-name DEVBOX_IMAGE_NAME"
|
printf " %s\n" "--devbox-image-name DEVBOX_IMAGE_NAME"
|
||||||
printf " Specifies the DevBox container image name. Default is devbox.\n"
|
printf " Specifies the DevBox container image name. Default is devbox.\n"
|
||||||
printf " %s\n" "Default: devbox"
|
printf " %s\n" "Default: devbox"
|
||||||
echo
|
echo
|
||||||
|
|
||||||
# :flag.usage
|
# :flag.usage devbox image tag
|
||||||
printf " %s\n" "--devbox-image-tag DEVBOX_IMAGE_TAG"
|
printf " %s\n" "--devbox-image-tag DEVBOX_IMAGE_TAG"
|
||||||
printf " Specifies the DevBox container image tag. Default is latest.\n"
|
printf " Specifies the DevBox container image tag. Default is latest.\n"
|
||||||
printf " %s\n" "Default: latest"
|
printf " %s\n" "Default: latest"
|
||||||
echo
|
echo
|
||||||
|
|
||||||
# :flag.usage
|
# :flag.usage working home
|
||||||
printf " %s\n" "--working-home WORKING_HOME"
|
printf " %s\n" "--working-home WORKING_HOME"
|
||||||
printf " Specifies the working home of DevBox CLI. Default is ${HOME}/.devbox.\n"
|
printf " Specifies the working home of DevBox CLI. Default is ${HOME}/.devbox.\n"
|
||||||
echo
|
echo
|
||||||
|
|
||||||
# :flag.usage
|
# :flag.usage freeleaps username
|
||||||
printf " %s\n" "--freeleaps-username FREELEAPS_USERNAME (required)"
|
printf " %s\n" "--freeleaps-username FREELEAPS_USERNAME (required)"
|
||||||
printf " Specifies the Freeleaps.com username (Required).\n"
|
printf " Specifies the Freeleaps.com repository username (Required).\n"
|
||||||
echo
|
echo
|
||||||
|
|
||||||
# :flag.usage
|
# :flag.usage freeleaps password
|
||||||
printf " %s\n" "--freeleaps-password FREELEAPS_PASSWORD (required)"
|
printf " %s\n" "--freeleaps-password FREELEAPS_PASSWORD (required)"
|
||||||
printf " Specifies the Freeleaps.com password (Required).\n"
|
printf " Specifies the Freeleaps.com password repository (Required).\n"
|
||||||
echo
|
echo
|
||||||
|
|
||||||
# :flag.usage
|
# :flag.usage use local component
|
||||||
printf " %s\n" "--use-local-component IS_USE_LOCAL_COMPONENT"
|
printf " %s\n" "--use-local-component IS_USE_LOCAL_COMPONENT"
|
||||||
printf " Check if use local component or use online dev environment. (Default: false, use online service) (Optional)\n"
|
printf " Check if use local component or use online dev environment. (Default: false, use online service) (Optional)\n"
|
||||||
echo
|
echo
|
||||||
|
|
||||||
# :flag.usage
|
# :flag.usage devsvc image repo
|
||||||
printf " %s\n" "--devsvc-image-repo DEVSVC_IMAGE_REPO"
|
printf " %s\n" "--devsvc-image-repo DEVSVC_IMAGE_REPO"
|
||||||
printf " Specifies the repository for devsvc component. (Optional)\n"
|
printf " Specifies the repository for devsvc component. (Optional)\n"
|
||||||
echo
|
echo
|
||||||
|
|
||||||
# :flag.usage
|
# :flag.usage devsvc image name
|
||||||
printf " %s\n" "--devsvc-image-name DEVSVC_IMAGE_NAME"
|
printf " %s\n" "--devsvc-image-name DEVSVC_IMAGE_NAME"
|
||||||
printf " Specifies the image name for devsvc component. (Optional)\n"
|
printf " Specifies the image name for devsvc component. (Optional)\n"
|
||||||
echo
|
echo
|
||||||
|
|
||||||
# :flag.usage
|
# :flag.usage devsvc image tag
|
||||||
printf " %s\n" "--devsvc-image-tag DEVSVC_IMAGE_TAG"
|
printf " %s\n" "--devsvc-image-tag DEVSVC_IMAGE_TAG"
|
||||||
printf " Specifies the image tag for devsvc component. (Optional, default=latest)\n"
|
printf " Specifies the image tag for devsvc component. (Optional, default=latest)\n"
|
||||||
printf " %s\n" "Default: latest"
|
printf " %s\n" "Default: latest"
|
||||||
echo
|
echo
|
||||||
|
|
||||||
# 用于 notification 组件的 usage 说明
|
# :flag.usage notification image repo
|
||||||
printf " %s\n" "--notification-image-repo NOTIFICATION_IMAGE_REPO"
|
printf " %s\n" "--notification-image-repo NOTIFICATION_IMAGE_REPO"
|
||||||
printf " Specifies the repository for notification component. (Optional)\n"
|
printf " Specifies the repository for notification component. (Optional)\n"
|
||||||
echo
|
echo
|
||||||
|
|
||||||
|
# :flag.usage notification image name
|
||||||
printf " %s\n" "--notification-image-name NOTIFICATION_IMAGE_NAME"
|
printf " %s\n" "--notification-image-name NOTIFICATION_IMAGE_NAME"
|
||||||
printf " Specifies the image name for notification component. (Optional)\n"
|
printf " Specifies the image name for notification component. (Optional)\n"
|
||||||
echo
|
echo
|
||||||
|
|
||||||
|
# :flag.usage notification image tag
|
||||||
printf " %s\n" "--notification-image-tag NOTIFICATION_IMAGE_TAG"
|
printf " %s\n" "--notification-image-tag NOTIFICATION_IMAGE_TAG"
|
||||||
printf " Specifies the image tag for notification component. (Optional, default=latest)\n"
|
printf " Specifies the image tag for notification component. (Optional, default=latest)\n"
|
||||||
printf " %s\n" "Default: latest"
|
printf " %s\n" "Default: latest"
|
||||||
echo
|
echo
|
||||||
|
|
||||||
# 用于 content 组件的 usage 说明
|
# :flag.usage content image repo
|
||||||
printf " %s\n" "--content-image-repo CONTENT_IMAGE_REPO"
|
printf " %s\n" "--content-image-repo CONTENT_IMAGE_REPO"
|
||||||
printf " Specifies the repository for content component. (Optional)\n"
|
printf " Specifies the repository for content component. (Optional)\n"
|
||||||
echo
|
echo
|
||||||
|
|
||||||
|
# :flag.usage content image name
|
||||||
printf " %s\n" "--content-image-name CONTENT_IMAGE_NAME"
|
printf " %s\n" "--content-image-name CONTENT_IMAGE_NAME"
|
||||||
printf " Specifies the image name for content component. (Optional)\n"
|
printf " Specifies the image name for content component. (Optional)\n"
|
||||||
echo
|
echo
|
||||||
|
|
||||||
|
# :flag.usage content image tag
|
||||||
printf " %s\n" "--content-image-tag CONTENT_IMAGE_TAG"
|
printf " %s\n" "--content-image-tag CONTENT_IMAGE_TAG"
|
||||||
printf " Specifies the image tag for content component. (Optional, default=latest)\n"
|
printf " Specifies the image tag for content component. (Optional, default=latest)\n"
|
||||||
printf " %s\n" "Default: latest"
|
printf " %s\n" "Default: latest"
|
||||||
echo
|
echo
|
||||||
|
|
||||||
# 用于 central_storage 组件的 usage 说明
|
# :flag.usage central storage image repo
|
||||||
printf " %s\n" "--central_storage-image-repo CENTRAL_STORAGE_IMAGE_REPO"
|
printf " %s\n" "--central_storage-image-repo CENTRAL_STORAGE_IMAGE_REPO"
|
||||||
printf " Specifies the repository for central_storage component. (Optional)\n"
|
printf " Specifies the repository for central_storage component. (Optional)\n"
|
||||||
echo
|
echo
|
||||||
|
|
||||||
|
# :flag.usage central storage image name
|
||||||
printf " %s\n" "--central_storage-image-name CENTRAL_STORAGE_IMAGE_NAME"
|
printf " %s\n" "--central_storage-image-name CENTRAL_STORAGE_IMAGE_NAME"
|
||||||
printf " Specifies the image name for central_storage component. (Optional)\n"
|
printf " Specifies the image name for central_storage component. (Optional)\n"
|
||||||
echo
|
echo
|
||||||
|
|
||||||
|
# :flag.usage central storage image tag
|
||||||
printf " %s\n" "--central_storage-image-tag CENTRAL_STORAGE_IMAGE_TAG"
|
printf " %s\n" "--central_storage-image-tag CENTRAL_STORAGE_IMAGE_TAG"
|
||||||
printf " Specifies the image tag for central_storage component. (Optional, default=latest)\n"
|
printf " Specifies the image tag for central_storage component. (Optional, default=latest)\n"
|
||||||
printf " %s\n" "Default: latest"
|
printf " %s\n" "Default: latest"
|
||||||
echo
|
echo
|
||||||
|
|
||||||
# 用于 authentication 组件的 usage 说明
|
# :flag.usage authentication image repo
|
||||||
printf " %s\n" "--authentication-image-repo AUTHENTICATION_IMAGE_REPO"
|
printf " %s\n" "--authentication-image-repo AUTHENTICATION_IMAGE_REPO"
|
||||||
printf " Specifies the repository for authentication component. (Optional)\n"
|
printf " Specifies the repository for authentication component. (Optional)\n"
|
||||||
echo
|
echo
|
||||||
|
|
||||||
|
# :flag.usage authentication image name
|
||||||
printf " %s\n" "--authentication-image-name AUTHENTICATION_IMAGE_NAME"
|
printf " %s\n" "--authentication-image-name AUTHENTICATION_IMAGE_NAME"
|
||||||
printf " Specifies the image name for authentication component. (Optional)\n"
|
printf " Specifies the image name for authentication component. (Optional)\n"
|
||||||
echo
|
echo
|
||||||
|
|
||||||
|
# :flag.usage authentication image tag
|
||||||
printf " %s\n" "--authentication-image-tag AUTHENTICATION_IMAGE_TAG"
|
printf " %s\n" "--authentication-image-tag AUTHENTICATION_IMAGE_TAG"
|
||||||
printf " Specifies the image tag for authentication component. (Optional, default=latest)\n"
|
printf " Specifies the image tag for authentication component. (Optional, default=latest)\n"
|
||||||
printf " %s\n" "Default: latest"
|
printf " %s\n" "Default: latest"
|
||||||
echo
|
echo
|
||||||
|
|
||||||
# :flag.usage
|
# :flag.usage force
|
||||||
printf " %s\n" "--force, -f"
|
printf " %s\n" "--force, -f"
|
||||||
printf " Force initialization even if resources already exist.\n"
|
printf " Force initialization even if resources already exist.\n"
|
||||||
echo
|
echo
|
||||||
@ -640,6 +660,7 @@ devbox_init_command() {
|
|||||||
-p "${DEVBOX_PORT}:22" \
|
-p "${DEVBOX_PORT}:22" \
|
||||||
-p "${DEVBOX_FRONTEND_PORT}:5173" \
|
-p "${DEVBOX_FRONTEND_PORT}:5173" \
|
||||||
-p "${DEVBOX_BACKEND_PORT}:8002" \
|
-p "${DEVBOX_BACKEND_PORT}:8002" \
|
||||||
|
-v "$WORKING_HOME:/home/.devbox" \
|
||||||
-v /var/run/docker.sock:/var/run/docker.sock \
|
-v /var/run/docker.sock:/var/run/docker.sock \
|
||||||
"$devbox_full_image" 2>/dev/null
|
"$devbox_full_image" 2>/dev/null
|
||||||
)"
|
)"
|
||||||
@ -648,10 +669,10 @@ devbox_init_command() {
|
|||||||
echo "ERROR: Failed to create DevBox container."
|
echo "ERROR: Failed to create DevBox container."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
echo "DevBox container created: $container_id"
|
|
||||||
|
|
||||||
# record container id
|
# record container id
|
||||||
echo "$container_id" > "${WORKING_HOME}/.devbox-instance"
|
echo "$container_id" > "$WORKING_HOME/.devbox-instance"
|
||||||
|
|
||||||
|
|
||||||
# -------------------------------------------------------------------
|
# -------------------------------------------------------------------
|
||||||
# 6. linbwang: pull and start other components
|
# 6. linbwang: pull and start other components
|
||||||
@ -706,26 +727,130 @@ if [[ "${USE_LOCAL_COMPONENT,,}" == "true" ]]; then
|
|||||||
if [[ -z "$component_container_id" ]]; then
|
if [[ -z "$component_container_id" ]]; then
|
||||||
echo "WARNING: Failed to create ${component} container. please Check the image and specify it to initialize the component."
|
echo "WARNING: Failed to create ${component} container. please Check the image and specify it to initialize the component."
|
||||||
fi
|
fi
|
||||||
echo "$component_container_id" > "${WORKING_HOME}/.${component}-instance"
|
echo "$component_container_id" > "/home/.devbox/.${component}-instance"
|
||||||
echo "${component} container created: $component_container_id"
|
echo "${component} container created: $component_container_id"
|
||||||
done
|
done
|
||||||
else
|
|
||||||
echo ' ===> Using online components for Freeleaps services.'
|
|
||||||
|
# 3.Create and start MongoDB container
|
||||||
|
echo "Step 3. [INFO] Starting MongoDB container..."
|
||||||
|
|
||||||
|
MONGO_CONTAINER_NAME="freeleaps2-mongo"
|
||||||
|
MONGO_IMAGE="mongo:latest"
|
||||||
|
|
||||||
|
# if a container with the same name exists, remove it
|
||||||
|
if docker ps -a --format '{{.Names}}' | grep -q "^${MONGO_CONTAINER_NAME}\$"; then
|
||||||
|
echo "==> Removing existing MongoDB container..."
|
||||||
|
docker stop "$MONGO_CONTAINER_NAME" &>/dev/null || true
|
||||||
|
docker rm "$MONGO_CONTAINER_NAME" &>/dev/null || true
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
echo "==> Pulling MongoDB image: $MONGO_IMAGE"
|
||||||
|
if ! docker pull "$MONGO_IMAGE"; then
|
||||||
|
echo "ERROR: Failed to pull MongoDB image: $MONGO_IMAGE"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "==> Starting MongoDB container..."
|
||||||
|
mongo_container_id=$(docker run -d --name "$MONGO_CONTAINER_NAME" -p 27017:27017 "$MONGO_IMAGE")
|
||||||
|
if [[ -z "$mongo_container_id" ]]; then
|
||||||
|
echo "ERROR: Failed to start MongoDB container."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
echo "MongoDB container started successfully: $mongo_container_id"
|
||||||
|
|
||||||
|
sleep 10
|
||||||
|
|
||||||
|
|
||||||
|
echo '============================================'
|
||||||
|
|
||||||
|
MAX_ATTEMPTS=10
|
||||||
|
ATTEMPT=0
|
||||||
|
while [ $ATTEMPT -lt $MAX_ATTEMPTS ]; do
|
||||||
|
if docker exec "$MONGO_CONTAINER_NAME" mongosh --eval "db.adminCommand('ping')" 2>/dev/null | grep -q '{ ok: 1 }'; then
|
||||||
|
echo "MongoDB health check passed."
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
echo "Waiting for MongoDB to be ready... (Attempt $((ATTEMPT+1)))"
|
||||||
|
sleep 10
|
||||||
|
ATTEMPT=$((ATTEMPT+1))
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ $ATTEMPT -eq $MAX_ATTEMPTS ]; then
|
||||||
|
echo "ERROR: MongoDB health check failed."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Step 4. [INFO] Starting MongoDB container..."
|
||||||
|
|
||||||
|
else
|
||||||
|
echo '============================================'
|
||||||
|
echo ' ===> Using online components for Freeleaps services.'
|
||||||
|
echo '============================================'
|
||||||
|
fi
|
||||||
|
# 4. Pull and start RabbitMQ container
|
||||||
|
echo "Step 4. [INFO] Starting RabbitMQ container..."
|
||||||
|
|
||||||
|
RABBITMQ_CONTAINER_NAME="freeleaps2-rabbitmq"
|
||||||
|
RABBITMQ_IMAGE="rabbitmq:latest"
|
||||||
|
|
||||||
|
# If a container with the same name exists, remove it
|
||||||
|
if docker ps -a --format '{{.Names}}' | grep -q "^${RABBITMQ_CONTAINER_NAME}\$"; then
|
||||||
|
echo "==> Removing existing RabbitMQ container..."
|
||||||
|
docker stop "${RABBITMQ_CONTAINER_NAME}" &>/dev/null || true
|
||||||
|
docker rm "${RABBITMQ_CONTAINER_NAME}" &>/dev/null || true
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Pull the RabbitMQ image
|
||||||
|
echo "==> Pulling RabbitMQ image: ${RABBITMQ_IMAGE}"
|
||||||
|
if ! docker pull "${RABBITMQ_IMAGE}"; then
|
||||||
|
echo "ERROR: Failed to pull RabbitMQ image: ${RABBITMQ_IMAGE}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Run the RabbitMQ container mapping port 5672
|
||||||
|
echo "==> Starting RabbitMQ container..."
|
||||||
|
rabbitmq_container_id=$(docker run -d --name "${RABBITMQ_CONTAINER_NAME}" -p 5672:5672 "${RABBITMQ_IMAGE}")
|
||||||
|
|
||||||
|
if [[ -z "${rabbitmq_container_id}" ]]; then
|
||||||
|
echo "ERROR: Failed to start RabbitMQ container."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
echo "RabbitMQ container started successfully: ${rabbitmq_container_id}"
|
||||||
|
|
||||||
|
# Allow RabbitMQ some time to initialize
|
||||||
|
sleep 20
|
||||||
|
|
||||||
|
# Check RabbitMQ health via rabbitmqctl
|
||||||
|
if docker exec "${RABBITMQ_CONTAINER_NAME}" rabbitmqctl status &>/dev/null; then
|
||||||
|
echo "RabbitMQ health check passed."
|
||||||
|
else
|
||||||
|
echo "ERROR: RabbitMQ health check failed."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
echo "Step 5. [INFO] Starting RabbitMQ container..."
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
docker exec -i "$DEVBOX_NAME" bash <<EOF
|
docker exec -i "$DEVBOX_NAME" bash <<EOF
|
||||||
|
|
||||||
# Set environment variables
|
# Set environment variables
|
||||||
export DEBIAN_FRONTEND=noninteractive
|
export DEBIAN_FRONTEND=noninteractive
|
||||||
export FREELEAPS_USERNAME="${FREELEAPS_USERNAME}"
|
export FREELEAPS_USERNAME="${FREELEAPS_USERNAME}"
|
||||||
export FREELEAPS_PASSWORD="${FREELEAPS_PASSWORD}"
|
export FREELEAPS_PASSWORD="${FREELEAPS_PASSWORD}"
|
||||||
export WORKING_HOME="${WORKING_HOME}"
|
|
||||||
export USE_LOCAL_COMPONENT="${USE_LOCAL_COMPONENT}"
|
export USE_LOCAL_COMPONENT="${USE_LOCAL_COMPONENT}"
|
||||||
export DEVBOX_BACKEND_PORT="${DEVBOX_BACKEND_PORT}"
|
export DEVBOX_BACKEND_PORT="${DEVBOX_BACKEND_PORT}"
|
||||||
export DEVBOX_FRONTEND_PORT="${DEVBOX_FRONTEND_PORT}"
|
export DEVBOX_FRONTEND_PORT="${DEVBOX_FRONTEND_PORT}"
|
||||||
|
export OSTYPE="${OSTYPE}"
|
||||||
|
|
||||||
|
|
||||||
|
# Ensure /home/.devbox/logs exists
|
||||||
|
mkdir -p "/home/.devbox/logs"
|
||||||
|
|
||||||
|
# Get default IP address
|
||||||
DEFAULT_IP=\$(ip route | grep default | sed -n 's/.*default via \([^ ]*\).*/\1/p')
|
DEFAULT_IP=\$(ip route | grep default | sed -n 's/.*default via \([^ ]*\).*/\1/p')
|
||||||
|
|
||||||
export OSTYPE="${OSTYPE}"
|
|
||||||
|
|
||||||
echo "Starting freeleaps services..."
|
echo "Starting freeleaps services..."
|
||||||
|
|
||||||
@ -756,6 +881,7 @@ echo "step 2: Update ~/freeleaps_home/freeleaps/.dev.env"
|
|||||||
if [[ "${USE_LOCAL_COMPONENT,,}" == "true" ]]; then
|
if [[ "${USE_LOCAL_COMPONENT,,}" == "true" ]]; then
|
||||||
echo "==> Using local components"
|
echo "==> Using local components"
|
||||||
|
|
||||||
|
# Local components for Freeleaps services (devsvc, notification, content, central_storage, authentication)
|
||||||
cat << 'EOFinner' > ~/freeleaps_home/freeleaps/.dev.env
|
cat << 'EOFinner' > ~/freeleaps_home/freeleaps/.dev.env
|
||||||
# Online endpoint info
|
# Online endpoint info
|
||||||
export MONGODB_NAME=freeleaps2
|
export MONGODB_NAME=freeleaps2
|
||||||
@ -778,21 +904,24 @@ EOFinner
|
|||||||
else
|
else
|
||||||
cat << 'EOFinner' > ~/freeleaps_home/freeleaps/.dev.env
|
cat << 'EOFinner' > ~/freeleaps_home/freeleaps/.dev.env
|
||||||
# Online endpoint info
|
# Online endpoint info
|
||||||
export MONGODB_NAME=freeleaps2-mongo
|
export MONGODB_NAME=freeleaps2
|
||||||
export MONGODB_URI=mongodb://\$DEFAULT_IP:27017/
|
export MONGODB_PORT=27017
|
||||||
export SITE_ACCESS_PORT=80
|
export MONGODB_URI='mongodb+srv://jetli:8IHKx6dZK8BfugGp@freeleaps2.hanbj.mongodb.net/'
|
||||||
export FREELEAPS_ENV=dev
|
export RABBITMQ_HOSTNAME=\$DEFAULT_IP
|
||||||
export STRIPE_API_KEY=sk_test_51Ogsw5B0IyqaSJBrwczlr820jnmvA1qQQGoLZ2XxOsIzikpmXo4pRLjw4XVMTEBR8DdVTYySiAv1XX53Zv5xqynF00GfMqttFd
|
|
||||||
export STRIPE_WEBHOOK_SECRET=
|
|
||||||
export SITE_URL_ROOT=http://localhost/
|
|
||||||
export BLOB_STORE_CONNECTION_STR="DefaultEndpointsProtocol=https;AccountName=freeleaps1static;AccountKey=SIk7S3RviJxl1XhGiDZKA3cvzfxNrSbsBMfJ3EbKTsKPeMwhy8FTLpJliRLzQVE6uaSX8giDYw2h+ASt5MmHxQ==;EndpointSuffix=core.windows.net"
|
|
||||||
export RABBITMQ_HOST=\$DEFAULT_IP
|
export RABBITMQ_HOST=\$DEFAULT_IP
|
||||||
export RABBITMQ_PORT=5672
|
export RABBITMQ_PORT=5672
|
||||||
export FREELEAPS_DEVSVC_ENDPOINT=http://localhost:8007/api/devsvc/
|
export FREELEAPS_ENV=dev
|
||||||
export FREELEAPS_CONTENT_ENDPOINT=http://localhost:8013/api/content/
|
export STRIPE_API_KEY=sk_test_51Ogsw5B0IyqaSJBrwczlr820jnmvA1qQQGoLZ2XxOsIzikpmXo4pRLjw4XVMTEBR8DdVTYySiAv1XX53Zv5xqynF00GfMqttFd
|
||||||
export FREELEAPS_CENTRAL_STORAGE_ENDPOINT=http://localhost:8005/api/central_storage/
|
export STRIPE_WEBHOOK_SECRET=whsec_S6ZWjSAdR5Cpsn2USH6ZRBqbdBIENjTC
|
||||||
export JWT_SECRET_KEY=8f87ca8c3c9c3df09a9c78e0adb0927855568f6072d9efc892534aee35f5867b
|
export STRIPE_ACCOUNT_WEBHOOK_SECRET=whsec_PgPnkWGhEUiQfnV8aIb5Wmruz7XETJLm
|
||||||
export FREELEAPS_AUTHENTICATION_ENDPOINT=http://localhost:8004/api/auth/
|
export SITE_URL_ROOT=http://localhost/
|
||||||
|
export FREELEAPS_DEVSVC_ENDPOINT=http://ip: 52.149.3.85:8007/api/devsvc/
|
||||||
|
export FREELEAPS_CONTENT_ENDPOINT=http://52.149.35.244:8013/api/content/
|
||||||
|
export FREELEAPS_PAYMENT_ENDPOINT=http://52.149.35.244:8006/api/payment/
|
||||||
|
export FREELEAPS_CENTRAL_STORAGE_ENDPOINT=http://52.149.35.244:8005/api/central_storage/
|
||||||
|
export FREELEAPS_AUTHENTICATION_ENDPOINT=http://52.149.35.244:8004/api/auth/
|
||||||
|
export FREELEAPS_AILAB_ENDPOINT=https://as010-w2-re-vm.mathmast.com:8009/api/
|
||||||
|
export KAFKA_SERVER_URL=''
|
||||||
export EMAIL_FROM=freeleaps@freeleaps.com
|
export EMAIL_FROM=freeleaps@freeleaps.com
|
||||||
EOFinner
|
EOFinner
|
||||||
fi
|
fi
|
||||||
@ -804,161 +933,6 @@ cp ~/freeleaps_home/freeleaps/.dev.env ~/freeleaps_home/freeleaps/.env
|
|||||||
source ~/freeleaps_home/freeleaps/.dev.env
|
source ~/freeleaps_home/freeleaps/.dev.env
|
||||||
source ~/freeleaps_home/freeleaps/apps/.env
|
source ~/freeleaps_home/freeleaps/apps/.env
|
||||||
|
|
||||||
echo "Step 3. [INFO] Checking Docker installation..."
|
|
||||||
|
|
||||||
# 1. Check docker CLI installted
|
|
||||||
if ! command -v docker >/dev/null 2>&1; then
|
|
||||||
echo "[ERROR] Docker CLI is not installed."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "[INFO] Docker CLI is installed. Checking daemon..."
|
|
||||||
|
|
||||||
# 2. Check if Docker Daemon running
|
|
||||||
if docker info >/dev/null 2>&1; then
|
|
||||||
echo '============================================'
|
|
||||||
echo "[OK] Docker daemon is running."
|
|
||||||
echo '============================================'
|
|
||||||
else
|
|
||||||
|
|
||||||
if grep -qi microsoft /proc/version; then
|
|
||||||
echo "[INFO] Detected WSL environment. Verifying Docker socket..."
|
|
||||||
if [ -S /var/run/docker.sock ]; then
|
|
||||||
echo "[OK] Docker socket found."
|
|
||||||
else
|
|
||||||
# WSL 2 with Docker Desktop
|
|
||||||
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
|
|
||||||
echo "[INFO] Running on Linux. Attempting to start Docker service..."
|
|
||||||
if command -v systemctl >/dev/null 2>&1; then
|
|
||||||
echo "[INFO] Starting Docker with systemctl..."
|
|
||||||
sudo systemctl start docker
|
|
||||||
sleep 2
|
|
||||||
if systemctl is-active --quiet docker; then
|
|
||||||
echo "[OK] Docker service started successfully via systemctl."
|
|
||||||
else
|
|
||||||
echo "[ERROR] Failed to start Docker using systemctl."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
elif command -v service >/dev/null 2>&1; then
|
|
||||||
echo "[INFO] systemctl not found, trying to start Docker using service..."
|
|
||||||
sudo service docker start
|
|
||||||
sleep 2
|
|
||||||
if docker info >/dev/null 2>&1; then
|
|
||||||
echo "[OK] Docker service started successfully via service command."
|
|
||||||
else
|
|
||||||
echo "[ERROR] Failed to start Docker using service command."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "[ERROR] Neither systemctl nor service command found. Please start Docker manually."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# 3.Create and start MongoDB container
|
|
||||||
echo "Step 4=2. [INFO] Starting MongoDB container..."
|
|
||||||
|
|
||||||
MONGO_CONTAINER_NAME="freeleaps2-mongo"
|
|
||||||
MONGO_IMAGE="mongo:latest"
|
|
||||||
|
|
||||||
# if a container with the same name exists, remove it
|
|
||||||
if docker ps -a --format '{{.Names}}' | grep -q "^\${MONGO_CONTAINER_NAME}\$"; then
|
|
||||||
echo "==> Removing existing MongoDB container..."
|
|
||||||
docker stop "\$MONGO_CONTAINER_NAME" &>/dev/null || true
|
|
||||||
docker rm "\$MONGO_CONTAINER_NAME" &>/dev/null || true
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "==> Pulling MongoDB image: \$MONGO_IMAGE"
|
|
||||||
if ! docker pull "\$MONGO_IMAGE"; then
|
|
||||||
echo "ERROR: Failed to pull MongoDB image: \$MONGO_IMAGE"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "==> Starting MongoDB container..."
|
|
||||||
mongo_container_id=\$(docker run -d --name "\$MONGO_CONTAINER_NAME" -p 27017:27017 "\$MONGO_IMAGE")
|
|
||||||
if [[ -z "\$mongo_container_id" ]]; then
|
|
||||||
echo "ERROR: Failed to start MongoDB container."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
echo "MongoDB container started successfully: \$mongo_container_id"
|
|
||||||
|
|
||||||
sleep 10
|
|
||||||
|
|
||||||
|
|
||||||
echo '============================================'
|
|
||||||
|
|
||||||
MAX_ATTEMPTS=10
|
|
||||||
ATTEMPT=0
|
|
||||||
while [ \$ATTEMPT -lt \$MAX_ATTEMPTS ]; do
|
|
||||||
if docker exec "\$MONGO_CONTAINER_NAME" mongosh --eval "db.adminCommand('ping')" 2>/dev/null | grep -q '{ ok: 1 }'; then
|
|
||||||
echo "MongoDB health check passed."
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
echo "Waiting for MongoDB to be ready... (Attempt \$((ATTEMPT+1)))"
|
|
||||||
sleep 10
|
|
||||||
ATTEMPT=\$((ATTEMPT+1))
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ \$ATTEMPT -eq \$MAX_ATTEMPTS ]; then
|
|
||||||
echo "ERROR: MongoDB health check failed."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Step 4. [INFO] Starting MongoDB container..."
|
|
||||||
|
|
||||||
|
|
||||||
pushd ~/freeleaps_home/freeleaps
|
|
||||||
|
|
||||||
# 4. 安装RABBITMQ_HOST=localhost, RABBITMQ_PORT=5672 docker 容器镜像,并检查是否成功启动
|
|
||||||
echo "Step 4. [INFO] Starting RabbitMQ container..."
|
|
||||||
|
|
||||||
RABBITMQ_CONTAINER_NAME="freeleaps2-rabbitmq"
|
|
||||||
RABBITMQ_IMAGE="rabbitmq:latest"
|
|
||||||
|
|
||||||
# If a container with the same name exists, remove it
|
|
||||||
if docker ps -a --format '{{.Names}}' | grep -q "^\${RABBITMQ_CONTAINER_NAME}\$"; then
|
|
||||||
echo "==> Removing existing RabbitMQ container..."
|
|
||||||
docker stop "\${RABBITMQ_CONTAINER_NAME}" &>/dev/null || true
|
|
||||||
docker rm "\${RABBITMQ_CONTAINER_NAME}" &>/dev/null || true
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Pull the RabbitMQ image
|
|
||||||
echo "==> Pulling RabbitMQ image: \${RABBITMQ_IMAGE}"
|
|
||||||
if ! docker pull "\${RABBITMQ_IMAGE}"; then
|
|
||||||
echo "ERROR: Failed to pull RabbitMQ image: \${RABBITMQ_IMAGE}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Run the RabbitMQ container mapping port 5672
|
|
||||||
echo "==> Starting RabbitMQ container..."
|
|
||||||
rabbitmq_container_id=\$(docker run -d --name "\${RABBITMQ_CONTAINER_NAME}" -p 5672:5672 "\${RABBITMQ_IMAGE}")
|
|
||||||
|
|
||||||
if [[ -z "\${rabbitmq_container_id}" ]]; then
|
|
||||||
echo "ERROR: Failed to start RabbitMQ container."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
echo "RabbitMQ container started successfully: \${rabbitmq_container_id}"
|
|
||||||
|
|
||||||
# Allow RabbitMQ some time to initialize
|
|
||||||
sleep 20
|
|
||||||
|
|
||||||
# Check RabbitMQ health via rabbitmqctl
|
|
||||||
if docker exec "\${RABBITMQ_CONTAINER_NAME}" rabbitmqctl status &>/dev/null; then
|
|
||||||
echo "RabbitMQ health check passed."
|
|
||||||
else
|
|
||||||
echo "ERROR: RabbitMQ health check failed."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
echo "Step 5. [INFO] Starting RabbitMQ container..."
|
|
||||||
|
|
||||||
echo '============================================'
|
|
||||||
|
|
||||||
# Run start_webapi.sh and check if success started
|
# Run start_webapi.sh and check if success started
|
||||||
echo "Step 4: Run start_webapi.sh and check if success started"
|
echo "Step 4: Run start_webapi.sh and check if success started"
|
||||||
|
|
||||||
@ -976,34 +950,18 @@ sudo apt update
|
|||||||
|
|
||||||
sudo apt install python3.10 python3.10-venv -y
|
sudo apt install python3.10 python3.10-venv -y
|
||||||
|
|
||||||
echo '============================================1'
|
|
||||||
dpkg -l | grep python3.10-venv
|
|
||||||
|
|
||||||
echo '============================================1'
|
|
||||||
# make sore python3.10 is installed
|
# make sore python3.10 is installed
|
||||||
if ! command -v python3.10 &>/dev/null; then
|
if ! command -v python3.10 &>/dev/null; then
|
||||||
echo "ERROR: Python3.10 is not installed."
|
echo "ERROR: Python3.10 is not installed."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Set python3.10 as default python3
|
|
||||||
echo "6.1. Set Python3.10 as default Python3"
|
|
||||||
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.10 1
|
|
||||||
sudo update-alternatives --config python3
|
|
||||||
|
|
||||||
# Check if the ladvei
|
# Upgrade pip and install virtualenv
|
||||||
echo "7. Upgrade pip and install virtualenv"
|
echo "7. Upgrade pip and install virtualenv"
|
||||||
python3.10 -m ensurepip --upgrade
|
python3.10 -m ensurepip --upgrade
|
||||||
python3.10 -m pip install --upgrade pip
|
python3.10 -m pip install --upgrade pip
|
||||||
|
|
||||||
|
|
||||||
echo '============================================'
|
|
||||||
|
|
||||||
echo 'Current path: '
|
|
||||||
pwd
|
|
||||||
|
|
||||||
echo '============================================'
|
|
||||||
|
|
||||||
# 8. Create and activate a virtual environment
|
# 8. Create and activate a virtual environment
|
||||||
echo "8. Create and activate a virtual environment"
|
echo "8. Create and activate a virtual environment"
|
||||||
python3.10 -m venv venv_t
|
python3.10 -m venv venv_t
|
||||||
@ -1012,7 +970,7 @@ sleep 5
|
|||||||
|
|
||||||
# CHeck if the virtual environment is created
|
# CHeck if the virtual environment is created
|
||||||
if [ ! -f "venv_t/bin/activate" ]; then
|
if [ ! -f "venv_t/bin/activate" ]; then
|
||||||
echo "ERROR: 虚拟环境没有创建成功"
|
echo "ERROR: The virtual environment cannot be created"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -1040,7 +998,7 @@ pip install -r ~/freeleaps_home/freeleaps/apps/requirements.txt
|
|||||||
echo '============================================'
|
echo '============================================'
|
||||||
echo 'Start to run start_webapi.sh'
|
echo 'Start to run start_webapi.sh'
|
||||||
echo '============================================'
|
echo '============================================'
|
||||||
./start_webapi.sh > /tmp/webapi.logs 2>&1 &
|
./start_webapi.sh > /home/.devbox/logs/backend.logs 2>&1 &
|
||||||
WEBAPI_PID=\$!
|
WEBAPI_PID=\$!
|
||||||
|
|
||||||
|
|
||||||
@ -1050,21 +1008,22 @@ echo '============================================'
|
|||||||
|
|
||||||
sleep 30
|
sleep 30
|
||||||
|
|
||||||
MAX_ATTEMPTS=30 # 30次尝试,每次10秒,总等待5分钟
|
# 30 attempts, 5 seconds each, total wait time 2.5 minutes
|
||||||
|
MAX_ATTEMPTS=30
|
||||||
ATTEMPT=0
|
ATTEMPT=0
|
||||||
|
|
||||||
echo "Waiting for WebAPI service to become healthy..."
|
echo "Waiting for WebAPI service to become healthy..."
|
||||||
|
|
||||||
while [ \$ATTEMPT -lt \$MAX_ATTEMPTS ]; do
|
while [ \$ATTEMPT -lt \$MAX_ATTEMPTS ]; do
|
||||||
HTTP_CODE=\$(curl -s -o /dev/null -w "%{http_code}" "http://localhost:\$DEVBOX_BACKEND_PORT/docs")
|
HTTP_CODE=\$(curl -s -o /dev/null -w "%{http_code}" "http://localhost:\$DEVBOX_BACKEND_PORT/docs")
|
||||||
# 判断返回的状态码是否为 200
|
# Check HTTP Code 200
|
||||||
if [ "\$HTTP_CODE" -eq 200 ]; then
|
if [ "\$HTTP_CODE" -eq 200 ]; then
|
||||||
echo "Backend Swagger UI is available at \$URL (HTTP \$HTTP_CODE)"
|
echo "Backend Swagger UI is available at \$URL (HTTP \$HTTP_CODE)"
|
||||||
break
|
break
|
||||||
else
|
else
|
||||||
echo "Waiting for Swagger UI to become available... Attempt \$((ATTEMPT+1))"
|
echo "Waiting for Swagger UI to become available... Attempt \$((ATTEMPT+1))"
|
||||||
ATTEMPT=\$((ATTEMPT+1))
|
ATTEMPT=\$((ATTEMPT+1))
|
||||||
sleep 5 # 等待 5 秒后重试
|
sleep 5 # Wait 5 seconds
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
@ -1091,13 +1050,13 @@ npm install -g pnpm
|
|||||||
pnpm install
|
pnpm install
|
||||||
npm run build
|
npm run build
|
||||||
npm run format
|
npm run format
|
||||||
# 静默后台启动 npm run dev,将输出重定向到 /dev/null
|
# Start the frontend service with nohup in order to keep it running after the SSH session is closed
|
||||||
nohup npm run dev > /dev/null 2>&1 &
|
nohup npm run dev > /home/.devbox/logs/frontend.logs > /dev/null 2>&1 &
|
||||||
|
|
||||||
# 获取后台启动进程的 PID(可选)
|
# Save the process ID of the frontend service
|
||||||
DEV_PID=$!
|
DEV_PID=$!
|
||||||
|
|
||||||
echo "npm run dev 已启动,进程号: \$DEV_PID"
|
echo "npm run dev has been started with PID: \$DEV_PID"
|
||||||
|
|
||||||
|
|
||||||
echo '============================================'
|
echo '============================================'
|
||||||
@ -1135,7 +1094,7 @@ EOF
|
|||||||
|
|
||||||
|
|
||||||
# -------------------------------------------------------------------
|
# -------------------------------------------------------------------
|
||||||
# 10. Final
|
# 10. Final notification
|
||||||
# -------------------------------------------------------------------
|
# -------------------------------------------------------------------
|
||||||
echo
|
echo
|
||||||
echo "==========================================================="
|
echo "==========================================================="
|
||||||
@ -1143,8 +1102,8 @@ EOF
|
|||||||
echo " DevBox container ID: $container_id"
|
echo " DevBox container ID: $container_id"
|
||||||
[[ -f "${WORKING_HOME}/.devsvc-instance" ]] && echo " devsvc container ID: $(cat "${WORKING_HOME}/.devsvc-instance")"
|
[[ -f "${WORKING_HOME}/.devsvc-instance" ]] && echo " devsvc container ID: $(cat "${WORKING_HOME}/.devsvc-instance")"
|
||||||
echo " Repository cloned to: $repo_dir"
|
echo " Repository cloned to: $repo_dir"
|
||||||
echo " Back-end logs: $WORKING_HOME/logs/back-end.logs"
|
echo " Backend logs: $WORKING_HOME/logs/backend.logs"
|
||||||
echo " Front-end logs: $WORKING_HOME/logs/front-end.logs"
|
echo " Frontend logs: $WORKING_HOME/logs/frontend.logs"
|
||||||
echo "==========================================================="
|
echo "==========================================================="
|
||||||
echo
|
echo
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user