freedombone-app-dokuwiki 23KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544
  1. #!/bin/bash
  2. # _____ _ _
  3. # | __|___ ___ ___ _| |___ _____| |_ ___ ___ ___
  4. # | __| _| -_| -_| . | . | | . | . | | -_|
  5. # |__| |_| |___|___|___|___|_|_|_|___|___|_|_|___|
  6. #
  7. # Freedom in the Cloud
  8. #
  9. # Dokuwiki application
  10. #
  11. # License
  12. # =======
  13. #
  14. # Copyright (C) 2014-2018 Bob Mottram <bob@freedombone.net>
  15. #
  16. # This program is free software: you can redistribute it and/or modify
  17. # it under the terms of the GNU Affero General Public License as published by
  18. # the Free Software Foundation, either version 3 of the License, or
  19. # (at your option) any later version.
  20. #
  21. # This program is distributed in the hope that it will be useful,
  22. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  23. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  24. # GNU Affero General Public License for more details.
  25. #
  26. # You should have received a copy of the GNU Affero General Public License
  27. # along with this program. If not, see <http://www.gnu.org/licenses/>.
  28. VARIANTS='full full-vim writer'
  29. IN_DEFAULT_INSTALL=0
  30. SHOW_ON_ABOUT=1
  31. DOKUWIKI_DOMAIN_NAME=
  32. DOKUWIKI_CODE=
  33. DOKUWIKI_ONION_PORT=8089
  34. DOKUWIKI_ADMIN_PASSWORD=
  35. DOKUWIKI_TITLE="${PROJECT_NAME} Dokuwiki"
  36. DOKUWIKI_REPO="https://github.com/splitbrain/dokuwiki"
  37. DOKUWIKI_COMMIT='be15c01c0b982cf1a75b5af031bf077143c63f39'
  38. dokuwiki_variables=(ONION_ONLY
  39. MY_USERNAME
  40. DOKUWIKI_TITLE
  41. DOKUWIKI_DOMAIN_NAME
  42. DOKUWIKI_CODE
  43. DDNS_PROVIDER)
  44. function logging_on_dokuwiki {
  45. echo -n ''
  46. }
  47. function logging_off_dokuwiki {
  48. echo -n ''
  49. }
  50. function install_interactive_dokuwiki {
  51. if [[ $ONION_ONLY != "no" ]]; then
  52. DOKUWIKI_TITLE=$'My Dokuwiki'
  53. DOKUWIKI_DOMAIN_NAME='dokuwiki.local'
  54. write_config_param "DOKUWIKI_TITLE" "$DOKUWIKI_TITLE"
  55. write_config_param "DOKUWIKI_DOMAIN_NAME" "$DOKUWIKI_DOMAIN_NAME"
  56. else
  57. function_check interactive_site_details_with_title
  58. interactive_site_details_with_title "dokuwiki" "DOKUWIKI_TITLE" "DOKUWIKI_DOMAIN_NAME" "DOKUWIKI_CODE"
  59. fi
  60. APP_INSTALLED=1
  61. }
  62. function change_password_dokuwiki {
  63. curr_username="$1"
  64. new_user_password="$2"
  65. DOKUWIKI_DOMAIN_NAME=$(get_completion_param "dokuwiki domain")
  66. if grep -q "$curr_username:" "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/users.auth.php"; then
  67. HASHED_DOKUWIKI_PASSWORD=$(echo -n "$new_user_password" | md5sum | awk -F ' ' '{print $1}')
  68. existing_user=$(grep "$curr_username:" "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/users.auth.php" | hean -n 1)
  69. if [[ "$existing_user" == *":admin,"* ]]; then
  70. sed -i "s|$curr_username:.*|$curr_username:$HASHED_DOKUWIKI_PASSWORD:$curr_username:$curr_username@$HOSTNAME:admin,user,upload|g" "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/users.auth.php"
  71. else
  72. sed -i "s|$curr_username:.*|$curr_username:$HASHED_DOKUWIKI_PASSWORD:$curr_username:$curr_username@$HOSTNAME:user,upload|g" "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/users.auth.php"
  73. fi
  74. cp "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/users.auth.php" "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/users.auth.php"
  75. chmod 640 "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/users.auth.php"
  76. chmod 640 "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/users.auth.php"
  77. "${PROJECT_NAME}-pass" -u "$curr_username" -a dokuwiki -p "$new_user_password"
  78. fi
  79. }
  80. function add_user_dokuwiki {
  81. new_username="$1"
  82. new_user_password="$2"
  83. DOKUWIKI_DOMAIN_NAME=$(get_completion_param "dokuwiki domain")
  84. HASHED_DOKUWIKI_PASSWORD=$(echo -n "$new_user_password" | md5sum | awk -F ' ' '{print $1}')
  85. echo "$new_username:$HASHED_DOKUWIKI_PASSWORD:$new_username:$new_username@$HOSTNAME:user,upload" >> "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/users.auth.php"
  86. cp "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/users.auth.php" "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/users.auth.php"
  87. chmod 640 "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/users.auth.php"
  88. chmod 640 "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/users.auth.php"
  89. "${PROJECT_NAME}-pass" -u "$new_username" -a dokuwiki -p "$new_user_password"
  90. }
  91. function remove_user_dokuwiki {
  92. remove_username="$1"
  93. read_config_param "DOKUWIKI_DOMAIN_NAME"
  94. if grep -q "$remove_username:" "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/users.auth.php"; then
  95. sed -i "/$remove_username:/d" "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/users.auth.php"
  96. sed -i "/$remove_username:/d" "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/users.auth.php"
  97. "${PROJECT_NAME}-pass" -u "$remove_username" --rmapp dokuwiki
  98. fi
  99. }
  100. function reconfigure_dokuwiki {
  101. echo -n ''
  102. }
  103. function upgrade_dokuwiki {
  104. function_check set_repo_commit
  105. set_repo_commit "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs" "dokuwiki commit" "$DOKUWIKI_COMMIT" $DOKUWIKI_REPO
  106. }
  107. function backup_local_dokuwiki {
  108. DOKUWIKI_DOMAIN_NAME=$(get_completion_param "dokuwiki domain")
  109. function_check backup_directory_to_usb
  110. # backup the data
  111. source_directory="/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/data"
  112. if [ -d "$source_directory" ]; then
  113. dest_directory=dokuwikidat
  114. backup_directory_to_usb "$source_directory" "$dest_directory"
  115. fi
  116. # backup the users
  117. source_directory="/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl"
  118. if [ -d "$source_directory" ]; then
  119. dest_directory=dokuwikiacl
  120. cp "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/users*.php" "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/"
  121. backup_directory_to_usb "$source_directory" "$dest_directory"
  122. fi
  123. }
  124. function restore_local_dokuwiki {
  125. echo $"Restoring Dokuwiki installation"
  126. function_check get_completion_param
  127. DOKUWIKI_DOMAIN_NAME=$(get_completion_param "dokuwiki domain")
  128. # restore the data
  129. temp_restore_dir=/root/tempdokuwikidat
  130. function_check restore_directory_from_usb
  131. restore_directory_from_usb ${temp_restore_dir} dokuwikidat
  132. if [ -d "${temp_restore_dir}/var/www/${DOKUWIKI_DOMAIN_NAME}/htdocs/data" ]; then
  133. cp -r "${temp_restore_dir}/var/www/${DOKUWIKI_DOMAIN_NAME}/htdocs/data/"* "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/data"
  134. else
  135. cp -r "${temp_restore_dir}/"* "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/data"
  136. fi
  137. # shellcheck disable=SC2181
  138. if [ ! "$?" = "0" ]; then
  139. function_check restore_directory_from_usb
  140. set_user_permissions
  141. function_check backup_unmount_drive
  142. backup_unmount_drive
  143. rm -rf ${temp_restore_dir}
  144. exit 683352
  145. fi
  146. rm -rf ${temp_restore_dir}
  147. # restore the users
  148. temp_restore_dir=/root/tempdokuwikiacl
  149. function_check restore_directory_from_usb
  150. restore_directory_from_usb ${temp_restore_dir} dokuwikiacl
  151. if [ -d "${temp_restore_dir}/var/www/${DOKUWIKI_DOMAIN_NAME}/htdocs/lib/plugins/acl" ]; then
  152. cp "${temp_restore_dir}/var/www/${DOKUWIKI_DOMAIN_NAME}/htdocs/lib/plugins/acl/users.auth.php" "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/"
  153. cp "${temp_restore_dir}/var/www/${DOKUWIKI_DOMAIN_NAME}/htdocs/lib/plugins/acl/users.auth.php" "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/"
  154. else
  155. cp "${temp_restore_dir}/users.auth.php" "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/"
  156. cp "${temp_restore_dir}/users.auth.php" "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/"
  157. fi
  158. # shellcheck disable=SC2181
  159. if [ ! "$?" = "0" ]; then
  160. function_check restore_directory_from_usb
  161. set_user_permissions
  162. function_check backup_unmount_drive
  163. backup_unmount_drive
  164. rm -rf ${temp_restore_dir}
  165. exit 456495
  166. fi
  167. rm -rf ${temp_restore_dir}
  168. chmod 640 "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/users.auth.php"
  169. chmod 640 "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/users.auth.php"
  170. chmod -R 755 "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/data"
  171. chmod -R 755 "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib"
  172. chown -R www-data:www-data "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs"
  173. echo $"Restore of Dokuwiki complete"
  174. }
  175. function backup_remote_dokuwiki {
  176. DOKUWIKI_DOMAIN_NAME=$(get_completion_param "dokuwiki domain")
  177. if [ -d "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs" ]; then
  178. echo $"Backing up dokuwiki"
  179. backup_directory_to_friend "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/data" dokuwikidat
  180. cp "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/users*.php" "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/"
  181. backup_directory_to_friend "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl" dokuwikiacl
  182. fi
  183. }
  184. function restore_remote_dokuwiki {
  185. DOKUWIKI_DOMAIN_NAME=$(get_completion_param "dokuwiki domain")
  186. function_check get_completion_param
  187. function_check restore_directory_from_friend
  188. if [ -d "$SERVER_DIRECTORY/backup/dokuwikidat" ]; then
  189. echo $"Restoring Dokuwiki data for $DOKUWIKI_DOMAIN_NAME"
  190. temp_restore_dir=/root/tempdokuwikidat
  191. restore_directory_from_friend $temp_restore_dir dokuwikidat
  192. if [ -d "$temp_restore_dir/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/data" ]; then
  193. cp -r "$temp_restore_dir/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/data/"* "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/data/"
  194. else
  195. cp -r $temp_restore_dir/* "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/data/"
  196. fi
  197. # shellcheck disable=SC2181
  198. if [ ! "$?" = "0" ]; then
  199. exit 92634
  200. fi
  201. rm -rf $temp_restore_dir
  202. echo $"Restore of Dokuwiki data complete"
  203. fi
  204. if [ -d "$SERVER_DIRECTORY/backup/dokuwikiacl" ]; then
  205. echo $"Restoring Dokuwiki users for $DOKUWIKI_DOMAIN_NAME"
  206. temp_restore_dir=/root/tempdokuwikiacl
  207. restore_directory_from_friend $temp_restore_dir dokuwikiacl
  208. if [ -d "$temp_restore_dir/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl" ]; then
  209. cp -r "$temp_restore_dir/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/"* "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/"
  210. else
  211. cp -r $temp_restore_dir/* "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/"
  212. fi
  213. # shellcheck disable=SC2181
  214. if [ ! "$?" = "0" ]; then
  215. exit 735287
  216. fi
  217. rm -rf $temp_restore_dir
  218. echo $"Restore of Dokuwiki users complete"
  219. fi
  220. chmod 640 "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/users.auth.php"
  221. chmod 640 "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/users.auth.php"
  222. chmod -R 755 "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/data/data"
  223. chmod -R 755 "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/data/lib"
  224. chown -R www-data:www-data "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs"
  225. }
  226. function remove_dokuwiki {
  227. if [ ${#DOKUWIKI_DOMAIN_NAME} -eq 0 ]; then
  228. return
  229. fi
  230. function_check remove_onion_service
  231. remove_onion_service dokuwiki ${DOKUWIKI_ONION_PORT}
  232. nginx_dissite "$DOKUWIKI_DOMAIN_NAME"
  233. remove_certs "$DOKUWIKI_DOMAIN_NAME"
  234. if [ -f "/etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME" ]; then
  235. rm "/etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME"
  236. fi
  237. if [ ! -d "/var/www/$DOKUWIKI_DOMAIN_NAME" ]; then
  238. rm -rf "/var/www/$DOKUWIKI_DOMAIN_NAME"
  239. fi
  240. if [ -d /var/lib/dokuwiki ]; then
  241. rm -rf /var/lib/dokuwiki
  242. fi
  243. if [ -d /etc/dokuwiki ]; then
  244. rm -rf /etc/dokuwiki
  245. fi
  246. if [ -d /usr/share/dokuwiki ]; then
  247. rm -rf /usr/share/dokuwiki
  248. fi
  249. remove_completion_param "install_dokuwiki"
  250. remove_completion_param "dokuwiki domain"
  251. sed -i '/dokuwiki/d' "$COMPLETION_FILE"
  252. function_check remove_ddns_domain
  253. remove_ddns_domain "$DOKUWIKI_DOMAIN_NAME"
  254. }
  255. function install_dokuwiki {
  256. if [ ! "$DOKUWIKI_DOMAIN_NAME" ]; then
  257. return
  258. fi
  259. apt-get -yq install php-common php-cli php-curl php-gd php-mcrypt git
  260. apt-get -yq install php-dev imagemagick php-imagick libfcgi0ldbl
  261. apt-get -yq install php-memcached memcached
  262. if [ ! -d "/var/www/$DOKUWIKI_DOMAIN_NAME" ]; then
  263. mkdir "/var/www/$DOKUWIKI_DOMAIN_NAME"
  264. fi
  265. if [ ! -f "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/install.php" ]; then
  266. cd "/var/www/$DOKUWIKI_DOMAIN_NAME" || exit 23468246824
  267. if [ -d /repos/dokuwiki ]; then
  268. mkdir "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs"
  269. cp -r -p /repos/dokuwiki/. "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs"
  270. cd "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs" || exit 24687462
  271. git pull
  272. else
  273. function_check git_clone
  274. git_clone "$DOKUWIKI_REPO" "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs"
  275. fi
  276. cd "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs" || exit 38368832
  277. git checkout "$DOKUWIKI_COMMIT" -b "$DOKUWIKI_COMMIT"
  278. set_completion_param "dokuwiki commit" "$DOKUWIKI_COMMIT"
  279. fi
  280. apt-get -yq remove --purge apache2-bin*
  281. if [ -d /etc/apache2 ]; then
  282. rm -rf /etc/apache2
  283. echo $'Removed Apache installation after Dokuwiki install'
  284. fi
  285. { echo '<?php';
  286. echo "\$conf['title'] = '${DOKUWIKI_TITLE}';";
  287. echo "\$conf['lang'] = 'en';";
  288. echo "\$conf['license'] = 'cc-by-sa';";
  289. echo "\$conf['useacl'] = 1;";
  290. echo "\$conf['superuser'] = '@admin';";
  291. echo "\$conf['disableactions'] = 'register';"; } > "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/local.php"
  292. ln -s "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/local.php" "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/local.php"
  293. chmod 600 "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/local.php"
  294. chown -R www-data:www-data "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs"
  295. chmod -R 755 "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib"
  296. chmod -R 755 "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/data"
  297. if [ -f "$IMAGE_PASSWORD_FILE" ]; then
  298. DOKUWIKI_ADMIN_PASSWORD="$(printf "%s" "$(cat "$IMAGE_PASSWORD_FILE")")"
  299. else
  300. if [ ! "$DOKUWIKI_ADMIN_PASSWORD" ]; then
  301. DOKUWIKI_ADMIN_PASSWORD="$(create_password "${MINIMUM_PASSWORD_LENGTH}")"
  302. fi
  303. fi
  304. HASHED_DOKUWIKI_PASSWORD=$(echo -n "$DOKUWIKI_ADMIN_PASSWORD" | md5sum | awk -F ' ' '{print $1}')
  305. echo -n "$MY_USERNAME:$HASHED_DOKUWIKI_PASSWORD:$MY_NAME:$MY_EMAIL:admin,user,upload" > "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/users.auth.php"
  306. cp "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/users.auth.php" "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/users.auth.php"
  307. chmod 640 "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/users.auth.php"
  308. if ! grep -q "video/ogg" "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/mime.conf"; then
  309. echo 'ogv video/ogg' >> "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/mime.conf"
  310. fi
  311. if ! grep -q "video/mp4" "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/mime.conf"; then
  312. echo 'mp4 video/mp4' >> "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/mime.conf"
  313. fi
  314. if ! grep -q "video/webm" "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/mime.conf"; then
  315. echo 'webm video/webm' >> "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/mime.conf"
  316. fi
  317. DOKUWIKI_ONION_HOSTNAME=$(add_onion_service dokuwiki 80 ${DOKUWIKI_ONION_PORT})
  318. set_completion_param "dokuwiki domain" "${DOKUWIKI_DOMAIN_NAME}"
  319. if [[ $ONION_ONLY == "no" ]]; then
  320. function_check nginx_http_redirect
  321. nginx_http_redirect "$DOKUWIKI_DOMAIN_NAME"
  322. { echo 'server {';
  323. echo ' listen 443 ssl;';
  324. echo ' #listen [::]:443 ssl;';
  325. echo " root /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs;";
  326. echo " server_name $DOKUWIKI_DOMAIN_NAME;";
  327. echo ' access_log /dev/null;';
  328. echo " error_log /dev/null;";
  329. echo ' index index.php;';
  330. echo ' charset utf-8;';
  331. echo ' proxy_read_timeout 86400s;'; } >> "/etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME"
  332. function_check nginx_ssl
  333. nginx_ssl "$DOKUWIKI_DOMAIN_NAME"
  334. function_check nginx_security_options
  335. nginx_security_options "$DOKUWIKI_DOMAIN_NAME"
  336. { echo ' add_header Strict-Transport-Security "max-age=0;";';
  337. echo '';
  338. echo ' # rewrite to front controller as default rule';
  339. echo ' location / {'; } >> "/etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME"
  340. function_check nginx_limits
  341. nginx_limits "$DOKUWIKI_DOMAIN_NAME"
  342. { echo " rewrite ^/(.*) /index.php?q=\$uri&\$args last;";
  343. echo ' }';
  344. echo '';
  345. echo ' # statically serve these file types when possible';
  346. echo ' # otherwise fall back to front controller';
  347. echo ' # allow browser to cache them';
  348. echo ' # added .htm for advanced source code editor library';
  349. echo ' location ~* \.(jpg|jpeg|gif|png|ico|css|js|htm|html|ttf|woff|svg)$ {';
  350. echo ' expires 30d;';
  351. echo " try_files \$uri /index.php?q=\$uri&\$args;";
  352. echo ' }';
  353. echo '';
  354. echo ' # block these file types';
  355. echo ' location ~* \.(tpl|md|tgz|log|out)$ {';
  356. echo ' deny all;';
  357. echo ' }';
  358. echo '';
  359. echo ' # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000';
  360. echo ' # or a unix socket';
  361. echo ' location ~* \.php$ {'; } >> "/etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME"
  362. function_check nginx_limits
  363. nginx_limits "$DOKUWIKI_DOMAIN_NAME"
  364. { echo ' # Zero-day exploit defense.';
  365. echo ' # http://forum.nginx.org/read.php?2,88845,page=3';
  366. echo " # Won't work properly (404 error) if the file is not stored on this";
  367. echo " # server, which is entirely possible with php-fpm/php-fcgi.";
  368. echo " # Comment the 'try_files' line out if you set up php-fpm/php-fcgi on";
  369. echo " # another machine. And then cross your fingers that you won't get hacked.";
  370. echo " try_files \$uri \$uri/ /index.php;";
  371. echo ' # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini';
  372. echo ' fastcgi_split_path_info ^(.+\.php)(/.+)$;';
  373. echo ' # With php-cgi alone:';
  374. echo ' # fastcgi_pass 127.0.0.1:9000;';
  375. echo ' # With php-fpm:';
  376. echo ' fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;';
  377. echo ' fastcgi_read_timeout 30;';
  378. echo ' include fastcgi_params;';
  379. echo ' fastcgi_index index.php;';
  380. echo " fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;";
  381. echo ' }';
  382. echo '';
  383. echo ' # deny access to all dot files';
  384. echo ' location ~ /\. {';
  385. echo ' deny all;';
  386. echo ' }';
  387. echo '';
  388. echo ' #deny access to store';
  389. echo ' location ~ /store {';
  390. echo ' deny all;';
  391. echo ' }';
  392. echo ' location ~ /(data|conf|bin|inc)/ {';
  393. echo ' deny all;';
  394. echo ' }';
  395. echo ' location ~ /\.ht {';
  396. echo ' deny all;';
  397. echo ' }';
  398. echo '}';
  399. echo ''; } >> "/etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME"
  400. else
  401. echo -n '' > "/etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME"
  402. fi
  403. { echo 'server {';
  404. echo " listen 127.0.0.1:${DOKUWIKI_ONION_PORT} default_server;";
  405. echo " root /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs;";
  406. echo " server_name $DOKUWIKI_ONION_HOSTNAME;";
  407. echo ' access_log /dev/null;';
  408. echo " error_log /dev/null;";
  409. echo ' index index.php;';
  410. echo ' charset utf-8;';
  411. echo ' proxy_read_timeout 86400s;'; } >> "/etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME"
  412. function_check nginx_security_options
  413. nginx_security_options "$DOKUWIKI_DOMAIN_NAME"
  414. { echo ' add_header Strict-Transport-Security "max-age=0;";';
  415. echo '';
  416. echo ' # rewrite to front controller as default rule';
  417. echo ' location / {'; } >> "/etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME"
  418. function_check nginx_limits
  419. nginx_limits "$DOKUWIKI_DOMAIN_NAME"
  420. { echo " rewrite ^/(.*) /index.php?q=\$uri&\$args last;";
  421. echo ' }';
  422. echo '';
  423. echo ' # statically serve these file types when possible';
  424. echo ' # otherwise fall back to front controller';
  425. echo ' # allow browser to cache them';
  426. echo ' # added .htm for advanced source code editor library';
  427. echo ' location ~* \.(jpg|jpeg|gif|png|ico|css|js|htm|html|ttf|woff|svg)$ {';
  428. echo ' expires 30d;';
  429. echo " try_files \$uri /index.php?q=\$uri&\$args;";
  430. echo ' }';
  431. echo '';
  432. echo ' # block these file types';
  433. echo ' location ~* \.(tpl|md|tgz|log|out)$ {';
  434. echo ' deny all;';
  435. echo ' }';
  436. echo '';
  437. echo ' # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000';
  438. echo ' # or a unix socket';
  439. echo ' location ~* \.php$ {'; } >> "/etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME"
  440. function_check nginx_limits
  441. nginx_limits "$DOKUWIKI_DOMAIN_NAME"
  442. { echo ' # Zero-day exploit defense.';
  443. echo ' # http://forum.nginx.org/read.php?2,88845,page=3';
  444. echo " # Won't work properly (404 error) if the file is not stored on this";
  445. echo " # server, which is entirely possible with php-fpm/php-fcgi.";
  446. echo " # Comment the 'try_files' line out if you set up php-fpm/php-fcgi on";
  447. echo " # another machine. And then cross your fingers that you won't get hacked.";
  448. echo " try_files \$uri \$uri/ /index.php;";
  449. echo ' # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini';
  450. echo ' fastcgi_split_path_info ^(.+\.php)(/.+)$;';
  451. echo ' # With php-cgi alone:';
  452. echo ' # fastcgi_pass 127.0.0.1:9000;';
  453. echo ' # With php-fpm:';
  454. echo ' fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;';
  455. echo ' fastcgi_read_timeout 30;';
  456. echo ' include fastcgi_params;';
  457. echo ' fastcgi_index index.php;';
  458. echo " fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;";
  459. echo ' }';
  460. echo '';
  461. echo ' # deny access to all dot files';
  462. echo ' location ~ /\. {';
  463. echo ' deny all;';
  464. echo ' }';
  465. echo '';
  466. echo ' #deny access to store';
  467. echo ' location ~ /store {';
  468. echo ' deny all;';
  469. echo ' }';
  470. echo ' location ~ /(data|conf|bin|inc)/ {';
  471. echo ' deny all;';
  472. echo ' }';
  473. echo ' location ~ /\.ht {';
  474. echo ' deny all;';
  475. echo ' }';
  476. echo '}'; } >> "/etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME"
  477. function_check create_site_certificate
  478. create_site_certificate "$DOKUWIKI_DOMAIN_NAME" 'yes'
  479. function_check configure_php
  480. configure_php
  481. nginx_ensite "$DOKUWIKI_DOMAIN_NAME"
  482. systemctl restart php7.0-fpm
  483. systemctl restart nginx
  484. function_check add_ddns_domain
  485. add_ddns_domain "$DOKUWIKI_DOMAIN_NAME"
  486. "${PROJECT_NAME}-pass" -u "$MY_USERNAME" -a dokuwiki -p "$DOKUWIKI_ADMIN_PASSWORD"
  487. APP_INSTALLED=1
  488. }
  489. # NOTE: deliberately no exit 0