This commit is contained in:
Your Name 2024-05-18 19:59:53 +08:00
parent 0f81b585f1
commit 6e636b6b74

127
deploy.sh
View File

@ -1,5 +1,4 @@
#!/bin/bash #!/bin/bash
CONTAINER_NAME="myztplanet" CONTAINER_NAME="myztplanet"
ZEROTIER_PATH="$(pwd)/data/zerotier" ZEROTIER_PATH="$(pwd)/data/zerotier"
CONFIG_PATH="${ZEROTIER_PATH}/config" CONFIG_PATH="${ZEROTIER_PATH}/config"
@ -94,6 +93,16 @@ configure_ip() {
install() { install() {
kernel_check kernel_check
# 如果容器已经存在,检查是否有新版本
docker inspect ${CONTAINER_NAME} >/dev/null 2>&1 && {
echo "容器${CONTAINER_NAME}已经存在"
read -p "是否更新版本?(y/n) " update_version
if [[ "$update_version" =~ ^[Yy]$ ]]; then
upgrade
exit 0
fi
}
echo "开始安装如果你已经安装了将会删除旧的数据10秒后开始安装..." echo "开始安装如果你已经安装了将会删除旧的数据10秒后开始安装..."
sleep 10 sleep 10
@ -165,22 +174,110 @@ install() {
echo "---------------------------" echo "---------------------------"
} }
# 查看信息 install_from_config() {
info() { # 判断CONFIG_PATH是否存在且不为空
docker inspect ${CONTAINER_NAME} >/dev/null 2>&1 || { echo "容器${CONTAINER_NAME}不存在,请先安装"; exit 1; } if [ ! -d "${CONFIG_PATH}" ] || [ ! "$(ls -A ${CONFIG_PATH})" ]; then
echo "配置文件目录不存在或为空,请先上传配置文件"
exit 1
fi
extract_config() { extract_config() {
local config_name=$1 local config_name=$1
docker exec -it ${CONTAINER_NAME} sh -c "cat /app/config/${config_name}" | tr -d '\r' cat ${CONFIG_PATH}/${config_name} | tr -d '\r'
} }
# 从data/zerotier/config里面取
ipv4=$(extract_config "ip_addr4") ipv4=$(extract_config "ip_addr4")
ipv6=$(extract_config "ip_addr6") ipv6=$(extract_config "ip_addr6")
API_PORT=$(extract_config "ztncui.port") API_PORT=$(extract_config "ztncui.port")
FILE_PORT=$(extract_config "file_server.port") FILE_PORT=$(extract_config "file_server.port")
ZT_PORT=$(extract_config "zerotier-one.port") ZT_PORT=$(extract_config "zerotier-one.port")
KEY=$(extract_config "file_server.key") KEY=$(extract_config "file_server.key")
MOON_NAME=$(docker exec -it ${CONTAINER_NAME} sh -c "ls /app/dist | grep moon" | tr -d '\r') MOON_NAME=$(ls ${DIST_PATH}/ | grep moon | tr -d '\r')
echo "---------------------------"
echo "ipv4:${ipv4}"
echo "ipv6:${ipv6}"
echo "API_PORT:${API_PORT}"
echo "FILE_PORT:${FILE_PORT}"
echo "ZT_PORT:${ZT_PORT}"
echo "KEY:${KEY}"
echo "MOON_NAME:${MOON_NAME}"
echo "---------------------------"
docker run -d \
--name ${CONTAINER_NAME} \
-p ${ZT_PORT}:${ZT_PORT} \
-p ${ZT_PORT}:${ZT_PORT}/udp \
-p ${API_PORT}:${API_PORT} \
-p ${FILE_PORT}:${FILE_PORT} \
-e IP_ADDR4=${ipv4} \
-e IP_ADDR6=${ipv6} \
-e ZT_PORT=${ZT_PORT} \
-e API_PORT=${API_PORT} \
-e FILE_SERVER_PORT=${FILE_PORT} \
-v ${DIST_PATH}:/app/dist \
-v ${ZTNCUI_PATH}:/app/ztncui \
-v ${ZEROTIER_PATH}/one:/var/lib/zerotier-one \
-v ${CONFIG_PATH}:/app/config \
--restart unless-stopped \
${DOCKER_IMAGE}
}
upgrade() {
#如果容器不存在,报错
docker inspect ${CONTAINER_NAME} >/dev/null 2>&1 || {
echo "容器${CONTAINER_NAME}不存在,请先安装"
exit 1
}
# 从dockerhub pull最新的镜像,比较镜像id,判断镜像是否有新版本
docker pull ${DOCKER_IMAGE}
new_image_id=$(docker inspect ${DOCKER_IMAGE} --format='{{.Id}}')
old_image_id=$(docker inspect ${CONTAINER_NAME} --format='{{.Image}}')
if [ "$new_image_id" == "$old_image_id" ]; then
echo -e "\033[32m当前版本已经是最新版本\033[0m"
exit 0
else
echo "发现新版本,开始升级...new_image_id:${new_image_id},old_image_id:${old_image_id}"
# 提示数据备份
echo "更新可能存在风险请手动备份data目录中的数据,谨慎操作"
read -p "是否继续升级?(y/n) " continue_upgrade
if [[ ! "$continue_upgrade" =~ ^[Yy]$ ]]; then
echo "已取消升级"
exit 0
fi
fi
echo "开始升级将会删除旧的容器10秒后开始升级..."
sleep 10
docker rm -f ${CONTAINER_NAME} || true
install_from_config
}
# 查看信息
info() {
docker inspect ${CONTAINER_NAME} >/dev/null 2>&1 || {
echo "容器${CONTAINER_NAME}不存在,请先安装"
exit 1
}
extract_config() {
local config_name=$1
cat ${CONFIG_PATH}/${config_name} | tr -d '\r'
# docker exec -it ${CONTAINER_NAME} sh -c "cat /app/config/${config_name}" | tr -d '\r'
}
# 从data/zerotier/config里面取
ipv4=$(extract_config "ip_addr4")
ipv6=$(extract_config "ip_addr6")
API_PORT=$(extract_config "ztncui.port")
FILE_PORT=$(extract_config "file_server.port")
ZT_PORT=$(extract_config "zerotier-one.port")
KEY=$(extract_config "file_server.key")
MOON_NAME=$(ls ${DIST_PATH}/ | grep moon | tr -d '\r')
echo "---------------------------" echo "---------------------------"
echo "以下端口的tcp和udp协议请放行${ZT_PORT}${API_PORT}${FILE_PORT}" echo "以下端口的tcp和udp协议请放行${ZT_PORT}${API_PORT}${FILE_PORT}"
@ -236,21 +333,21 @@ menu() {
echo "欢迎使用zerotier-planet脚本请选择需要执行的操作" echo "欢迎使用zerotier-planet脚本请选择需要执行的操作"
echo "1. 安装" echo "1. 安装"
echo "2. 卸载" echo "2. 卸载"
# echo "3. 更新" echo "3. 更新"
echo "4. 查看信息" echo "4. 查看信息"
echo "5. 重置密码" echo "5. 重置密码"
echo "6. CentOS内核升级" echo "6. CentOS内核升级"
echo "0. 退出" echo "0. 退出"
read -p "请输入数字:" num read -p "请输入数字:" num
case "$num" in case "$num" in
1) install ;; 1) install ;;
2) uninstall ;; 2) uninstall ;;
# 3) update ;; 3) upgrade ;;
4) info ;; 4) info ;;
5) resetpwd ;; 5) resetpwd ;;
6) update_centos_kernel ;; 6) update_centos_kernel ;;
0) exit ;; 0) exit ;;
*) echo "请输入正确数字 [0-6]" ;; *) echo "请输入正确数字 [0-6]" ;;
esac esac
} }