Make port check optional, add y/n prompt (#448)
[discourse_docker.git] / discourse-setup
1 #!/usr/bin/env bash
2 DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
3 cd $DIR
4
5 ##
6 ## Make sure only root can run our script
7 ##
8 check_root() {
9 if [[ $EUID -ne 0 ]]; then
10 echo "This script must be run as root. Please sudo or log in as root first." 1>&2
11 exit 1
12 fi
13 }
14
15 ##
16 ## Check whether a connection to HOSTNAME ($1) on PORT ($2) is possible
17 ##
18 connect_to_port () {
19 HOST="$1"
20 PORT="$2"
21 VERIFY=$(date +%s | sha256sum | base64 | head -c 20)
22 if ! [ -x "$(command -v nc)" ]; then
23 echo "In order to check the connection to $HOST:$PORT we need to open a socket using netcat."
24 echo However netcat is not installed on your system. You can continue without this check
25 echo or abort the setup, install netcat and try again.
26 while true; do
27 read -p "Would you like to continue without this check? [yn] " yn
28 case $yn in
29 [Yy]*) return 2 ;;
30 [Nn]*) exit ;;
31 *) echo "Please answer y or n." ;;
32 esac
33 done
34 else
35 echo -e "HTTP/1.1 200 OK\n\n $VERIFY" | nc -w 4 -l -p $PORT >/dev/null 2>&1 &
36 if curl --proto =http -s $HOST:$PORT --connect-timeout 3 | grep $VERIFY >/dev/null 2>&1; then
37 return 0
38 else
39 curl --proto =http -s localhost:$PORT >/dev/null 2>&1
40 return 1
41 fi
42 fi
43 }
44
45 check_IP_match() {
46 HOST="$1"
47 echo
48 echo Checking your domain name . . .
49 connect_to_port $HOST 443; ec=$?
50 case $ec in
51 0)
52 echo "Connection to $HOST succeeded."
53 ;;
54 1)
55 echo "WARNING:: This server does not appear to be accessible at $HOST:443."
56 echo
57 if connect_to_port $HOST 80; then
58 echo A connection to port 80 succeeds, however.
59 echo This suggests that your DNS settings are correct,
60 echo but something is keeping traffic to port 443 from getting to your server.
61 echo Check your networking configuration to see that connections to port 443 are allowed.
62 else
63 echo "A connection to http://$HOST (port 80) also fails."
64 echo
65 echo "This suggests that $HOST resolves to the wrong IP address"
66 echo or that traffic is not being routed to your server.
67 fi
68 echo
69 echo Google: \"open ports YOUR CLOUD SERVICE\" for information for resolving this problem.
70 echo
71 echo You should probably answer \"n\" at the next prompt and disable Let\'s Encrypt.
72 echo
73 echo This test might not work for all situations,
74 echo "so if you can access Discourse at http://$HOST, you might try anyway."
75 sleep 3
76 ;;
77 2)
78 echo "Continuing without port check."
79 ;;
80 esac
81 }
82
83 ##
84 ## Do we have docker?
85 ##
86 check_and_install_docker () {
87 docker_path=`which docker.io || which docker`
88 if [ -z $docker_path ]; then
89 read -p "Docker not installed. Enter to install from https://get.docker.com/ or Ctrl+C to exit"
90 curl https://get.docker.com/ | sh
91 fi
92 docker_path=`which docker.io || which docker`
93 if [ -z $docker_path ]; then
94 echo Docker install failed. Quitting.
95 exit
96 fi
97 }
98
99 ##
100 ## What are we running on
101 ##
102 check_OS() {
103 echo `uname -s`
104 }
105
106 ##
107 ## OS X available memory
108 ##
109 check_osx_memory() {
110 echo `free -m | awk '/Mem:/ {print $2}'`
111 }
112
113 ##
114 ## Linux available memory
115 ##
116 check_linux_memory() {
117 echo `free -g --si | awk ' /Mem:/ {print $2} '`
118 }
119
120 ##
121 ## Do we have enough memory and disk space for Discourse?
122 ##
123 check_disk_and_memory() {
124
125 os_type=$(check_OS)
126 avail_mem=0
127 if [ "$os_type" == "Darwin" ]; then
128 avail_mem=$(check_osx_memory)
129 else
130 avail_mem=$(check_linux_memory)
131 fi
132
133 if [ "$avail_mem" -lt 1 ]; then
134 echo "WARNING: Discourse requires 1GB RAM to run. This system does not appear"
135 echo "to have sufficient memory."
136 echo
137 echo "Your site may not work properly, or future upgrades of Discourse may not"
138 echo "complete successfully."
139 exit 1
140 fi
141
142 if [ "$avail_mem" -le 2 ]; then
143 total_swap=`free -g --si | awk ' /Swap:/ {print $2} '`
144
145 if [ "$total_swap" -lt 2 ]; then
146 echo "WARNING: Discourse requires at least 2GB of swap when running with 2GB of RAM"
147 echo "or less. This system does not appear to have sufficient swap space."
148 echo
149 echo "Without sufficient swap space, your site may not work properly, and future"
150 echo "upgrades of Discourse may not complete successfully."
151 echo
152 echo "Ctrl+C to exit or wait 5 seconds to have a 2GB swapfile created."
153 sleep 5
154
155 ##
156 ## derived from https://meta.discourse.org/t/13880
157 ##
158 install -o root -g root -m 0600 /dev/null /swapfile
159 fallocate -l 2G /swapfile
160 mkswap /swapfile
161 swapon /swapfile
162 echo "/swapfile swap swap auto 0 0" | tee -a /etc/fstab
163 sysctl -w vm.swappiness=10
164 echo 'vm.swappiness = 10' > /etc/sysctl.d/30-discourse-swap.conf
165
166 total_swap=`free -g --si | awk ' /Swap:/ {print $2} '`
167 if [ "$total_swap" -lt 2 ]; then
168 echo "Failed to create swap: are you root? Are you running on real hardware, or a fully virtualized server?"
169 exit 1
170 fi
171
172 fi
173 fi
174
175
176 free_disk="$(df /var | tail -n 1 | awk '{print $4}')"
177 if [ "$free_disk" -lt 5000 ]; then
178 echo "WARNING: Discourse requires at least 5GB free disk space. This system"
179 echo "does not appear to have sufficient disk space."
180 echo
181 echo "Insufficient disk space may result in problems running your site, and"
182 echo "may not even allow Discourse installation to complete successfully."
183 echo
184 echo "Please free up some space, or expand your disk, before continuing."
185 echo
186 echo "Run \`apt-get autoremove && apt-get autoclean\` to clean up unused"
187 echo "packages and \`./launcher cleanup\` to remove stale Docker containers."
188 exit 1
189 fi
190
191 }
192
193
194 ##
195 ## If we have lots of RAM or lots of CPUs, bump up the defaults to scale better
196 ##
197 scale_ram_and_cpu() {
198
199 local changelog=/tmp/changelog.$PPID
200 # grab info about total system ram and physical (NOT LOGICAL!) CPU cores
201 avail_gb=0
202 avail_cores=0
203 os_type=$(check_OS)
204 if [ "$os_type" == "Darwin" ]; then
205 avail_gb=$(check_osx_memory)
206 avail_cores=`sysctl hw.ncpu | awk '/hw.ncpu:/ {print $2}'`
207 else
208 avail_gb=$(check_linux_memory)
209 avail_cores=$((`awk '/cpu cores/ {print $4;exit}' /proc/cpuinfo`*`sort /proc/cpuinfo | uniq | grep -c "physical id"`))
210 fi
211 echo "Found ${avail_gb}GB of memory and $avail_cores physical CPU cores"
212
213 # db_shared_buffers: 128MB for 1GB, 256MB for 2GB, or 256MB * GB, max 4096MB
214 if [ "$avail_gb" -eq "1" ]
215 then
216 db_shared_buffers=128
217 else
218 if [ "$avail_gb" -eq "2" ]
219 then
220 db_shared_buffers=256
221 else
222 db_shared_buffers=$(( 256 * $avail_gb ))
223 fi
224 fi
225 db_shared_buffers=$(( db_shared_buffers < 4096 ? db_shared_buffers : 4096 ))
226
227 sed -i -e "s/^ #\?db_shared_buffers:.*/ db_shared_buffers: \"${db_shared_buffers}MB\"/w $changelog" $data_file
228 if [ -s $changelog ]
229 then
230 echo "setting db_shared_buffers = ${db_shared_buffers}MB"
231 rm $changelog
232 fi
233
234 # UNICORN_WORKERS: 2 * GB for 2GB or less, or 2 * CPU, max 8
235 if [ "$avail_gb" -le "2" ]
236 then
237 unicorn_workers=$(( 2 * $avail_gb ))
238 else
239 unicorn_workers=$(( 2 * $avail_cores ))
240 fi
241 unicorn_workers=$(( unicorn_workers < 8 ? unicorn_workers : 8 ))
242
243 sed -i -e "s/^ #\?UNICORN_WORKERS:.*/ UNICORN_WORKERS: ${unicorn_workers}/w $changelog" $web_file
244 if [ -s $changelog ]
245 then
246 echo "setting UNICORN_WORKERS = ${unicorn_workers}"
247 rm $changelog
248 fi
249
250 echo $data_file memory parameters updated.
251 }
252
253
254 ##
255 ## standard http / https ports must not be occupied
256 ##
257 check_ports() {
258 check_port "80"
259 check_port "443"
260 echo "Ports 80 and 443 are free for use"
261 }
262
263
264 ##
265 ## check a port to see if it is already in use
266 ##
267 check_port() {
268
269 local valid=$(netstat -tln | awk '{print $4}' | grep ":${1}\$")
270
271 if [ -n "$valid" ]; then
272 echo "Port ${1} appears to already be in use."
273 echo
274 echo "This will show you what command is using port ${1}"
275 lsof -i tcp:${1} -s tcp:listen
276 echo
277 echo "If you are trying to run Discourse simultaneously with another web"
278 echo "server like Apache or nginx, you will need to bind to a different port"
279 echo
280 echo "See https://meta.discourse.org/t/17247"
281 echo
282 echo "If you are reconfiguring an already-configured Discourse, use "
283 echo
284 echo "./launcher stop app"
285 echo
286 echo "to stop Discourse before you reconfigure it and try again."
287 exit 1
288 fi
289 }
290
291 ##
292 ## read a variable from the config file
293 ##
294 read_config() {
295 config_line=`egrep "^ #?$1:" $web_file`
296 read_config_result=`echo $config_line | awk -F":" '{print $2}'`
297 read_config_result=`echo $read_config_result | sed "s/^\([\"']\)\(.*\)\1\$/\2/g"`
298 }
299
300 read_default() {
301 config_line=`egrep "^ #?$1:" samples/standalone.yml`
302 read_default_result=`echo $config_line | awk -F":" '{print $2}'`
303 read_default_result=`echo $read_config_result | sed "s/^\([\"']\)\(.*\)\1\$/\2/g"`
304 }
305
306 ##
307 ## prompt user for typical Discourse config file values
308 ##
309 ask_user_for_config() {
310
311 # NOTE: Defaults now come from standalone.yml
312
313 local changelog=/tmp/changelog.$PPID
314 read_config "DISCOURSE_SMTP_ADDRESS"
315 local smtp_address=$read_config_result
316 # NOTE: if there are spaces between emails, this breaks, but a human should be paying attention
317 read_config "DISCOURSE_DEVELOPER_EMAILS"
318 local developer_emails=$read_config_result
319 read_config "DISCOURSE_SMTP_PASSWORD"
320 local smtp_password=$read_config_result
321 read_config "DISCOURSE_SMTP_PORT"
322 local smtp_port=$read_config_result
323 read_config "DISCOURSE_SMTP_USER_NAME"
324 local smtp_user_name=$read_config_result
325 if [ "$smtp_password" = "pa$$word" ]
326 then
327 smtp_password = ""
328 fi
329 read_config "LETSENCRYPT_ACCOUNT_EMAIL"
330 local letsencrypt_account_email=$read_config_result
331 if [ -z $letsencrypt_account_email ]
332 then
333 letsencrypt_account_email="me@example.com"
334 fi
335 if [ "$letsencrypt_account_email" = "me@example.com" ]
336 then
337 local letsencrypt_status="ENTER to skip"
338 else
339 local letsencrypt_status="Enter 'OFF' to disable."
340 fi
341
342 read_config "DISCOURSE_HOSTNAME"
343 hostname=$read_config_result
344
345 local new_value=""
346 local config_ok="n"
347 local update_ok="y"
348
349 echo ""
350
351 while [[ "$config_ok" == "n" ]]
352 do
353 if [ ! -z "$hostname" ]
354 then
355 read -p "Hostname for your Discourse? [$hostname]: " new_value
356 if [ ! -z "$new_value" ]
357 then
358 hostname="$new_value"
359 fi
360 if [[ $hostname =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]
361 then
362 echo
363 echo "Discourse requires a DNS hostname. IP addresses are unsupported and will not work."
364 echo
365 hostname="discourse.example.com"
366 fi
367 fi
368
369 if [ ! -z "$developer_emails" ]
370 then
371 read -p "Email address for admin account(s)? [$developer_emails]: " new_value
372 if [ ! -z "$new_value" ]
373 then
374 developer_emails="$new_value"
375 fi
376 fi
377
378 if [ ! -z "$smtp_address" ]
379 then
380 read -p "SMTP server address? [$smtp_address]: " new_value
381 if [ ! -z "$new_value" ]
382 then
383 smtp_address="$new_value"
384 fi
385 fi
386
387 if [ ! -z "$smtp_port" ]
388 then
389 read -p "SMTP port? [$smtp_port]: " new_value
390 if [ ! -z "$new_value" ]
391 then
392 smtp_port="$new_value"
393 fi
394 fi
395
396 ##
397 ## automatically set correct user name based on common mail providers unless it's been set
398 ##
399 if [ "$smtp_user_name" == "user@example.com" ]
400 then
401 if [ "$smtp_address" == "smtp.sparkpostmail.com" ]
402 then
403 smtp_user_name="SMTP_Injection"
404 fi
405 if [ "$smtp_address" == "smtp.sendgrid.net" ]
406 then
407 smtp_user_name="apikey"
408 fi
409 if [ "$smtp_address" == "smtp.mailgun.org" ]
410 then
411 smtp_user_name="postmaster@$hostname"
412 fi
413 fi
414
415 if [ ! -z "$smtp_user_name" ]
416 then
417 read -p "SMTP user name? [$smtp_user_name]: " new_value
418 if [ ! -z "$new_value" ]
419 then
420 smtp_user_name="$new_value"
421 fi
422 fi
423
424 read -p "SMTP password? [$smtp_password]: " new_value
425 if [ ! -z "$new_value" ]
426 then
427 smtp_password="$new_value"
428 fi
429
430 if [ ! -z $letsencrypt_account_email ]
431 then
432 read -p "Optional email address for setting up Let's Encrypt? ($letsencrypt_status) [$letsencrypt_account_email]: " new_value
433 if [ ! -z "$new_value" ]
434 then
435 letsencrypt_account_email="$new_value"
436 if [ "${new_value,,}" = "off" ]
437 then
438 letsencrypt_status="ENTER to skip"
439 else
440 letsencrypt_status="Enter 'OFF' to disable."
441 fi
442 fi
443 fi
444
445 if [ "$letsencrypt_status" == "Enter 'OFF' to disable." ]
446 then
447 check_IP_match $hostname
448 fi
449
450 echo -e "\nDoes this look right?\n"
451 echo "Hostname : $hostname"
452 echo "Email : $developer_emails"
453 echo "SMTP address : $smtp_address"
454 echo "SMTP port : $smtp_port"
455 echo "SMTP username : $smtp_user_name"
456 echo "SMTP password : $smtp_password"
457
458 if [ "$letsencrypt_status" == "Enter 'OFF' to disable." ]
459 then
460 echo "Let's Encrypt : $letsencrypt_account_email"
461 fi
462
463
464 echo ""
465 read -p "ENTER to continue, 'n' to try again, Ctrl+C to exit: " config_ok
466 done
467
468 sed -i -e "s/^ DISCOURSE_HOSTNAME:.*/ DISCOURSE_HOSTNAME: $hostname/w $changelog" $web_file
469 if [ -s $changelog ]
470 then
471 rm $changelog
472 else
473 echo "DISCOURSE_HOSTNAME change failed."
474 update_ok="n"
475 fi
476
477 sed -i -e "s/^ DISCOURSE_DEVELOPER_EMAILS:.*/ DISCOURSE_DEVELOPER_EMAILS: \'$developer_emails\'/w $changelog" $web_file
478 if [ -s $changelog ]
479 then
480 rm $changelog
481 else
482 echo "DISCOURSE_DEVELOPER_EMAILS change failed."
483 update_ok="n"
484 fi
485
486 sed -i -e "s/^ DISCOURSE_SMTP_ADDRESS:.*/ DISCOURSE_SMTP_ADDRESS: $smtp_address/w $changelog" $web_file
487 if [ -s $changelog ]
488 then
489 rm $changelog
490 else
491 echo "DISCOURSE_SMTP_ADDRESS change failed."
492 update_ok="n"
493 fi
494
495 sed -i -e "s/^ #\?DISCOURSE_SMTP_PORT:.*/ DISCOURSE_SMTP_PORT: $smtp_port/w $changelog" $web_file
496 if [ -s $changelog ]
497 then
498 rm $changelog
499 else
500 echo "DISCOURSE_SMTP_PORT change failed."
501 update_ok="n"
502 fi
503
504 sed -i -e "s/^ #\?DISCOURSE_SMTP_USER_NAME:.*/ DISCOURSE_SMTP_USER_NAME: $smtp_user_name/w $changelog" $web_file
505 if [ -s $changelog ]
506 then
507 rm $changelog
508 else
509 echo "DISCOURSE_SMTP_USER_NAME change failed."
510 update_ok="n"
511 fi
512
513 if [[ "$smtp_password" == *"\""* ]]
514 then
515 SLASH="BROKEN"
516 echo "========================================"
517 echo "WARNING!!!"
518 echo "Your password contains a quote (\")"
519 echo "Your SMTP Password will not be set. You will need to edit app.yml to enter it."
520 echo "========================================"
521 update_ok="n"
522 else
523 SLASH="|"
524 if [[ "$smtp_password" == *"$SLASH"* ]]
525 then SLASH="+"
526 if [[ "$smtp_password" == *"$SLASH"* ]]
527 then
528 SLASH="Q"
529 if [[ "$smtp_password" == *"$SLASH"* ]]
530 then
531 SLASH="BROKEN"
532 echo "========================================"
533 echo "WARNING!!!"
534 echo "Your password contains all available delimiters (+, |, and Q). "
535 echo "Your SMTP Password will not be set. You will need to edit app.yml to enter it."
536 echo "========================================"
537 update_ok="n"
538 fi
539 fi
540 fi
541 fi
542 if [[ "$SLASH" != "BROKEN" ]]
543 then
544 sed -i -e "s${SLASH}^ #\?DISCOURSE_SMTP_PASSWORD:.*${SLASH} DISCOURSE_SMTP_PASSWORD: \"${smtp_password}\"${SLASH}w $changelog" $web_file
545
546 if [ -s $changelog ]
547 then
548 rm $changelog
549 else
550 echo "DISCOURSE_SMTP_PASSWORD change failed."
551 update_ok="n"
552 fi
553 fi
554 if [ "$letsencrypt_status" = "ENTER to skip" ]
555 then
556 local src='^ #\?- "templates\/web.ssl.template.yml"'
557 local dst=' #\- "templates\/web.ssl.template.yml"'
558 sed -i -e "s/$src/$dst/w $changelog" $web_file
559 if [ ! -s $changelog ]
560 then
561 update_ok="n"
562 echo "web.ssl.template.yml NOT DISABLED--Are you using a non-standard template?"
563 fi
564 local src='^ #\?- "templates\/web.letsencrypt.ssl.template.yml"'
565 local dst=' #- "templates\/web.letsencrypt.ssl.template.yml"'
566
567 sed -i -e "s/$src/$dst/w $changelog" $web_file
568 if [ ! -s $changelog ]
569 then
570 update_ok="n"
571 echo "web.ssl.template.yml NOT DISABLED--Are you using a non-standard template?"
572 fi
573 else # enable let's encrypt
574 echo "Let's Encrypt will be enabled for $letsencrypt_account_email"
575 sed -i -e "s/^ #\?LETSENCRYPT_ACCOUNT_EMAIL:.*/ LETSENCRYPT_ACCOUNT_EMAIL: $letsencrypt_account_email/w $changelog" $web_file
576 if [ -s $changelog ]
577 then
578 rm $changelog
579 else
580 echo "LETSENCRYPT_ACCOUNT_EMAIL change failed."
581 update_ok="n"
582 fi
583 local src='^ #\?- "templates\/web.ssl.template.yml"'
584 local dst=' \- "templates\/web.ssl.template.yml"'
585 sed -i -e "s/$src/$dst/w $changelog" $web_file
586 if [ -s $changelog ]
587 then
588 echo "web.ssl.template.yml enabled"
589 else
590 update_ok="n"
591 echo "web.ssl.template.yml NOT ENABLED--was it on already?"
592 fi
593 local src='^ #\?- "templates\/web.letsencrypt.ssl.template.yml"'
594 local dst=' - "templates\/web.letsencrypt.ssl.template.yml"'
595
596 sed -i -e "s/$src/$dst/w $changelog" $web_file
597 if [ -s $changelog ]
598 then
599 echo "letsencrypt.ssl.template.yml enabled"
600 else
601 update_ok="n"
602 echo "letsencrypt.ssl.template.yml NOT ENABLED -- was it on already?"
603 fi
604 fi
605
606 if [ "$update_ok" == "y" ]
607 then
608 echo -e "\nConfiguration file at $config_file updated successfully!\n"
609 else
610 echo -e "\nUnfortunately, there was an error changing $config_file\n"
611 echo -d "This may happen if you have made unexpected changes."
612 exit 1
613 fi
614 }
615
616 ##
617 ## is our config file valid? Does it have the required fields set?
618 ##
619 validate_config() {
620
621 valid_config="y"
622
623 for x in DISCOURSE_SMTP_ADDRESS DISCOURSE_SMTP_USER_NAME DISCOURSE_SMTP_PASSWORD \
624 DISCOURSE_DEVELOPER_EMAILS DISCOURSE_HOSTNAME
625 do
626 read_config $x
627 local result=$read_config_result
628 read_default $x
629 local default=$read_default_result
630
631 if [ ! -z "$result" ]
632 then
633 if [[ "$config_line" = *"$default"* ]]
634 then
635 echo "$x left at incorrect default of $default"
636 valid_config="n"
637 fi
638 config_val=`echo $config_line | awk '{print $2}'`
639 if [ -z $config_val ]
640 then
641 echo "$x was not configured"
642 valid_config="n"
643 fi
644 else
645 echo "$x not present"
646 valid_config="n"
647 fi
648 done
649
650 if [ "$valid_config" != "y" ]; then
651 echo -e "\nSorry, these $web_file settings aren't valid -- can't continue!"
652 echo "If you have unusual requirements, edit $web_file and then: "
653 echo "./launcher bootstrap $app_name"
654 exit 1
655 fi
656 }
657
658
659 ##
660 ## template file names
661 ##
662
663 if [ "$1" == "2container" ]
664 then
665 app_name=web_only
666 data_name=data
667 web_template=samples/web_only.yml
668 data_template=samples/data.yml
669 web_file=containers/$app_name.yml
670 data_file=containers/$data_name.yml
671 else
672 app_name=app
673 data_name=app
674 web_template=samples/standalone.yml
675 data_template=""
676 web_file=containers/$app_name.yml
677 data_file=containers/$app_name.yml
678 fi
679 changelog=/tmp/changelog
680
681 ##
682 ## Check requirements before creating a copy of a config file we won't edit
683 ##
684 check_root
685 check_and_install_docker
686 check_disk_and_memory
687
688 if [ -a "$web_file" ]
689 then
690 echo "The configuration file $web_file already exists!"
691 echo
692 echo ". . . reconfiguring . . ."
693 echo
694 echo
695 DATE=`date +"%Y-%m-%d-%H%M%S"`
696 BACKUP=$app_name.yml.$DATE.bak
697 echo Saving old file as $BACKUP
698 cp $web_file containers/$BACKUP
699 echo "Stopping existing container in 5 seconds or Control-C to cancel."
700 sleep 5
701 ./launcher stop app
702 echo
703 else
704 check_ports
705 cp -v $web_template $web_file
706 if [ "$data_name" == "data" ]
707 then
708 echo "--------------------------------------------------"
709 echo "This two container setup is currently unsupported. Use at your own risk!"
710 echo "--------------------------------------------------"
711 DISCOURSE_DB_PASSWORD=`date +%s | sha256sum | base64 | head -c 20`
712
713 sed -i -e "s/DISCOURSE_DB_PASSWORD: SOME_SECRET/DISCOURSE_DB_PASSWORD: $DISCOURSE_DB_PASSWORD/w $changelog" $web_file
714 if [ -s $changelog ]
715 then
716 rm $changelog
717 else
718 echo "Problem changing DISCOURSE_DB_PASSWORD" in $web_file
719 fi
720
721 cp -v $data_template $data_file
722 quote=\'
723 sed -i -e "s/password ${quote}SOME_SECRET${quote}/password '$DISCOURSE_DB_PASSWORD'/w $changelog" $data_file
724 if [ -s $changelog ]
725 then
726 rm $changelog
727 else
728 echo "Problem changing DISCOURSE_DB_PASSWORD" in $data_file
729 fi
730 fi
731 fi
732
733 scale_ram_and_cpu
734 ask_user_for_config
735 validate_config
736
737 ##
738 ## if we reach this point without exiting, OK to proceed
739 ## rebuild won't fail if there's nothing to rebuild and does the restart
740 ##
741 echo "Updates successful. Rebuilding in 5 seconds."
742 sleep 5 # Just a chance to ^C in case they were too fast on the draw
743 if [ "$data_name" == "$app_name" ]
744 then
745 echo Building $app_name
746 ./launcher rebuild $app_name
747 else
748 echo Building $data_name now . . .
749 ./launcher rebuild $data_name
750 echo Building $app_name now . . .
751 ./launcher rebuild $app_name
752 fi