Browse Source

pelican web site

Bob Mottram 8 years ago
parent
commit
ddcbe1ca1a
1 changed files with 127 additions and 28 deletions
  1. 127
    28
      src/freedombone-app-pelican

+ 127
- 28
src/freedombone-app-pelican View File

33
 IN_DEFAULT_INSTALL=0
33
 IN_DEFAULT_INSTALL=0
34
 SHOW_ON_ABOUT=0
34
 SHOW_ON_ABOUT=0
35
 
35
 
36
-PELICAN_BLOG_DOMAIN=
36
+PELICAN_DOMAIN_NAME=
37
 PELICAN_BLOG_CODE=
37
 PELICAN_BLOG_CODE=
38
 
38
 
39
 PELICAN_THEMES_REPO="https://github.com/getpelican/pelican-themes"
39
 PELICAN_THEMES_REPO="https://github.com/getpelican/pelican-themes"
45
 
45
 
46
 pelican_variables=(MY_USERNAME
46
 pelican_variables=(MY_USERNAME
47
                    ONION_ONLY
47
                    ONION_ONLY
48
-                   PELICAN_BLOG_DOMAIN
48
+                   PELICAN_DOMAIN_NAME
49
                    PELICAN_BLOG_CODE)
49
                    PELICAN_BLOG_CODE)
50
 
50
 
