To deploy to aws, connect to our aws vpn then run: tools/deploy-docker-compose.sh The deploy script does the following: * builds sparkd * builds datastream apps (pubsub, md-publisher, and webapp) * uploads the build to aws * bounces all services (sparkd, pubsub, md-publisher, and webapp) Note: the name 'md-publisher' refers to DataStreamPublisher w/ MarketData configuration
197 lines
5.3 KiB
Bash
Executable File
197 lines
5.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
print_help_and_exit() {
|
|
cat <<EOF
|
|
Usage: deploy-docker-compose.sh [OPTIONS] <app> <container_prefix> <release>
|
|
|
|
Positionals:
|
|
app The application to bounce [PubSubServer | DataStreamPublisher | Bts.DataStreamWebApp.Server]
|
|
release The release id. This will be appended to the container prefix to form the new container name.
|
|
|
|
Options:
|
|
--app APP The application to bounce [PubSubServer | DataStreamPublisher | Bts.DataStreamWebApp.Server]
|
|
--release The release id. This will be appended to the container prefix to form the new container name.
|
|
--dockerfile PATH The Dockerfile used to build the image.
|
|
|
|
EOF
|
|
exit "$1"
|
|
}
|
|
|
|
app_name=""
|
|
release=""
|
|
cfg_profile=""
|
|
dockerfile=""
|
|
|
|
while [[ $# -gt 0 ]]; do
|
|
case "$1" in
|
|
--app)
|
|
if [[ -z "$2" ]]; then
|
|
echo "App (--app) must be non-empty"
|
|
print_help_and_exit 1
|
|
fi
|
|
app_name="$2"
|
|
shift 2
|
|
;;
|
|
--release)
|
|
if [[ -z "$2" ]]; then
|
|
echo "Release (--release) must be non-empty"
|
|
print_help_and_exit 1
|
|
fi
|
|
release="$2"
|
|
shift 2
|
|
;;
|
|
--dockerfile)
|
|
if [[ -z "$2" ]]; then
|
|
echo "Dockerfile (--dockerfile) must be non-empty"
|
|
print_help_and_exit 1
|
|
fi
|
|
dockerfile="$(realpath "$2")"
|
|
shift 2
|
|
;;
|
|
-h)
|
|
;&
|
|
--help)
|
|
print_help_and_exit 0
|
|
;;
|
|
-*)
|
|
echo "Unexpected option '$1'"
|
|
print_help_and_exit 1
|
|
;;
|
|
*)
|
|
# Positionals
|
|
if [[ -z "$1" ]]; then
|
|
echo "Invalid position argument '$1'"
|
|
print_help_and_exit 1
|
|
elif [[ -z "$app_name" ]]; then
|
|
app_name="$1"
|
|
elif [[ -z "$container_prefix" ]]; then
|
|
container_prefix="$1"
|
|
elif [[ -z "$release" ]]; then
|
|
release="$1"
|
|
fi
|
|
shift 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
# Validate args
|
|
if [ "$release" == "" ]; then
|
|
# Use commit sha
|
|
release="$(git rev-parse --short HEAD)"
|
|
fi
|
|
|
|
if [ "$release" == "" ]; then
|
|
echo "Release not defined"
|
|
print_help_and_exit 1
|
|
fi
|
|
|
|
this_dir="$(realpath "$(dirname "${BASH_SOURCE[0]}")")"
|
|
cd $this_dir/..
|
|
|
|
if [[ -z "$composefile" ]]; then
|
|
composefile="compose.production.yaml"
|
|
fi
|
|
release_dir=".tmp/$release"
|
|
rm -rf "$release_dir"
|
|
rm -f ".tmp/$release.tar.gz"
|
|
mkdir -p "$release_dir"
|
|
|
|
# Build sparkd
|
|
build_sparkd_sh="$this_dir/build_sparkd.sh"
|
|
"$build_sparkd_sh" --build-type Release
|
|
status=$?
|
|
if [ $status -ne 0 ]; then
|
|
echo "Build sparkd exited with code $status. Full command below:"
|
|
echo "Command: $build_sparkd_sh --build-type Release"
|
|
exit 1
|
|
fi
|
|
|
|
# Copy sparkd
|
|
sparkd_release_dir="$release_dir/sparkd"
|
|
mkdir -p "$sparkd_release_dir"
|
|
sparkd_release_bin="$sparkd_release_dir/bin"
|
|
cp -r "install/Release/bin" "$sparkd_release_bin"
|
|
cp src/server/sparkd/production.Dockerfile "$sparkd_release_dir/Dockerfile"
|
|
cp src/server/sparkd/production.spark.conf "$sparkd_release_dir/spark.conf"
|
|
|
|
# Publish DataStream apps
|
|
publish_sh="$this_dir/publish_data_stream.sh"
|
|
ds_release_dir="$release_dir/DataStream"
|
|
mkdir -p "$ds_release_dir"
|
|
ds_release_bin="$ds_release_dir/bin"
|
|
echo "Publishing $release"
|
|
"$publish_sh" -o "$ds_release_bin"
|
|
status=$?
|
|
if [ $status -ne 0 ]; then
|
|
echo "Publish exited with code $status. Full command below:"
|
|
echo "Command: $publish_sh -o $ds_release_bin"
|
|
exit 1
|
|
fi
|
|
|
|
# Copy DataStream app Dockerfiles and spark.confs
|
|
cp src/DataStreamSuite/Bts.DataStreamWebApp.Server/production.Dockerfile "$ds_release_dir/webapp.Dockerfile"
|
|
cp src/DataStreamSuite/Bts.DataStreamWebApp.Server/spark.conf "$ds_release_dir/webapp.spark.conf"
|
|
cp src/DataStreamSuite/PubSubServer/production.Dockerfile "$ds_release_dir/pubsub.Dockerfile"
|
|
cp src/DataStreamSuite/PubSubServer/spark.conf "$ds_release_dir/pubsub.spark.conf"
|
|
cp src/DataStreamSuite/DataStreamPublisher/production.Dockerfile "$ds_release_dir/md-publisher.Dockerfile"
|
|
cp src/DataStreamSuite/DataStreamPublisher/spark.conf "$ds_release_dir/md-publisher.spark.conf"
|
|
|
|
# Copy webapp front end
|
|
echo "Copying webapp front end to $ds_release_bin/wwwroot"
|
|
cp -r "build/Bts.DataStreamWebApp.Client/production/dist" "$ds_release_bin/wwwroot"
|
|
status=$?
|
|
if [ $status -ne 0 ]; then
|
|
echo "Copy webapp front end exited with code $status. Full command below:"
|
|
echo "Command: cp -r build/Bts.DataStreamWebApp.Client/production/dist $ds_release_bin/wwwroot"
|
|
exit 1
|
|
fi
|
|
|
|
# Copy composefile
|
|
echo "Copying Docker Compose file to $release_dir"
|
|
cp "$composefile" "$release_dir/compose.yaml"
|
|
status=$?
|
|
if [ $status -ne 0 ]; then
|
|
echo "Copy Docker Compose file exited with code $status. Full command below:"
|
|
echo "cp $composefile $release_dir/"
|
|
exit 1
|
|
fi
|
|
|
|
# Compress
|
|
echo "Compressing $release"
|
|
cd .tmp
|
|
tar -czf "$release.tar.gz" "$release"
|
|
status=$?
|
|
if [ $status -ne 0 ]; then
|
|
echo "Compress exited with code $status. Full command below:"
|
|
echo "tar -czf $release.tar.gz $release"
|
|
exit 1
|
|
fi
|
|
|
|
# Clean
|
|
echo "Removing $release (uncompressed dir)"
|
|
rm -r "$release"
|
|
|
|
# Upload
|
|
remote=cloud-streams-prod
|
|
echo "Uploading $release.tar.gz to $remote"
|
|
scp "$release.tar.gz" $remote:/home/ubuntu/releases/$release.tar.gz
|
|
|
|
# Start services
|
|
cat <<EOF | ssh $remote /usr/bin/env bash
|
|
cd releases
|
|
if [ -e current ]; then
|
|
if [ -f current/compose.yaml ]; then
|
|
echo "Stopping existing containers"
|
|
docker compose -f current/compose.yaml down
|
|
fi
|
|
rm current
|
|
fi
|
|
|
|
rm -rf $release
|
|
tar -xf "$release.tar.gz"
|
|
ln -s $release current
|
|
cd current
|
|
docker compose up --build
|
|
docker compose logs --follow
|
|
EOF
|