Selaa lähdekoodia

Add bludit app

Bob Mottram 7 vuotta sitten
vanhempi
commit
7f89e7d87a
2 muutettua tiedostoa jossa 489 lisäystä ja 156 poistoa
  1. 334
    0
      src/freedombone-app-bludit
  2. 155
    156
      src/freedombone-template

+ 334
- 0
src/freedombone-app-bludit Näytä tiedosto

@@ -0,0 +1,334 @@
1
+#!/bin/bash
2
+#
3
+# .---.                  .              .
4
+# |                      |              |
5
+# |--- .--. .-.  .-.  .-.|  .-. .--.--. |.-.  .-. .--.  .-.
6
+# |    |   (.-' (.-' (   | (   )|  |  | |   )(   )|  | (.-'
7
+# '    '     --'  --'  -' -  -' '  '   -' -'   -' '   -  --'
8
+#
9
+#                    Freedom in the Cloud
10
+#
11
+# Databaseless blogging system
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
+
31
+VARIANTS='full full-vim'
32
+
33
+IN_DEFAULT_INSTALL=0
34
+SHOW_ON_ABOUT=1
35
+
36
+BLUDIT_DOMAIN_NAME=
37
+BLUDIT_CODE=
38
+BLUDIT_ONION_PORT=9361
39
+BLUDIT_REPO="https://github.com/bludit/bludit"
40
+BLUDIT_COMMIT='0e27e31a84421b3e6bd000a77bc89c2dff3c446a'
41
+
42
+bludit=(ONION_ONLY
43
+             BLUDIT_DOMAIN_NAME
44
+             BLUDIT_CODE
45
+             DDNS_PROVIDER
46
+             MY_USERNAME)
47
+
48
+function logging_on_bludit {
49
+    echo -n ''
50
+}
51
+
52
+function logging_off_bludit {
53
+    echo -n ''
54
+}
55
+
56
+function remove_user_bludit {
57
+    remove_username="$1"
58
+
59
+    "${PROJECT_NAME}-pass" -u "$remove_username" --rmapp bludit
60
+}
61
+
62
+function add_user_bludit {
63
+    new_username="$1"
64
+    new_user_password="$2"
65
+
66
+    "${PROJECT_NAME}-pass" -u "$new_username" -a bludit -p "$new_user_password"
67
+    echo '0'
68
+}
69
+
70
+function install_interactive_bludit {
71
+    if [ ! "$ONION_ONLY" ]; then
72
+        ONION_ONLY='no'
73
+    fi
74
+
75
+    if [[ "$ONION_ONLY" != "no" ]]; then
76
+        BLUDIT_DOMAIN_NAME='bludit.local'
77
+        write_config_param "BLUDIT_DOMAIN_NAME" "$BLUDIT_DOMAIN_NAME"
78
+    else
79
+        interactive_site_details "bludit" "BLUDIT_DOMAIN_NAME" "bludit_CODE"
80
+    fi
81
+    APP_INSTALLED=1
82
+}
83
+
84
+function change_password_bludit {
85
+    curr_username="$1"
86
+    new_user_password="$2"
87
+
88
+    read_config_param 'BLUDIT_DOMAIN_NAME'
89
+
90
+    "${PROJECT_NAME}-pass" -u "$curr_username" -a bludit -p "$new_user_password"
91
+}
92
+
93
+function reconfigure_bludit {
94
+    # This is used if you need to switch identity. Dump old keys and generate new ones
95
+    echo -n ''
96
+}
97
+
98
+function upgrade_bludit {
99
+    CURR_BLUDIT_COMMIT=$(get_completion_param "bludit commit")
100
+    if [[ "$CURR_BLUDIT_COMMIT" == "$BLUDIT_COMMIT" ]]; then
101
+        return
102
+    fi
103
+
104
+    if grep -q "bludit domain" "$COMPLETION_FILE"; then
105
+        BLUDIT_DOMAIN_NAME=$(get_completion_param "bludit domain")
106
+    fi
107
+
108
+    # update to the next commit
109
+    set_repo_commit "/var/www/$BLUDIT_DOMAIN_NAME/htdocs" "bludit commit" "$BLUDIT_COMMIT" $BLUDIT_REPO
110
+    chown -R www-data:www-data "/var/www/${BLUDIT_DOMAIN_NAME}/htdocs"
111
+}
112
+
113
+function backup_local_bludit {
114
+    BLUDIT_DOMAIN_NAME='bludit'
115
+    if grep -q "bludit domain" "$COMPLETION_FILE"; then
116
+        BLUDIT_DOMAIN_NAME=$(get_completion_param "bludit domain")
117
+    fi
118
+
119
+    source_directory=/var/www/${BLUDIT_DOMAIN_NAME}/htdocs
120
+
121
+    suspend_site "${BLUDIT_DOMAIN_NAME}"
122
+
123
+    dest_directory=bludit
124
+    backup_directory_to_usb "$source_directory" $dest_directory
125
+
126
+    restart_site
127
+}
128
+
129
+function restore_local_bludit {
130
+    if ! grep -q "bludit domain" "$COMPLETION_FILE"; then
131
+        return
132
+    fi
133
+    BLUDIT_DOMAIN_NAME=$(get_completion_param "bludit domain")
134
+    if [ "$BLUDIT_DOMAIN_NAME" ]; then
135
+        temp_restore_dir=/root/tempbludit
136
+        bludit_dir=/var/www/${BLUDIT_DOMAIN_NAME}/htdocs
137
+
138
+        restore_directory_from_usb $temp_restore_dir bludit
139
+        if [ -d $temp_restore_dir ]; then
140
+            if [ -d "$temp_restore_dir$bludit_dir" ]; then
141
+                cp -rp "$temp_restore_dir$bludit_dir"/* "$bludit_dir"/
142
+            else
143
+                if [ ! -d "$bludit_dir" ]; then
144
+                    mkdir "$bludit_dir"
145
+                fi
146
+                cp -rp "$temp_restore_dir"/* "$bludit_dir"/
147
+            fi
148
+            chown -R www-data:www-data "$bludit_dir"
149
+            rm -rf $temp_restore_dir
150
+        fi
151
+    fi
152
+}
153
+
154
+function backup_remote_bludit {
155
+    BLUDIT_DOMAIN_NAME='bludit'
156
+    if grep -q "bludit domain" "$COMPLETION_FILE"; then
157
+        BLUDIT_DOMAIN_NAME=$(get_completion_param "bludit domain")
158
+    fi
159
+
160
+    source_directory=/var/www/${BLUDIT_DOMAIN_NAME}/htdocs
161
+
162
+    suspend_site "${BLUDIT_DOMAIN_NAME}"
163
+
164
+    dest_directory=bludit
165
+    backup_directory_to_friend "$source_directory" $dest_directory
166
+
167
+    restart_site
168
+}
169
+
170
+function restore_remote_bludit {
171
+    if ! grep -q "bludit domain" "$COMPLETION_FILE"; then
172
+        return
173
+    fi
174
+    BLUDIT_DOMAIN_NAME=$(get_completion_param "bludit domain")
175
+    if [ "$BLUDIT_DOMAIN_NAME" ]; then
176
+        temp_restore_dir=/root/tempbludit
177
+        bludit_dir=/var/www/${BLUDIT_DOMAIN_NAME}/htdocs
178
+
179
+        restore_directory_from_friend $temp_restore_dir bludit
180
+        if [ -d $temp_restore_dir ]; then
181
+            if [ -d "$temp_restore_dir$bludit_dir" ]; then
182
+                cp -rp "$temp_restore_dir$bludit_dir"/* "$bludit_dir"/
183
+            else
184
+                if [ ! -d "$bludit_dir" ]; then
185
+                    mkdir "$bludit_dir"
186
+                fi
187
+                cp -rp $temp_restore_dir/* "$bludit_dir"/
188
+            fi
189
+            chown -R www-data:www-data "$bludit_dir"
190
+            rm -rf $temp_restore_dir
191
+        fi
192
+    fi
193
+}
194
+
195
+function remove_bludit {
196
+    nginx_dissite "$BLUDIT_DOMAIN_NAME"
197
+    remove_certs "$BLUDIT_DOMAIN_NAME"
198
+
199
+    if [ -d "/var/www/$BLUDIT_DOMAIN_NAME" ]; then
200
+        rm -rf "/var/www/$BLUDIT_DOMAIN_NAME"
201
+    fi
202
+    if [ -f "/etc/nginx/sites-available/$BLUDIT_DOMAIN_NAME" ]; then
203
+        rm "/etc/nginx/sites-available/$BLUDIT_DOMAIN_NAME"
204
+    fi
205
+    remove_onion_service bludit ${BLUDIT_ONION_PORT}
206
+    if grep -q "bludit" /etc/crontab; then
207
+        sed -i "/bludit/d" /etc/crontab
208
+    fi
209
+    remove_app bludit
210
+    remove_completion_param install_bludit
211
+    sed -i '/bludit/d' "$COMPLETION_FILE"
212
+
213
+    remove_ddns_domain "$BLUDIT_DOMAIN_NAME"
214
+}
215
+
216
+function install_bludit {
217
+    apt-get -yq install php-gettext php-curl php-gd php-mysql git curl
218
+    apt-get -yq install memcached php-memcached php-intl exiftool libfcgi0ldbl
219
+
220
+    if [ ! -d "/var/www/$BLUDIT_DOMAIN_NAME" ]; then
221
+        mkdir "/var/www/$BLUDIT_DOMAIN_NAME"
222
+    fi
223
+    if [ ! -d "/var/www/$BLUDIT_DOMAIN_NAME/htdocs" ]; then
224
+        if [ -d /repos/bludit ]; then
225
+            mkdir "/var/www/$BLUDIT_DOMAIN_NAME/htdocs"
226
+            cp -r -p /repos/bludit/. "/var/www/$BLUDIT_DOMAIN_NAME/htdocs"
227
+            cd "/var/www/$BLUDIT_DOMAIN_NAME/htdocs" || exit 324687356
228
+            git pull
229
+        else
230
+            git_clone $BLUDIT_REPO "/var/www/$BLUDIT_DOMAIN_NAME/htdocs"
231
+        fi
232
+
233
+        if [ ! -d "/var/www/$BLUDIT_DOMAIN_NAME/htdocs" ]; then
234
+            echo $'Unable to clone bludit repo'
235
+            exit 87525
236
+        fi
237
+    fi
238
+
239
+    cd "/var/www/$BLUDIT_DOMAIN_NAME/htdocs" || exit 36587356
240
+    git checkout $BLUDIT_COMMIT -b $BLUDIT_COMMIT
241
+    set_completion_param "bludit commit" "$BLUDIT_COMMIT"
242
+
243
+    chmod g+w "/var/www/$BLUDIT_DOMAIN_NAME/htdocs"
244
+    chown -R www-data:www-data "/var/www/$BLUDIT_DOMAIN_NAME/htdocs"
245
+
246
+    add_ddns_domain "$BLUDIT_DOMAIN_NAME"
247
+
248
+    BLUDIT_ONION_HOSTNAME=$(add_onion_service bludit 80 ${BLUDIT_ONION_PORT})
249
+
250
+    bludit_nginx_site=/etc/nginx/sites-available/$BLUDIT_DOMAIN_NAME
251
+    if [[ "$ONION_ONLY" == "no" ]]; then
252
+        nginx_http_redirect "$BLUDIT_DOMAIN_NAME" "index index.php"
253
+        { echo 'server {';
254
+          echo '  listen 443 ssl;';
255
+          echo '  #listen [::]:443 ssl;';
256
+          echo "  server_name $BLUDIT_DOMAIN_NAME;";
257
+          echo ''; } >> "$bludit_nginx_site"
258
+        nginx_compress "$BLUDIT_DOMAIN_NAME"
259
+        echo '' >> "$bludit_nginx_site"
260
+        echo '  # Security' >> "$bludit_nginx_site"
261
+        nginx_ssl "$BLUDIT_DOMAIN_NAME"
262
+
263
+        nginx_security_options "$BLUDIT_DOMAIN_NAME"
264
+
265
+        { echo '  add_header Strict-Transport-Security max-age=15768000;';
266
+          echo '';
267
+          echo '  # Logs';
268
+          echo '  access_log /dev/null;';
269
+          echo '  error_log /dev/null;';
270
+          echo '';
271
+          echo '  # Root';
272
+          echo "  root /var/www/$BLUDIT_DOMAIN_NAME/htdocs;";
273
+          echo '';
274
+          echo '  index index.php;';
275
+          echo '  location ~ \.php {';
276
+          echo '    include snippets/fastcgi-php.conf;';
277
+          echo '    fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;';
278
+          echo '    fastcgi_read_timeout 30;';
279
+          echo '  }';
280
+          echo '';
281
+          echo '  # Location';
282
+          echo '  location / {'; } >> "$bludit_nginx_site"
283
+        nginx_limits "$BLUDIT_DOMAIN_NAME" '15m'
284
+        { echo "    try_files \$uri \$uri/ /index.html;";
285
+          echo '  }';
286
+          echo '}'; } >> "$bludit_nginx_site"
287
+    else
288
+        echo -n '' > "$bludit_nginx_site"
289
+    fi
290
+    { echo 'server {';
291
+      echo "    listen 127.0.0.1:$BLUDIT_ONION_PORT default_server;";
292
+      echo "    server_name $BLUDIT_ONION_HOSTNAME;";
293
+      echo ''; } >> "$bludit_nginx_site"
294
+    nginx_compress "$BLUDIT_DOMAIN_NAME"
295
+    echo '' >> "$bludit_nginx_site"
296
+    nginx_security_options "$BLUDIT_DOMAIN_NAME"
297
+    { echo '';
298
+      echo '  # Logs';
299
+      echo '  access_log /dev/null;';
300
+      echo '  error_log /dev/null;';
301
+      echo '';
302
+      echo '  # Root';
303
+      echo "  root /var/www/$BLUDIT_DOMAIN_NAME/htdocs;";
304
+      echo '';
305
+      echo '  index index.php;';
306
+      echo '  location ~ \.php {';
307
+      echo '    include snippets/fastcgi-php.conf;';
308
+      echo '    fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;';
309
+      echo '    fastcgi_read_timeout 30;';
310
+      echo '  }';
311
+      echo '';
312
+      echo '  # Location';
313
+      echo '  location / {'; } >> "$bludit_nginx_site"
314
+    nginx_limits "$BLUDIT_DOMAIN_NAME" '15m'
315
+    { echo "    try_files \$uri \$uri/ index.html;";
316
+      echo '  }';
317
+      echo '}'; } >> "$bludit_nginx_site"
318
+
319
+    configure_php
320
+
321
+    create_site_certificate "$BLUDIT_DOMAIN_NAME" 'yes'
322
+
323
+    nginx_ensite "$BLUDIT_DOMAIN_NAME"
324
+
325
+    systemctl restart php7.0-fpm
326
+    systemctl restart nginx
327
+
328
+    "${PROJECT_NAME}-pass" -u "$MY_USERNAME" -a bludit -p "$BLUDIT_ADMIN_PASSWORD"
329
+    set_completion_param "bludit domain" "$BLUDIT_DOMAIN_NAME"
330
+
331
+    APP_INSTALLED=1
332
+}
333
+
334
+# NOTE: deliberately there is no "exit 0"

+ 155
- 156
src/freedombone-template Näytä tiedosto

@@ -34,7 +34,6 @@ app_name='noapp'
34 34
 app_name_lower=$(echo "${app_name}" | tr '[:upper:]' '[:lower:]')
35 35
 app_name=$app_name_lower
36 36
 app_name_upper=$(echo "${app_name}" | tr '[:lower:]' '[:upper:]')
37
-echo "test: $app_name_upper"
38 37
 app_repo="TODO"
39 38
 app_repo_commit='TODO'
40 39
 app_php=
@@ -257,24 +256,24 @@ echo ''
257 256
 echo "function remove_user_${app_name} {"
258 257
 echo "    remove_username=\"\$1\""
259 258
 echo ''
260
-echo "    \${PROJECT_NAME}-pass -u \$remove_username --rmapp ${app_name}"
259
+echo "    \"\${PROJECT_NAME}-pass\" -u \"\$remove_username\" --rmapp ${app_name}"
261 260
 echo '}'
262 261
 echo ''
263 262
 echo "function add_user_${app_name} {"
264 263
 echo "    new_username=\"\$1\""
265 264
 echo "    new_user_password=\"\$2\""
266 265
 echo ''
267
-echo "    \${PROJECT_NAME}-pass -u \$new_username -a ${app_name} -p \"\$new_user_password\""
266
+echo "    \"\${PROJECT_NAME}-pass\" -u \"\$new_username\" -a ${app_name} -p \"\$new_user_password\""
268 267
 echo "    echo '0'"
269 268
 echo '}'
270 269
 echo ''
271 270
 echo "function install_interactive_${app_name} {"
272 271
 if [ ! $app_onion_only ]; then
273
-    echo "    if [ ! \$ONION_ONLY ]; then"
272
+    echo "    if [ ! \"\$ONION_ONLY\" ]; then"
274 273
     echo "        ONION_ONLY='no'"
275 274
     echo '    fi'
276 275
     echo ''
277
-    echo "    if [[ \$ONION_ONLY != \"no\" ]]; then"
276
+    echo "    if [[ \"\$ONION_ONLY\" != \"no\" ]]; then"
278 277
     echo "        ${app_name_upper}_DOMAIN_NAME='${app_name}.local'"
279 278
     echo "        write_config_param \"${app_name_upper}_DOMAIN_NAME\" \"\$${app_name_upper}_DOMAIN_NAME\""
280 279
     echo '    else'
@@ -292,7 +291,7 @@ echo "    new_user_password=\"\$2\""
292 291
 echo ''
293 292
 echo "    read_config_param '${app_name_upper}_DOMAIN_NAME'"
294 293
 echo ''
295
-echo "    \${PROJECT_NAME}-pass -u \"\$curr_username\" -a ${app_name} -p \"\$new_user_password\""
294
+echo "    \"\${PROJECT_NAME}-pass\" -u \"\$curr_username\" -a ${app_name} -p \"\$new_user_password\""
296 295
 echo '}'
297 296
 
298 297
 if [[ "$database_type" == "mariadb" || "$database_type" == "mysql" || "$database_type" == "postgres"* ]]; then
@@ -361,23 +360,23 @@ echo "    if [[ \"\$CURR_${app_name_upper}_COMMIT\" == \"\$${app_name_upper}_COM
361 360
 echo '        return'
362 361
 echo '    fi'
363 362
 echo ''
364
-echo "    if grep -q \"${app_name} domain\" \$COMPLETION_FILE; then"
363
+echo "    if grep -q \"${app_name} domain\" \"\$COMPLETION_FILE\"; then"
365 364
 echo "        ${app_name_upper}_DOMAIN_NAME=\$(get_completion_param \"${app_name} domain\")"
366 365
 echo '    fi'
367 366
 echo ''
368 367
 echo '    # update to the next commit'
369 368
 if [ ! "$app_dir" ]; then
370
-    echo "    set_repo_commit /var/www/\$${app_name_upper}_DOMAIN_NAME/htdocs \"${app_name} commit\" \"\$${app_name_upper}_COMMIT\" \$${app_name_upper}_REPO"
371
-    echo "    chown -R www-data:www-data /var/www/\${${app_name_upper}_DOMAIN_NAME}/htdocs"
369
+    echo "    set_repo_commit \"/var/www/\$${app_name_upper}_DOMAIN_NAME/htdocs\" \"${app_name} commit\" \"\$${app_name_upper}_COMMIT\" \$${app_name_upper}_REPO"
370
+    echo "    chown -R www-data:www-data \"/var/www/\${${app_name_upper}_DOMAIN_NAME}/htdocs\""
372 371
 else
373
-    echo "    set_repo_commit ${app_dir} \"${app_name} commit\" \"\$${app_name_upper}_COMMIT\" \$${app_name_upper}_REPO"
374
-    echo "    chown -R ${app_name}:${app_name} ${app_dir}"
372
+    echo "    set_repo_commit \"${app_dir}\" \"${app_name} commit\" \"\$${app_name_upper}_COMMIT\" \$${app_name_upper}_REPO"
373
+    echo "    chown -R ${app_name}:${app_name} \"${app_dir}\""
375 374
 fi
376 375
 echo '}'
377 376
 echo ''
378 377
 echo "function backup_local_${app_name} {"
379 378
 echo "    ${app_name_upper}_DOMAIN_NAME='${app_name}'"
380
-echo "    if grep -q \"${app_name} domain\" \$COMPLETION_FILE; then"
379
+echo "    if grep -q \"${app_name} domain\" \"\$COMPLETION_FILE\"; then"
381 380
 echo "        ${app_name_upper}_DOMAIN_NAME=\$(get_completion_param \"${app_name} domain\")"
382 381
 echo '    fi'
383 382
 echo ''
@@ -387,10 +386,10 @@ else
387 386
     echo "    source_directory=${app_dir}"
388 387
 fi
389 388
 echo ''
390
-echo "    suspend_site \${${app_name_upper}_DOMAIN_NAME}"
389
+echo "    suspend_site \"\${${app_name_upper}_DOMAIN_NAME}\""
391 390
 echo ''
392 391
 echo "    dest_directory=${app_name}"
393
-echo "    backup_directory_to_usb \$source_directory \$dest_directory"
392
+echo "    backup_directory_to_usb \"\$source_directory\" \$dest_directory"
394 393
 echo ''
395 394
 if [[ "$database_type" == "mariadb" || "$database_type" == "mysql" ]]; then
396 395
     echo "    backup_database_to_usb ${app_name}"
@@ -405,11 +404,11 @@ echo '    restart_site'
405 404
 echo '}'
406 405
 echo ''
407 406
 echo "function restore_local_${app_name} {"
408
-echo "    if ! grep -q \"${app_name} domain\" \$COMPLETION_FILE; then"
407
+echo "    if ! grep -q \"${app_name} domain\" \"\$COMPLETION_FILE\"; then"
409 408
 echo '        return'
410 409
 echo '    fi'
411 410
 echo "    ${app_name_upper}_DOMAIN_NAME=\$(get_completion_param \"${app_name} domain\")"
412
-echo "    if [ \$${app_name_upper}_DOMAIN_NAME ]; then"
411
+echo "    if [ \"\$${app_name_upper}_DOMAIN_NAME\" ]; then"
413 412
 echo "        temp_restore_dir=/root/temp${app_name}"
414 413
 if [ ! "$app_dir" ]; then
415 414
     echo "        ${app_name}_dir=/var/www/\${${app_name_upper}_DOMAIN_NAME}/htdocs"
@@ -438,15 +437,15 @@ if [[ "$database_type" == "postgres"* ]]; then
438 437
 fi
439 438
 echo "        restore_directory_from_usb \$temp_restore_dir ${app_name}"
440 439
 echo "        if [ -d \$temp_restore_dir ]; then"
441
-echo "            if [ -d cp \$temp_restore_dir\$${app_name}_dir ]; then"
442
-echo "                cp -rp \$temp_restore_dir\$${app_name}_dir/* \$${app_name}_dir/"
440
+echo "            if [ -d \"\$temp_restore_dir\$${app_name}_dir\" ]; then"
441
+echo "                cp -rp \"\$temp_restore_dir\$${app_name}_dir\"/* \"\$${app_name}_dir\"/"
443 442
 echo '            else'
444
-echo "                if [ ! -d \$${app_name}_dir ]; then"
445
-echo "                    mkdir \$${app_name}_dir"
443
+echo "                if [ ! -d \"\$${app_name}_dir\" ]; then"
444
+echo "                    mkdir \"\$${app_name}_dir\""
446 445
 echo '                fi'
447
-echo "                cp -rp \$temp_restore_dir/* \$${app_name}_dir/"
446
+echo "                cp -rp \"\$temp_restore_dir\"/* \"\$${app_name}_dir\"/"
448 447
 echo '            fi'
449
-echo "            chown -R www-data:www-data \$${app_name}_dir"
448
+echo "            chown -R www-data:www-data \"\$${app_name}_dir\""
450 449
 echo "            rm -rf \$temp_restore_dir"
451 450
 echo '        fi'
452 451
 echo ''
@@ -455,7 +454,7 @@ echo '}'
455 454
 echo ''
456 455
 echo "function backup_remote_${app_name} {"
457 456
 echo "    ${app_name_upper}_DOMAIN_NAME='${app_name}'"
458
-echo "    if grep -q \"${app_name} domain\" \$COMPLETION_FILE; then"
457
+echo "    if grep -q \"${app_name} domain\" \"\$COMPLETION_FILE\"; then"
459 458
 echo "        ${app_name_upper}_DOMAIN_NAME=\$(get_completion_param \"${app_name} domain\")"
460 459
 echo '    fi'
461 460
 echo ''
@@ -465,13 +464,13 @@ else
465 464
     echo "    source_directory=${app_dir}"
466 465
 fi
467 466
 echo ''
468
-echo "    suspend_site \${${app_name_upper}_DOMAIN_NAME}"
467
+echo "    suspend_site \"\${${app_name_upper}_DOMAIN_NAME}\""
469 468
 echo ''
470 469
 echo "    dest_directory=${app_name}"
471
-echo "    backup_directory_to_friend \$source_directory \$dest_directory"
472
-echo ''
470
+echo "    backup_directory_to_friend \"\$source_directory\" \$dest_directory"
473 471
 if [[ "$database_type" == "mariadb" || "$database_type" == "mysql" ]]; then
474 472
     echo "    backup_database_to_friend ${app_name}"
473
+    echo ''
475 474
 fi
476 475
 if [[ "$database_type" == "postgres"* ]]; then
477 476
     echo '    USE_POSTGRESQL=1'
@@ -483,11 +482,11 @@ echo '    restart_site'
483 482
 echo '}'
484 483
 echo ''
485 484
 echo "function restore_remote_${app_name} {"
486
-echo "    if ! grep -q \"${app_name} domain\" \$COMPLETION_FILE; then"
485
+echo "    if ! grep -q \"${app_name} domain\" \"\$COMPLETION_FILE\"; then"
487 486
 echo '        return'
488 487
 echo '    fi'
489 488
 echo "    ${app_name_upper}_DOMAIN_NAME=\$(get_completion_param \"${app_name} domain\")"
490
-echo "    if [ \$${app_name_upper}_DOMAIN_NAME ]; then"
489
+echo "    if [ \"\$${app_name_upper}_DOMAIN_NAME\" ]; then"
491 490
 echo "        temp_restore_dir=/root/temp${app_name}"
492 491
 if [ ! "$app_dir" ]; then
493 492
     echo "        ${app_name}_dir=/var/www/\${${app_name_upper}_DOMAIN_NAME}/htdocs"
@@ -499,7 +498,7 @@ if [[ "$database_type" == "mariadb" || "$database_type" == "mysql" ]]; then
499 498
     echo "        ${app_name}_create_database"
500 499
     echo ''
501 500
     echo "        restore_database_from_friend ${app_name}"
502
-    echo "        if [ -d \$temp_restore_dir ]; then"
501
+    echo "        if [ -d \"\$temp_restore_dir\" ]; then"
503 502
     echo "            rm -rf \$temp_restore_dir"
504 503
     echo '        fi'
505 504
     echo ''
@@ -509,22 +508,22 @@ if [[ "$database_type" == "postgres"* ]]; then
509 508
     echo ''
510 509
     echo '        USE_POSTGRESQL=1'
511 510
     echo "        restore_database_from_friend ${app_name}"
512
-    echo "        if [ -d \$temp_restore_dir ]; then"
511
+    echo "        if [ -d \"\$temp_restore_dir\" ]; then"
513 512
     echo "            rm -rf \$temp_restore_dir"
514 513
     echo '        fi'
515 514
     echo ''
516 515
 fi
517 516
 echo "        restore_directory_from_friend \$temp_restore_dir ${app_name}"
518 517
 echo "        if [ -d \$temp_restore_dir ]; then"
519
-echo "            if [ -d cp \$temp_restore_dir\$${app_name}_dir ]; then"
520
-echo "                cp -rp \$temp_restore_dir\$${app_name}_dir/* \$${app_name}_dir/"
518
+echo "            if [ -d \"\$temp_restore_dir\$${app_name}_dir\" ]; then"
519
+echo "                cp -rp \"\$temp_restore_dir\$${app_name}_dir\"/* \"\$${app_name}_dir\"/"
521 520
 echo '            else'
522
-echo "                if [ ! -d \$${app_name}_dir ]; then"
523
-echo "                    mkdir \$${app_name}_dir"
521
+echo "                if [ ! -d \"\$${app_name}_dir\" ]; then"
522
+echo "                    mkdir \"\$${app_name}_dir\""
524 523
 echo '                fi'
525
-echo "                cp -rp \$temp_restore_dir/* \$${app_name}_dir/"
524
+echo "                cp -rp \$temp_restore_dir/* \"\$${app_name}_dir\"/"
526 525
 echo '            fi'
527
-echo "            chown -R www-data:www-data \$${app_name}_dir"
526
+echo "            chown -R www-data:www-data \"\$${app_name}_dir\""
528 527
 echo "            rm -rf \$temp_restore_dir"
529 528
 echo '        fi'
530 529
 echo ''
@@ -536,8 +535,8 @@ if [[ "$app_node" == 'yes' ]]; then
536 535
     echo "    remove_nodejs ${app_name}"
537 536
     echo ''
538 537
 fi
539
-echo "    nginx_dissite \$${app_name_upper}_DOMAIN_NAME"
540
-echo "    remove_certs \$${app_name_upper}_DOMAIN_NAME"
538
+echo "    nginx_dissite \"\$${app_name_upper}_DOMAIN_NAME\""
539
+echo "    remove_certs \"\$${app_name_upper}_DOMAIN_NAME\""
541 540
 echo ''
542 541
 if [ $app_daemon ]; then
543 542
     echo "    if [ -f /etc/systemd/system/${app_name}.service ]; then"
@@ -548,11 +547,11 @@ if [ $app_daemon ]; then
548 547
     echo "    userdel -r ${app_name}"
549 548
 fi
550 549
 echo ''
551
-echo "    if [ -d /var/www/\$${app_name_upper}_DOMAIN_NAME ]; then"
552
-echo "        rm -rf /var/www/\$${app_name_upper}_DOMAIN_NAME"
550
+echo "    if [ -d \"/var/www/\$${app_name_upper}_DOMAIN_NAME\" ]; then"
551
+echo "        rm -rf \"/var/www/\$${app_name_upper}_DOMAIN_NAME\""
553 552
 echo '    fi'
554
-echo "    if [ -f /etc/nginx/sites-available/\$${app_name_upper}_DOMAIN_NAME ]; then"
555
-echo "        rm /etc/nginx/sites-available/\$${app_name_upper}_DOMAIN_NAME"
553
+echo "    if [ -f \"/etc/nginx/sites-available/\$${app_name_upper}_DOMAIN_NAME\" ]; then"
554
+echo "        rm \"/etc/nginx/sites-available/\$${app_name_upper}_DOMAIN_NAME\""
556 555
 echo '    fi'
557 556
 if [[ "$database_type" == "mariadb" || "$database_type" == "mysql" ]]; then
558 557
     echo "    drop_database ${app_name}"
@@ -566,13 +565,13 @@ echo "        sed -i \"/${app_name}/d\" /etc/crontab"
566 565
 echo '    fi'
567 566
 echo "    remove_app ${app_name}"
568 567
 echo "    remove_completion_param install_${app_name}"
569
-echo "    sed -i '/${app_name}/d' \$COMPLETION_FILE"
568
+echo "    sed -i '/${app_name}/d' \"\$COMPLETION_FILE\""
570 569
 if [ "$app_port" ]; then
571 570
     echo ''
572 571
     echo "    firewall_remove ${app_port} tcp"
573 572
 fi
574 573
 echo ''
575
-echo "    remove_ddns_domain \$${app_name_upper}_DOMAIN_NAME"
574
+echo "    remove_ddns_domain \"\$${app_name_upper}_DOMAIN_NAME\""
576 575
 echo '}'
577 576
 echo ''
578 577
 echo "function install_${app_name} {"
@@ -594,32 +593,32 @@ if [[ "$app_php" == 'yes' ]]; then
594 593
     echo '    apt-get -yq install memcached php-memcached php-intl exiftool libfcgi0ldbl'
595 594
     echo ''
596 595
 fi
597
-echo "    if [ ! -d /var/www/\$${app_name_upper}_DOMAIN_NAME ]; then"
598
-echo "        mkdir /var/www/\$${app_name_upper}_DOMAIN_NAME"
596
+echo "    if [ ! -d \"/var/www/\$${app_name_upper}_DOMAIN_NAME\" ]; then"
597
+echo "        mkdir \"/var/www/\$${app_name_upper}_DOMAIN_NAME\""
599 598
 echo '    fi'
600
-echo "    if [ ! -d /var/www/\$${app_name_upper}_DOMAIN_NAME/htdocs ]; then"
599
+echo "    if [ ! -d \"/var/www/\$${app_name_upper}_DOMAIN_NAME/htdocs\" ]; then"
601 600
 echo "        if [ -d /repos/${app_name} ]; then"
602
-echo "            mkdir /var/www/\$${app_name_upper}_DOMAIN_NAME/htdocs"
601
+echo "            mkdir \"/var/www/\$${app_name_upper}_DOMAIN_NAME/htdocs\""
603 602
 if [ ! "$app_dir" ]; then
604
-    echo "            cp -r -p /repos/${app_name}/. /var/www/\$${app_name_upper}_DOMAIN_NAME/htdocs"
605
-    echo "            cd /var/www/\$${app_name_upper}_DOMAIN_NAME/htdocs"
603
+    echo "            cp -r -p /repos/${app_name}/. \"/var/www/\$${app_name_upper}_DOMAIN_NAME/htdocs\""
604
+    echo "            cd \"/var/www/\$${app_name_upper}_DOMAIN_NAME/htdocs\" || exit 324687356"
606 605
 else
607
-    echo "            cp -r -p /repos/${app_name}/. ${app_dir}"
608
-    echo "            cd ${app_dir}"
606
+    echo "            cp -r -p /repos/${app_name}/. \"${app_dir}\""
607
+    echo "            cd \"${app_dir}\" || exit 36487365"
609 608
 fi
610 609
 echo '            git pull'
611 610
 echo '        else'
612 611
 if [ ! "$app_dir" ]; then
613
-    echo "            git_clone \$${app_name_upper}_REPO /var/www/\$${app_name_upper}_DOMAIN_NAME/htdocs"
612
+    echo "            git_clone \$${app_name_upper}_REPO \"/var/www/\$${app_name_upper}_DOMAIN_NAME/htdocs\""
614 613
 else
615
-    echo "            git_clone \$${app_name_upper}_REPO ${app_dir}"
614
+    echo "            git_clone \$${app_name_upper}_REPO \"${app_dir}\""
616 615
 fi
617 616
 echo '        fi'
618 617
 echo ''
619 618
 if [ ! "$app_dir" ]; then
620
-    echo "        if [ ! -d /var/www/\$${app_name_upper}_DOMAIN_NAME/htdocs ]; then"
619
+    echo "        if [ ! -d \"/var/www/\$${app_name_upper}_DOMAIN_NAME/htdocs\" ]; then"
621 620
 else
622
-    echo "        if [ ! -d ${app_dir} ]; then"
621
+    echo "        if [ ! -d \"${app_dir}\" ]; then"
623 622
 fi
624 623
 echo "            echo \$'Unable to clone ${app_name} repo'"
625 624
 echo '            exit 87525'
@@ -627,156 +626,156 @@ echo '        fi'
627 626
 echo '    fi'
628 627
 echo ''
629 628
 if [ ! "$app_dir" ]; then
630
-    echo "    cd /var/www/\$${app_name_upper}_DOMAIN_NAME/htdocs"
629
+    echo "    cd \"/var/www/\$${app_name_upper}_DOMAIN_NAME/htdocs\" || exit 36587356"
631 630
 else
632
-    echo "    cd ${app_dir}"
631
+    echo "    cd \"${app_dir}\" || exit 3463754637"
633 632
 fi
634 633
 echo "    git checkout \$${app_name_upper}_COMMIT -b \$${app_name_upper}_COMMIT"
635 634
 echo "    set_completion_param \"${app_name} commit\" \"\$${app_name_upper}_COMMIT\""
636 635
 echo ''
637
-echo "    chmod g+w /var/www/\$${app_name_upper}_DOMAIN_NAME/htdocs"
638
-echo "    chown -R www-data:www-data /var/www/\$${app_name_upper}_DOMAIN_NAME/htdocs"
636
+echo "    chmod g+w \"/var/www/\$${app_name_upper}_DOMAIN_NAME/htdocs\""
637
+echo "    chown -R www-data:www-data \"/var/www/\$${app_name_upper}_DOMAIN_NAME/htdocs\""
639 638
 
640 639
 if [[ "$database_type" == "mariadb" || "$database_type" == "mysql" || "$database_type" == "postgres"*  ]]; then
641 640
     echo ''
642 641
     echo "    ${app_name}_create_database"
643 642
 fi
644 643
 echo ''
645
-echo "    add_ddns_domain \$${app_name_upper}_DOMAIN_NAME"
644
+echo "    add_ddns_domain \"\$${app_name_upper}_DOMAIN_NAME\""
646 645
 echo ''
647 646
 echo "    ${app_name_upper}_ONION_HOSTNAME=\$(add_onion_service ${app_name} 80 \${${app_name_upper}_ONION_PORT})"
648 647
 echo ''
649 648
 echo "    ${app_name}_nginx_site=/etc/nginx/sites-available/\$${app_name_upper}_DOMAIN_NAME"
650 649
 
651
-if [ $app_onion_only ]; then
650
+if [ ! $app_onion_only ]; then
652 651
     echo "    if [[ \"\$ONION_ONLY\" == \"no\" ]]; then"
653 652
     if [[ "$app_php" == 'yes' ]]; then
654
-        echo "        nginx_http_redirect \$${app_name_upper}_DOMAIN_NAME \"index index.php\""
653
+        echo "        nginx_http_redirect \"\$${app_name_upper}_DOMAIN_NAME\" \"index index.php\""
655 654
     else
656
-        echo "        nginx_http_redirect \$${app_name_upper}_DOMAIN_NAME \"index index.html\""
655
+        echo "        nginx_http_redirect \"\$${app_name_upper}_DOMAIN_NAME\" \"index index.html\""
657 656
     fi
658
-    echo "        echo 'server {' >> \$${app_name}_nginx_site"
659
-    echo "        echo '  listen 443 ssl;' >> \$${app_name}_nginx_site"
660
-    echo "        echo '  #listen [::]:443 ssl;' >> \$${app_name}_nginx_site"
661
-    echo "        echo \"  server_name \$${app_name_upper}_DOMAIN_NAME;\" >> \$${app_name}_nginx_site"
662
-    echo "        echo '' >> \$${app_name}_nginx_site"
663
-    echo "        nginx_compress \$${app_name_upper}_DOMAIN_NAME"
664
-    echo "        echo '' >> \$${app_name}_nginx_site"
665
-    echo "        echo '  # Security' >> \$${app_name}_nginx_site"
666
-    echo "        nginx_ssl \$${app_name_upper}_DOMAIN_NAME"
667
-    echo ''
668
-    echo "        nginx_security_options \$${app_name_upper}_DOMAIN_NAME"
669
-    echo ''
670
-    echo "        echo '  add_header Strict-Transport-Security max-age=15768000;' >> \$${app_name}_nginx_site"
671
-    echo "        echo '' >> \$${app_name}_nginx_site"
672
-    echo "        echo '  # Logs' >> \$${app_name}_nginx_site"
673
-    echo "        echo '  access_log /dev/null;' >> \$${app_name}_nginx_site"
674
-    echo "        echo '  error_log /dev/null;' >> \$${app_name}_nginx_site"
675
-    echo "        echo '' >> \$${app_name}_nginx_site"
676
-    echo "        echo '  # Root' >> \$${app_name}_nginx_site"
677
-    echo "        echo \"  root /var/www/\$${app_name_upper}_DOMAIN_NAME/htdocs;\" >> \$${app_name}_nginx_site"
678
-    echo "        echo '' >> \$${app_name}_nginx_site"
657
+    echo "        { echo 'server {';"
658
+    echo "          echo '  listen 443 ssl;';"
659
+    echo "          echo '  #listen [::]:443 ssl;';"
660
+    echo "          echo \"  server_name \$${app_name_upper}_DOMAIN_NAME;\";"
661
+    echo "          echo ''; } >> \"\$${app_name}_nginx_site\""
662
+    echo "        nginx_compress \"\$${app_name_upper}_DOMAIN_NAME\""
663
+    echo "        echo '' >> \"\$${app_name}_nginx_site\""
664
+    echo "        echo '  # Security' >> \"\$${app_name}_nginx_site\""
665
+    echo "        nginx_ssl \"\$${app_name_upper}_DOMAIN_NAME\""
666
+    echo ''
667
+    echo "        nginx_security_options \"\$${app_name_upper}_DOMAIN_NAME\""
668
+    echo ''
669
+    echo "        { echo '  add_header Strict-Transport-Security max-age=15768000;';"
670
+    echo "          echo '';"
671
+    echo "          echo '  # Logs';"
672
+    echo "          echo '  access_log /dev/null;';"
673
+    echo "          echo '  error_log /dev/null;';"
674
+    echo "          echo '';"
675
+    echo "          echo '  # Root';"
676
+    echo "          echo \"  root /var/www/\$${app_name_upper}_DOMAIN_NAME/htdocs;\";"
677
+    echo "          echo '';"
679 678
     if [[ "$app_php" == 'yes' ]]; then
680
-        echo "        echo '  index index.php;' >> \$${app_name}_nginx_site"
681
-        echo "        echo '  location ~ \\.php {' >> \$${app_name}_nginx_site"
682
-        echo "        echo '    include snippets/fastcgi-php.conf;' >> \$${app_name}_nginx_site"
683
-        echo "        echo '    fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;' >> \$${app_name}_nginx_site"
684
-        echo "        echo '    fastcgi_read_timeout 30;' >> \$${app_name}_nginx_site"
685
-        echo "        echo '  }' >> \$${app_name}_nginx_site"
686
-        echo "        echo '' >> \$${app_name}_nginx_site"
679
+        echo "          echo '  index index.php;';"
680
+        echo "          echo '  location ~ \\.php {';"
681
+        echo "          echo '    include snippets/fastcgi-php.conf;';"
682
+        echo "          echo '    fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;';"
683
+        echo "          echo '    fastcgi_read_timeout 30;';"
684
+        echo "          echo '  }';"
685
+        echo "          echo '';"
687 686
     else
688
-        echo "        echo '  index index.html;' >> \$${app_name}_nginx_site"
687
+        echo "        echo '  index index.html;';"
689 688
     fi
690
-    echo "        echo '  # Location' >> \$${app_name}_nginx_site"
691
-    echo "        echo '  location / {' >> \$${app_name}_nginx_site"
692
-    echo "        nginx_limits \$${app_name_upper}_DOMAIN_NAME '15m'"
689
+    echo "          echo '  # Location';"
690
+    echo "          echo '  location / {'; } >> \"\$${app_name}_nginx_site\""
691
+    echo "        nginx_limits \"\$${app_name_upper}_DOMAIN_NAME\" '15m'"
693 692
     if [ ! $app_daemon ]; then
694
-        echo "        echo '    try_files \$uri \$uri/ /index.html;' >> \$${app_name}_nginx_site"
693
+        echo "        { echo \"    try_files \\\$uri \\\$uri/ /index.html;\";"
695 694
     else
696
-        echo "        echo \"    proxy_pass http://localhost:\$${app_name_upper}_PORT_INTERNAL;\" >> \$${app_name}_nginx_site"
695
+        echo "        { echo \"    proxy_pass http://localhost:\$${app_name_upper}_PORT_INTERNAL;\";"
697 696
     fi
698
-    echo "        echo '  }' >> \$${app_name}_nginx_site"
699
-    echo "        echo '}' >> \$${app_name}_nginx_site"
697
+    echo "          echo '  }';"
698
+    echo "          echo '}'; } >> \"\$${app_name}_nginx_site\""
700 699
     echo '    else'
701
-    echo "        echo -n '' > \$${app_name}_nginx_site"
700
+    echo "        echo -n '' > \"\$${app_name}_nginx_site\""
702 701
     echo '    fi'
703 702
 else
704
-    echo "    echo -n '' > \$${app_name}_nginx_site"
705
-fi
706
-echo "    echo 'server {' >> \$${app_name}_nginx_site"
707
-echo "    echo \"    listen 127.0.0.1:\$${app_name_upper}_ONION_PORT default_server;\" >> \$${app_name}_nginx_site"
708
-echo "    echo \"    server_name \$${app_name_upper}_ONION_HOSTNAME;\" >> \$${app_name}_nginx_site"
709
-echo "    echo '' >> \$${app_name}_nginx_site"
710
-echo "    nginx_compress \$${app_name_upper}_DOMAIN_NAME"
711
-echo "    echo '' >> \$${app_name}_nginx_site"
712
-echo "    nginx_security_options \$${app_name_upper}_DOMAIN_NAME"
713
-echo "    echo '' >> \$${app_name}_nginx_site"
714
-echo "    echo '  # Logs' >> \$${app_name}_nginx_site"
715
-echo "    echo '  access_log /dev/null;' >> \$${app_name}_nginx_site"
716
-echo "    echo '  error_log /dev/null;' >> \$${app_name}_nginx_site"
717
-echo "    echo '' >> \$${app_name}_nginx_site"
718
-echo "    echo '  # Root' >> \$${app_name}_nginx_site"
719
-echo "    echo \"  root /var/www/\$${app_name_upper}_DOMAIN_NAME/htdocs;\" >> \$${app_name}_nginx_site"
720
-echo "    echo '' >> \$${app_name}_nginx_site"
703
+    echo "    echo -n '' > \"\$${app_name}_nginx_site\""
704
+fi
705
+echo "    { echo 'server {';"
706
+echo "      echo \"    listen 127.0.0.1:\$${app_name_upper}_ONION_PORT default_server;\";"
707
+echo "      echo \"    server_name \$${app_name_upper}_ONION_HOSTNAME;\";"
708
+echo "      echo ''; } >> \"\$${app_name}_nginx_site\""
709
+echo "    nginx_compress \"\$${app_name_upper}_DOMAIN_NAME\""
710
+echo "    echo '' >> \"\$${app_name}_nginx_site\""
711
+echo "    nginx_security_options \"\$${app_name_upper}_DOMAIN_NAME\""
712
+echo "    { echo '';"
713
+echo "      echo '  # Logs';"
714
+echo "      echo '  access_log /dev/null;';"
715
+echo "      echo '  error_log /dev/null;';"
716
+echo "      echo '';"
717
+echo "      echo '  # Root';"
718
+echo "      echo \"  root /var/www/\$${app_name_upper}_DOMAIN_NAME/htdocs;\";"
719
+echo "      echo '';"
721 720
 if [[ "$app_php" == 'yes' ]]; then
722
-    echo "    echo '  index index.php;' >> \$${app_name}_nginx_site"
723
-    echo "    echo '  location ~ \\.php {' >> \$${app_name}_nginx_site"
724
-    echo "    echo '    include snippets/fastcgi-php.conf;' >> \$${app_name}_nginx_site"
725
-    echo "    echo '    fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;' >> \$${app_name}_nginx_site"
726
-    echo "    echo '    fastcgi_read_timeout 30;' >> \$${app_name}_nginx_site"
727
-    echo "    echo '  }' >> \$${app_name}_nginx_site"
728
-    echo "    echo '' >> \$${app_name}_nginx_site"
721
+    echo "      echo '  index index.php;';"
722
+    echo "      echo '  location ~ \\.php {';"
723
+    echo "      echo '    include snippets/fastcgi-php.conf;';"
724
+    echo "      echo '    fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;';"
725
+    echo "      echo '    fastcgi_read_timeout 30;';"
726
+    echo "      echo '  }';"
727
+    echo "      echo '';"
729 728
 else
730
-    echo "        echo '  index index.html;' >> \$${app_name}_nginx_site"
729
+    echo "        echo '  index index.html;';"
731 730
 fi
732
-echo "    echo '  # Location' >> \$${app_name}_nginx_site"
733
-echo "    echo '  location / {' >> \$${app_name}_nginx_site"
734
-echo "    nginx_limits \$${app_name_upper}_DOMAIN_NAME '15m'"
731
+echo "      echo '  # Location';"
732
+echo "      echo '  location / {'; } >> \"\$${app_name}_nginx_site\""
733
+echo "    nginx_limits \"\$${app_name_upper}_DOMAIN_NAME\" '15m'"
735 734
 if [ ! $app_daemon ]; then
736
-    echo "    echo '    try_files \$uri \$uri/ index.html;' >> \$${app_name}_nginx_site"
735
+    echo "    { echo \"    try_files \\\$uri \\\$uri/ index.html;\";"
737 736
 else
738
-    echo "    echo \"    proxy_pass http://localhost:\$${app_name_upper}_PORT_INTERNAL;\" >> \$${app_name}_nginx_site"
737
+    echo "      echo \"    proxy_pass http://localhost:\$${app_name_upper}_PORT_INTERNAL;\";"
739 738
 fi
740
-echo "    echo '  }' >> \$${app_name}_nginx_site"
741
-echo "    echo '}' >> \$${app_name}_nginx_site"
739
+echo "      echo '  }';"
740
+echo "      echo '}'; } >> \"\$${app_name}_nginx_site\""
742 741
 if [[ "$app_php" == 'yes' ]]; then
743 742
     echo ''
744 743
     echo '    configure_php'
745 744
 fi
746 745
 if [ $app_daemon ]; then
747 746
     echo ''
748
-    echo "    useradd -d TODO_PATH_TO_INSTALL -s /bin/false ${app_name}"
749
-    echo ''
750
-    echo "    echo '[Unit]' > /etc/systemd/system/${app_name}.service"
751
-    echo "    echo 'Description=${app_name}' >> /etc/systemd/system/${app_name}.service"
752
-    echo "    echo 'After=syslog.target' >> /etc/systemd/system/${app_name}.service"
753
-    echo "    echo 'After=network.target' >> /etc/systemd/system/${app_name}.service"
754
-    echo "    echo '' >> /etc/systemd/system/${app_name}.service"
755
-    echo "    echo '[Service]' >> /etc/systemd/system/${app_name}.service"
756
-    echo "    echo 'Type=simple' >> /etc/systemd/system/${app_name}.service"
757
-    echo "    echo 'User=${app_name}' >> /etc/systemd/system/${app_name}.service"
758
-    echo "    echo 'Group=${app_name}' >> /etc/systemd/system/${app_name}.service"
747
+    echo "    useradd -d \"TODO_PATH_TO_INSTALL\" -s /bin/false ${app_name}"
748
+    echo ''
749
+    echo "    { echo '[Unit]';"
750
+    echo "      echo 'Description=${app_name}';"
751
+    echo "      echo 'After=syslog.target';"
752
+    echo "      echo 'After=network.target';"
753
+    echo "      echo '';"
754
+    echo "      echo '[Service]';"
755
+    echo "      echo 'Type=simple';"
756
+    echo "      echo 'User=${app_name}';"
757
+    echo "      echo 'Group=${app_name}'; } > \"/etc/systemd/system/${app_name}.service\""
759 758
     if [ ! "$app_dir" ]; then
760
-        echo "    echo 'WorkingDirectory=TODO' >> /etc/systemd/system/${app_name}.service"
759
+        echo "    echo 'WorkingDirectory=TODO' >> \"/etc/systemd/system/${app_name}.service\""
761 760
     else
762
-        echo "    echo 'WorkingDirectory=${app_dir}' >> /etc/systemd/system/${app_name}.service"
761
+        echo "    echo 'WorkingDirectory=${app_dir}' >> \"/etc/systemd/system/${app_name}.service\""
763 762
     fi
764
-    echo "    echo 'ExecStart=TODO' >> /etc/systemd/system/${app_name}.service"
765
-    echo "    echo 'Restart=always' >> /etc/systemd/system/${app_name}.service"
766
-    echo "    echo 'Environment=\"USER=${app_name}\"' >> /etc/systemd/system/${app_name}.service"
767
-    echo "    echo '' >> /etc/systemd/system/${app_name}.service"
768
-    echo "    echo '[Install]' >> /etc/systemd/system/${app_name}.service"
769
-    echo "    echo 'WantedBy=multi-user.target' >> /etc/systemd/system/${app_name}.service"
763
+    echo "    { echo 'ExecStart=TODO';"
764
+    echo "      echo 'Restart=always';"
765
+    echo "      echo 'Environment=\"USER=${app_name}\"';"
766
+    echo "      echo '';"
767
+    echo "      echo '[Install]';"
768
+    echo "      echo 'WantedBy=multi-user.target'; } >> \"/etc/systemd/system/${app_name}.service\""
770 769
     echo "    systemctl enable ${app_name}"
771 770
     if [ "$app_dir" ]; then
772
-        echo "    chown -R ${app_name}:${app_name} ${app_dir}"
771
+        echo "    chown -R ${app_name}:${app_name} \"${app_dir}\""
773 772
     fi
774 773
     echo "    systemctl start ${app_name}"
775 774
 fi
776 775
 echo ''
777
-echo "    create_site_certificate \$${app_name_upper}_DOMAIN_NAME 'yes'"
776
+echo "    create_site_certificate \"\$${app_name_upper}_DOMAIN_NAME\" 'yes'"
778 777
 echo ''
779
-echo "    nginx_ensite \$${app_name_upper}_DOMAIN_NAME"
778
+echo "    nginx_ensite \"\$${app_name_upper}_DOMAIN_NAME\""
780 779
 echo ''
781 780
 if [[ "$database_type" == "mariadb" || "$database_type" == "mysql" ]]; then
782 781
     echo '    systemctl restart mariadb'
@@ -786,7 +785,7 @@ if [[ "$app_php" == 'yes' ]]; then
786 785
 fi
787 786
 echo '    systemctl restart nginx'
788 787
 echo ''
789
-echo "    \${PROJECT_NAME}-pass -u \$MY_USERNAME -a ${app_name} -p \"\$${app_name_upper}_ADMIN_PASSWORD\""
788
+echo "    \"\${PROJECT_NAME}-pass\" -u \"\$MY_USERNAME\" -a ${app_name} -p \"\$${app_name_upper}_ADMIN_PASSWORD\""
790 789
 echo "    set_completion_param \"${app_name} domain\" \"\$${app_name_upper}_DOMAIN_NAME\""
791 790
 if [ "$app_port" ]; then
792 791
     echo ''