#!/usr/bin/env bash
+DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+cd $DIR
##
## Make sure only root can run our script
## OS X available memory
##
check_osx_memory() {
- echo `top -l 1 | awk '/PhysMem:/ {print $2}' | sed s/G//`
+ echo `free -m | awk '/Mem:/ {print $2}'`
}
##
##
read_config() {
config_line=`egrep "^ #?$1:" $web_file`
- read_config_result=`echo $config_line | awk '{print $2}'`
+ read_config_result=`echo $config_line | awk --field-separator=":" '{print $2}'`
read_config_result=`echo $read_config_result | sed "s/^\([\"']\)\(.*\)\1\$/\2/g"`
}
if [ ! -z $hostname ]
then
read -p "Hostname for your Discourse? [$hostname]: " new_value
- if [ ! -z $new_value ]
+ if [ ! -z "$new_value" ]
+ then
+ hostname="$new_value"
+ fi
+ if [[ $hostname =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]
then
- hostname=$new_value
+ echo
+ echo "Discourse requires a DNS hostname. IP addresses are unsupported and will not work."
+ echo
+ hostname="discourse.example.com"
fi
fi
if [ ! -z $developer_emails ]
then
read -p "Email address for admin account(s)? [$developer_emails]: " new_value
- if [ ! -z $new_value ]
+ if [ ! -z "$new_value" ]
then
- developer_emails=$new_value
+ developer_emails="$new_value"
fi
fi
if [ ! -z $smtp_address ]
then
read -p "SMTP server address? [$smtp_address]: " new_value
- if [ ! -z $new_value ]
+ if [ ! -z "$new_value" ]
then
- smtp_address=$new_value
+ smtp_address="$new_value"
fi
fi
if [ ! -z $smtp_port ]
then
read -p "SMTP port? [$smtp_port]: " new_value
- if [ ! -z $new_value ]
+ if [ ! -z "$new_value" ]
then
- smtp_port=$new_value
+ smtp_port="$new_value"
fi
fi
##
- ## automatically set correct user name based on common mail providers
+ ## automatically set correct user name based on common mail providers unless it's been set
##
- if [ "$smtp_address" == "smtp.sparkpostmail.com" ]
- then
- smtp_user_name="SMTP_Injection"
- fi
- if [ "$smtp_address" == "smtp.sendgrid.net" ]
+ if [ "$smtp_user_name" == "user@example.com" ]
then
- smtp_user_name="apikey"
- fi
- if [ "$smtp_address" == "smtp.mailgun.org" ]
- then
- smtp_user_name="postmaster@$hostname"
+ if [ "$smtp_address" == "smtp.sparkpostmail.com" ]
+ then
+ smtp_user_name="SMTP_Injection"
+ fi
+ if [ "$smtp_address" == "smtp.sendgrid.net" ]
+ then
+ smtp_user_name="apikey"
+ fi
+ if [ "$smtp_address" == "smtp.mailgun.org" ]
+ then
+ smtp_user_name="postmaster@$hostname"
+ fi
fi
- if [ ! -z $smtp_user_name ]
+ if [ ! -z "$smtp_user_name" ]
then
read -p "SMTP user name? [$smtp_user_name]: " new_value
if [ ! -z "$new_value" ]
fi
read -p "SMTP password? [$smtp_password]: " new_value
- if [ ! -z $new_value ]
+ if [ ! -z "$new_value" ]
then
- smtp_password=$new_value
+ smtp_password="$new_value"
fi
if [ ! -z $letsencrypt_account_email ]
then
read -p "Let's Encrypt account email? ($letsencrypt_status) [$letsencrypt_account_email]: " new_value
- if [ ! -z $new_value ]
+ if [ ! -z "$new_value" ]
then
- letsencrypt_account_email=$new_value
+ letsencrypt_account_email="$new_value"
if [ "${new_value,,}" = "off" ]
then
letsencrypt_status="ENTER to skip"
update_ok="n"
fi
- sed -i -e "s/^ #\?DISCOURSE_SMTP_PASSWORD:.*/ DISCOURSE_SMTP_PASSWORD: \"${smtp_password/\//\\/}\"/w $changelog" $web_file
- if [ -s $changelog ]
+ if [[ "$smtp_password" == *"\""* ]]
then
- rm $changelog
- else
- echo "DISCOURSE_SMTP_PASSWORD change failed."
+ SLASH="BROKEN"
+ echo "========================================"
+ echo "WARNING!!!"
+ echo "Your password contains a quote (\")"
+ echo "Your SMTP Password will not be set. You will need to edit app.yml to enter it."
+ echo "========================================"
update_ok="n"
+ else
+ SLASH="|"
+ if [[ "$smtp_password" == *"$SLASH"* ]]
+ then SLASH="+"
+ if [[ "$smtp_password" == *"$SLASH"* ]]
+ then
+ SLASH="Q"
+ if [[ "$smtp_password" == *"$SLASH"* ]]
+ then
+ SLASH="BROKEN"
+ echo "========================================"
+ echo "WARNING!!!"
+ echo "Your password contains all available delimiters (+, |, and Q). "
+ echo "Your SMTP Password will not be set. You will need to edit app.yml to enter it."
+ echo "========================================"
+ update_ok="n"
+ fi
+ fi
+ fi
fi
+ if [[ "$SLASH" != "BROKEN" ]]
+ then
+ sed -i -e "s${SLASH}^ #\?DISCOURSE_SMTP_PASSWORD:.*${SLASH} DISCOURSE_SMTP_PASSWORD: \"${smtp_password}\"${SLASH}w $changelog" $web_file
+ if [ -s $changelog ]
+ then
+ rm $changelog
+ else
+ echo "DISCOURSE_SMTP_PASSWORD change failed."
+ update_ok="n"
+ fi
+ fi
if [ "$letsencrypt_status" = "ENTER to skip" ]
then
local src='^ #\?- "templates\/web.ssl.template.yml"'
DATE=`date +"%Y-%m-%d-%H%M%S"`
BACKUP=$app_name.yml.$DATE.bak
echo Saving old file as $BACKUP
- cp $config_file containers/$BACKUP
+ cp $web_file containers/$BACKUP
echo "Stopping existing container in 5 seconds or Control-C to cancel."
sleep 5
./launcher stop app
if [ "$data_name" == "data" ]
then
echo "--------------------------------------------------"
- echo "This multisite setup is currently unsupported. Use at your own risk!"
+ echo "This two container setup is currently unsupported. Use at your own risk!"
echo "--------------------------------------------------"
DISCOURSE_DB_PASSWORD=`date +%s | sha256sum | base64 | head -c 20`
#UNICORN_WORKERS: 3
## TODO: The domain name this Discourse instance will respond to
+ ## Required. Discourse will not work with a bare IP number.
DISCOURSE_HOSTNAME: 'discourse.example.com'
## Uncomment if you want the container to be started with the same
DISCOURSE_DEVELOPER_EMAILS: 'me@example.com,you@example.com'
## TODO: The SMTP mail server used to validate new accounts and send notifications
- DISCOURSE_SMTP_ADDRESS: smtp.example.com # required
- #DISCOURSE_SMTP_PORT: 587 # (optional, default 587)
- #DISCOURSE_SMTP_USER_NAME: user@example.com # required
- #DISCOURSE_SMTP_PASSWORD: pa$$word # required, WARNING the char '#' in pw can cause problems!
+ # SMTP ADDRESS, username, and password are required
+ # WARNING the char '#' in SMTP password can cause problems!
+ DISCOURSE_SMTP_ADDRESS: smtp.example.com
+ #DISCOURSE_SMTP_PORT: 587
+ DISCOURSE_SMTP_USER_NAME: user@example.com
+ DISCOURSE_SMTP_PASSWORD: pa$$word
#DISCOURSE_SMTP_ENABLE_START_TLS: true # (optional, default true)
## If you added the Lets Encrypt template, uncomment below to get a free SSL certificate