install_script_standalone.sh 42 KB

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