|
|
#!/bin/bash
|
|
|
|
|
|
# ==================
|
|
|
# == Env settings ==
|
|
|
# ==================
|
|
|
|
|
|
# ======================
|
|
|
# == Process the args ==
|
|
|
# ======================
|
|
|
|
|
|
# 1. Default values of arguments
|
|
|
# Arg: -f
|
|
|
# Determine force download asserts, default is not
|
|
|
FORCE_DOWNLOAD=false
|
|
|
|
|
|
# Arg: -l or --lang
|
|
|
# Determine the language to show, default is en
|
|
|
LANGUAGE="en_US"
|
|
|
|
|
|
# Arg: --url
|
|
|
# Determine the source URL to download files
|
|
|
SOURCE_URL="https://raw.githubusercontent.com/lobehub/lobe-chat/main"
|
|
|
|
|
|
# 2. Parse script arguments
|
|
|
while getopts "fl:-:" opt; do
|
|
|
case $opt in
|
|
|
f)
|
|
|
FORCE_DOWNLOAD=true
|
|
|
;;
|
|
|
l)
|
|
|
LANGUAGE=$OPTARG
|
|
|
;;
|
|
|
-)
|
|
|
case "${OPTARG}" in
|
|
|
lang)
|
|
|
LANGUAGE="${!OPTIND}"; OPTIND=$(( $OPTIND + 1 ))
|
|
|
;;
|
|
|
url)
|
|
|
SOURCE_URL="${!OPTIND}"; OPTIND=$(( $OPTIND + 1 ))
|
|
|
;;
|
|
|
*)
|
|
|
echo "Usage: $0 [-f] [-l language|--lang language] [--url source]" >&2
|
|
|
exit 1
|
|
|
;;
|
|
|
esac
|
|
|
;;
|
|
|
*)
|
|
|
echo "Usage: $0 [-f] [-l language|--lang language] [--url source]" >&2
|
|
|
exit 1
|
|
|
;;
|
|
|
esac
|
|
|
done
|
|
|
|
|
|
|
|
|
# ===============
|
|
|
# == Variables ==
|
|
|
# ===============
|
|
|
# File list
|
|
|
SUB_DIR="docker-compose/local"
|
|
|
FILES=(
|
|
|
"$SUB_DIR/docker-compose.yml"
|
|
|
"$SUB_DIR/.env.example"
|
|
|
"$SUB_DIR/init_data.json.tar.gz"
|
|
|
"$SUB_DIR/s3_data.tar.gz"
|
|
|
)
|
|
|
|
|
|
# Supported languages and messages
|
|
|
# Arg: -l --lang
|
|
|
# If the language is not supported, default to English
|
|
|
# Function to show messages
|
|
|
show_message() {
|
|
|
local key="$1"
|
|
|
case $key in
|
|
|
downloading)
|
|
|
case $LANGUAGE in
|
|
|
zh_CN)
|
|
|
echo "正在下载文件..."
|
|
|
;;
|
|
|
*)
|
|
|
echo "Downloading files..."
|
|
|
;;
|
|
|
esac
|
|
|
;;
|
|
|
downloaded)
|
|
|
case $LANGUAGE in
|
|
|
zh_CN)
|
|
|
echo " 已经存在,跳过下载。"
|
|
|
;;
|
|
|
*)
|
|
|
echo " already exists, skipping download."
|
|
|
;;
|
|
|
esac
|
|
|
;;
|
|
|
extracted_success)
|
|
|
case $LANGUAGE in
|
|
|
zh_CN)
|
|
|
echo " 解压成功到目录:"
|
|
|
;;
|
|
|
*)
|
|
|
echo " extracted successfully to directory: "
|
|
|
;;
|
|
|
esac
|
|
|
;;
|
|
|
extracted_failed)
|
|
|
case $LANGUAGE in
|
|
|
zh_CN)
|
|
|
echo " 解压失败。"
|
|
|
;;
|
|
|
*)
|
|
|
echo " extraction failed."
|
|
|
;;
|
|
|
esac
|
|
|
;;
|
|
|
file_not_exists)
|
|
|
case $LANGUAGE in
|
|
|
zh_CN)
|
|
|
echo " 不存在。"
|
|
|
;;
|
|
|
*)
|
|
|
echo " does not exist."
|
|
|
;;
|
|
|
esac
|
|
|
;;
|
|
|
tips_run_command)
|
|
|
case $LANGUAGE in
|
|
|
zh_CN)
|
|
|
echo "您已经完成了所有配置文件的下载。请运行以下命令启动LobeChat:"
|
|
|
;;
|
|
|
*)
|
|
|
echo "You have completed downloading all configuration files. Please run this command to start LobeChat:"
|
|
|
;;
|
|
|
esac
|
|
|
;;
|
|
|
tips_show_documentation)
|
|
|
case $LANGUAGE in
|
|
|
zh_CN)
|
|
|
echo "完整的环境变量在'.env'中可以在文档中找到:"
|
|
|
;;
|
|
|
*)
|
|
|
echo "Full environment variables in the '.env' can be found at the documentation on "
|
|
|
;;
|
|
|
esac
|
|
|
;;
|
|
|
tips_show_documentation_url)
|
|
|
case $LANGUAGE in
|
|
|
zh_CN)
|
|
|
echo "https://lobehub.com/zh/docs/self-hosting/environment-variables"
|
|
|
;;
|
|
|
*)
|
|
|
echo "https://lobehub.com/docs/self-hosting/environment-variables"
|
|
|
;;
|
|
|
esac
|
|
|
;;
|
|
|
tips_warning)
|
|
|
case $LANGUAGE in
|
|
|
zh_CN)
|
|
|
echo "警告:不要在生产环境中使用此演示应用程序!!!"
|
|
|
;;
|
|
|
*)
|
|
|
echo "Warning: do not use this demo application in production!!!"
|
|
|
;;
|
|
|
esac
|
|
|
;;
|
|
|
esac
|
|
|
}
|
|
|
|
|
|
# Function to download files
|
|
|
download_file() {
|
|
|
local file_url="$1"
|
|
|
local local_file="$2"
|
|
|
|
|
|
if [ "$FORCE_DOWNLOAD" = false ] && [ -e "$local_file" ]; then
|
|
|
echo "$local_file" $(show_message "downloaded")
|
|
|
return 0
|
|
|
fi
|
|
|
|
|
|
wget -q --show-progress "$file_url" -O "$local_file"
|
|
|
}
|
|
|
|
|
|
extract_file() {
|
|
|
local file_name=$1
|
|
|
local target_dir=$2
|
|
|
|
|
|
if [ -e "$file_name" ]; then
|
|
|
tar -zxvf "$file_name" -C "$target_dir" > /dev/null 2>&1
|
|
|
if [ $? -eq 0 ]; then
|
|
|
echo "$file_name" $(show_message "extracted_success") "$target_dir"
|
|
|
else
|
|
|
echo "$file_name" $(show_message "extracted_failed")
|
|
|
exit 1
|
|
|
fi
|
|
|
else
|
|
|
echo "$file_name" $(show_message "file_not_exists")
|
|
|
exit 1
|
|
|
fi
|
|
|
}
|
|
|
|
|
|
# Define colors
|
|
|
declare -A colors
|
|
|
colors=(
|
|
|
[black]="\e[30m"
|
|
|
[red]="\e[31m"
|
|
|
[green]="\e[32m"
|
|
|
[yellow]="\e[33m"
|
|
|
[blue]="\e[34m"
|
|
|
[magenta]="\e[35m"
|
|
|
[cyan]="\e[36m"
|
|
|
[white]="\e[37m"
|
|
|
[reset]="\e[0m"
|
|
|
)
|
|
|
|
|
|
print_centered() {
|
|
|
local text="$1" # Get input texts
|
|
|
local color="${2:-reset}" # Get color, default to reset
|
|
|
local term_width=$(tput cols) # Get terminal width
|
|
|
local text_length=${#text} # Get text length
|
|
|
local padding=$(( (term_width - text_length) / 2 )) # Get padding
|
|
|
# Check if the color is valid
|
|
|
if [[ -z "${colors[$color]}" ]]; then
|
|
|
echo "Invalid color specified. Available colors: ${!colors[@]}"
|
|
|
return 1
|
|
|
fi
|
|
|
# Print the text with padding
|
|
|
printf "%*s${colors[$color]}%s${colors[reset]}\n" $padding "" "$text"
|
|
|
}
|
|
|
|
|
|
# Download files asynchronously
|
|
|
download_file "$SOURCE_URL/${FILES[0]}" "docker-compose.yml"
|
|
|
download_file "$SOURCE_URL/${FILES[1]}" ".env"
|
|
|
download_file "$SOURCE_URL/${FILES[2]}" "init_data.json.tar.gz"
|
|
|
download_file "$SOURCE_URL/${FILES[3]}" "s3_data.tar.gz"
|
|
|
|
|
|
# Extract .tar.gz file without output
|
|
|
extract_file "s3_data.tar.gz" "."
|
|
|
extract_file "init_data.json.tar.gz" "."
|
|
|
|
|
|
# Display final message
|
|
|
printf "\n%s\n\n" "$(show_message "tips_run_command")"
|
|
|
print_centered "docker compose up -d" "green"
|
|
|
printf "\n%s" "$(show_message "tips_show_documentation")"
|
|
|
printf "%s\n" $(show_message "tips_show_documentation_url")
|
|
|
printf "\n\e[33m%s\e[0m\n" "$(show_message "tips_warning")" |