lila/bin/prod/deploy
2019-05-05 08:18:16 +07:00

146 lines
3.9 KiB
Bash
Executable file

#!/bin/sh -e
. bin/lilarc
mode=$1
if [ -z $mode ]; then
echo "Empty deploy target"
exit 1
elif [ $mode = "main" ]; then
REMOTE="keres"
REMOTE_DIR="/home/lichess-deploy"
FRONT_REMOTE="leess"
FRONT_REMOTE_DIR="/home/lichess-deploy"
CLI="bin/cli-prod"
elif [ $mode = "stage" ]; then
REMOTE="khiaw"
REMOTE_DIR="/home/lichess-stage"
FRONT_REMOTE="khiaw"
FRONT_REMOTE_DIR="/home/lichess-stage"
CLI="bin/cli-stage"
elif [ $mode = "stress" ]; then
REMOTE="listress"
REMOTE_DIR="/home/lichess"
FRONT_REMOTE=$REMOTE
FRONT_REMOTE_DIR=$REMOTE_DIR
elif [ $mode = "local" ]; then
REMOTE="localhost"
REMOTE_DIR="/tmp/lila5"
CLI="bin/cli"
else
echo "Unknown deploy target $mode"
exit 1
fi
lilalog "Deploy to $mode server $REMOTE:$REMOTE_DIR"
echo "##################################################"
echo "# #"
echo "# * Deploy and restart * #"
echo "# #"
echo "##################################################"
read -p "Press enter to continue"
if [ "$2" = "asset" ]; then
./ui/build prod
fi
if [ $mode = "main" ]; then
lilalog "Notify pre deploy"
$CLI deploy pre
fi
SBT_OPTS=""
export JAVA_OPTS="-Xms512m -Xmx2048m -XX:ReservedCodeCacheSize=64m -XX:+UseConcMarkSweepGC"
sbt stage exit
if [ $? != 0 ]; then
lilalog "Deploy canceled"
exit 1
fi
if [ $mode = "main" ]; then
lilalog "Backup production lichess dir"
BACKUP_DIR=/home/backup/lichess-$(date +%Y-%m-%d_%H-%M)
ssh $REMOTE "echo $BACKUP_DIR && cp -r $REMOTE_DIR $BACKUP_DIR && rm $BACKUP_DIR/RUNNING_PID && chown -R lichess:lichess $BACKUP_DIR"
fi
# read -n 1 -p "Press [Enter] to rsync to $REMOTE:$REMOTE_DIR"
RSYNC_OPTIONS=" \
--archive \
--no-o --no-g \
--force \
--delete \
--progress \
--compress \
--checksum \
--verbose \
--exclude public \
--exclude conf/application.conf \
--exclude RUNNING_PID \
--exclude '*.psd' \
--exclude '*.h' \
--exclude '*.cpp' \
--exclude '.git/' \
--exclude node_modules"
lilalog "Rsync scripts, binaries and assets"
stage="target/universal/stage"
include="bin $stage/bin $stage/lib public"
rsync_command="rsync $RSYNC_OPTIONS $include $REMOTE:$REMOTE_DIR"
echo "$rsync_command"
$rsync_command
echo "rsync complete"
if [ $mode == "main" ]; then
lilalog "Deploy logger configuration"
rsync -av conf/prod-logger.xml $REMOTE:/etc/lichess.logger.xml
fi
if [ $FRONT_REMOTE ] && [ $FRONT_REMOTE_DIR ]; then
lilalog "Deploy assets to $mode frontend server $FRONT_REMOTE:$FRONT_REMOTE_DIR"
rsync --archive --no-o --no-g --progress --exclude '*.dev.css' public $FRONT_REMOTE:$FRONT_REMOTE_DIR
fi
read -n 1 -p "Press [Enter] to complete deployment to $mode server $REMOTE:$REMOTE_DIR"
if [ $mode = "main" ]; then
lilalog "Notify post deploy"
$CLI deploy post
sleep 1
fi
# start dropping packets. Run `bin/prod/iptables-drop 0` on the server to resume normal traffic.
START_DROPPING="$REMOTE_DIR/bin/prod/iptables-drop 0.9"
STOP_DROPPING="sleep 7 && $REMOTE_DIR/bin/prod/iptables-drop 0.75 && sleep 6 && $REMOTE_DIR/bin/prod/iptables-drop 0"
# STOP_DROPPING="echo \"not resuming traffic\""
if [ $mode = "main" ]; then
lilalog "Restart lichess"
RUN_DIR="/home/lichess"
# SSH_COMMAND="$START_DROPPING && rm $RUN_DIR && ln -s $REMOTE_DIR $RUN_DIR && systemctl restart lichess && $STOP_DROPPING"
SSH_COMMAND="rm $RUN_DIR && ln -s $REMOTE_DIR $RUN_DIR && systemctl restart lichess"
echo $SSH_COMMAND
ssh $REMOTE $SSH_COMMAND
fi
if [ $mode = "stage" ]; then
lilalog "Restart lichess-stage"
SSH_COMMAND="chown -R lichess:lichess $REMOTE_DIR && systemctl restart lichess-stage"
echo $SSH_COMMAND
ssh $REMOTE $SSH_COMMAND
fi
if [ $mode = "stress" ]; then
lilalog "Restart listress"
SSH_COMMAND="chown -R lichess:lichess $REMOTE_DIR && systemctl restart lichess"
echo $SSH_COMMAND
ssh $REMOTE $SSH_COMMAND
fi
lilalog "Deploy complete"
if [ $mode != "local" ]; then
sleep 2
curl_prod
fi