浏览代码

kanboard app

Bob Mottram 7 年前
父节点
当前提交
21d1f73df6
共有 2 个文件被更改,包括 580 次插入4 次删除
  1. 575
    0
      src/freedombone-app-kanboard
  2. 5
    4
      src/freedombone-image-customise

+ 575
- 0
src/freedombone-app-kanboard 查看文件

@@ -0,0 +1,575 @@
1
+#!/bin/bash
2
+#
3
+# .---.                  .              .
4
+# |                      |              |
5
+# |--- .--. .-.  .-.  .-.|  .-. .--.--. |.-.  .-. .--.  .-.
6
+# |    |   (.-' (.-' (   | (   )|  |  | |   )(   )|  | (.-'
7
+# '    '     --'  --'  -' -  -' '  '   -' -'   -' '   -  --'
8
+#
9
+#                    Freedom in the Cloud
10
+#
11
+# kanboard kanban
12
+#
13
+# License
14
+# =======
15
+#
16
+# Copyright (C) 2017 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 social'
32
+
33
+IN_DEFAULT_INSTALL=0
34
+SHOW_ON_ABOUT=1
35
+
36
+KANBOARD_DOMAIN_NAME=
37
+KANBOARD_CODE=
38
+KANBOARD_ONION_PORT=8121
39
+KANBOARD_REPO="https://github.com/kanboard/kanboard"
40
+KANBOARD_COMMIT='7a6b1bc3da0af442e02b5a2dc430a4ded8e7c4ee'
41
+KANBOARD_ADMIN_PASSWORD=
42
+
43
+
44
+kanboard_variables=(ONION_ONLY
45
+                    KANBOARD_DOMAIN_NAME
46
+                    KANBOARD_CODE
47
+                    DDNS_PROVIDER
48
+                    MY_USERNAME)
49
+
50
+function logging_on_kanboard {
51
+    kanboard_configfile=/var/www/${KANBOARD_DOMAIN_NAME}/htdocs/config.php
52
+    sed -i "s|define('LOG_FILE'.*|define('LOG_FILE', DATA_DIR.DIRECTORY_SEPARATOR.'debug.log');|g" $kanboard_configfile
53
+}
54
+
55
+function logging_off_kanboard {
56
+    kanboard_configfile=/var/www/${KANBOARD_DOMAIN_NAME}/htdocs/config.php
57
+    sed -i "s|define('LOG_FILE'.*|define('LOG_FILE', '/dev/null');|g" $kanboard_configfile
58
+}
59
+
60
+function remove_user_kanboard {
61
+    remove_username="$1"
62
+
63
+    ${PROJECT_NAME}-pass -u $remove_username --rmapp kanboard
64
+}
65
+
66
+function add_user_kanboard {
67
+    new_username="$1"
68
+    new_user_password="$2"
69
+
70
+    ${PROJECT_NAME}-pass -u $new_username -a kanboard -p "$new_user_password"
71
+    echo '0'
72
+}
73
+
74
+function install_interactive_kanboard {
75
+    if [ ! $ONION_ONLY ]; then
76
+        ONION_ONLY='no'
77
+    fi
78
+
79
+    if [[ $ONION_ONLY != "no" ]]; then
80
+        KANBOARD_DOMAIN_NAME='kanboard.local'
81
+    else
82
+        KANBOARD_DETAILS_COMPLETE=
83
+        while [ ! $KANBOARD_DETAILS_COMPLETE ]
84
+        do
85
+            data=$(tempfile 2>/dev/null)
86
+            trap "rm -f $data" 0 1 2 5 15
87
+            if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
88
+                dialog --backtitle $"Freedombone Configuration" \
89
+                       --title $"KanBoard Configuration" \
90
+                       --form $"\nPlease enter your KanBoard details. The background image URL can be left blank.\n\nIMPORTANT: This should be a domain name which is supported by Let's Encrypt:" 16 65 2 \
91
+                       $"Domain:" 1 1 "$(grep 'KANBOARD_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 25 33 40 \
92
+                       $"Code:" 4 1 "$(grep 'KANBOARD_CODE' temp.cfg | awk -F '=' '{print $2}')" 4 25 33 255 \
93
+                       2> $data
94
+            else
95
+                dialog --backtitle $"Freedombone Configuration" \
96
+                       --title $"KanBoard Configuration" \
97
+                       --form $"\nPlease enter your KanBoard details. The background image URL can be left blank.\n\nIMPORTANT: This should be a domain name which is supported by Let's Encrypt:" 16 65 2 \
98
+                       $"Domain:" 1 1 "$(grep 'KANBOARD_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 25 33 40 \
99
+                       2> $data
100
+            fi
101
+            sel=$?
102
+            case $sel in
103
+                1) exit 1;;
104
+                255) exit 1;;
105
+            esac
106
+            KANBOARD_DOMAIN_NAME=$(cat $data | sed -n 1p)
107
+            if [ $KANBOARD_DOMAIN_NAME ]; then
108
+                if [[ $KANBOARD_DOMAIN_NAME == "$HUBZILLA_DOMAIN_NAME" ]]; then
109
+                    KANBOARD_DOMAIN_NAME=""
110
+                fi
111
+                TEST_DOMAIN_NAME=$KANBOARD_DOMAIN_NAME
112
+                validate_domain_name
113
+                if [[ $TEST_DOMAIN_NAME != $KANBOARD_DOMAIN_NAME ]]; then
114
+                    KANBOARD_DOMAIN_NAME=
115
+                    dialog --title $"Domain name validation" --msgbox "$TEST_DOMAIN_NAME" 15 50
116
+                else
117
+                    if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
118
+                        KANBOARD_CODE=$(cat $data | sed -n 4p)
119
+                        validate_freedns_code "$KANBOARD_CODE"
120
+                        if [ ! $VALID_CODE ]; then
121
+                            KANBOARD_DOMAIN_NAME=
122
+                        fi
123
+                    fi
124
+                fi
125
+            fi
126
+            if [ $KANBOARD_DOMAIN_NAME ]; then
127
+                KANBOARD_DETAILS_COMPLETE="yes"
128
+            fi
129
+        done
130
+
131
+        # save the results in the config file
132
+        write_config_param "KANBOARD_CODE" "$KANBOARD_CODE"
133
+    fi
134
+    write_config_param "KANBOARD_DOMAIN_NAME" "$KANBOARD_DOMAIN_NAME"
135
+    APP_INSTALLED=1
136
+}
137
+
138
+function change_password_kanboard {
139
+    curr_username="$1"
140
+    new_user_password="$2"
141
+
142
+    read_config_param 'KANBOARD_DOMAIN_NAME'
143
+
144
+    ${PROJECT_NAME}-pass -u "$curr_username" -a kanboard -p "$new_user_password"
145
+}
146
+
147
+function kanboard_create_database {
148
+    if [ -f $IMAGE_PASSWORD_FILE ]; then
149
+        KANBOARD_ADMIN_PASSWORD="$(printf `cat $IMAGE_PASSWORD_FILE`)"
150
+    else
151
+        if [ ! $KANBOARD_ADMIN_PASSWORD ]; then
152
+            KANBOARD_ADMIN_PASSWORD="$(create_password ${MINIMUM_PASSWORD_LENGTH})"
153
+        fi
154
+    fi
155
+    if [ ! $KANBOARD_ADMIN_PASSWORD ]; then
156
+        return
157
+    fi
158
+
159
+    function_check create_database
160
+    create_database kanboard "$KANBOARD_ADMIN_PASSWORD" $MY_USERNAME
161
+}
162
+
163
+function reconfigure_kanboard {
164
+    echo -n ''
165
+}
166
+
167
+function upgrade_kanboard {
168
+    CURR_KANBOARD_COMMIT=$(get_completion_param "kanboard commit")
169
+    if [[ "$CURR_KANBOARD_COMMIT" == "$KANBOARD_COMMIT" ]]; then
170
+        return
171
+    fi
172
+
173
+    if grep -q "kanboard domain" $COMPLETION_FILE; then
174
+        KANBOARD_DOMAIN_NAME=$(get_completion_param "kanboard domain")
175
+    fi
176
+
177
+    # update to the next commit
178
+    function_check set_repo_commit
179
+    set_repo_commit /var/www/$KANBOARD_DOMAIN_NAME/htdocs "kanboard commit" "$KANBOARD_COMMIT" $KANBOARD_REPO
180
+
181
+    chown -R www-data:www-data /var/www/${KANBOARD_DOMAIN_NAME}/htdocs
182
+}
183
+
184
+
185
+function backup_local_kanboard {
186
+    KANBOARD_DOMAIN_NAME='kanboard'
187
+    if grep -q "kanboard domain" $COMPLETION_FILE; then
188
+        KANBOARD_DOMAIN_NAME=$(get_completion_param "kanboard domain")
189
+    fi
190
+
191
+    source_directory=/var/www/${KANBOARD_DOMAIN_NAME}/htdocs/backup
192
+    if [ ! -d $source_directory ]; then
193
+        mkdir $source_directory
194
+    fi
195
+    cp -p /var/www/${KANBOARD_DOMAIN_NAME}/htdocs/config.php $source_directory
196
+
197
+    function_check suspend_site
198
+    suspend_site ${KANBOARD_DOMAIN_NAME}
199
+
200
+    function_check backup_directory_to_usb
201
+    dest_directory=kanboardconfig
202
+    backup_directory_to_usb $source_directory $dest_directory
203
+
204
+    source_directory=/var/www/${KANBOARD_DOMAIN_NAME}/htdocs/data
205
+    dest_directory=kanboardfile
206
+    backup_directory_to_usb $source_directory $dest_directory
207
+
208
+    function_check backup_database_to_usb
209
+    backup_database_to_usb kanboard
210
+
211
+    function_check restart_site
212
+    restart_site
213
+}
214
+
215
+function restore_local_kanboard {
216
+    if ! grep -q "kanboard domain" $COMPLETION_FILE; then
217
+        return
218
+    fi
219
+    KANBOARD_DOMAIN_NAME=$(get_completion_param "kanboard domain")
220
+    if [ $KANBOARD_DOMAIN_NAME ]; then
221
+        echo $"Restoring kanboard"
222
+        temp_restore_dir=/root/tempkanboard
223
+        kanboard_dir=/var/www/${KANBOARD_DOMAIN_NAME}/htdocs
224
+
225
+        function_check kanboard_create_database
226
+        kanboard_create_database
227
+
228
+        restore_database kanboard
229
+        if [ -d $temp_restore_dir ]; then
230
+            rm -rf $temp_restore_dir
231
+        fi
232
+
233
+        function_check restore_directory_from_usb
234
+        restore_directory_from_usb $temp_restore_dir kanboardconfig
235
+        if [ -d $temp_restore_dir ]; then
236
+            cp $temp_restore_dir$kanboard_dir/backup/config.php $kanboard_dir/
237
+            chown www-data:www-data $kanboard_dir/config.php
238
+            rm -rf $temp_restore_dir
239
+        fi
240
+
241
+        restore_directory_from_usb $temp_restore_dir kanboardfile
242
+        if [ -d $temp_restore_dir ]; then
243
+            cp -rp $temp_restore_dir$kanboard_dir/data $kanboard_dir/
244
+            chown -R www-data:www-data $kanboard_dir/data
245
+            rm -rf $temp_restore_dir
246
+        fi
247
+
248
+        kanboard_update_after_restore kanboard ${KANBOARD_DOMAIN_NAME}
249
+
250
+        echo $"Restore of kanboard complete"
251
+    fi
252
+}
253
+
254
+function backup_remote_kanboard {
255
+    KANBOARD_DOMAIN_NAME='kanboard'
256
+    if grep -q "kanboard domain" $COMPLETION_FILE; then
257
+        KANBOARD_DOMAIN_NAME=$(get_completion_param "kanboard domain")
258
+    fi
259
+
260
+    source_directory=/var/www/${KANBOARD_DOMAIN_NAME}/htdocs/backup
261
+    if [ ! -d $source_directory ]; then
262
+        mkdir $source_directory
263
+    fi
264
+    cp -p /var/www/${KANBOARD_DOMAIN_NAME}/htdocs/config.php $source_directory
265
+
266
+    function_check suspend_site
267
+    suspend_site ${KANBOARD_DOMAIN_NAME}
268
+
269
+    function_check backup_directory_to_friend
270
+    dest_directory=kanboardconfig
271
+    backup_directory_to_friend $source_directory $dest_directory
272
+
273
+    source_directory=/var/www/${KANBOARD_DOMAIN_NAME}/htdocs/data
274
+    dest_directory=kanboardfile
275
+    backup_directory_to_friend $source_directory $dest_directory
276
+
277
+    function_check backup_database_to_friend
278
+    backup_database_to_friend kanboard
279
+
280
+    function_check restart_site
281
+    restart_site
282
+}
283
+
284
+function restore_remote_kanboard {
285
+    if ! grep -q "kanboard domain" $COMPLETION_FILE; then
286
+        return
287
+    fi
288
+    KANBOARD_DOMAIN_NAME=$(get_completion_param "kanboard domain")
289
+    if [ $KANBOARD_DOMAIN_NAME ]; then
290
+        echo $"Restoring kanboard"
291
+        temp_restore_dir=/root/tempkanboard
292
+        kanboard_dir=/var/www/${KANBOARD_DOMAIN_NAME}/htdocs
293
+
294
+        function_check kanboard_create_database
295
+        kanboard_create_database
296
+
297
+        function_check restore_database_from_friend
298
+        restore_database_from_friend kanboard
299
+        if [ -d $temp_restore_dir ]; then
300
+            rm -rf $temp_restore_dir
301
+        fi
302
+
303
+        function_check restore_directory_from_friend
304
+        restore_directory_from_friend $temp_restore_dir kanboardconfig
305
+        if [ -d $temp_restore_dir ]; then
306
+            cp $temp_restore_dir$kanboard_dir/backup/config.php $kanboard_dir/
307
+            chown www-data:www-data $kanboard_dir/config.php
308
+            rm -rf $temp_restore_dir
309
+        fi
310
+
311
+        restore_directory_from_friend $temp_restore_dir kanboardfile
312
+        if [ -d $temp_restore_dir ]; then
313
+            cp -rp $temp_restore_dir$kanboard_dir/data $kanboard_dir/
314
+            chown -R www-data:www-data $kanboard_dir/data
315
+            rm -rf $temp_restore_dir
316
+        fi
317
+
318
+        kanboard_update_after_restore kanboard ${KANBOARD_DOMAIN_NAME}
319
+
320
+        echo $"Restore of kanboard complete"
321
+    fi
322
+}
323
+
324
+function remove_kanboard {
325
+    if [ ${#KANBOARD_DOMAIN_NAME} -eq 0 ]; then
326
+        return
327
+    fi
328
+    read_config_param "KANBOARD_DOMAIN_NAME"
329
+    read_config_param "MY_USERNAME"
330
+    echo "Removing $KANBOARD_DOMAIN_NAME"
331
+    nginx_dissite $KANBOARD_DOMAIN_NAME
332
+    remove_certs $KANBOARD_DOMAIN_NAME
333
+
334
+    if [ -d /var/www/$KANBOARD_DOMAIN_NAME ]; then
335
+        rm -rf /var/www/$KANBOARD_DOMAIN_NAME
336
+    fi
337
+    if [ -f /etc/nginx/sites-available/$KANBOARD_DOMAIN_NAME ]; then
338
+        rm /etc/nginx/sites-available/$KANBOARD_DOMAIN_NAME
339
+    fi
340
+    function_check drop_database
341
+    drop_database kanboard
342
+    function_check remove_onion_service
343
+    remove_onion_service kanboard ${KANBOARD_ONION_PORT}
344
+    remove_app kanboard
345
+    remove_completion_param install_kanboard
346
+    sed -i '/kanboard/d' $COMPLETION_FILE
347
+    remove_backup_database_local kanboard
348
+
349
+    function_check remove_ddns_domain
350
+    remove_ddns_domain $KANBOARD_DOMAIN_NAME
351
+}
352
+
353
+function install_kanboard {
354
+    if [ ! $ONION_ONLY ]; then
355
+        ONION_ONLY='no'
356
+    fi
357
+
358
+    if [ ! $KANBOARD_DOMAIN_NAME ]; then
359
+        echo $'No domain name was given for kanboard'
360
+        exit 73478
361
+    fi
362
+
363
+    kanboard_hourly_script kanboard $KANBOARD_DOMAIN_NAME
364
+
365
+    function_check install_mariadb
366
+    install_mariadb
367
+
368
+    function_check get_mariadb_password
369
+    get_mariadb_password
370
+
371
+    function_check repair_databases_script
372
+    repair_databases_script
373
+
374
+    apt-get -yq install php-gettext php-curl php-gd php-mysql git curl
375
+    apt-get -yq install memcached php-memcached php-intl exiftool libfcgi0ldbl
376
+
377
+    if [ ! -d /var/www/$KANBOARD_DOMAIN_NAME ]; then
378
+        mkdir /var/www/$KANBOARD_DOMAIN_NAME
379
+    fi
380
+    if [ ! -d /var/www/$KANBOARD_DOMAIN_NAME/htdocs ]; then
381
+
382
+        if [ -d /repos/kanboard ]; then
383
+            mkdir /var/www/$KANBOARD_DOMAIN_NAME/htdocs
384
+            cp -r -p /repos/kanboard/. /var/www/$KANBOARD_DOMAIN_NAME/htdocs
385
+            cd /var/www/$KANBOARD_DOMAIN_NAME/htdocs
386
+            git pull
387
+        else
388
+            function_check git_clone
389
+            git_clone $KANBOARD_REPO /var/www/$KANBOARD_DOMAIN_NAME/htdocs
390
+        fi
391
+
392
+        if [ ! -d /var/www/$KANBOARD_DOMAIN_NAME/htdocs ]; then
393
+            echo $'Unable to clone kanboard repo'
394
+            exit 89365
395
+        fi
396
+    fi
397
+
398
+    cd /var/www/$KANBOARD_DOMAIN_NAME/htdocs
399
+    git checkout $KANBOARD_COMMIT -b $KANBOARD_COMMIT
400
+    set_completion_param "kanboard commit" "$KANBOARD_COMMIT"
401
+
402
+    chmod g+w /var/www/$KANBOARD_DOMAIN_NAME/htdocs
403
+    chmod a+w /var/www/$KANBOARD_DOMAIN_NAME/htdocs/data
404
+    chown -R www-data:www-data /var/www/$KANBOARD_DOMAIN_NAME/htdocs
405
+
406
+    function_check kanboard_create_database
407
+    kanboard_create_database
408
+
409
+    if [ ! -f "/etc/aliases" ]; then
410
+        touch /etc/aliases
411
+    fi
412
+    if ! grep -q "www-data: root" /etc/aliases; then
413
+        echo 'www-data: root' >> /etc/aliases
414
+    fi
415
+
416
+    function_check add_ddns_domain
417
+    add_ddns_domain $KANBOARD_DOMAIN_NAME
418
+
419
+    KANBOARD_ONION_HOSTNAME=$(add_onion_service kanboard 80 ${KANBOARD_ONION_PORT})
420
+
421
+    kanboard_nginx_site=/etc/nginx/sites-available/$KANBOARD_DOMAIN_NAME
422
+    if [[ $ONION_ONLY == "no" ]]; then
423
+        function_check nginx_http_redirect
424
+        nginx_http_redirect $KANBOARD_DOMAIN_NAME "index index.php"
425
+        echo 'server {' >> $kanboard_nginx_site
426
+        echo '  listen 443 ssl;' >> $kanboard_nginx_site
427
+        echo '  listen [::]:443 ssl;' >> $kanboard_nginx_site
428
+        echo "  server_name $KANBOARD_DOMAIN_NAME;" >> $kanboard_nginx_site
429
+        echo '' >> $kanboard_nginx_site
430
+        function_check nginx_compress
431
+        nginx_compress $KANBOARD_DOMAIN_NAME
432
+        echo '' >> $kanboard_nginx_site
433
+        echo '  # Security' >> $kanboard_nginx_site
434
+        function_check nginx_ssl
435
+        nginx_ssl $KANBOARD_DOMAIN_NAME
436
+
437
+        function_check nginx_disable_sniffing
438
+        nginx_disable_sniffing $KANBOARD_DOMAIN_NAME
439
+
440
+        echo '  add_header Strict-Transport-Security max-age=15768000;' >> $kanboard_nginx_site
441
+        echo '' >> $kanboard_nginx_site
442
+        echo '  # Logs' >> $kanboard_nginx_site
443
+        echo '  access_log /dev/null;' >> $kanboard_nginx_site
444
+        echo '  error_log /dev/null;' >> $kanboard_nginx_site
445
+        echo '' >> $kanboard_nginx_site
446
+        echo '  # Root' >> $kanboard_nginx_site
447
+        echo "  root /var/www/$KANBOARD_DOMAIN_NAME/htdocs;" >> $kanboard_nginx_site
448
+        echo '' >> $kanboard_nginx_site
449
+        echo '  # Index' >> $kanboard_nginx_site
450
+        echo '  index index.php;' >> $kanboard_nginx_site
451
+        echo '' >> $kanboard_nginx_site
452
+        echo '  # PHP' >> $kanboard_nginx_site
453
+        echo '  location ~ \.php {' >> $kanboard_nginx_site
454
+        echo '    include snippets/fastcgi-php.conf;' >> $kanboard_nginx_site
455
+        echo '    fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;' >> $kanboard_nginx_site
456
+        echo '    fastcgi_read_timeout 30;' >> $kanboard_nginx_site
457
+        echo '  }' >> $kanboard_nginx_site
458
+        echo '' >> $kanboard_nginx_site
459
+        echo '  # Location' >> $kanboard_nginx_site
460
+        echo '  location / {' >> $kanboard_nginx_site
461
+        function_check nginx_limits
462
+        nginx_limits $KANBOARD_DOMAIN_NAME '15m'
463
+        echo '    try_files $uri $uri/ @kanboard;' >> $kanboard_nginx_site
464
+        echo '  }' >> $kanboard_nginx_site
465
+        echo '' >> $kanboard_nginx_site
466
+        echo '  # Fancy URLs' >> $kanboard_nginx_site
467
+        echo '  location @kanboard {' >> $kanboard_nginx_site
468
+        echo '    rewrite ^(.*)$ /index.php?p=$1 last;' >> $kanboard_nginx_site
469
+        echo '  }' >> $kanboard_nginx_site
470
+        echo '' >> $kanboard_nginx_site
471
+        echo '  # Restrict access that is unnecessary anyway' >> $kanboard_nginx_site
472
+        echo '  location ~ /\.(ht|git) {' >> $kanboard_nginx_site
473
+        echo '    deny all;' >> $kanboard_nginx_site
474
+        echo '  }' >> $kanboard_nginx_site
475
+        echo '' >> $kanboard_nginx_site
476
+        # DO NOT ENABLE KEYBASE. kanboard really doesn't like having a .well-known directory
477
+        echo '}' >> $kanboard_nginx_site
478
+    else
479
+        echo -n '' > $kanboard_nginx_site
480
+    fi
481
+    echo 'server {' >> $kanboard_nginx_site
482
+    echo "    listen 127.0.0.1:$KANBOARD_ONION_PORT default_server;" >> $kanboard_nginx_site
483
+    echo "    server_name $KANBOARD_ONION_HOSTNAME;" >> $kanboard_nginx_site
484
+    echo '' >> $kanboard_nginx_site
485
+    function_check nginx_compress
486
+    nginx_compress $KANBOARD_DOMAIN_NAME
487
+    echo '' >> $kanboard_nginx_site
488
+    function_check nginx_disable_sniffing
489
+    nginx_disable_sniffing $KANBOARD_DOMAIN_NAME
490
+    echo '' >> $kanboard_nginx_site
491
+    echo '  # Logs' >> $kanboard_nginx_site
492
+    echo '  access_log /dev/null;' >> $kanboard_nginx_site
493
+    echo '  error_log /dev/null;' >> $kanboard_nginx_site
494
+    echo '' >> $kanboard_nginx_site
495
+    echo '  # Root' >> $kanboard_nginx_site
496
+    echo "  root /var/www/$KANBOARD_DOMAIN_NAME/htdocs;" >> $kanboard_nginx_site
497
+    echo '' >> $kanboard_nginx_site
498
+    echo '  # Index' >> $kanboard_nginx_site
499
+    echo '  index index.php;' >> $kanboard_nginx_site
500
+    echo '' >> $kanboard_nginx_site
501
+    echo '  # PHP' >> $kanboard_nginx_site
502
+    echo '  location ~ \.php {' >> $kanboard_nginx_site
503
+    echo '    include snippets/fastcgi-php.conf;' >> $kanboard_nginx_site
504
+    echo '    fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;' >> $kanboard_nginx_site
505
+    echo '    fastcgi_read_timeout 30;' >> $kanboard_nginx_site
506
+    echo '  }' >> $kanboard_nginx_site
507
+    echo '' >> $kanboard_nginx_site
508
+    echo '  # Location' >> $kanboard_nginx_site
509
+    echo '  location / {' >> $kanboard_nginx_site
510
+    function_check nginx_limits
511
+    nginx_limits $KANBOARD_DOMAIN_NAME '15m'
512
+    echo '    try_files $uri $uri/ @kanboard;' >> $kanboard_nginx_site
513
+    echo '  }' >> $kanboard_nginx_site
514
+    echo '' >> $kanboard_nginx_site
515
+    echo '  # Fancy URLs' >> $kanboard_nginx_site
516
+    echo '  location @kanboard {' >> $kanboard_nginx_site
517
+    echo '    rewrite ^(.*)$ /index.php?p=$1 last;' >> $kanboard_nginx_site
518
+    echo '  }' >> $kanboard_nginx_site
519
+    echo '' >> $kanboard_nginx_site
520
+    echo '  # Restrict access that is unnecessary anyway' >> $kanboard_nginx_site
521
+    echo '  location ~ /\.(ht|git) {' >> $kanboard_nginx_site
522
+    echo '    deny all;' >> $kanboard_nginx_site
523
+    echo '  }' >> $kanboard_nginx_site
524
+    echo '' >> $kanboard_nginx_site
525
+    # DO NOT ENABLE KEYBASE. kanboard really doesn't like having a .well-known directory
526
+    echo '}' >> $kanboard_nginx_site
527
+
528
+    function_check configure_php
529
+    configure_php
530
+
531
+    function_check create_site_certificate
532
+    create_site_certificate $KANBOARD_DOMAIN_NAME 'yes'
533
+
534
+    # Ensure that the database gets backed up locally, if remote
535
+    # backups are not being used
536
+    function_check backup_databases_script_header
537
+    backup_databases_script_header
538
+
539
+    function_check backup_database_local
540
+    backup_database_local kanboard
541
+
542
+    function_check nginx_ensite
543
+    nginx_ensite $KANBOARD_DOMAIN_NAME
544
+
545
+    KANBOARD_SERVER=${KANBOARD_DOMAIN_NAME}
546
+    if [[ $ONION_ONLY != 'no' ]]; then
547
+        KANBOARD_SERVER=${KANBOARD_ONION_HOSTNAME}
548
+    fi
549
+
550
+    # Create the configuration
551
+    kanboard_configfile=/var/www/${KANBOARD_DOMAIN_NAME}/htdocs/config.php
552
+    cp /var/www/${KANBOARD_DOMAIN_NAME}/htdocs/config.default.php $kanboard_configfile
553
+    sed -i "s|define('MAIL_FROM'.*|define('MAIL_FROM', '$MY_EMAIL_ADDRESS');|g" $kanboard_configfile
554
+    sed -i "s|define('DB_DRIVER'.*|define('DB_DRIVER', 'mysql');|g" $kanboard_configfile
555
+    sed -i "s|define('DB_USERNAME'.*|define('DB_USERNAME', 'root');|g" $kanboard_configfile
556
+    sed -i "s|define('DB_PASSWORD'.*|define('DB_PASSWORD', '$MARIADB_PASSWORD');|g" $kanboard_configfile
557
+    sed -i "s|define('DB_HOSTNAME'.*|define('DB_HOSTNAME', 'localhost');|g" $kanboard_configfile
558
+    sed -i "s|define('DB_NAME'.*|define('DB_NAME', 'kanboard');|g" $kanboard_configfile
559
+    sed -i "s|define('DB_PORT'.*|define('DB_PORT', null);|g" $kanboard_configfile
560
+    logging_off_kanboard
561
+
562
+    initialise_database kanboard /var/www/${KANBOARD_DOMAIN_NAME}/htdocs/app/Schema/Sql/mysql.sql
563
+
564
+    systemctl restart mariadb
565
+    systemctl restart php7.0-fpm
566
+    systemctl restart nginx
567
+
568
+    ${PROJECT_NAME}-pass -u $MY_USERNAME -a kanboard -p "$KANBOARD_ADMIN_PASSWORD"
569
+
570
+    set_completion_param "kanboard domain" "$KANBOARD_DOMAIN_NAME"
571
+
572
+    APP_INSTALLED=1
573
+}
574
+
575
+# NOTE: deliberately there is no "exit 0"

+ 5
- 4
src/freedombone-image-customise 查看文件

@@ -1274,10 +1274,11 @@ function image_preinstall_repos {
1274 1274
     git clone $TOXID_REPO $rootdir/repos/toxid
1275 1275
     git clone $TOXIC_REPO $rootdir/repos/toxic
1276 1276
     git clone $TURTL_REPO $rootdir/repos/turtl
1277
-    git clone $WEKAN_REPO $rootdir/repos/wekan
1278
-    git clone $FLOW_ROUTER_REPO $rootdir/repos/flowrouter
1279
-    git clone $METEOR_USERACCOUNTS_REPO $rootdir/repos/meteoruseraccounts
1280
-    git clone $METEOR_REPO $rootdir/repos/meteor
1277
+    git clone $KANBOARD_REPO $rootdir/repos/kanboard
1278
+    #git clone $WEKAN_REPO $rootdir/repos/wekan
1279
+    #git clone $FLOW_ROUTER_REPO $rootdir/repos/flowrouter
1280
+    #git clone $METEOR_USERACCOUNTS_REPO $rootdir/repos/meteoruseraccounts
1281
+    #git clone $METEOR_REPO $rootdir/repos/meteor
1281 1282
     #git clone $ZERONET_REPO $rootdir/repos/zeronet
1282 1283
     #git clone $QTOX_REPO $rootdir/repos/qtox
1283 1284
 }