added script
This commit is contained in:
commit
bc6178471e
3
.env.example
Normal file
3
.env.example
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
CD_HOST="127.0.0.1"
|
||||||
|
CD_USER="asher"
|
||||||
|
CD_PATH="/home/ubuntu/infra/"
|
23
readme.md
Normal file
23
readme.md
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
## compose-deploy
|
||||||
|
A simple script to update the docker compose file on a remote host and restart the containers.
|
||||||
|
|
||||||
|
I created this script to suit my personal requirements, which were:
|
||||||
|
* authenticate with the remote host using ssh keys
|
||||||
|
* use a git repository to store the file and pull on the host
|
||||||
|
* having one docker compose file for all the services
|
||||||
|
|
||||||
|
If you want to use it, create a .env file and add the following
|
||||||
|
|
||||||
|
The host of the remote server
|
||||||
|
|
||||||
|
`CD_HOST=1.1.1.1`
|
||||||
|
|
||||||
|
The username for the remote server
|
||||||
|
|
||||||
|
`CD_USER=asher`
|
||||||
|
|
||||||
|
To run the script, simply execute the script, it uses [gum](https://github.com/charmbracelet/gum) for an interactive prompt for the commit message
|
||||||
|
|
||||||
|
`./redeploy.sh`
|
||||||
|
|
||||||
|
Make sure your private key is in the repo and please, please make sure it is in your gitignore.
|
66
redeploy.sh
Executable file
66
redeploy.sh
Executable file
@ -0,0 +1,66 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# A script to redeploy this docker infrastructure using ssh
|
||||||
|
|
||||||
|
if [ -f .env ]; then
|
||||||
|
source .env
|
||||||
|
else
|
||||||
|
echo ".env file not found. Please create it and set the necessary environment variables."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
check_gum() {
|
||||||
|
if command -v gum &> /dev/null; then
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
echo "Gum not found, installing..."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
install_gum() {
|
||||||
|
if [[ "$OSTYPE" == "darwin"* ]]; then
|
||||||
|
/bin/bash -c "$(curl -fsSL
|
||||||
|
https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
|
||||||
|
brew install gum
|
||||||
|
elif [[ -f /etc/os-release ]]; then
|
||||||
|
source /etc/os-release
|
||||||
|
if [[ $ID == "ubuntu" ]] || [[ $ID == "debian" ]]; then
|
||||||
|
sudo apt update
|
||||||
|
sudo apt install -y gum
|
||||||
|
elif [[ $ID == "fedora" ]] || [[ $ID == "centos" ]] || [[ $ID == "rhel" ]]; then
|
||||||
|
sudo dnf install -y gum
|
||||||
|
else
|
||||||
|
echo "Unsupported Linux distribution. Please install Gum
|
||||||
|
manually."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "Unsupported operating system. Please install Gum manually."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Main script execution
|
||||||
|
if ! check_gum; then
|
||||||
|
if ! install_gum; then
|
||||||
|
echo "Failed to install Gum. Please install it manually and run
|
||||||
|
the script again."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
message=$(gum input --placeholder "Commit message")
|
||||||
|
|
||||||
|
git add .
|
||||||
|
git commit -m "${message}"
|
||||||
|
git push
|
||||||
|
|
||||||
|
ssh -o "StrictHostKeyChecking=no" -i ssh.key $CD_USER@$CD_HOST << EOF
|
||||||
|
sudo su
|
||||||
|
cd $CD_PATH
|
||||||
|
docker compose down
|
||||||
|
git pull
|
||||||
|
docker compose up -d
|
||||||
|
exit
|
||||||
|
EOF
|
Loading…
x
Reference in New Issue
Block a user