Titan-Network/duokai.sh
2024-08-07 15:23:56 +00:00

140 lines
4.6 KiB
Bash
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.

#!/bin/bash
# 检查是否以root用户运行脚本
if [ "$(id -u)" != "0" ]; then
echo "此脚本需要以root用户权限运行。"
echo "请尝试使用 'sudo -i' 命令切换到root用户然后再次运行此脚本。"
exit 1
fi
function install_node() {
# 读取加载身份码信息
read -p "输入你的身份码: " id
# 让用户输入想要创建的容器数量
read -p "请输入你想要创建的节点数量单IP限制最多5个节点: " container_count
# 让用户输入起始 RPC 端口号
read -p "请输入你想要设置的起始 RPC端口 端口号请自行设定开启5个节点端口将会依次数字顺延建议输入30000即可: " start_rpc_port
# 让用户输入想要分配的空间大小
read -p "请输入你想要分配每个节点的存储空间大小GB单个上限2T, 网页生效较慢等待20分钟后网页查询即可: " storage_gb
# 让用户输入存储路径(可选)
read -p "请输入节点存储数据的宿主机路径(直接回车将使用默认路径 titan_storage_$i,依次数字顺延): " custom_storage_path
apt update
# 检查 Docker 是否已安装
if ! command -v docker &> /dev/null
then
echo "未检测到 Docker正在安装..."
apt-get install ca-certificates curl gnupg lsb-release -y
# 安装 Docker 最新版本
apt-get install docker.io -y
else
echo "Docker 已安装。"
fi
# 拉取Docker镜像
docker pull nezha123/titan-edge:1.7
# 创建用户指定数量的容器
for ((i=1; i<=container_count; i++))
do
current_rpc_port=$((start_rpc_port + i - 1))
# 判断用户是否输入了自定义存储路径
if [ -z "$custom_storage_path" ]; then
# 用户未输入,使用默认路径
storage_path="$PWD/titan_storage_$i"
else
# 用户输入了自定义路径,使用用户提供的路径
storage_path="$custom_storage_path"
fi
# 确保存储路径存在
mkdir -p "$storage_path"
# 运行容器并设置重启策略为always
container_id=$(docker run -d --restart always -v "$storage_path:/root/.titanedge/storage" --name "titan$i" --net=host nezha123/titan-edge:1.7)
echo "节点 titan$i 已经启动 容器ID $container_id"
sleep 30
# 修改宿主机上的config.toml文件以设置StorageGB值和端口
docker exec $container_id bash -c "\
sed -i 's/^[[:space:]]*#StorageGB = .*/StorageGB = $storage_gb/' /root/.titanedge/config.toml && \
sed -i 's/^[[:space:]]*#ListenAddress = \"0.0.0.0:1234\"/ListenAddress = \"0.0.0.0:$current_rpc_port\"/' /root/.titanedge/config.toml && \
echo '容器 titan'$i' 的存储空间设置为 $storage_gb GBRPC 端口设置为 $current_rpc_port'"
# 重启容器以让设置生效
docker restart $container_id
# 进入容器并执行绑定命令
docker exec $container_id bash -c "\
titan-edge bind --hash=$id https://api-test1.container1.titannet.io/api/v2/device/binding"
echo "节点 titan$i 已绑定."
done
echo "==============================所有节点均已设置并启动==================================="
}
# 卸载节点功能
function uninstall_node() {
echo "你确定要卸载Titan 节点程序吗?这将会删除所有相关的数据。[Y/N]"
read -r -p "请确认: " response
case "$response" in
[yY][eE][sS]|[yY])
echo "开始卸载节点程序..."
for i in {1..5}; do
sudo docker stop "titan$i" && sudo docker rm "titan$i"
done
for i in {1..5}; do
rmName="storage_titan_$i"
rm -rf "$rmName"
done
echo "节点程序卸载完成。"
;;
*)
echo "取消卸载操作。"
;;
esac
}
# 主菜单
function main_menu() {
while true; do
clear
echo "脚本以及教程由推特用户大赌哥 @y95277777 编写,免费开源,请勿相信收费"
echo "================================================================"
echo "节点社区 Telegram 群组:https://t.me/niuwuriji"
echo "节点社区 Telegram 频道:https://t.me/niuwuriji"
echo "节点社区 Discord 社群:https://discord.gg/GbMV5EcNWF"
echo "退出脚本请按键盘ctrl c退出即可"
echo "请选择要执行的操作:"
echo "1. 安装节点"
echo "2. 卸载节点"
read -p "请输入选项1-2: " OPTION
case $OPTION in
1) install_node ;;
2) uninstall_node ;;
*) echo "无效选项。" ;;
esac
echo "按任意键返回主菜单..."
read -n 1
done
}
# 显示主菜单
main_menu