#!/bin/bash
function build_and_deploy() {
local host=$1
local port=$2
local docker_image_name=$3
local docker_image_tag=$4
local remote_ssh_user=$5
local remote_ssh_host=$6
local remote_ssh_port=$7
local remote_dest_path=$8
echo -e ""
echo -e "-------------[ PLAN ]--------------"
echo -e ""
echo -e "1. docker build --build-arg HOST=${host} --build-arg PORT=${port} -f Dockerfile -t ${docker_image_name}:${docker_image_tag} ."
echo -e "2. docker save -o ./${docker_image_name}.tar docker.io/library/${docker_image_name}"
echo -e "3. scp ${docker_image_name}.tar ${remote_ssh_user}@${remote_ssh_host}:${remote_dest_path} -P ${remote_ssh_port}"
echo -e "4. ssh ${remote_ssh_user}@${remote_ssh_host} -p ${remote_ssh_port} \"docker load -i ${docker_image_name}.tar\""
echo -e "5. ssh ${remote_ssh_user}@${remote_ssh_host} -p ${remote_ssh_port} \"docker-compose up -d --force-recreate web\""
echo -e "6. ssh ${remote_ssh_user}@${remote_ssh_host} -p ${remote_ssh_port} \"docker-compose exec web yarn migrate:deploy\""
echo -e "7. ssh ${remote_ssh_user}@${remote_ssh_host} -p ${remote_ssh_port} \"docker system prune -f\""
echo -e "8. docker system prune -f"
echo -e ""
echo -e "--------------[ RUN ]--------------"
echo -e ""
{
echo -e "[..] docker build --build-arg HOST=${host} --build-arg PORT=${port} -f Dockerfile -t ${docker_image_name}:${docker_image_tag} ."
docker build \
--build-arg HOST=${host} \
--build-arg PORT=${port} \
-t ${docker_image_name}:${docker_image_tag} \
-f Dockerfile \
.
echo -e "[ok] docker build --build-arg HOST=${host} --build-arg PORT=${port} -f Dockerfile -t ${docker_image_name}:${docker_image_tag} ."
}
echo -e ""
{
echo -e "[..] docker save -o ./${docker_image_name}.tar docker.io/library/${docker_image_name}"
docker save \
-o ./${docker_image_name}.tar \
docker.io/library/${docker_image_name}
echo -e "[ok] docker save -o ./${docker_image_name}.tar docker.io/library/${docker_image_name}"
}
echo -e ""
{
echo -e "[..] scp -P ${remote_ssh_port} ${docker_image_name}.tar ${remote_ssh_user}@${remote_ssh_host}:${remote_dest_path}"
scp \
-P ${remote_ssh_port} \
${docker_image_name}.tar \
${remote_ssh_user}@${remote_ssh_host}:${remote_dest_path}
echo -e "[ok] scp -P ${remote_ssh_port} ${docker_image_name}.tar ${remote_ssh_user}@${remote_ssh_host}:${remote_dest_path}"
}
echo -e ""
{
echo -e "[..] ssh ${remote_ssh_user}@${remote_ssh_host} -p ${remote_ssh_port}\"docker load -i ${docker_image_name}.tar\""
ssh \
${remote_ssh_user}@${remote_ssh_host} -p ${remote_ssh_port} \
"docker load -i ${remote_dest_path}/${docker_image_name}.tar"
echo -e "[ok] ssh ${remote_ssh_user}@${remote_ssh_host} -p ${remote_ssh_port} \"docker load -i ${docker_image_name}.tar\""
}
echo -e ""
{
echo -e "[..] ssh ${remote_ssh_user}@${remote_ssh_host} -p ${remote_ssh_port} \"docker-compose up -d --force-recreate web\""
ssh \
${remote_ssh_user}@${remote_ssh_host} -p ${remote_ssh_port} \
"docker-compose up -d --force-recreate web"
echo -e "[ok] ssh ${remote_ssh_user}@${remote_ssh_host} -p ${remote_ssh_port} \"docker-compose up -d --force-recreate web\""
}
echo -e ""
{
echo -e "[..] ssh ${remote_ssh_user}@${remote_ssh_host} -p ${remote_ssh_port} \"docker-compose exec web yarn migrate:deploy\""
ssh \
${remote_ssh_user}@${remote_ssh_host} -p ${remote_ssh_port} \
"docker-compose exec web yarn migrate:deploy"
echo -e "[ok] ssh ${remote_ssh_user}@${remote_ssh_host} -p ${remote_ssh_port} \"docker-compose exec web yarn migrate:deploy\""
}
echo -e ""
{
echo -e "[..] ssh ${remote_ssh_user}@${remote_ssh_host} -p ${remote_ssh_port} \"docker system prune -f\""
ssh \
${remote_ssh_user}@${remote_ssh_host} -p ${remote_ssh_port} \
"docker system prune -f"
echo -e "[ok] ssh ${remote_ssh_user}@${remote_ssh_host} -p ${remote_ssh_port} \"docker system prune -f\""
}
echo -e ""
{
echo -e "[..] docker system prune -f"
docker system prune -f
echo -e "[ok] docker system prune -f"
}
echo -e ""
exit 0
}
build_and_deploy \
${HOST:-0.0.0.0} \
${PORT:-1337} \
${DOCKER_IMAGE_NAME:-gitfoss_web} \
${DOCKER_IMAGE_TAG:-latest} \
${REMOTE_SSH_USER:-debian} \
${REMOTE_SSH_HOST:-gitfoss.dev} \
${REMOTE_SSH_PORT:-1338} \
${REMOTE_DESTINATION_PATH:-/home/debian/}