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