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