51
+
52
+function install_pelican_website {
53
+    if [[ $ONION_ONLY == 'no' ]]; then
54
+        echo -n '' > /etc/nginx/sites-available/$PELICAN_DOMAIN_NAME
55
+        return
56
+    fi
57
+    function_check nginx_http_redirect
58
+    nginx_http_redirect $PELICAN_DOMAIN_NAME
59
+    echo 'server {' >> /etc/nginx/sites-available/$PELICAN_DOMAIN_NAME
60
+    echo '    listen 443 ssl;' >> /etc/nginx/sites-available/$PELICAN_DOMAIN_NAME
61
+    echo '    listen [::]:443 ssl;' >> /etc/nginx/sites-available/$PELICAN_DOMAIN_NAME
62
+    echo "    root /var/www/${PELICAN_DOMAIN_NAME}/htdocs;" >> /etc/nginx/sites-available/$PELICAN_DOMAIN_NAME
63
+    echo "    server_name ${PELICAN_DOMAIN_NAME};" >> /etc/nginx/sites-available/$PELICAN_DOMAIN_NAME
64
+    echo '    access_log /dev/null;' >> /etc/nginx/sites-available/$PELICAN_DOMAIN_NAME
65
+    echo "    error_log /dev/null;" >> /etc/nginx/sites-available/$PELICAN_DOMAIN_NAME
66
+    echo '    index index.html;' >> /etc/nginx/sites-available/$PELICAN_DOMAIN_NAME
67
+    echo '    charset utf-8;' >> /etc/nginx/sites-available/$PELICAN_DOMAIN_NAME
68
+    function_check nginx_ssl
69
+    nginx_ssl $PELICAN_DOMAIN_NAME
70
+    function_check nginx_disable_sniffing
71
+    nginx_disable_sniffing $PELICAN_DOMAIN_NAME
72
+    echo '    add_header Strict-Transport-Security "max-age=0;";' >> /etc/nginx/sites-available/$PELICAN_DOMAIN_NAME
73
+    echo '' >> /etc/nginx/sites-available/$PELICAN_DOMAIN_NAME
74
+    echo '    location / {' >> /etc/nginx/sites-available/$PELICAN_DOMAIN_NAME
75
+    function_check nginx_limits
76
+    nginx_limits $PELICAN_DOMAIN_NAME
77
+    echo '    }' >> /etc/nginx/sites-available/$PELICAN_DOMAIN_NAME
78
+    echo '' >> /etc/nginx/sites-available/$PELICAN_DOMAIN_NAME
79
+    nginx_keybase ${PELICAN_DOMAIN_NAME}
80
+    echo '' >> /etc/nginx/sites-available/$PELICAN_DOMAIN_NAME
81
+    echo '    # block these file types' >> /etc/nginx/sites-available/$PELICAN_DOMAIN_NAME
82
+    echo '    location ~* \.(tpl|md|tgz|log|out)$ {' >> /etc/nginx/sites-available/$PELICAN_DOMAIN_NAME
83
+    echo '        deny all;' >> /etc/nginx/sites-available/$PELICAN_DOMAIN_NAME
84
+    echo '    }' >> /etc/nginx/sites-available/$PELICAN_DOMAIN_NAME
85
+    echo '' >> /etc/nginx/sites-available/$PELICAN_DOMAIN_NAME
86
+    echo '    # deny access to all dot files' >> /etc/nginx/sites-available/$PELICAN_DOMAIN_NAME
87
+    echo '    location ~ /\. {' >> /etc/nginx/sites-available/$PELICAN_DOMAIN_NAME
88
+    echo '        deny all;' >> /etc/nginx/sites-available/$PELICAN_DOMAIN_NAME
89
+    echo '    }' >> /etc/nginx/sites-available/$PELICAN_DOMAIN_NAME
90
+    echo '' >> /etc/nginx/sites-available/$PELICAN_DOMAIN_NAME
91
+    echo '    location ~ /(data|conf|bin|inc)/ {' >> /etc/nginx/sites-available/$PELICAN_DOMAIN_NAME
92
+    echo '      deny all;' >> /etc/nginx/sites-available/$PELICAN_DOMAIN_NAME
93
+    echo '    }' >> /etc/nginx/sites-available/$PELICAN_DOMAIN_NAME
94
+    echo '    location ~ /\.ht {' >> /etc/nginx/sites-available/$PELICAN_DOMAIN_NAME
95
+    echo '      deny  all;' >> /etc/nginx/sites-available/$PELICAN_DOMAIN_NAME
96
+    echo '    }' >> /etc/nginx/sites-available/$PELICAN_DOMAIN_NAME
97
+    echo '}' >> /etc/nginx/sites-available/$PELICAN_DOMAIN_NAME
98
+    echo '' >> /etc/nginx/sites-available/$PELICAN_DOMAIN_NAME
99
+
100
+    function_check create_site_certificate
101
+    create_site_certificate $PELICAN_DOMAIN_NAME 'yes'
102
+}
103
+
104
+function install_pelican_website_onion {
105
+    echo 'server {' >> /etc/nginx/sites-available/$PELICAN_DOMAIN_NAME
106
+    echo "    listen 127.0.0.1:${HTMLY_ONION_PORT} default_server;" >> /etc/nginx/sites-available/$PELICAN_DOMAIN_NAME
107
+    echo "    root /var/www/${PELICAN_DOMAIN_NAME}/htdocs;" >> /etc/nginx/sites-available/$PELICAN_DOMAIN_NAME
108
+    echo "    server_name ${PELICAN_DOMAIN_NAME};" >> /etc/nginx/sites-available/$PELICAN_DOMAIN_NAME
109
+    echo '    access_log /dev/null;' >> /etc/nginx/sites-available/$PELICAN_DOMAIN_NAME
110
+    echo "    error_log /dev/null;" >> /etc/nginx/sites-available/$PELICAN_DOMAIN_NAME
111
+    echo '    index index.html;' >> /etc/nginx/sites-available/$PELICAN_DOMAIN_NAME
112
+    echo '    charset utf-8;' >> /etc/nginx/sites-available/$PELICAN_DOMAIN_NAME
113
+    function_check nginx_disable_sniffing
114
+    nginx_disable_sniffing $PELICAN_DOMAIN_NAME
115
+    echo '    add_header Strict-Transport-Security "max-age=0;";' >> /etc/nginx/sites-available/$PELICAN_DOMAIN_NAME
116
+    echo '' >> /etc/nginx/sites-available/$PELICAN_DOMAIN_NAME
117
+    echo '    location / {' >> /etc/nginx/sites-available/$PELICAN_DOMAIN_NAME
118
+    function_check nginx_limits
119
+    nginx_limits $PELICAN_DOMAIN_NAME
120
+    echo '    }' >> /etc/nginx/sites-available/$PELICAN_DOMAIN_NAME
121
+    echo '' >> /etc/nginx/sites-available/$PELICAN_DOMAIN_NAME
122
+    nginx_keybase ${PELICAN_DOMAIN_NAME}
123
+    echo '' >> /etc/nginx/sites-available/$PELICAN_DOMAIN_NAME
124
+    echo '    # block these file types' >> /etc/nginx/sites-available/$PELICAN_DOMAIN_NAME
125
+    echo '    location ~* \.(tpl|md|tgz|log|out)$ {' >> /etc/nginx/sites-available/$PELICAN_DOMAIN_NAME
126
+    echo '        deny all;' >> /etc/nginx/sites-available/$PELICAN_DOMAIN_NAME
127
+    echo '    }' >> /etc/nginx/sites-available/$PELICAN_DOMAIN_NAME
128
+    echo '' >> /etc/nginx/sites-available/$PELICAN_DOMAIN_NAME
129
+    echo '    # deny access to all dot files' >> /etc/nginx/sites-available/$PELICAN_DOMAIN_NAME
130
+    echo '    location ~ /\. {' >> /etc/nginx/sites-available/$PELICAN_DOMAIN_NAME
131
+    echo '        deny all;' >> /etc/nginx/sites-available/$PELICAN_DOMAIN_NAME
132
+    echo '    }' >> /etc/nginx/sites-available/$PELICAN_DOMAIN_NAME
133
+    echo '' >> /etc/nginx/sites-available/$PELICAN_DOMAIN_NAME
134
+    echo '    location ~ /(data|conf|bin|inc)/ {' >> /etc/nginx/sites-available/$PELICAN_DOMAIN_NAME
135
+    echo '      deny all;' >> /etc/nginx/sites-available/$PELICAN_DOMAIN_NAME
136
+    echo '    }' >> /etc/nginx/sites-available/$PELICAN_DOMAIN_NAME
137
+    echo '    location ~ /\.ht {' >> /etc/nginx/sites-available/$PELICAN_DOMAIN_NAME
138
+    echo '      deny  all;' >> /etc/nginx/sites-available/$PELICAN_DOMAIN_NAME
139
+    echo '    }' >> /etc/nginx/sites-available/$PELICAN_DOMAIN_NAME
140
+    echo '}' >> /etc/nginx/sites-available/$PELICAN_DOMAIN_NAME
141
+}
142
+
51
 function pelican_editor_config {
143
 function pelican_editor_config {
52
     if [ ! -f $PELICAN_BLOG_INSTALL_DIR/.emacs-pelican ]; then
144
     if [ ! -f $PELICAN_BLOG_INSTALL_DIR/.emacs-pelican ]; then
53
         echo "(add-hook 'before-save-hook 'delete-trailing-whitespace)" > $PELICAN_BLOG_INSTALL_DIR/.emacs-pelican
145
         echo "(add-hook 'before-save-hook 'delete-trailing-whitespace)" > $PELICAN_BLOG_INSTALL_DIR/.emacs-pelican
76
 
168
 
77
     cd $PELICAN_BLOG_INSTALL_DIR
169
     cd $PELICAN_BLOG_INSTALL_DIR
78
     make html
170
     make html
79
-    cp -r $PELICAN_BLOG_INSTALL_DIR/output/* /var/www/$PELICAN_BLOG_DOMAIN/htdocs/
80
-    chown -R www-data:www-data /var/www/$PELICAN_BLOG_DOMAIN/htdocs
171
+    cp -r $PELICAN_BLOG_INSTALL_DIR/output/* /var/www/$PELICAN_DOMAIN_NAME/htdocs/
172
+    chown -R www-data:www-data /var/www/$PELICAN_DOMAIN_NAME/htdocs
81
 }
173
 }
82
 
174
 
83
 function pelican_new_blog {
175
 function pelican_new_blog {
263
     fi
355
     fi
264
 
356
 
265
     if [[ $ONION_ONLY != "no" ]]; then
357
     if [[ $ONION_ONLY != "no" ]]; then
266
-        PELICAN_BLOG_DOMAIN='pelican.local'
358
+        PELICAN_DOMAIN_NAME='pelican.local'
267
     else
359
     else
268
         PELICAN_DETAILS_COMPLETE=
360
         PELICAN_DETAILS_COMPLETE=
269
         while [ ! $PELICAN_DETAILS_COMPLETE ]
361
         while [ ! $PELICAN_DETAILS_COMPLETE ]
274
                 dialog --backtitle $"Freedombone Configuration" \
366
                 dialog --backtitle $"Freedombone Configuration" \
275
                        --title $"Pelican Blog Configuration" \
367
                        --title $"Pelican Blog Configuration" \
276
                        --form $"\nPlease enter your blog details.\n\nIMPORTANT: This should be a domain name which is supported by Let's Encrypt:" 14 65 2 \
368
                        --form $"\nPlease enter your blog details.\n\nIMPORTANT: This should be a domain name which is supported by Let's Encrypt:" 14 65 2 \
277
-                       $"Domain:" 1 1 "$(grep 'PELICAN_BLOG_DOMAIN' temp.cfg | awk -F '=' '{print $2}')" 1 25 33 40 \
369
+                       $"Domain:" 1 1 "$(grep 'PELICAN_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 25 33 40 \
278
                        $"Code:" 2 1 "$(grep 'PELICAN_BLOG_CODE' temp.cfg | awk -F '=' '{print $2}')" 2 25 33 255 \
370
                        $"Code:" 2 1 "$(grep 'PELICAN_BLOG_CODE' temp.cfg | awk -F '=' '{print $2}')" 2 25 33 255 \
279
                        2> $data
371
                        2> $data
280
             else
372
             else
281
                 dialog --backtitle $"Freedombone Configuration" \
373
                 dialog --backtitle $"Freedombone Configuration" \
282
                        --title $"Pelican Blog Configuration" \
374
                        --title $"Pelican Blog Configuration" \
283
                        --form $"\nPlease enter your GNU Social details. The background image URL can be left blank.\n\nIMPORTANT: This should be a domain name which is supported by Let's Encrypt:" 14 65 2 \
375
                        --form $"\nPlease enter your GNU Social details. The background image URL can be left blank.\n\nIMPORTANT: This should be a domain name which is supported by Let's Encrypt:" 14 65 2 \
284
-                       $"Domain:" 1 1 "$(grep 'PELICAN_BLOG_DOMAIN' temp.cfg | awk -F '=' '{print $2}')" 1 25 33 40 \
376
+                       $"Domain:" 1 1 "$(grep 'PELICAN_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 25 33 40 \
285
                        2> $data
377
                        2> $data
286
             fi
378
             fi
287
             sel=$?
379
             sel=$?
289
                 1) exit 1;;
381
                 1) exit 1;;
290
                 255) exit 1;;
382
                 255) exit 1;;
291
             esac
383
             esac
292
-            PELICAN_BLOG_DOMAIN=$(cat $data | sed -n 1p)
293
-            if [ $PELICAN_BLOG_DOMAIN ]; then
294
-                if [[ $PELICAN_BLOG_DOMAIN == "$HUBZILLA_DOMAIN_NAME" ]]; then
295
-                    PELICAN_BLOG_DOMAIN=""
384
+            PELICAN_DOMAIN_NAME=$(cat $data | sed -n 1p)
385
+            if [ $PELICAN_DOMAIN_NAME ]; then
386
+                if [[ $PELICAN_DOMAIN_NAME == "$HUBZILLA_DOMAIN_NAME" ]]; then
387
+                    PELICAN_DOMAIN_NAME=""
296
                 fi
388
                 fi
297
-                TEST_DOMAIN_NAME=$PELICAN_BLOG_DOMAIN
389
+                TEST_DOMAIN_NAME=$PELICAN_DOMAIN_NAME
298
                 validate_domain_name
390
                 validate_domain_name
299
-                if [[ $TEST_DOMAIN_NAME != $PELICAN_BLOG_DOMAIN ]]; then
300
-                    PELICAN_BLOG_DOMAIN=
391
+                if [[ $TEST_DOMAIN_NAME != $PELICAN_DOMAIN_NAME ]]; then
392
+                    PELICAN_DOMAIN_NAME=
301
                     dialog --title $"Domain name validation" --msgbox "$TEST_DOMAIN_NAME" 15 50
393
                     dialog --title $"Domain name validation" --msgbox "$TEST_DOMAIN_NAME" 15 50
302
                 else
394
                 else
303
                     if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
395
                     if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
304
                         PELICAN_BLOG_CODE=$(cat $data | sed -n 2p)
396
                         PELICAN_BLOG_CODE=$(cat $data | sed -n 2p)
305
                         validate_freedns_code "$PELICAN_BLOG_CODE"
397
                         validate_freedns_code "$PELICAN_BLOG_CODE"
306
                         if [ ! $VALID_CODE ]; then
398
                         if [ ! $VALID_CODE ]; then
307
-                            PELICAN_BLOG_DOMAIN=
399
+                            PELICAN_DOMAIN_NAME=
308
                         fi
400
                         fi
309
                     fi
401
                     fi
310
                 fi
402
                 fi
311
             fi
403
             fi
312
-            if [ $PELICAN_BLOG_DOMAIN ]; then
404
+            if [ $PELICAN_DOMAIN_NAME ]; then
313
                 PELICAN_DETAILS_COMPLETE="yes"
405
                 PELICAN_DETAILS_COMPLETE="yes"
314
             fi
406
             fi
315
         done
407
         done
317
         # save the results in the config file
409
         # save the results in the config file
318
         write_config_param "PELICAN_BLOG_CODE" "$PELICAN_BLOG_CODE"
410
         write_config_param "PELICAN_BLOG_CODE" "$PELICAN_BLOG_CODE"
319
     fi
411
     fi
320
-    write_config_param "PELICAN_BLOG_DOMAIN" "$PELICAN_BLOG_DOMAIN"
412
+    write_config_param "PELICAN_DOMAIN_NAME" "$PELICAN_DOMAIN_NAME"
321
     APP_INSTALLED=1
413
     APP_INSTALLED=1
322
 }
414
 }
323
 
415
 
336
         function_check backup_directory_to_usb
428
         function_check backup_directory_to_usb
337
         backup_directory_to_usb $source_directory $dest_directory
429
         backup_directory_to_usb $source_directory $dest_directory
338
     fi
430
     fi
339
-    source_directory=/var/www/$PELICAN_BLOG_DOMAIN/htdocs
431
+    source_directory=/var/www/$PELICAN_DOMAIN_NAME/htdocs
340
     if [ -d $source_directory ]; then
432
     if [ -d $source_directory ]; then
341
         dest_directory=pelican-site
433
         dest_directory=pelican-site
342
         function_check backup_directory_to_usb
434
         function_check backup_directory_to_usb
362
             rm -rf $temp_restore_dir
454
             rm -rf $temp_restore_dir
363
         fi
455
         fi
364
     fi
456
     fi
365
-    if [ -d /var/www/$PELICAN_BLOG_DOMAIN/htdocs ]; then
457
+    if [ -d /var/www/$PELICAN_DOMAIN_NAME/htdocs ]; then
366
         if [ -d $USB_MOUNT_DLNA/backup/pelican-site ]; then
458
         if [ -d $USB_MOUNT_DLNA/backup/pelican-site ]; then
367
             temp_restore_dir=/root/temppelican-site
459
             temp_restore_dir=/root/temppelican-site
368
             function_check restore_directory_from_usb
460
             function_check restore_directory_from_usb
369
             restore_directory_from_usb $temp_restore_dir pelican-site
461
             restore_directory_from_usb $temp_restore_dir pelican-site
370
-            cp -r $temp_restore_dir/var/www/$PELICAN_BLOG_DOMAIN/htdocs/* /var/www/$PELICAN_BLOG_DOMAIN/htdocs/
462
+            cp -r $temp_restore_dir/var/www/$PELICAN_DOMAIN_NAME/htdocs/* /var/www/$PELICAN_DOMAIN_NAME/htdocs/
371
             if [ ! "$?" = "0" ]; then
463
             if [ ! "$?" = "0" ]; then
372
                 rm -rf $temp_restore_dir
464
                 rm -rf $temp_restore_dir
373
                 function_check set_user_permissions
465
                 function_check set_user_permissions
385
     if [ -d /etc/blog ]; then
477
     if [ -d /etc/blog ]; then
386
         backup_directory_to_friend /etc/blog pelican
478
         backup_directory_to_friend /etc/blog pelican
387
     fi
479
     fi
388
-    if [ -d /var/www/$PELICAN_BLOG_DOMAIN/htdocs ]; then
389
-        backup_directory_to_friend /var/www/$PELICAN_BLOG_DOMAIN/htdocs pelican-site
480
+    if [ -d /var/www/$PELICAN_DOMAIN_NAME/htdocs ]; then
481
+        backup_directory_to_friend /var/www/$PELICAN_DOMAIN_NAME/htdocs pelican-site
390
     fi
482
     fi
391
 }
483
 }
392
 
484
 
403
             rm -rf $temp_restore_dir
495
             rm -rf $temp_restore_dir
404
         fi
496
         fi
405
     fi
497
     fi
406
-    if [ -d /var/www/$PELICAN_BLOG_DOMAIN/htdocs ]; then
498
+    if [ -d /var/www/$PELICAN_DOMAIN_NAME/htdocs ]; then
407
         if [ -d $SERVER_DIRECTORY/backup/pelican-site ]; then
499
         if [ -d $SERVER_DIRECTORY/backup/pelican-site ]; then
408
             temp_restore_dir=/root/temppelican-site
500
             temp_restore_dir=/root/temppelican-site
409
             function_check restore_directory_from_friend
501
             function_check restore_directory_from_friend
410
             restore_directory_from_friend $temp_restore_dir pelican-site
502
             restore_directory_from_friend $temp_restore_dir pelican-site
411
-            cp -r $temp_restore_dir/var/www/$PELICAN_BLOG_DOMAIN/htdocs/* /var/www/$PELICAN_BLOG_DOMAIN/htdocs/
503
+            cp -r $temp_restore_dir/var/www/$PELICAN_DOMAIN_NAME/htdocs/* /var/www/$PELICAN_DOMAIN_NAME/htdocs/
412
             if [ ! "$?" = "0" ]; then
504
             if [ ! "$?" = "0" ]; then
413
                 exit 76382562
505
                 exit 76382562
414
             fi
506
             fi
418
 }
510
 }
419
 
511
 
420
 function remove_pelican {
512
 function remove_pelican {
421
-    if [ -d /var/www/$PELICAN_BLOG_DOMAIN/htdocs ]; then
422
-        rm -rf /var/www/$PELICAN_BLOG_DOMAIN/htdocs
513
+    if [ -d /var/www/$PELICAN_DOMAIN_NAME/htdocs ]; then
514
+        rm -rf /var/www/$PELICAN_DOMAIN_NAME/htdocs
423
     fi
515
     fi
424
     pip uninstall pelican
516
     pip uninstall pelican
425
-    remove_certs $PELICAN_BLOG_DOMAIN
517
+    remove_certs $PELICAN_DOMAIN_NAME
426
 }
518
 }
427
 
519
 
428
 function create_pelican_conf {
520
 function create_pelican_conf {
661
     pip install typogrify
753
     pip install typogrify
662
     pip install pelican
754
     pip install pelican
663
 
755
 
664
-    PELICAN_BLOG_PATH=/var/www/$PELICAN_BLOG_DOMAIN/htdocs
756
+    PELICAN_BLOG_PATH=/var/www/$PELICAN_DOMAIN_NAME/htdocs
665
 
757
 
666
     if [ ! -d $PELICAN_BLOG_INSTALL_DIR ]; then
758
     if [ ! -d $PELICAN_BLOG_INSTALL_DIR ]; then
667
         mkdir -p $PELICAN_BLOG_INSTALL_DIR
759
         mkdir -p $PELICAN_BLOG_INSTALL_DIR
690
 
782
 
691
     pelican_editor_config
783
     pelican_editor_config
692
 
784
 
785
+    install_pelican_website
786
+    install_pelican_website_onion
787
+
788
+    function_check nginx_ensite
789
+    nginx_ensite $PELICAN_DOMAIN_NAME
790
+    systemctl restart nginx
791
+
693
     APP_INSTALLED=1
792
     APP_INSTALLED=1
694
 }
793
 }
695
 
794