Skip to content

Instantly share code, notes, and snippets.

@hovo1990
Forked from christopher-talke/deploy.sh
Created September 15, 2022 08:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hovo1990/e547a6cfd9f24da5ef713c4146294a00 to your computer and use it in GitHub Desktop.
Save hovo1990/e547a6cfd9f24da5ef713c4146294a00 to your computer and use it in GitHub Desktop.
Docker Deployment via Remote SSH
#!/bin/bash
# Basic Script to Automate Docker Deployment
# - Details for how this script works, see here:
# - https://gist.github.com/christopher-talke/11c655de511dd799a1d9c3cf156e7a94#gistcomment-2935112
# Created By: christopher.talke <christopher.talke@gmail.com>
##### VARIABLES SECTION #####
# Details for Host & Docker Network, example below:
# user=root
# host=112.114.7.123 OR subdomain.domain.com
# networkName=local-connect-app1
user=<REMOTEUSER>
host=<IP OR DNS NAME>
networkName=<DOCKER NETWORK NAME>
# Details for App, example below:
# org=acme
# imageName=app1
# APPShortHand=acme-app1
org=<ORGNAME>
imageName=<APP IMAGENAME>
APPshortHand=<SHORTHAND FOR CONTAINER>
# Details for Reverse Proxy, example below:
# reverseProxyName=acme-cont-rp01
# RPshortHand=acme-rp01
reverseProxyName=<REVERSE PROXY NAME>
RPshortHand=<SHORTHAND FOR RP>
########################
##### SCRIPT START #####
########################
# Compress Folder Contents (uses .gitignore values)
git archive -o app.tar.gz master
# SSH and create deployment folder in the users root '~/'
ssh $user@$host "mkdir -p auto-deploy"
# Transfer Files to said folder '~/auto-deploy'
scp app.tar.gz .env $user@$host:~/auto-deploy
# Connect to Server
ssh $user@$host << EOF
cd ~/auto-deploy
tar xvzf app.tar.gz
# Creates internal network that will be used to connect the RP and APP
docker network create --internal $networkName
# Build, Remove and Deploy Container
docker build -t $org/$imageName:latest .
docker container rm -f $imageName\_prod
docker run \
--name $imageName\_prod \
-dit \
--restart unless-stopped \
$org/$imageName:latest
# Connects App to Reverse Proxy via Network 'local-connect'
docker network connect \
--link $imageName\_prod:$APPshortHand \
$networkName \
$reverseProxyName
# Connects Reverse Proxy to App via Network 'local-connect'
docker network connect \
--link $reverseProxyName:$RPshortHand \
local-connect \
$imageName\_prod
# Cleanup Files
rm -r ~/auto-deploy/*
# Check Docker
docker ps
# Disconnect
exit
EOF
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment