+##
+## Check whether a connection to HOSTNAME ($1) on PORT ($2) is possible
+##
+connect_to_port () {
+ HOST="$1"
+ PORT="$2"
+ VERIFY=`date +%s | sha256sum | base64 | head -c 20`
+ echo -e "HTTP/1.1 200 OK\n\n $VERIFY" | nc -w 4 -l -p $PORT >/dev/null 2>&1 &
+ if curl --proto =http -s $HOST:$PORT --connect-timeout 3 | grep $VERIFY >/dev/null 2>&1
+ then
+ return 0
+ else
+ curl --proto =http -s localhost:$PORT >/dev/null 2>&1
+ return 1
+ fi
+}
+
+check_IP_match () {
+ HOST="$1"
+ echo
+ echo Checking your domain name . . .
+ if connect_to_port $HOST 443
+ then
+ echo
+ echo "Connection to $HOST succeeded."
+ else
+ echo WARNING:: This server does not appear to be accessible at $HOST:443.
+ echo
+ if connect_to_port $HOST 80
+ then
+ echo A connection to port 80 succeeds, however.
+ echo This suggests that your DNS settings are correct,
+ echo but something is keeping traffic to port 443 from getting to your server.
+ echo Check your networking configuration to see that connections to port 443 are allowed.
+ else
+ echo "A connection to http://$HOST (port 80) also fails."
+ echo
+ echo This suggests that $HOST resolves to the wrong IP address
+ echo or that traffic is not being routed to your server.
+ fi
+ echo
+ echo Google: \"open ports YOUR CLOUD SERVICE\" for information for resolving this problem.
+ echo
+ echo You should probably answer \"n\" at the next prompt and disable Let\'s Encrypt.
+ echo
+ echo This test might not work for all situations,
+ echo so if you can access Discourse at http://$HOST, you might try anyway.
+ sleep 3
+ fi
+}
+
+##
+## Do we have docker?
+##
+check_and_install_docker () {
+ docker_path=`which docker.io || which docker`
+ if [ -z $docker_path ]; then
+ read -p "Docker not installed. Enter to install from https://get.docker.com/ or Ctrl+C to exit"
+ curl https://get.docker.com/ | sh
+ fi
+ docker_path=`which docker.io || which docker`
+ if [ -z $docker_path ]; then
+ echo Docker install failed. Quitting.
+ exit
+ fi
+}
+
+##
+## What are we running on
+##
+check_OS() {
+ echo `uname -s`
+}
+
+##
+## OS X available memory
+##
+check_osx_memory() {
+ echo `top -l 1 | awk '/PhysMem:/ {print $2}' | sed s/G//`
+}
+
+##
+## Linux available memory
+##
+check_linux_memory() {
+ echo `free -g --si | awk ' /Mem:/ {print $2} '`
+}
+