Skip to content

Commit 51d8695

Browse files
committed
feat: docker installer script
1 parent 5e0d519 commit 51d8695

File tree

1 file changed

+163
-0
lines changed

1 file changed

+163
-0
lines changed

script/install-llbot-docker.sh

Lines changed: 163 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,163 @@
1+
#!/bin/bash
2+
3+
PASSWORD=""
4+
while [ -z "$PASSWORD" ]; do
5+
read -p "默认密码(必填,用于 WEBUI 和协议 token,仅支持英文和数字): " PASSWORD
6+
done
7+
8+
ENABLE_WEBUI="true"
9+
WEBUI_PORT="3080"
10+
SERVICE_PORTS["$WEBUI_PORT"]=1
11+
ENABLE_HEADLESS="false"
12+
13+
AUTO_LOGIN_QQ=""
14+
15+
declare -A SERVICE_PORTS
16+
17+
# 交互式配置
18+
while :; do
19+
clear
20+
echo "------------------------"
21+
echo "请选择服务设置:"
22+
echo "1) 设置 WebUI 配置页端口,默认 3080"
23+
echo "2) 设置自动登录 QQ 号"
24+
echo "3) 启用无头模式(无头模式省内存,有头模式较稳定)"
25+
echo "4) 添加映射端口"
26+
echo "0) 完成配置"
27+
printf "输入选项: "
28+
read choice # 改用不带参数的 read 兼容dash
29+
30+
case $choice in
31+
0)
32+
break ;;
33+
1)
34+
while true; do
35+
read -p "WebUI 端口: " port
36+
[[ "$port" =~ ^[0-9]+$ ]] || { echo "错误:端口必须是数字!"; continue; }
37+
WEBUI_PORT=${port}
38+
break
39+
done
40+
SERVICE_PORTS["$WEBUI_PORT"]=1
41+
;;
42+
2)
43+
read -p "自动登录 QQ 号(留空则不自动登录): " AUTO_LOGIN_QQ
44+
;;
45+
3)
46+
ENABLE_HEADLESS="true"
47+
;;
48+
4)
49+
while true; do
50+
read -p "端口号: " port
51+
[[ "$port" =~ ^[0-9]+$ ]] || { echo "错误:端口必须是数字!"; continue; }
52+
SERVICE_PORTS["$port"]=1
53+
break
54+
done
55+
;;
56+
*)
57+
echo "无效选项"
58+
;;
59+
esac
60+
done
61+
62+
docker_mirror=""
63+
PMHQ_TAG="latest"
64+
LLBOT_TAG="latest"
65+
66+
read -p "是否使用docker镜像源(y/n): " use_docker_mirror
67+
68+
if [[ "$use_docker_mirror" =~ ^[yY]$ ]]; then
69+
docker_mirror="docker.1ms.run/"
70+
echo "正在获取最新版本信息..."
71+
72+
# 获取PMHQ最新标签
73+
PMHQ_RELEASE=$(curl -s -L "https://gh-proxy.com/https://api.github.com/repos/linyuchen/PMHQ/releases/latest")
74+
if [ $? -eq 0 ]; then
75+
PMHQ_TAG=$(echo "$PMHQ_RELEASE" | grep -o '"tag_name": "[^"]*' | cut -d'"' -f4 | sed 's/^v//')
76+
[ -z "$PMHQ_TAG" ] && PMHQ_TAG="latest"
77+
echo "PMHQ 最新版本: $PMHQ_TAG"
78+
else
79+
echo "警告: 无法获取PMHQ最新版本,使用latest"
80+
fi
81+
82+
# 获取LLBot最新标签
83+
LLBOT_RELEASE=$(curl -s -L "https://gh-proxy.com/https://api.github.com/repos/LLOneBot/LuckyLilliaBot/releases/latest")
84+
if [ $? -eq 0 ]; then
85+
LLBOT_TAG=$(echo "$LLBOT_RELEASE" | grep -o '"tag_name": "[^"]*' | cut -d'"' -f4 | sed 's/^v//')
86+
# 如果获取到的 TAG 为空,则使用 latest
87+
[ -z "$LLBOT_TAG" ] && LLBOT_TAG="latest"
88+
echo "LLBot 最新版本: $LLBOT_TAG"
89+
else
90+
echo "警告: 无法获取LLBot最新版本,使用latest"
91+
fi
92+
fi
93+
# 生成docker-compose.yml(使用双引号包裹并保留转义)
94+
cat << EOF > docker-compose.yml
95+
version: '3.8'
96+
97+
services:
98+
pmhq:
99+
image: ${docker_mirror}linyuchen/pmhq:${PMHQ_TAG}
100+
container_name: pmhq
101+
privileged: true
102+
environment:
103+
- ENABLE_HEADLESS=${ENABLE_HEADLESS}
104+
- AUTO_LOGIN_QQ=${AUTO_LOGIN_QQ}
105+
networks:
106+
- app_network
107+
volumes:
108+
- qq_volume:/root/.config/QQ
109+
- llbot_data:/app/llbot/data
110+
111+
llbot:
112+
image: ${docker_mirror}linyuchen/llbot:${LLBOT_TAG}
113+
$([ ${#SERVICE_PORTS[@]} -gt 0 ] && echo " ports:" && for port in "${!SERVICE_PORTS[@]}"; do echo " - \"${port}:${port}\""; done)
114+
115+
extra_hosts:
116+
- "host.docker.internal:host-gateway"
117+
environment:
118+
- ENABLE_SATORI=${ENABLE_SATORI}
119+
- SATORI_PORT=${SATORI_PORT}
120+
- SATORI_TOKEN=${SATORI_TOKEN}
121+
- ENABLE_WEBUI=${ENABLE_WEBUI}
122+
- WEBUI_PORT=${WEBUI_PORT}
123+
- WEBUI_TOKEN=${PASSWORD}
124+
125+
networks:
126+
- app_network
127+
volumes:
128+
- qq_volume:/root/.config/QQ
129+
- llbot_data:/app/llbot/data
130+
depends_on:
131+
- pmhq
132+
133+
volumes:
134+
qq_volume:
135+
llbot_data:
136+
137+
networks:
138+
app_network:
139+
driver: bridge
140+
EOF
141+
142+
printLogin(){
143+
if [ "$ENABLE_WEBUI" == "true" ]; then
144+
echo "浏览器打开 http://localhost:${WEBUI_PORT} WebUI 页面进行登录"
145+
else
146+
echo "进入容器日志扫码进行登录"
147+
fi
148+
}
149+
150+
# 检查root权限
151+
if [ "$(id -u)" -ne 0 ]; then
152+
echo "没有 root 权限,请手动运行 sudo docker compose up -d"
153+
printLogin
154+
exit 1
155+
fi
156+
if ! command -v docker &> /dev/null; then
157+
echo "没有安装 Docker!安装后运行 sudo docker compose up -d"
158+
printLogin
159+
exit 1
160+
fi
161+
docker compose up -d
162+
163+
printLogin

0 commit comments

Comments
 (0)