install_script_standalone.sh 42 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286
  1. #!/usr/bin/env bash
  2. PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
  3. export PATH
  4. # System Required: CentOS 7+/Ubuntu 18+/Debian 10+
  5. # Version: v2.0.0
  6. # Description: One click Install Trojan Panel standalone server
  7. # Author: jonssonyan <https://jonssonyan.com>
  8. # Github: https://github.com/trojanpanel/install-script
  9. init_var() {
  10. ECHO_TYPE="echo -e"
  11. package_manager=""
  12. release=""
  13. get_arch=""
  14. can_google=0
  15. # Docker
  16. DOCKER_MIRROR='"https://registry.docker-cn.com","https://hub-mirror.c.163.com","https://docker.mirrors.ustc.edu.cn"'
  17. # 项目目录
  18. TP_DATA="/tpdata/"
  19. STATIC_HTML="https://github.com/trojanpanel/install-script/releases/download/v1.0.0/html.tar.gz"
  20. # Caddy
  21. CADDY_DATA="/tpdata/caddy/"
  22. CADDY_Config="/tpdata/caddy/config.json"
  23. CADDY_SRV="/tpdata/caddy/srv/"
  24. CADDY_CERT="/tpdata/caddy/cert/"
  25. CADDY_LOG="/tpdata/caddy/log/"
  26. DOMAIN_FILE="/tpdata/caddy/domain.lock"
  27. CADDY_CERT_DIR="/tpdata/caddy/cert/certificates/acme-v02.api.letsencrypt.org-directory/"
  28. domain=""
  29. caddy_remote_port=8863
  30. your_email=""
  31. ssl_option=1
  32. ssl_module_type=1
  33. ssl_module="acme"
  34. crt_path=""
  35. key_path=""
  36. # trojanGFW
  37. TROJANGFW_DATA="/tpdata/trojanGFW/"
  38. TROJANGFW_STANDALONE_CONFIG="/tpdata/trojanGFW/standalone_config.json"
  39. trojanGFW_port=443
  40. # trojanGO
  41. TROJANGO_DATA="/tpdata/trojanGO/"
  42. TROJANGO_STANDALONE_CONFIG="/tpdata/trojanGO/standalone_config.json"
  43. trojanGO_port=443
  44. trojanGO_websocket_enable=false
  45. trojanGO_websocket_path="trojan-panel-websocket-path"
  46. trojanGO_shadowsocks_enable=false
  47. trojanGO_shadowsocks_method="AES-128-GCM"
  48. trojanGO_shadowsocks_password=""
  49. trojanGO_mux_enable=true
  50. # trojan
  51. trojan_pas=""
  52. remote_addr="127.0.0.1"
  53. # hysteria
  54. HYSTERIA_DATA="/tpdata/hysteria/"
  55. HYSTERIA_STANDALONE_CONFIG="/tpdata/hysteria/standalone_config.json"
  56. hysteria_port=443
  57. hysteria_password=""
  58. hysteria_protocol="udp"
  59. hysteria_up_mbps=100
  60. hysteria_down_mbps=100
  61. # naiveproxy
  62. NAIVEPROXY_DATA="/tpdata/naiveproxy/"
  63. NAIVEPROXY_STANDALONE_CONFIG="/tpdata/naiveproxy/standalone_config.json"
  64. naiveproxy_port=443
  65. naiveproxy_username=""
  66. naiveproxy_pass=""
  67. }
  68. echo_content() {
  69. case $1 in
  70. "red")
  71. ${ECHO_TYPE} "\033[31m$2\033[0m"
  72. ;;
  73. "green")
  74. ${ECHO_TYPE} "\033[32m$2\033[0m"
  75. ;;
  76. "yellow")
  77. ${ECHO_TYPE} "\033[33m$2\033[0m"
  78. ;;
  79. "blue")
  80. ${ECHO_TYPE} "\033[34m$2\033[0m"
  81. ;;
  82. "purple")
  83. ${ECHO_TYPE} "\033[35m$2\033[0m"
  84. ;;
  85. "skyBlue")
  86. ${ECHO_TYPE} "\033[36m$2\033[0m"
  87. ;;
  88. "white")
  89. ${ECHO_TYPE} "\033[37m$2\033[0m"
  90. ;;
  91. esac
  92. }
  93. mkdir_tools() {
  94. # 项目目录
  95. mkdir -p ${TP_DATA}
  96. # Caddy
  97. mkdir -p ${CADDY_DATA}
  98. touch ${CADDY_Config}
  99. mkdir -p ${CADDY_SRV}
  100. mkdir -p ${CADDY_CERT}
  101. mkdir -p ${CADDY_LOG}
  102. # trojanGFW
  103. mkdir -p ${TROJANGFW_DATA}
  104. touch ${TROJANGFW_STANDALONE_CONFIG}
  105. # trojanGO
  106. mkdir -p ${TROJANGO_DATA}
  107. touch ${TROJANGO_STANDALONE_CONFIG}
  108. # hysteria
  109. mkdir -p ${HYSTERIA_DATA}
  110. touch ${HYSTERIA_STANDALONE_CONFIG}
  111. # naiveproxy
  112. mkdir -p ${NAIVEPROXY_DATA}
  113. touch ${NAIVEPROXY_STANDALONE_CONFIG}
  114. }
  115. can_connect() {
  116. ping -c2 -i0.3 -W1 "$1" &>/dev/null
  117. if [[ "$?" == "0" ]]; then
  118. return 0
  119. else
  120. return 1
  121. fi
  122. }
  123. check_sys() {
  124. if [[ $(command -v yum) ]]; then
  125. package_manager='yum'
  126. elif [[ $(command -v dnf) ]]; then
  127. package_manager='dnf'
  128. elif [[ $(command -v apt) ]]; then
  129. package_manager='apt'
  130. elif [[ $(command -v apt-get) ]]; then
  131. package_manager='apt-get'
  132. fi
  133. if [[ -z "${package_manager}" ]]; then
  134. echo_content red "暂不支持该系统"
  135. exit 0
  136. fi
  137. if [[ -n $(find /etc -name "redhat-release") ]] || grep </proc/version -q -i "centos"; then
  138. release="centos"
  139. elif grep </etc/issue -q -i "debian" && [[ -f "/etc/issue" ]] || grep </etc/issue -q -i "debian" && [[ -f "/proc/version" ]]; then
  140. release="debian"
  141. elif grep </etc/issue -q -i "ubuntu" && [[ -f "/etc/issue" ]] || grep </etc/issue -q -i "ubuntu" && [[ -f "/proc/version" ]]; then
  142. release="ubuntu"
  143. fi
  144. if [[ -z "${release}" ]]; then
  145. echo_content red "仅支持CentOS 7+/Ubuntu 18+/Debian 10+系统"
  146. exit 0
  147. fi
  148. if [[ $(arch) =~ ("x86_64"|"amd64"|"arm64"|"aarch64"|"arm"|"s390x") ]]; then
  149. get_arch=$(arch)
  150. fi
  151. if [[ -z "${get_arch}" ]]; then
  152. echo_content red "仅支持amd64/arm64/arm/s390x处理器架构"
  153. exit 0
  154. fi
  155. }
  156. depend_install() {
  157. if [[ "${package_manager}" != 'yum' && "${package_manager}" != 'dnf' ]]; then
  158. ${package_manager} update -y
  159. fi
  160. ${package_manager} install -y \
  161. curl \
  162. wget \
  163. tar \
  164. lsof \
  165. systemd
  166. }
  167. # 安装Docker
  168. install_docker() {
  169. if [[ ! $(docker -v 2>/dev/null) ]]; then
  170. echo_content green "---> 安装Docker"
  171. # 关闭防火墙
  172. if [[ "$(firewall-cmd --state 2>/dev/null)" == "running" ]]; then
  173. systemctl stop firewalld.service && systemctl disable firewalld.service
  174. fi
  175. # 时区
  176. timedatectl set-timezone Asia/Shanghai
  177. can_connect www.google.com
  178. [[ "$?" == "0" ]] && can_google=1
  179. if [[ ${can_google} == 0 ]]; then
  180. sh <(curl -sL https://get.docker.com) --mirror Aliyun
  181. # 设置Docker国内源
  182. mkdir -p /etc/docker &&
  183. cat >/etc/docker/daemon.json <<EOF
  184. {
  185. "registry-mirrors":[${DOCKER_MIRROR}],
  186. "log-driver":"json-file",
  187. "log-opts":{
  188. "max-size":"50m",
  189. "max-file":"3"
  190. }
  191. }
  192. EOF
  193. else
  194. sh <(curl -sL https://get.docker.com)
  195. fi
  196. systemctl enable docker &&
  197. systemctl restart docker
  198. if [[ $(docker -v 2>/dev/null) ]]; then
  199. echo_content skyBlue "---> Docker安装完成"
  200. else
  201. echo_content red "---> Docker安装失败"
  202. exit 0
  203. fi
  204. else
  205. echo_content skyBlue "---> 你已经安装了Docker"
  206. fi
  207. }
  208. # 安装Caddy TLS
  209. install_caddy_tls() {
  210. if [[ -z $(docker ps -a -q -f "name=^trojan-panel-caddy$") ]]; then
  211. echo_content green "---> 安装Caddy TLS"
  212. wget --no-check-certificate -O ${CADDY_DATA}html.tar.gz ${STATIC_HTML} &&
  213. tar -zxvf ${CADDY_DATA}html.tar.gz -C ${CADDY_SRV}
  214. read -r -p "请输入Caddy的转发端口(默认:8863): " caddy_remote_port
  215. [[ -z "${caddy_remote_port}" ]] && caddy_remote_port=8863
  216. echo_content yellow "提示:请确认域名已经解析到本机 否则可能安装失败"
  217. while read -r -p "请输入你的域名(必填): " domain; do
  218. if [[ -z "${domain}" ]]; then
  219. echo_content red "域名不能为空"
  220. else
  221. break
  222. fi
  223. done
  224. read -r -p "请输入你的邮箱(可选): " your_email
  225. while read -r -p "请选择设置证书的方式?(1/自动申请和续签证书 2/手动设置证书路径 默认:1/自动申请和续签证书): " ssl_option; do
  226. if [[ -z ${ssl_option} || ${ssl_option} == 1 ]]; then
  227. while read -r -p "请选择申请证书的方式(1/acme 2/zerossl 默认:1/acme): " ssl_module_type; do
  228. if [[ -z "${ssl_module_type}" || ${ssl_module_type} == 1 ]]; then
  229. ssl_module="acme"
  230. CADDY_CERT_DIR="/tpdata/caddy/cert/certificates/acme-v02.api.letsencrypt.org-directory/"
  231. break
  232. elif [[ ${ssl_module_type} == 2 ]]; then
  233. ssl_module="zerossl"
  234. CADDY_CERT_DIR="/tpdata/caddy/cert/certificates/acme.zerossl.com-v2-dv90/"
  235. break
  236. else
  237. echo_content red "不可以输入除1和2之外的其他字符"
  238. fi
  239. done
  240. cat >${CADDY_Config} <<EOF
  241. {
  242. "admin":{
  243. "disabled":true
  244. },
  245. "logging":{
  246. "logs":{
  247. "default":{
  248. "writer":{
  249. "output":"file",
  250. "filename":"/tpdata/caddy/log/error.log"
  251. },
  252. "level":"ERROR"
  253. }
  254. }
  255. },
  256. "storage":{
  257. "module":"file_system",
  258. "root":"${CADDY_CERT}"
  259. },
  260. "apps":{
  261. "http":{
  262. "servers":{
  263. "srv0":{
  264. "listen":[
  265. ":80"
  266. ],
  267. "routes":[
  268. {
  269. "match":[
  270. {
  271. "host":[
  272. "${domain}"
  273. ]
  274. }
  275. ],
  276. "handle":[
  277. {
  278. "handler":"static_response",
  279. "headers":{
  280. "Location":[
  281. "https://{http.request.host}:${caddy_remote_port}{http.request.uri}"
  282. ]
  283. },
  284. "status_code":301
  285. }
  286. ]
  287. }
  288. ]
  289. },
  290. "srv1":{
  291. "listen":[
  292. ":${caddy_remote_port}"
  293. ],
  294. "routes":[
  295. {
  296. "handle":[
  297. {
  298. "handler":"subroute",
  299. "routes":[
  300. {
  301. "match":[
  302. {
  303. "host":[
  304. "${domain}"
  305. ]
  306. }
  307. ],
  308. "handle":[
  309. {
  310. "handler":"file_server",
  311. "root":"${CADDY_SRV}",
  312. "index_names":[
  313. "index.html",
  314. "index.htm"
  315. ]
  316. }
  317. ],
  318. "terminal":true
  319. }
  320. ]
  321. }
  322. ]
  323. }
  324. ],
  325. "tls_connection_policies":[
  326. {
  327. "match":{
  328. "sni":[
  329. "${domain}"
  330. ]
  331. }
  332. }
  333. ],
  334. "automatic_https":{
  335. "disable":true
  336. }
  337. }
  338. }
  339. },
  340. "tls":{
  341. "certificates":{
  342. "automate":[
  343. "${domain}"
  344. ]
  345. },
  346. "automation":{
  347. "policies":[
  348. {
  349. "issuers":[
  350. {
  351. "module":"${ssl_module}",
  352. "email":"${your_email}"
  353. }
  354. ]
  355. }
  356. ]
  357. }
  358. }
  359. }
  360. }
  361. EOF
  362. break
  363. elif [[ ${ssl_option} == 2 ]]; then
  364. while read -r -p "请输入证书的.crt文件路径(必填): " crt_path; do
  365. if [[ -z "${crt_path}" ]]; then
  366. echo_content red "路径不能为空"
  367. else
  368. if [[ ! -f "${crt_path}" ]]; then
  369. echo_content red "证书的.crt文件路径不存在"
  370. else
  371. cp "${crt_path}" "${CADDY_CERT}${domain}.crt"
  372. break
  373. fi
  374. fi
  375. done
  376. while read -r -p "请输入证书的.key文件路径(必填): " key_path; do
  377. if [[ -z "${key_path}" ]]; then
  378. echo_content red "路径不能为空"
  379. else
  380. if [[ ! -f "${key_path}" ]]; then
  381. echo_content red "证书的.key文件路径不存在"
  382. else
  383. cp "${key_path}" "${CADDY_CERT}${domain}.key"
  384. break
  385. fi
  386. fi
  387. done
  388. cat >${CADDY_Config} <<EOF
  389. {
  390. "admin":{
  391. "disabled":true
  392. },
  393. "logging":{
  394. "logs":{
  395. "default":{
  396. "writer":{
  397. "output":"file",
  398. "filename":"/tpdata/caddy/log/error.log"
  399. },
  400. "level":"ERROR"
  401. }
  402. }
  403. },
  404. "storage":{
  405. "module":"file_system",
  406. "root":"${CADDY_CERT}"
  407. },
  408. "apps":{
  409. "http":{
  410. "servers":{
  411. "srv0":{
  412. "listen":[
  413. ":80"
  414. ],
  415. "routes":[
  416. {
  417. "match":[
  418. {
  419. "host":[
  420. "${domain}"
  421. ]
  422. }
  423. ],
  424. "handle":[
  425. {
  426. "handler":"static_response",
  427. "headers":{
  428. "Location":[
  429. "https://{http.request.host}:${caddy_remote_port}{http.request.uri}"
  430. ]
  431. },
  432. "status_code":301
  433. }
  434. ]
  435. }
  436. ]
  437. },
  438. "srv1":{
  439. "listen":[
  440. ":${caddy_remote_port}"
  441. ],
  442. "routes":[
  443. {
  444. "handle":[
  445. {
  446. "handler":"subroute",
  447. "routes":[
  448. {
  449. "match":[
  450. {
  451. "host":[
  452. "${domain}"
  453. ]
  454. }
  455. ],
  456. "handle":[
  457. {
  458. "handler":"file_server",
  459. "root":"${CADDY_SRV}",
  460. "index_names":[
  461. "index.html",
  462. "index.htm"
  463. ]
  464. }
  465. ],
  466. "terminal":true
  467. }
  468. ]
  469. }
  470. ]
  471. }
  472. ],
  473. "tls_connection_policies":[
  474. {
  475. "match":{
  476. "sni":[
  477. "${domain}"
  478. ]
  479. }
  480. }
  481. ],
  482. "automatic_https":{
  483. "disable":true
  484. }
  485. }
  486. }
  487. },
  488. "tls":{
  489. "certificates":{
  490. "automate":[
  491. "${domain}"
  492. ],
  493. "load_files":[
  494. {
  495. "certificate":"${CADDY_CERT_DIR}${domain}/${domain}.crt",
  496. "key":"${CADDY_CERT_DIR}${domain}/${domain}.key"
  497. }
  498. ]
  499. },
  500. "automation":{
  501. "policies":[
  502. {
  503. "issuers":[
  504. {
  505. "module":"${ssl_module}",
  506. "email":"${your_email}"
  507. }
  508. ]
  509. }
  510. ]
  511. }
  512. }
  513. }
  514. }
  515. EOF
  516. break
  517. else
  518. echo_content red "不可以输入除1和2之外的其他字符"
  519. fi
  520. done
  521. if [[ -n $(lsof -i:80,443 -t) ]]; then
  522. kill -9 "$(lsof -i:80,443 -t)"
  523. fi
  524. docker pull caddy:2.6.2 &&
  525. docker run -d --name trojan-panel-caddy --restart always \
  526. --network=host \
  527. -v "${CADDY_Config}":"${CADDY_Config}" \
  528. -v ${CADDY_CERT}:"${CADDY_CERT_DIR}${domain}/" \
  529. -v ${CADDY_SRV}:${CADDY_SRV} \
  530. -v ${CADDY_LOG}:${CADDY_LOG} \
  531. caddy:2.6.2 caddy run --config ${CADDY_Config}
  532. if [[ -n $(docker ps -q -f "name=^trojan-panel-caddy$" -f "status=running") ]]; then
  533. cat >${DOMAIN_FILE} <<EOF
  534. ${domain}
  535. EOF
  536. echo_content skyBlue "---> Caddy安装完成"
  537. else
  538. echo_content red "---> Caddy安装失败或运行异常,请尝试修复或卸载重装"
  539. exit 0
  540. fi
  541. else
  542. domain=$(cat "${DOMAIN_FILE}")
  543. echo_content skyBlue "---> 你已经安装了Caddy"
  544. fi
  545. }
  546. # TrojanGFW+Caddy+Web+TLS+Websocket
  547. install_trojan_gfw_standalone() {
  548. if [[ -z $(docker ps -a -q -f "name=^trojan-panel-trojanGFW-standalone$") ]]; then
  549. echo_content green "---> 安装TrojanGFW+Caddy+Web+TLS+Websocket"
  550. read -r -p "请输入TrojanGFW的端口(默认:443): " trojanGFW_port
  551. [[ -n ${trojanGFW_port} ]] && trojanGFW_port=443
  552. while read -r -p "请输入TrojanGFW的密码(必填): " trojan_pas; do
  553. if [[ -z "${trojan_pas}" ]]; then
  554. echo_content red "密码不能为空"
  555. else
  556. break
  557. fi
  558. done
  559. cat >${TROJANGFW_STANDALONE_CONFIG} <<EOF
  560. {
  561. "run_type": "server",
  562. "local_addr": "0.0.0.0",
  563. "local_port": ${trojanGFW_port},
  564. "remote_addr": "${remote_addr}",
  565. "remote_port": 80,
  566. "password": [
  567. "${trojan_pas}"
  568. ],
  569. "log_level": 1,
  570. "ssl": {
  571. "cert": "${CADDY_CERT}${domain}.crt",
  572. "key": "${CADDY_CERT}${domain}.key",
  573. "key_password": "",
  574. "cipher": "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384",
  575. "cipher_tls13": "TLS_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_256_GCM_SHA384",
  576. "prefer_server_cipher": true,
  577. "alpn": [
  578. "http/1.1"
  579. ],
  580. "alpn_port_override": {
  581. "h2": 81
  582. },
  583. "reuse_session": true,
  584. "session_ticket": false,
  585. "session_timeout": 600,
  586. "plain_http_response": "",
  587. "curves": "",
  588. "dhparam": ""
  589. },
  590. "tcp": {
  591. "prefer_ipv4": false,
  592. "no_delay": true,
  593. "keep_alive": true,
  594. "reuse_port": false,
  595. "fast_open": false,
  596. "fast_open_qlen": 20
  597. },
  598. "mysql": {
  599. "enabled": false,
  600. "server_addr": "127.0.0.1",
  601. "server_port": 3306,
  602. "database": "",
  603. "username": "",
  604. "password": "",
  605. "key": "",
  606. "cert": "",
  607. "ca": ""
  608. }
  609. }
  610. EOF
  611. docker pull trojangfw/trojan &&
  612. docker run -d --name trojan-panel-trojanGFW-standalone --restart always \
  613. --network=host \
  614. -v ${TROJANGFW_STANDALONE_CONFIG}:"/config/config.json" \
  615. -v ${CADDY_CERT}:${CADDY_CERT} \
  616. trojangfw/trojan
  617. if [[ -n $(docker ps -q -f "name=^trojan-panel-trojanGFW-standalone$" -f "status=running") ]]; then
  618. echo_content skyBlue "---> TrojanGFW+Caddy+Web+TLS 安装完成"
  619. echo_content red "\n=============================================================="
  620. echo_content skyBlue "TrojanGFW+Caddy+Web+TLS 安装成功"
  621. echo_content yellow "域名: ${domain}"
  622. echo_content yellow "TrojanGFW的端口: ${trojanGFW_port}"
  623. echo_content yellow "TrojanGFW的密码: ${trojan_pas}"
  624. echo_content red "\n=============================================================="
  625. else
  626. echo_content red "---> TrojanGFW+Caddy+Web+TLS 安装失败或运行异常,请尝试修复或卸载重装"
  627. exit 0
  628. fi
  629. else
  630. echo_content skyBlue "---> 你已经安装了TrojanGFW+Caddy+Web+TLS"
  631. fi
  632. }
  633. # TrojanGO+Caddy+Web+TLS+Websocket
  634. install_trojanGO_standalone() {
  635. if [[ -z $(docker ps -a -q -f "name=^trojan-panel-trojanGO-standalone$") ]]; then
  636. echo_content green "---> 安装TrojanGO+Caddy+Web+TLS+Websocket"
  637. read -r -p "请输入TrojanGO的端口(默认:443): " trojanGO_port
  638. [[ -z "${trojanGO_port}" ]] && trojanGO_port=443
  639. while read -r -p "请输入TrojanGO的密码(必填): " trojan_pas; do
  640. if [[ -z "${trojan_pas}" ]]; then
  641. echo_content red "密码不能为空"
  642. else
  643. break
  644. fi
  645. done
  646. while read -r -p "是否开启多路复用?(false/关闭 true/开启 默认:true/开启): " trojanGO_mux_enable; do
  647. if [[ -z "${trojanGO_mux_enable}" || ${trojanGO_mux_enable} == true ]]; then
  648. trojanGO_mux_enable=true
  649. break
  650. else
  651. if [[ ${trojanGO_mux_enable} != false ]]; then
  652. echo_content red "不可以输入除false和true之外的其他字符"
  653. else
  654. break
  655. fi
  656. fi
  657. done
  658. while read -r -p "是否开启Websocket?(false/关闭 true/开启 默认:false/关闭): " trojanGO_websocket_enable; do
  659. if [[ -z "${trojanGO_websocket_enable}" || ${trojanGO_websocket_enable} == false ]]; then
  660. trojanGO_websocket_enable=false
  661. break
  662. else
  663. if [[ ${trojanGO_websocket_enable} != true ]]; then
  664. echo_content red "不可以输入除false和true之外的其他字符"
  665. else
  666. read -r -p "请输入Websocket路径(默认:trojan-panel-websocket-path): " trojanGO_websocket_path
  667. [[ -z "${trojanGO_websocket_path}" ]] && trojanGO_websocket_path="trojan-panel-websocket-path"
  668. break
  669. fi
  670. fi
  671. done
  672. while read -r -p "是否启用Shadowsocks AEAD加密?(false/关闭 true/开启 默认:false/关闭): " trojanGO_shadowsocks_enable; do
  673. if [[ -z "${trojanGO_shadowsocks_enable}" || ${trojanGO_shadowsocks_enable} == false ]]; then
  674. trojanGO_shadowsocks_enable=false
  675. break
  676. else
  677. if [[ ${trojanGO_shadowsocks_enable} != true ]]; then
  678. echo_content yellow "不可以输入除false和true之外的其他字符"
  679. else
  680. echo_content skyBlue "Shadowsocks AEAD加密方式如下:"
  681. echo_content yellow "1. AES-128-GCM(默认)"
  682. echo_content yellow "2. CHACHA20-IETF-POLY1305"
  683. echo_content yellow "3. AES-256-GCM"
  684. read -r -p "请输入Shadowsocks AEAD加密方式(默认:1): " select_method_type
  685. [[ -z "${select_method_type}" ]] && select_method_type=1
  686. case ${select_method_type} in
  687. 1)
  688. trojanGO_shadowsocks_method="AES-128-GCM"
  689. ;;
  690. 2)
  691. trojanGO_shadowsocks_method="CHACHA20-IETF-POLY1305"
  692. ;;
  693. 3)
  694. trojanGO_shadowsocks_method="AES-256-GCM"
  695. ;;
  696. *)
  697. trojanGO_shadowsocks_method="AES-128-GCM"
  698. ;;
  699. esac
  700. while read -r -p "请输入Shadowsocks AEAD加密密码(必填): " trojanGO_shadowsocks_password; do
  701. if [[ -z "${trojanGO_shadowsocks_password}" ]]; then
  702. echo_content red "密码不能为空"
  703. else
  704. break
  705. fi
  706. done
  707. break
  708. fi
  709. fi
  710. done
  711. cat >${TROJANGO_STANDALONE_CONFIG} <<EOF
  712. {
  713. "run_type": "server",
  714. "local_addr": "0.0.0.0",
  715. "local_port": ${trojanGO_port},
  716. "remote_addr": "${remote_addr}",
  717. "remote_port": 80,
  718. "log_level": 1,
  719. "log_file": "",
  720. "password": [
  721. "${trojan_pas}"
  722. ],
  723. "disable_http_check": false,
  724. "udp_timeout": 60,
  725. "ssl": {
  726. "verify": true,
  727. "verify_hostname": true,
  728. "cert": "${CADDY_CERT}${domain}.crt",
  729. "key": "${CADDY_CERT}${domain}.key",
  730. "key_password": "",
  731. "cipher": "",
  732. "curves": "",
  733. "prefer_server_cipher": false,
  734. "sni": "",
  735. "alpn": [
  736. "http/1.1"
  737. ],
  738. "session_ticket": true,
  739. "reuse_session": true,
  740. "plain_http_response": "",
  741. "fallback_addr": "",
  742. "fallback_port": 80,
  743. "fingerprint": ""
  744. },
  745. "tcp": {
  746. "no_delay": true,
  747. "keep_alive": true,
  748. "prefer_ipv4": false
  749. },
  750. "mux": {
  751. "enabled": ${trojanGO_mux_enable},
  752. "concurrency": 8,
  753. "idle_timeout": 60
  754. },
  755. "websocket": {
  756. "enabled": ${trojanGO_websocket_enable},
  757. "path": "/${trojanGO_websocket_path}",
  758. "host": "${domain}"
  759. },
  760. "shadowsocks": {
  761. "enabled": ${trojanGO_shadowsocks_enable},
  762. "method": "${trojanGO_shadowsocks_method}",
  763. "password": "${trojanGO_shadowsocks_password}"
  764. },
  765. "mysql": {
  766. "enabled": false,
  767. "server_addr": "localhost",
  768. "server_port": 3306,
  769. "database": "",
  770. "username": "",
  771. "password": "",
  772. "check_rate": 60
  773. }
  774. }
  775. EOF
  776. docker pull p4gefau1t/trojan-go &&
  777. docker run -d --name trojan-panel-trojanGO-standalone --restart=always \
  778. --network=host \
  779. -v ${TROJANGO_STANDALONE_CONFIG}:"/etc/trojan-go/config.json" \
  780. -v ${CADDY_CERT}:${CADDY_CERT} \
  781. p4gefau1t/trojan-go
  782. if [[ -n $(docker ps -q -f "name=^trojan-panel-trojanGO-standalone$" -f "status=running") ]]; then
  783. echo_content skyBlue "---> TrojanGO+Caddy+Web+TLS+Websocket 安装完成"
  784. echo_content red "\n=============================================================="
  785. echo_content skyBlue "TrojanGO+Caddy+Web+TLS+Websocket 安装成功"
  786. echo_content yellow "域名: ${domain}"
  787. echo_content yellow "TrojanGO的端口: ${trojanGO_port}"
  788. echo_content yellow "TrojanGO的密码: ${trojan_pas}"
  789. echo_content yellow "TrojanGO私钥和证书目录: ${CADDY_CERT}"
  790. if [[ ${trojanGO_websocket_enable} == true ]]; then
  791. echo_content yellow "Websocket路径: ${trojanGO_websocket_path}"
  792. fi
  793. if [[ ${trojanGO_shadowsocks_enable} == true ]]; then
  794. echo_content yellow "Shadowsocks AEAD加密方式: ${trojanGO_shadowsocks_method}"
  795. echo_content yellow "Shadowsocks AEAD加密密码: ${trojanGO_shadowsocks_password}"
  796. fi
  797. echo_content red "\n=============================================================="
  798. else
  799. echo_content red "---> TrojanGO+Caddy+Web+TLS+Websocket 安装失败或运行异常,请尝试修复或卸载重装"
  800. exit 0
  801. fi
  802. else
  803. echo_content skyBlue "---> 你已经了安装了TrojanGO+Caddy+Web+TLS+Websocket"
  804. fi
  805. }
  806. # 安装Hysteria
  807. install_hysteria_standalone() {
  808. if [[ -z $(docker ps -a -q -f "name=^trojan-panel-hysteria-standalone$") ]]; then
  809. echo_content green "---> 安装Hysteria"
  810. echo_content skyBlue "Hysteria的模式如下:"
  811. echo_content yellow "1. udp(默认)"
  812. echo_content yellow "2. faketcp"
  813. read -r -p "请输入Hysteria的模式(默认:1): " selectProtocolType
  814. [[ -z "${selectProtocolType}" ]] && selectProtocolType=1
  815. case ${selectProtocolType} in
  816. 1)
  817. hysteria_protocol="udp"
  818. ;;
  819. 2)
  820. hysteria_protocol="faketcp"
  821. ;;
  822. *)
  823. hysteria_protocol="udp"
  824. ;;
  825. esac
  826. read -r -p "请输入Hysteria的端口(默认:443): " hysteria_port
  827. [[ -z ${hysteria_port} ]] && hysteria_port=443
  828. read -r -p "请输入单客户端最大上传速度/Mbps(默认:100): " hysteria_up_mbps
  829. [[ -z "${hysteria_up_mbps}" ]] && hysteria_up_mbps=100
  830. read -r -p "请输入单客户端最大下载速度/Mbps(默认:100): " hysteria_down_mbps
  831. [[ -z "${hysteria_down_mbps}" ]] && hysteria_down_mbps=100
  832. while read -r -p "请输入Hysteria的密码(必填): " hysteria_password; do
  833. if [[ -z ${hysteria_password} ]]; then
  834. echo_content red "密码不能为空"
  835. else
  836. break
  837. fi
  838. done
  839. cat >${HYSTERIA_STANDALONE_CONFIG} <<EOF
  840. {
  841. "listen": ":${hysteria_port}",
  842. "protocol": "${hysteria_protocol}",
  843. "cert": "${CADDY_CERT}${domain}.crt",
  844. "key": "${CADDY_CERT}${domain}.key",
  845. "up_mbps": ${hysteria_up_mbps},
  846. "down_mbps": ${hysteria_down_mbps},
  847. "auth_str": "${hysteria_password}"
  848. }
  849. EOF
  850. docker pull tobyxdd/hysteria &&
  851. docker run -d --name trojan-panel-hysteria-standalone --restart=always \
  852. --network=host \
  853. -v ${HYSTERIA_STANDALONE_CONFIG}:/etc/hysteria.json \
  854. -v ${CADDY_CERT}:${CADDY_CERT} \
  855. tobyxdd/hysteria -c /etc/hysteria.json server
  856. if [[ -n $(docker ps -q -f "name=^trojan-panel-hysteria-standalone$" -f "status=running") ]]; then
  857. echo_content skyBlue "---> Hysteria 安装完成"
  858. echo_content red "\n=============================================================="
  859. echo_content skyBlue "Hysteria 安装成功"
  860. echo_content yellow "域名: ${domain}"
  861. echo_content yellow "Hysteria的端口: ${hysteria_port}"
  862. echo_content yellow "Hysteria的密码: ${hysteria_password}"
  863. echo_content yellow "Hysteria私钥和证书目录: ${CADDY_CERT}"
  864. echo_content red "\n=============================================================="
  865. else
  866. echo_content red "---> Hysteria 安装失败或运行异常,请尝试修复或卸载重装"
  867. exit 0
  868. fi
  869. else
  870. echo_content skyBlue "---> 你已经安装了Hysteria"
  871. fi
  872. }
  873. # 安装NaiveProxy(Caddy+ForwardProxy)
  874. install_navieproxy_standalone() {
  875. if [[ -z $(docker ps -a -q -f "name=^trojan-panel-navieproxy-standalone$") ]]; then
  876. echo_content green "---> 安装NaiveProxy(Caddy+ForwardProxy)"
  877. read -r -p "请输入NaiveProxy的端口(默认:443): " naiveproxy_port
  878. [[ -z "${naiveproxy_port}" ]] && naiveproxy_port=443
  879. while read -r -p "请输入NaiveProxy的用户名(必填): " naiveproxy_username; do
  880. if [[ -z "${naiveproxy_username}" ]]; then
  881. echo_content red "用户名不能为空"
  882. else
  883. break
  884. fi
  885. done
  886. while read -r -p "请输入NaiveProxy的密码(必填): " naiveproxy_pass; do
  887. if [[ -z "${naiveproxy_pass}" ]]; then
  888. echo_content red "密码不能为空"
  889. else
  890. break
  891. fi
  892. done
  893. domain=$(cat "${DOMAIN_FILE}")
  894. cat >${NAIVEPROXY_STANDALONE_CONFIG} <<EOF
  895. {
  896. "admin": {
  897. "disabled": true
  898. },
  899. "logging": {
  900. "sink": {
  901. "writer": {
  902. "output": "discard"
  903. }
  904. },
  905. "logs": {
  906. "default": {
  907. "writer": {
  908. "output": "discard"
  909. }
  910. }
  911. }
  912. },
  913. "apps": {
  914. "http": {
  915. "servers": {
  916. "srv0": {
  917. "listen": [
  918. ":${naiveproxy_port}"
  919. ],
  920. "routes": [
  921. {
  922. "handle": [
  923. {
  924. "handler": "subroute",
  925. "routes": [
  926. {
  927. "handle": [
  928. {
  929. "auth_pass_deprecated": "${naiveproxy_pass}",
  930. "auth_user_deprecated": "${naiveproxy_username}",
  931. "handler": "forward_proxy",
  932. "hide_ip": true,
  933. "hide_via": true,
  934. "probe_resistance": {}
  935. }
  936. ]
  937. },
  938. {
  939. "match": [
  940. {
  941. "host": [
  942. "${domain}"
  943. ]
  944. }
  945. ],
  946. "handle": [
  947. {
  948. "handler": "file_server",
  949. "root": "/caddy-forwardproxy/dist/",
  950. "index_names": [
  951. "index.html",
  952. "index.htm"
  953. ]
  954. }
  955. ],
  956. "terminal": true
  957. }
  958. ]
  959. }
  960. ]
  961. }
  962. ],
  963. "tls_connection_policies": [
  964. {
  965. "match": {
  966. "sni": [
  967. "${domain}"
  968. ]
  969. }
  970. }
  971. ],
  972. "automatic_https": {
  973. "disable": true
  974. }
  975. }
  976. }
  977. },
  978. "tls": {
  979. "certificates": {
  980. "load_files": [
  981. {
  982. "certificate": "${CADDY_CERT}${domain}.crt",
  983. "key": "${CADDY_CERT}${domain}.crt"
  984. }
  985. ]
  986. }
  987. }
  988. }
  989. }
  990. EOF
  991. docker pull jonssonyan/caddy-forwardproxy &&
  992. docker run -d --name trojan-panel-navieproxy-standalone --restart=always \
  993. --network=host \
  994. -v ${NAIVEPROXY_STANDALONE_CONFIG}:"/caddy-forwardproxy/config/config.json" \
  995. -v ${CADDY_CERT}:${CADDY_CERT} \
  996. jonssonyan/caddy-forwardproxy
  997. if [[ -n $(docker ps -q -f "name=^trojan-panel-navieproxy-standalone$" -f "status=running") ]]; then
  998. echo_content skyBlue "---> NaiveProxy(Caddy+ForwardProxy) 安装完成"
  999. echo_content red "\n=============================================================="
  1000. echo_content skyBlue "NaiveProxy(Caddy+ForwardProxy) 安装成功"
  1001. echo_content yellow "域名: ${domain}"
  1002. echo_content yellow "NaiveProxy的端口: ${naiveproxy_port}"
  1003. echo_content yellow "NaiveProxy的用户名: ${naiveproxy_username}"
  1004. echo_content yellow "NaiveProxy的密码: ${naiveproxy_pass}"
  1005. echo_content yellow "NaiveProxy私钥和证书目录: ${CADDY_CERT}"
  1006. echo_content red "\n=============================================================="
  1007. else
  1008. echo_content red "---> NaiveProxy(Caddy+ForwardProxy) 安装失败或运行异常,请尝试修复或卸载重装"
  1009. exit 0
  1010. fi
  1011. else
  1012. echo_content skyBlue "---> 你已经了安装了NaiveProxy(Caddy+ForwardProxy)"
  1013. fi
  1014. }
  1015. # 卸载Caddy TLS
  1016. uninstall_caddy_tls() {
  1017. # 判断Caddy TLS是否安装
  1018. if [[ -n $(docker ps -a -q -f "name=^trojan-panel-caddy$") ]]; then
  1019. echo_content green "---> 卸载Caddy TLS"
  1020. docker rm -f trojan-panel-caddy &&
  1021. rm -rf ${CADDY_DATA}
  1022. echo_content skyBlue "---> Caddy TLS卸载完成"
  1023. else
  1024. echo_content red "---> 请先安装Caddy TLS"
  1025. fi
  1026. }
  1027. # TrojanGFW+Caddy+Web+TLS
  1028. uninstall_trojan_gfw_standalone() {
  1029. if [[ -n $(docker ps -a -q -f "name=^trojan-panel-trojanGFW-standalone$") ]]; then
  1030. echo_content green "---> 卸载TrojanGFW+Caddy+Web+TLS"
  1031. docker rm -f trojan-panel-trojanGFW-standalone &&
  1032. docker rmi -f trojangfw/trojan &&
  1033. rm -f ${TROJANGFW_STANDALONE_CONFIG}
  1034. echo_content skyBlue "---> TrojanGFW+Caddy+Web+TLS 卸载完成"
  1035. else
  1036. echo_content red "---> 请先安装TrojanGFW+Caddy+Web+TLS"
  1037. fi
  1038. }
  1039. # 卸载TrojanGO 单机版
  1040. uninstall_trojanGO_standalone() {
  1041. if [[ -n $(docker ps -a -q -f "name=^trojan-panel-trojanGO-standalone$") ]]; then
  1042. echo_content green "---> 卸载TrojanGO+Caddy+Web+TLS+Websocket"
  1043. docker rm -f trojan-panel-trojanGO-standalone &&
  1044. docker rmi -f p4gefau1t/trojan-go &&
  1045. rm -f ${TROJANGO_STANDALONE_CONFIG}
  1046. echo_content skyBlue "---> TrojanGO+Caddy+Web+TLS+Websocket 卸载完成"
  1047. else
  1048. echo_content red "---> 请先安装TrojanGO+Caddy+Web+TLS+Websocket"
  1049. fi
  1050. }
  1051. # 卸载Hysteria
  1052. uninstall_hysteria_standalone() {
  1053. if [[ -n $(docker ps -a -q -f "name=^trojan-panel-hysteria-standalone$") ]]; then
  1054. echo_content green "---> 卸载Hysteria"
  1055. docker rm -f trojan-panel-hysteria-standalone &&
  1056. docker rmi -f tobyxdd/hysteria &&
  1057. rm -f ${HYSTERIA_STANDALONE_CONFIG}
  1058. echo_content skyBlue "---> Hysteria 卸载完成"
  1059. else
  1060. echo_content red "---> 请先安装Hysteria"
  1061. fi
  1062. }
  1063. # 卸载NaiveProxy(Caddy+ForwardProxy)
  1064. uninstall_navieproxy_standalone() {
  1065. if [[ -n $(docker ps -a -q -f "name=^trojan-panel-navieproxy-standalone$") ]]; then
  1066. echo_content green "---> 卸载NaiveProxy(Caddy+ForwardProxy)"
  1067. docker rm -f trojan-panel-navieproxy-standalone &&
  1068. docker rmi -f jonssonyan/caddy-forwardproxy &&
  1069. rm -f ${NAIVEPROXY_STANDALONE_CONFIG}
  1070. echo_content skyBlue "---> NaiveProxy(Caddy+ForwardProxy) 卸载完成"
  1071. else
  1072. echo_content red "---> 请先安装NaiveProxy(Caddy+ForwardProxy)"
  1073. fi
  1074. }
  1075. # 卸载全部Trojan Panel相关的容器
  1076. uninstall_all() {
  1077. echo_content green "---> 卸载全部Trojan Panel相关的容器"
  1078. docker rm -f $(docker ps -a -q -f "name=^trojan-panel") &&
  1079. rm -rf ${TP_DATA}
  1080. echo_content skyBlue "---> 卸载全部Trojan Panel相关的容器完成"
  1081. }
  1082. # 故障检测
  1083. failure_testing() {
  1084. echo_content green "---> 故障检测开始"
  1085. if [[ ! $(docker -v 2>/dev/null) ]]; then
  1086. echo_content red "---> Docker运行异常"
  1087. else
  1088. if [[ -n $(docker ps -a -q -f "name=^trojan-panel-caddy$") ]]; then
  1089. if [[ -z $(docker ps -q -f "name=^trojan-panel-caddy$" -f "status=running") ]]; then
  1090. echo_content red "---> Caddy TLS运行异常 错误日志如下:"
  1091. docker logs trojan-panel-caddy
  1092. fi
  1093. domain=$(cat "${DOMAIN_FILE}")
  1094. if [[ -z $(cat "${DOMAIN_FILE}") || ! -d "${CADDY_CERT}" || ! -f "${CADDY_CERT}${domain}.crt" ]]; then
  1095. echo_content red "---> 证书申请异常,请尝试 1.换个子域名重新搭建 2.重启服务器将重新申请证书 3.重新搭建选择自定义证书选项 日志如下:"
  1096. if [[ -f ${CADDY_LOG}error.log ]]; then
  1097. tail -n 20 ${CADDY_LOG}error.log
  1098. else
  1099. docker logs trojan-panel-caddy
  1100. fi
  1101. fi
  1102. fi
  1103. if [[ -n $(docker ps -a -q -f "name=^trojan-panel-trojanGFW-standalone$") && -z $(docker ps -q -f "name=^trojan-panel-trojanGFW-standalone$" -f "status=running") ]]; then
  1104. echo_content red "---> TrojanGFW运行异常"
  1105. fi
  1106. if [[ -n $(docker ps -a -q -f "name=^trojan-panel-trojanGO-standalone$") && -z $(docker ps -q -f "name=^trojan-panel-trojanGO-standalone$" -f "status=running") ]]; then
  1107. echo_content red "---> TrojanGO运行异常"
  1108. fi
  1109. if [[ -n $(docker ps -a -q -f "name=^trojan-panel-hysteria-standalone$") && -z $(docker ps -q -f "name=^trojan-panel-hysteria-standalone$" -f "status=running") ]]; then
  1110. echo_content red "---> Hysteria运行异常"
  1111. fi
  1112. if [[ -n $(docker ps -a -q -f "name=^trojan-panel-navieproxy-standalone$") && -z $(docker ps -q -f "name=^trojan-panel-navieproxy-standalone$" -f "status=running") ]]; then
  1113. echo_content red "---> NaiveProxy(Caddy+ForwardProxy)运行异常"
  1114. fi
  1115. fi
  1116. echo_content green "---> 故障检测结束"
  1117. }
  1118. main() {
  1119. cd "$HOME" || exit 0
  1120. init_var
  1121. mkdir_tools
  1122. check_sys
  1123. depend_install
  1124. clear
  1125. echo_content red "\n=============================================================="
  1126. echo_content skyBlue "System Required: CentOS 7+/Ubuntu 18+/Debian 10+"
  1127. echo_content skyBlue "Version: v2.0.0"
  1128. echo_content skyBlue "Description: One click Install Trojan Panel standalone server"
  1129. echo_content skyBlue "Author: jonssonyan <https://jonssonyan.com>"
  1130. echo_content skyBlue "Github: https://github.com/trojanpanel"
  1131. echo_content skyBlue "Docs: https://trojanpanel.github.io"
  1132. echo_content red "\n=============================================================="
  1133. echo_content yellow "1. 安装TrojanGFW+Caddy+Web+TLS"
  1134. echo_content yellow "2. 安装TrojanGO+Caddy+Web+TLS+Websocket"
  1135. echo_content yellow "3. 安装Hysteria"
  1136. echo_content yellow "4. 安装NaiveProxy(Caddy+ForwardProxy)"
  1137. echo_content yellow "5. 安装Caddy TLS"
  1138. echo_content green "\n=============================================================="
  1139. echo_content yellow "6. 卸载TrojanGFW+Caddy+Web+TLS"
  1140. echo_content yellow "7. 卸载TrojanGO+Caddy+Web+TLS+Websocket"
  1141. echo_content yellow "8. 卸载Hysteria"
  1142. echo_content yellow "9. 卸载NaiveProxy(Caddy+ForwardProxy)"
  1143. echo_content yellow "10. 卸载Caddy TLS"
  1144. echo_content yellow "11. 卸载全部Trojan Panel相关的应用"
  1145. echo_content green "\n=============================================================="
  1146. echo_content yellow "12. 故障检测"
  1147. read -r -p "请选择:" selectInstall_type
  1148. case ${selectInstall_type} in
  1149. 1)
  1150. install_docker
  1151. install_caddy_tls
  1152. install_trojan_gfw_standalone
  1153. ;;
  1154. 2)
  1155. install_docker
  1156. install_caddy_tls
  1157. install_trojanGO_standalone
  1158. ;;
  1159. 3)
  1160. install_docker
  1161. install_caddy_tls
  1162. install_hysteria_standalone
  1163. ;;
  1164. 4)
  1165. install_docker
  1166. install_caddy_tls
  1167. install_navieproxy_standalone
  1168. ;;
  1169. 5)
  1170. install_docker
  1171. install_caddy_tls
  1172. ;;
  1173. 6)
  1174. uninstall_trojan_gfw_standalone
  1175. ;;
  1176. 7)
  1177. uninstall_trojanGO_standalone
  1178. ;;
  1179. 8)
  1180. uninstall_hysteria_standalone
  1181. ;;
  1182. 9)
  1183. uninstall_navieproxy_standalone
  1184. ;;
  1185. 10)
  1186. uninstall_caddy_tls
  1187. ;;
  1188. 11)
  1189. uninstall_all
  1190. ;;
  1191. 12)
  1192. failure_testing
  1193. ;;
  1194. *)
  1195. echo_content red "没有这个选项"
  1196. ;;
  1197. esac
  1198. }
  1199. main