Files
js_tool_clone/resource/install_scripts/docker_install_jd.sh
root e9d164c703 .
2021-07-05 01:09:48 -04:00

259 lines
6.4 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env bash
#
# 以 Docker 容器的方式一键安装 jd-base。
#
clear
DockerImage="lantianxiang1/js_tool:A1"
ShellName=$0
ShellDir=$(cd "$(dirname "$0")";pwd)
ContainerName=""
PanelPort=""
WorkDir="${ShellDir}/jd-docker-workdir"
JdDir=""
ConfigDir=""
LogDir=""
ScriptsDir=""
GetImageType="Online"
HasImage=false
NewImage=true
DelContainer=false
NeedDirConfig=""
NeedDirLog=""
NeedDirScripts=""
log() {
echo -e "\e[32m$1 \e[0m"
}
inp() {
echo -e "\e[33m$1 \e[0m"
}
warn() {
echo -e "\e[31m$1 \e[0m"
}
# 检查 Docker 环境
Install_Docker() {
if [ -x "$(command -v docker)" ]; then
log "Docker 已安装!"
else
warn "请自行安装好 Docker "
exit 1
fi
}
Install_Docker
warn "\n注意如果你什么都不清楚建议所有选项都直接回车使用默认选择\n"
#
# 收集配置信息
#
# 选择镜像获取方式
Choose_GetImageType() {
inp "\n选择镜像获取方式\n1) 在线获取[默认]\n2 本地生成) "
echo -n -e "\e[33m输入您的选择->\e[0m"
read update
if [ "$update" = "2" ]; then
GetImageType="Local"
fi
}
# 检测镜像是否存在
Check_Image() {
if [ ! -z "$(docker images -q $DockerImage 2> /dev/null)" ]; then
HasImage=true
inp "检测到先前已经存在的镜像,是否创建新的镜像:\n1) 是[默认]\n2) 不需要"
echo -n -e "\e[33m输入您的选择->\e[0m"
read update
if [ "$update" = "2" ]; then
NewImage=false
else
Choose_GetImageType
fi
else
Choose_GetImageType
fi
}
Check_Image
# 检测容器是否存在
Check_ContainerName() {
if [ ! -z "$(docker ps -a --format "{{.Names}}" | grep -w $ContainerName 2> /dev/null)" ]; then
inp "\n检测到先前已经存在的容器是否删除先前的容器\n1) 是[默认]\n2) 不要"
echo -n -e "\e[33m输入您的选择->\e[0m"
read update
if [ "$update" = "2" ]; then
log "选择了不删除先前的容器,需要重新输入容器名称"
Input_ContainerName
else
DelContainer=true
fi
fi
}
# 输入容器名称
Input_ContainerName() {
echo -n -e "\n\e[33m请输入要创建的Docker容器名称[默认为jd]->\e[0m"
read container_name
if [ -z "$container_name" ]; then
ContainerName="jd"
else
ContainerName=$container_name
fi
Check_ContainerName
}
Input_ContainerName
# 输入端口号
Input_PanelPort() {
echo -n -e "\n\e[33m请输入控制面板端口号[默认为5678]->\e[0m"
read panel_port
if [ -z "$panel_port" ]; then
PanelPort="5678"
else
PanelPort=$panel_port
fi
inp "如发现端口冲突,请自行检查端口占用情况!"
}
Input_PanelPort
# 输入端口号
Input_NotworkType() {
inp "\ndocker网络模式\n1) brindge[默认]\n2) host"
echo -n -e "\e[33m输入您的选择->\e[0m"
read NotworkType
if [ "$NotworkType" = "2" ]; then
NotworkType="host"
else
NotworkType="bridge"
fi
}
Input_NotworkType
# 配置文件目录
Need_ConfigDir() {
inp "\n是否需要映射配置文件目录\n1) 是[默认]\n2) 否"
echo -n -e "\e[33m输入您的选择->\e[0m"
read need_config_dir
if [ "$need_config_dir" = "2" ]; then
NeedDirConfig=''
else
NeedDirConfig="-v $ConfigDir:/root/jd/config"
echo -e "\n\e[33m如果有用于存放配置文件的远程 Git 仓库,请输入地址,否则直接回车(看不懂也回车):\e[0m"
read remote_config
if [ -n "$remote_config" ]; then
git clone $remote_config ${JdDir}/config
else
mkdir -p $ConfigDir
fi
fi
}
Need_LogDir() {
inp "\n是否需要映射日志文件目录\n1) 是[默认]\n2) 否"
echo -n -e "\e[33m输入您的选择->\e[0m"
read need_log_dir
if [ "$need_log_dir" = "2" ]; then
NeedDirLog=''
else
NeedDirLog="-v $LogDir:/root/jd/log"
mkdir -p $LogDir
fi
}
Need_ScriptsDir() {
inp "\n是否需要映射js脚本目录\n1) 是\n2) 否[默认]"
echo -n -e "\e[33m输入您的选择->\e[0m"
read need_scripts_dir
if [ "$need_scripts_dir" = "1" ]; then
NeedDirScripts="-v $ScriptsDir:/root/jd/scripts"
mkdir -p $ScriptsDir
fi
}
Need_Dir() {
inp "\n是否需要映射文件目录\n1) 是[默认]\n2) 否"
echo -n -e "\e[33m输入您的选择->\e[0m"
read need_dir
if [ "$need_dir" = "2" ]; then
log "选择了不映射文件目录"
else
echo -e "\n\e[33m请输入配置文件保存的绝对路径,直接回车为 $ShellDir/jd-docker :\e[0m"
read jd_dir
if [ -z "$jd_dir" ]; then
JdDir=$ShellDir/jd-docker
else
JdDir=$jd_dir
fi
ConfigDir=$JdDir/config
LogDir=$JdDir/log
ScriptsDir=$JdDir/scripts
Need_ConfigDir
Need_LogDir
Need_ScriptsDir
fi
}
Need_Dir
#
# 配置信息收集完成,开始安装
#
if [ $NewImage = true ]; then
log "\n正在获取新镜像..."
if [ $HasImage = true ]; then
docker stop jd
docker rm jd
docker rmi $(docker images lantianxiang1/js_tool -q) -f
fi
if [ $GetImageType = "Local" ]; then
rm -rf $WorkDir
mkdir -p $WorkDir
wget -q https://gitee.com/highdimen/js_tool/raw/A1/docker/docker/Dockerfile -O $WorkDir/Dockerfile
sed -i 's,github.com,github.com.cnpmjs.org,g' $WorkDir/Dockerfile
sed -i 's,npm install,npm install --registry=https://registry.npm.taobao.org,g' $WorkDir/Dockerfile
docker build -t $DockerImage $WorkDir > $ShellDir/build_jd_image.log
rm -fr $WorkDir
else
docker pull $DockerImage
fi
fi
if [ $DelContainer = true ]; then
log "\n2.2.删除先前的容器"
docker stop $ContainerName > /dev/null
docker rm $ContainerName > /dev/null
fi
clear
log "\n创建容器并运行"
docker run -dit \
$NeedDirConfig \
$NeedDirLog \
$NeedDirScripts \
-p $PanelPort:5678 \
--name $ContainerName \
--hostname jd \
--network $NotworkType \
--restart always \
$DockerImage
log "\n下面列出所有容器"
docker ps
log "\n安装已经完成。\n请访问 http://<ip>:${PanelPort} 进行配置\n初始用户名admin初始密码adminadmin"
rm -f $ShellDir/$ShellName
echo "进入容器命令为########docker exec -it jd /bin/bash"