freedombone-template 25KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680
  1. #!/bin/bash
  2. #
  3. # .---. . .
  4. # | | |
  5. # |--- .--. .-. .-. .-.| .-. .--.--. |.-. .-. .--. .-.
  6. # | | (.-' (.-' ( | ( )| | | | )( )| | (.-'
  7. # ' ' --' --' -' - -' ' ' -' -' -' ' - --'
  8. #
  9. # Freedom in the Cloud
  10. #
  11. # Command to create app templates
  12. #
  13. # License
  14. # =======
  15. #
  16. # Copyright (C) 2018 Bob Mottram <bob@freedombone.net>
  17. #
  18. # This program is free software: you can redistribute it and/or modify
  19. # it under the terms of the GNU Affero General Public License as published by
  20. # the Free Software Foundation, either version 3 of the License, or
  21. # (at your option) any later version.
  22. #
  23. # This program is distributed in the hope that it will be useful,
  24. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  25. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  26. # GNU Affero General Public License for more details.
  27. #
  28. # You should have received a copy of the GNU Affero General Public License
  29. # along with this program. If not, see <http://www.gnu.org/licenses/>.
  30. PROJECT_NAME='freedombone'
  31. app_name='noapp'
  32. app_name_lower="$(tr '[:upper:]' '[:lower:]' <<< ${app_name:0:1})${app_name:1}"
  33. app_name=$app_name_lower
  34. app_name_upper="$(tr '[:lower:]' '[:upper:]' <<< ${app_name:0:1})${app_name:1}"
  35. app_repo="TODO"
  36. app_repo_commit='TODO'
  37. app_php=
  38. app_node=
  39. app_onion_only=
  40. app_port=''
  41. your_name=''
  42. your_email=''
  43. SHOW_ON_ABOUT=1
  44. database_type=''
  45. function show_help {
  46. echo ''
  47. echo $"${PROJECT_NAME}-template --app [myappname] --php yes -n \"My Name\" -e \"myname@mydomain\" > src/${PROJECT_NAME}-app-myappname"
  48. echo ''
  49. echo $'Creates a new app script which can then be filled in'
  50. echo ''
  51. echo ''
  52. echo $' -h --help Show help'
  53. echo $' -a --app [name] Name of the application'
  54. echo $' -n --name [name] Your name'
  55. echo $' -e --email [address] Your email address'
  56. echo $' -r --repo [url] Git repo url for the app'
  57. echo $' -c --commit [hash] Git commit'
  58. echo $' --port [number] Port number for the app'
  59. echo $' --node [yes|no] Is this a nodejs app?'
  60. echo $' -o --onion [yes|no] Is this app only available on an onion address?'
  61. echo $' -p --php [yes|no] Is this a PHP app?'
  62. echo $' -d --database [mariadb|postgresql] Type of database'
  63. echo ''
  64. exit 0
  65. }
  66. while [[ $# > 1 ]]
  67. do
  68. key="$1"
  69. case $key in
  70. -h|--help)
  71. show_help
  72. ;;
  73. -a|--app|--appname)
  74. shift
  75. app_name="$1"
  76. app_name_lower="$(tr '[:upper:]' '[:lower:]' <<< ${app_name:0:1})${app_name:1}"
  77. app_name=$app_name_lower
  78. app_name_upper="$(tr '[:lower:]' '[:upper:]' <<< ${app_name:0:1})${app_name:1}"
  79. ;;
  80. -r|--repo)
  81. shift
  82. app_repo="$1"
  83. ;;
  84. -c|--commit)
  85. shift
  86. app_repo_commit="$1"
  87. ;;
  88. -n|--name)
  89. shift
  90. your_name="$1"
  91. ;;
  92. -e|--email)
  93. shift
  94. your_email="$1"
  95. ;;
  96. -d|--database)
  97. shift
  98. database_type="$1"
  99. ;;
  100. -p|--php)
  101. shift
  102. app_php="$1"
  103. ;;
  104. --node|--nodejs)
  105. shift
  106. app_node="$1"
  107. ;;
  108. -o|--onion)
  109. shift
  110. if [[ "$1" == 'yes' ]]; then
  111. app_onion_only=1
  112. fi
  113. ;;
  114. --port)
  115. shift
  116. app_port="$1"
  117. ;;
  118. *)
  119. # unknown option
  120. ;;
  121. esac
  122. shift
  123. done
  124. if [[ "$app_name" == 'noapp' ]]; then
  125. show_help
  126. exit 1
  127. fi
  128. if [[ "$app_name" == *' '* ]]; then
  129. echo $'app name should not contain any spaces'
  130. exit 2
  131. fi
  132. if [[ "$app_name" == *'_'* ]]; then
  133. echo $'app name should not contain any underscore characters'
  134. exit 3
  135. fi
  136. if [[ "$app_name" == *'-'* ]]; then
  137. echo $'app name should not contain any hyphen characters'
  138. exit 4
  139. fi
  140. if [ ${#app_name} -lt 3 ]; then
  141. echo $'app name should be at least three characters'
  142. exit 5
  143. fi
  144. if [ ${#your_name} -lt 2 ]; then
  145. echo $'Specify your name with --name'
  146. exit 6
  147. fi
  148. if [ ${#your_email} -lt 3 ]; then
  149. echo $'Specify your email address with --email'
  150. exit 7
  151. fi
  152. if [[ "$your_email" != *'@'* ]]; then
  153. echo $"That doesn't look like an email address"
  154. exit 8
  155. fi
  156. echo '#!/bin/bash'
  157. echo '#'
  158. echo '# .---. . .'
  159. echo '# | | |'
  160. echo '# |--- .--. .-. .-. .-.| .-. .--.--. |.-. .-. .--. .-.'
  161. echo "# | | (.-' (.-' ( | ( )| | | | )( )| | (.-'"
  162. echo "# ' ' --' --' -' - -' ' ' -' -' -' ' - --'"
  163. echo '#'
  164. echo '# Freedom in the Cloud'
  165. echo '#'
  166. echo '# License'
  167. echo '# ======='
  168. echo '#'
  169. echo "# Copyright (C) $(date +%Y) ${your_name} <${your_email}>"
  170. echo '#'
  171. echo '# This program is free software: you can redistribute it and/or modify'
  172. echo '# it under the terms of the GNU Affero General Public License as published by'
  173. echo '# the Free Software Foundation, either version 3 of the License, or'
  174. echo '# (at your option) any later version.'
  175. echo '#'
  176. echo '# This program is distributed in the hope that it will be useful,'
  177. echo '# but WITHOUT ANY WARRANTY; without even the implied warranty of'
  178. echo '# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the'
  179. echo '# GNU Affero General Public License for more details.'
  180. echo '#'
  181. echo '# You should have received a copy of the GNU Affero General Public License'
  182. echo '# along with this program. If not, see <http://www.gnu.org/licenses/>.'
  183. echo ''
  184. echo "VARIANTS='full full-vim'"
  185. echo ''
  186. echo 'IN_DEFAULT_INSTALL=0'
  187. echo "SHOW_ON_ABOUT=${SHOW_ON_ABOUT}"
  188. if [ $app_onion_only ]; then
  189. echo 'SHOW_ICANN_ADDRESS_ON_ABOUT=0'
  190. fi
  191. echo ''
  192. echo "${app_name_upper}_DOMAIN_NAME="
  193. echo "${app_name_upper}_CODE="
  194. echo "${app_name_upper}_ONION_PORT=$(( ( RANDOM % 1000 ) + 9010 ))"
  195. echo "${app_name_upper}_REPO=\"${app_repo}\""
  196. echo "${app_name_upper}_COMMIT='${app_repo_commit}'"
  197. echo ''
  198. echo "${app_name}=(ONION_ONLY"
  199. echo " ${app_name_upper}_DOMAIN_NAME"
  200. echo " ${app_name_upper}_CODE"
  201. echo ' DDNS_PROVIDER'
  202. echo " MY_USERNAME)"
  203. echo ''
  204. echo "function logging_on_${app_name} {"
  205. echo " echo -n ''"
  206. echo "}"
  207. echo ''
  208. echo "function logging_off_${app_name} {"
  209. echo " echo -n ''"
  210. echo '}'
  211. echo ''
  212. echo "function remove_user_${app_name} {"
  213. echo ' remove_username="$1"'
  214. echo ''
  215. echo " \${PROJECT_NAME}-pass -u \$remove_username --rmapp ${app_name}"
  216. echo '}'
  217. echo ''
  218. echo "function add_user_${app_name} {"
  219. echo ' new_username="$1"'
  220. echo ' new_user_password="$2"'
  221. echo ''
  222. echo " \${PROJECT_NAME}-pass -u \$new_username -a ${app_name} -p \"\$new_user_password\""
  223. echo " echo '0'"
  224. echo '}'
  225. echo ''
  226. echo "function install_interactive_${app_name} {"
  227. if [ ! $app_onion_only ]; then
  228. echo ' if [ ! $ONION_ONLY ]; then'
  229. echo " ONION_ONLY='no'"
  230. echo ' fi'
  231. echo ''
  232. echo ' if [[ $ONION_ONLY != "no" ]]; then'
  233. echo " ${app_name_upper}_DOMAIN_NAME='${app_name}.local'"
  234. echo " write_config_param \"${app_name_upper}_DOMAIN_NAME\" \"\$${app_name_upper}_DOMAIN_NAME\""
  235. echo ' else'
  236. echo " interactive_site_details \"${app_name}\" \"${app_name_upper}_DOMAIN_NAME\" \"${app_name}_CODE\""
  237. echo ' fi'
  238. else
  239. echo " echo -n ''"
  240. fi
  241. echo ' APP_INSTALLED=1'
  242. echo '}'
  243. echo ''
  244. echo "function change_password_${app_name} {"
  245. echo ' curr_username="$1"'
  246. echo ' new_user_password="$2"'
  247. echo ''
  248. echo " read_config_param '${app_name_upper}_DOMAIN_NAME'"
  249. echo ''
  250. echo " \${PROJECT_NAME}-pass -u \"\$curr_username\" -a ${app_name} -p \"\$new_user_password\""
  251. echo '}'
  252. if [[ "$database_type" == "mariadb" || "$database_type" == "mysql" || "$database_type" == "postgres"* ]]; then
  253. echo ''
  254. echo "function ${app_name}_create_database {"
  255. echo ' if [ -f $IMAGE_PASSWORD_FILE ]; then'
  256. echo " ${app_name_upper}_ADMIN_PASSWORD=\"\$(printf `cat $IMAGE_PASSWORD_FILE`)\""
  257. echo ' else'
  258. echo " if [ ! \$${app_name_upper}_ADMIN_PASSWORD ]; then"
  259. echo " ${app_name_upper}_ADMIN_PASSWORD=\"\$(create_password \${MINIMUM_PASSWORD_LENGTH})\""
  260. echo ' fi'
  261. echo ' fi'
  262. echo " if [ ! \$${app_name_upper}_ADMIN_PASSWORD ]; then"
  263. echo ' return'
  264. echo ' fi'
  265. echo ''
  266. if [[ "$database_type" != "postgres"* ]]; then
  267. echo " create_database ${app_name} \"\$${app_name_upper}_ADMIN_PASSWORD\" \$MY_USERNAME"
  268. else
  269. echo ' systemctl restart postgresql'
  270. echo " run_system_query_postgresql \"CREATE USER peertube WITH PASSWORD '\$${app_name_upper}_ADMIN_PASSWORD';\""
  271. echo " run_system_query_postgresql \"CREATE DATABASE ${app_name} OWNER ${app_name};\""
  272. echo " run_system_query_postgresql \"GRANT ALL PRIVILEGES ON DATABASE ${app_name} to ${app_name};\""
  273. echo " run_system_query_postgresql \"set statement_timeout to 40000;\""
  274. fi
  275. echo '}'
  276. fi
  277. echo ''
  278. echo "function reconfigure_${app_name} {"
  279. echo ' # This is used if you need to switch identity. Dump old keys and generate new ones'
  280. echo " echo -n ''"
  281. echo '}'
  282. echo ''
  283. echo "function configure_interactive_${app_name} {"
  284. echo ' while true'
  285. echo ' do'
  286. echo ' data=$(tempfile 2>/dev/null)'
  287. echo ' trap "rm -f $data" 0 1 2 5 15'
  288. echo " dialog --backtitle \$\"Freedombone Control Panel\" \\"
  289. echo " --title \$\"${app_name}\" \\"
  290. echo " --radiolist \$\"Choose an operation:\" 16 70 3 \\"
  291. echo ' 1 $"Option 1" off \'
  292. echo ' 2 $"Option 2" off \'
  293. echo ' 3 $"Exit" on 2> $data'
  294. echo ' sel=$?'
  295. echo ' case $sel in'
  296. echo ' 1) return;;'
  297. echo ' 255) return;;'
  298. echo ' esac'
  299. echo ' case $(cat $data) in'
  300. echo ' 1) # call some function for option 1'
  301. echo ' ;;'
  302. echo ' 2) # call some function for option 2'
  303. echo ' ;;'
  304. echo ' 3) break;;'
  305. echo ' esac'
  306. echo ' done'
  307. echo '}'
  308. echo ''
  309. echo "function upgrade_${app_name} {"
  310. echo " CURR_${app_name_upper}_COMMIT=\$(get_completion_param \"${app_name} commit\")"
  311. echo " if [[ \"\$CURR_${app_name_upper}_COMMIT\" == \"\$${app_name_upper}_COMMIT\" ]]; then"
  312. echo ' return'
  313. echo ' fi'
  314. echo ''
  315. echo " if grep -q \"${app_name} domain\" \$COMPLETION_FILE; then"
  316. echo " ${app_name_upper}_DOMAIN_NAME=\$(get_completion_param \"${app_name} domain\")"
  317. echo ' fi'
  318. echo ''
  319. echo ' # update to the next commit'
  320. echo " set_repo_commit /var/www/\$${app_name_upper}_DOMAIN_NAME/htdocs \"${app_name} commit\" \"\$${app_name_upper}_COMMIT\" \$${app_name_upper}_REPO"
  321. echo " chown -R www-data:www-data /var/www/\${${app_name_upper}_DOMAIN_NAME}/htdocs"
  322. echo '}'
  323. echo ''
  324. echo "function backup_local_${app_name} {"
  325. echo " ${app_name_upper}_DOMAIN_NAME='${app_name}'"
  326. echo " if grep -q \"${app_name} domain\" \$COMPLETION_FILE; then"
  327. echo " ${app_name_upper}_DOMAIN_NAME=\$(get_completion_param \"${app_name} domain\")"
  328. echo ' fi'
  329. echo ''
  330. echo " source_directory=/var/www/\${${app_name_upper}_DOMAIN_NAME}/htdocs"
  331. echo ''
  332. echo " suspend_site \${${app_name_upper}_DOMAIN_NAME}"
  333. echo ''
  334. echo " dest_directory=${app_name}"
  335. echo ' backup_directory_to_usb $source_directory $dest_directory'
  336. echo ''
  337. if [[ "$database_type" == "mariadb" || "$database_type" == "mysql" ]]; then
  338. echo " backup_database_to_usb ${app_name}"
  339. echo ''
  340. fi
  341. if [[ "$database_type" == "postgres"* ]]; then
  342. echo ' USE_POSTGRESQL=1'
  343. echo " backup_database_to_usb ${app_name}"
  344. echo ''
  345. fi
  346. echo ' restart_site'
  347. echo '}'
  348. echo ''
  349. echo "function restore_local_${app_name} {"
  350. echo " if ! grep -q \"${app_name} domain\" \$COMPLETION_FILE; then"
  351. echo ' return'
  352. echo ' fi'
  353. echo " ${app_name_upper}_DOMAIN_NAME=\$(get_completion_param \"${app_name} domain\")"
  354. echo " if [ \$${app_name_upper}_DOMAIN_NAME ]; then"
  355. echo " temp_restore_dir=/root/temp${app_name}"
  356. echo " ${app_name}_dir=/var/www/\${${app_name_upper}_DOMAIN_NAME}/htdocs"
  357. echo ''
  358. if [[ "$database_type" == "mariadb" || "$database_type" == "mysql" ]]; then
  359. echo " ${app_name}_create_database"
  360. echo ''
  361. echo " restore_database ${app_name}"
  362. echo ' if [ -d $temp_restore_dir ]; then'
  363. echo ' rm -rf $temp_restore_dir'
  364. echo ' fi'
  365. echo ''
  366. fi
  367. if [[ "$database_type" == "postgres"* ]]; then
  368. echo " ${app_name}_create_database"
  369. echo ''
  370. echo ' USE_POSTGRESQL=1'
  371. echo " restore_database ${app_name}"
  372. echo ' if [ -d $temp_restore_dir ]; then'
  373. echo ' rm -rf $temp_restore_dir'
  374. echo ' fi'
  375. echo ''
  376. fi
  377. echo " restore_directory_from_usb \$temp_restore_dir ${app_name}"
  378. echo ' if [ -d $temp_restore_dir ]; then'
  379. echo " if [ -d cp \$temp_restore_dir\$${app_name}_dir ]; then"
  380. echo " cp -rp \$temp_restore_dir\$${app_name}_dir/* \$${app_name}_dir/"
  381. echo ' else'
  382. echo " if [ ! -d \$${app_name}_dir ]; then"
  383. echo " mkdir \$${app_name}_dir"
  384. echo ' fi'
  385. echo " cp -rp \$temp_restore_dir/* \$${app_name}_dir/"
  386. echo ' fi'
  387. echo " chown -R www-data:www-data \$${app_name}_dir"
  388. echo ' rm -rf $temp_restore_dir'
  389. echo ' fi'
  390. echo ''
  391. echo ' fi'
  392. echo '}'
  393. echo ''
  394. echo "function backup_remote_${app_name} {"
  395. echo " ${app_name_upper}_DOMAIN_NAME='${app_name}'"
  396. echo " if grep -q \"${app_name} domain\" \$COMPLETION_FILE; then"
  397. echo " ${app_name_upper}_DOMAIN_NAME=\$(get_completion_param \"${app_name} domain\")"
  398. echo ' fi'
  399. echo ''
  400. echo " source_directory=/var/www/\${${app_name_upper}_DOMAIN_NAME}/htdocs"
  401. echo ''
  402. echo " suspend_site \${${app_name_upper}_DOMAIN_NAME}"
  403. echo ''
  404. echo " dest_directory=${app_name}"
  405. echo ' backup_directory_to_friend $source_directory $dest_directory'
  406. echo ''
  407. if [[ "$database_type" == "mariadb" || "$database_type" == "mysql" ]]; then
  408. echo " backup_database_to_friend ${app_name}"
  409. fi
  410. if [[ "$database_type" == "postgres"* ]]; then
  411. echo ' USE_POSTGRESQL=1'
  412. echo " backup_database_to_friend ${app_name}"
  413. echo ''
  414. fi
  415. echo ''
  416. echo ' restart_site'
  417. echo '}'
  418. echo ''
  419. echo "function restore_remote_${app_name} {"
  420. echo " if ! grep -q \"${app_name} domain\" \$COMPLETION_FILE; then"
  421. echo ' return'
  422. echo ' fi'
  423. echo " ${app_name_upper}_DOMAIN_NAME=\$(get_completion_param \"${app_name} domain\")"
  424. echo " if [ \$${app_name_upper}_DOMAIN_NAME ]; then"
  425. echo " temp_restore_dir=/root/temp${app_name}"
  426. echo " ${app_name}_dir=/var/www/\${${app_name_upper}_DOMAIN_NAME}/htdocs"
  427. echo ''
  428. if [[ "$database_type" == "mariadb" || "$database_type" == "mysql" ]]; then
  429. echo " ${app_name}_create_database"
  430. echo ''
  431. echo " restore_database_from_friend ${app_name}"
  432. echo ' if [ -d $temp_restore_dir ]; then'
  433. echo ' rm -rf $temp_restore_dir'
  434. echo ' fi'
  435. echo ''
  436. fi
  437. if [[ "$database_type" == "postgres"* ]]; then
  438. echo " ${app_name}_create_database"
  439. echo ''
  440. echo ' USE_POSTGRESQL=1'
  441. echo " restore_database_from_friend ${app_name}"
  442. echo ' if [ -d $temp_restore_dir ]; then'
  443. echo ' rm -rf $temp_restore_dir'
  444. echo ' fi'
  445. echo ''
  446. fi
  447. echo " restore_directory_from_friend \$temp_restore_dir ${app_name}"
  448. echo ' if [ -d $temp_restore_dir ]; then'
  449. echo " if [ -d cp \$temp_restore_dir\$${app_name}_dir ]; then"
  450. echo " cp -rp \$temp_restore_dir\$${app_name}_dir/* \$${app_name}_dir/"
  451. echo ' else'
  452. echo " if [ ! -d \$${app_name}_dir ]; then"
  453. echo " mkdir \$${app_name}_dir"
  454. echo ' fi'
  455. echo " cp -rp \$temp_restore_dir/* \$${app_name}_dir/"
  456. echo ' fi'
  457. echo " chown -R www-data:www-data \$${app_name}_dir"
  458. echo ' rm -rf $temp_restore_dir'
  459. echo ' fi'
  460. echo ''
  461. echo ' fi'
  462. echo '}'
  463. echo ''
  464. echo "function remove_${app_name} {"
  465. if [[ "$app_node" == 'yes' ]]; then
  466. echo " remove_nodejs ${app_name}"
  467. echo ''
  468. fi
  469. echo " nginx_dissite \$${app_name_upper}_DOMAIN_NAME"
  470. echo " remove_certs \$${app_name_upper}_DOMAIN_NAME"
  471. echo ''
  472. echo " if [ -d /var/www/\$${app_name_upper}_DOMAIN_NAME ]; then"
  473. echo " rm -rf /var/www/\$${app_name_upper}_DOMAIN_NAME"
  474. echo ' fi'
  475. echo " if [ -f /etc/nginx/sites-available/\$${app_name_upper}_DOMAIN_NAME ]; then"
  476. echo " rm /etc/nginx/sites-available/\$${app_name_upper}_DOMAIN_NAME"
  477. echo ' fi'
  478. if [[ "$database_type" == "mariadb" || "$database_type" == "mysql" ]]; then
  479. echo " drop_database ${app_name}"
  480. fi
  481. if [[ "$database_type" == "postgres"* ]]; then
  482. echo " drop_database_postgresql ${app_name}"
  483. fi
  484. echo " remove_onion_service ${app_name} \${${app_name_upper}_ONION_PORT}"
  485. echo " if grep -q \"${app_name}\" /etc/crontab; then"
  486. echo " sed -i \"/${app_name}/d\" /etc/crontab"
  487. echo ' fi'
  488. echo " remove_app ${app_name}"
  489. echo " remove_completion_param install_${app_name}"
  490. echo " sed -i '/${app_name}/d' \$COMPLETION_FILE"
  491. if [ ${#app_port} -gt 0 ]; then
  492. echo ''
  493. echo " firewall_remove ${app_port} tcp"
  494. fi
  495. echo ''
  496. echo " remove_ddns_domain \$${app_name_upper}_DOMAIN_NAME"
  497. echo '}'
  498. echo ''
  499. echo "function install_${app_name} {"
  500. if [[ "$database_type" == "mariadb" || "$database_type" == "mysql" ]]; then
  501. echo ' install_mariadb'
  502. echo ''
  503. echo ' get_mariadb_password'
  504. echo ''
  505. fi
  506. if [[ "$database_type" == "postgres"* ]]; then
  507. echo ' install_postgresql'
  508. echo ''
  509. fi
  510. if [[ "$app_node" == 'yes' ]]; then
  511. echo "install_nodejs ${app_name}"
  512. fi
  513. if [[ "$app_php" == 'yes' ]]; then
  514. echo ' apt-get -yq install php-gettext php-curl php-gd php-mysql git curl'
  515. echo ' apt-get -yq install memcached php-memcached php-intl exiftool libfcgi0ldbl'
  516. echo ''
  517. fi
  518. echo " if [ ! -d /var/www/\$${app_name_upper}_DOMAIN_NAME ]; then"
  519. echo " mkdir /var/www/\$${app_name_upper}_DOMAIN_NAME"
  520. echo ' fi'
  521. echo " if [ ! -d /var/www/\$${app_name_upper}_DOMAIN_NAME/htdocs ]; then"
  522. echo " if [ -d /repos/${app_name} ]; then"
  523. echo " mkdir /var/www/\$${app_name_upper}_DOMAIN_NAME/htdocs"
  524. echo " cp -r -p /repos/${app_name}/. /var/www/\$${app_name_upper}_DOMAIN_NAME/htdocs"
  525. echo " cd /var/www/\$${app_name_upper}_DOMAIN_NAME/htdocs"
  526. echo ' git pull'
  527. echo ' else'
  528. echo " git_clone \$${app_name_upper}_REPO /var/www/\$${app_name_upper}_DOMAIN_NAME/htdocs"
  529. echo ' fi'
  530. echo ''
  531. echo " if [ ! -d /var/www/\$${app_name_upper}_DOMAIN_NAME/htdocs ]; then"
  532. echo " echo \$'Unable to clone ${app_name} repo'"
  533. echo ' exit 87525'
  534. echo ' fi'
  535. echo ' fi'
  536. echo ''
  537. echo " cd /var/www/\$${app_name_upper}_DOMAIN_NAME/htdocs"
  538. echo " git checkout \$${app_name_upper}_COMMIT -b \$${app_name_upper}_COMMIT"
  539. echo " set_completion_param \"${app_name} commit\" \"\$${app_name_upper}_COMMIT\""
  540. echo ''
  541. echo " chmod g+w /var/www/\$${app_name_upper}_DOMAIN_NAME/htdocs"
  542. echo " chown -R www-data:www-data /var/www/\$${app_name_upper}_DOMAIN_NAME/htdocs"
  543. if [[ "$database_type" == "mariadb" || "$database_type" == "mysql" || "$database_type" == "postgres"* ]]; then
  544. echo ''
  545. echo " ${app_name}_create_database"
  546. fi
  547. echo ''
  548. echo " add_ddns_domain \$${app_name_upper}_DOMAIN_NAME"
  549. echo ''
  550. echo " ${app_name_upper}_ONION_HOSTNAME=\$(add_onion_service ${app_name} 80 \${${app_name_upper}_ONION_PORT})"
  551. echo ''
  552. echo " ${app_name}_nginx_site=/etc/nginx/sites-available/\$${app_name_upper}_DOMAIN_NAME"
  553. if [ $app_onion_only ]; then
  554. echo ' if [[ $ONION_ONLY == "no" ]]; then'
  555. if [[ "$app_php" == 'yes' ]]; then
  556. echo " nginx_http_redirect \$${app_name_upper}_DOMAIN_NAME \"index index.php\""
  557. else
  558. echo " nginx_http_redirect \$${app_name_upper}_DOMAIN_NAME \"index index.html\""
  559. fi
  560. echo " echo 'server {' >> \$${app_name}_nginx_site"
  561. echo " echo ' listen 443 ssl;' >> \$${app_name}_nginx_site"
  562. echo " echo ' listen [::]:443 ssl;' >> \$${app_name}_nginx_site"
  563. echo " echo \" server_name \$${app_name_upper}_DOMAIN_NAME;\" >> \$${app_name}_nginx_site"
  564. echo " echo '' >> \$${app_name}_nginx_site"
  565. echo " nginx_compress \$${app_name_upper}_DOMAIN_NAME"
  566. echo " echo '' >> \$${app_name}_nginx_site"
  567. echo " echo ' # Security' >> \$${app_name}_nginx_site"
  568. echo " nginx_ssl \$${app_name_upper}_DOMAIN_NAME"
  569. echo ''
  570. echo " nginx_disable_sniffing \$${app_name_upper}_DOMAIN_NAME"
  571. echo ''
  572. echo " echo ' add_header Strict-Transport-Security max-age=15768000;' >> \$${app_name}_nginx_site"
  573. echo " echo '' >> \$${app_name}_nginx_site"
  574. echo " echo ' # Logs' >> \$${app_name}_nginx_site"
  575. echo " echo ' access_log /dev/null;' >> \$${app_name}_nginx_site"
  576. echo " echo ' error_log /dev/null;' >> \$${app_name}_nginx_site"
  577. echo " echo '' >> \$${app_name}_nginx_site"
  578. echo " echo ' # Root' >> \$${app_name}_nginx_site"
  579. echo " echo \" root /var/www/\$${app_name_upper}_DOMAIN_NAME/htdocs;\" >> \$${app_name}_nginx_site"
  580. echo " echo '' >> \$${app_name}_nginx_site"
  581. if [[ "$app_php" == 'yes' ]]; then
  582. echo " echo ' index index.php;' >> \$${app_name}_nginx_site"
  583. echo " echo ' location ~ \.php {' >> \$${app_name}_nginx_site"
  584. echo " echo ' include snippets/fastcgi-php.conf;' >> \$${app_name}_nginx_site"
  585. echo " echo ' fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;' >> \$${app_name}_nginx_site"
  586. echo " echo ' fastcgi_read_timeout 30;' >> \$${app_name}_nginx_site"
  587. echo " echo ' }' >> \$${app_name}_nginx_site"
  588. echo " echo '' >> \$${app_name}_nginx_site"
  589. else
  590. echo " echo ' index index.html;' >> \$${app_name}_nginx_site"
  591. fi
  592. echo " echo ' # Location' >> \$${app_name}_nginx_site"
  593. echo " echo ' location / {' >> \$${app_name}_nginx_site"
  594. echo " nginx_limits \$${app_name_upper}_DOMAIN_NAME '15m'"
  595. echo " echo ' try_files \$uri \$uri/ @${app_name};' >> \$${app_name}_nginx_site"
  596. echo " echo ' }' >> \$${app_name}_nginx_site"
  597. echo " echo '}' >> \$${app_name}_nginx_site"
  598. echo ' else'
  599. echo " echo -n '' > \$${app_name}_nginx_site"
  600. echo ' fi'
  601. else
  602. echo " echo -n '' > \$${app_name}_nginx_site"
  603. fi
  604. echo " echo 'server {' >> \$${app_name}_nginx_site"
  605. echo " echo \" listen 127.0.0.1:\$${app_name_upper}_ONION_PORT default_server;\" >> \$${app_name}_nginx_site"
  606. echo " echo \" server_name \$${app_name_upper}_ONION_HOSTNAME;\" >> \$${app_name}_nginx_site"
  607. echo " echo '' >> \$${app_name}_nginx_site"
  608. echo " nginx_compress \$${app_name_upper}_DOMAIN_NAME"
  609. echo " echo '' >> \$${app_name}_nginx_site"
  610. echo " nginx_disable_sniffing \$${app_name_upper}_DOMAIN_NAME"
  611. echo " echo '' >> \$${app_name}_nginx_site"
  612. echo " echo ' # Logs' >> \$${app_name}_nginx_site"
  613. echo " echo ' access_log /dev/null;' >> \$${app_name}_nginx_site"
  614. echo " echo ' error_log /dev/null;' >> \$${app_name}_nginx_site"
  615. echo " echo '' >> \$${app_name}_nginx_site"
  616. echo " echo ' # Root' >> \$${app_name}_nginx_site"
  617. echo " echo \" root /var/www/\$${app_name_upper}_DOMAIN_NAME/htdocs;\" >> \$${app_name}_nginx_site"
  618. echo " echo '' >> \$${app_name}_nginx_site"
  619. if [[ "$app_php" == 'yes' ]]; then
  620. echo " echo ' index index.php;' >> \$${app_name}_nginx_site"
  621. echo " echo ' location ~ \.php {' >> \$${app_name}_nginx_site"
  622. echo " echo ' include snippets/fastcgi-php.conf;' >> \$${app_name}_nginx_site"
  623. echo " echo ' fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;' >> \$${app_name}_nginx_site"
  624. echo " echo ' fastcgi_read_timeout 30;' >> \$${app_name}_nginx_site"
  625. echo " echo ' }' >> \$${app_name}_nginx_site"
  626. echo " echo '' >> \$${app_name}_nginx_site"
  627. else
  628. echo " echo ' index index.html;' >> \$${app_name}_nginx_site"
  629. fi
  630. echo " echo ' # Location' >> \$${app_name}_nginx_site"
  631. echo " echo ' location / {' >> \$${app_name}_nginx_site"
  632. echo " nginx_limits \$${app_name_upper}_DOMAIN_NAME '15m'"
  633. echo " echo ' try_files \$uri \$uri/ @${app_name};' >> \$${app_name}_nginx_site"
  634. echo " echo ' }' >> \$${app_name}_nginx_site"
  635. echo " echo '}' >> \$${app_name}_nginx_site"
  636. if [[ "$app_php" == 'yes' ]]; then
  637. echo ''
  638. echo ' configure_php'
  639. fi
  640. echo ''
  641. echo " create_site_certificate \$${app_name_upper}_DOMAIN_NAME 'yes'"
  642. echo ''
  643. echo " nginx_ensite \$${app_name_upper}_DOMAIN_NAME"
  644. echo ''
  645. if [[ "$database_type" == "mariadb" || "$database_type" == "mysql" ]]; then
  646. echo ' systemctl restart mariadb'
  647. fi
  648. if [[ "$app_php" == 'yes' ]]; then
  649. echo ' systemctl restart php7.0-fpm'
  650. fi
  651. echo ' systemctl restart nginx'
  652. echo ''
  653. echo " \${PROJECT_NAME}-pass -u \$MY_USERNAME -a ${app_name} -p \"\$${app_name_upper}_ADMIN_PASSWORD\""
  654. echo " set_completion_param \"${app_name} domain\" \"\$${app_name_upper}_DOMAIN_NAME\""
  655. if [ ${#app_port} -gt 0 ]; then
  656. echo ''
  657. echo " firewall_add ${app_name} ${app_port} tcp"
  658. fi
  659. echo ''
  660. echo ' APP_INSTALLED=1'
  661. echo '}'
  662. echo ''
  663. echo '# NOTE: deliberately there is no "exit 0"'