Skip to content

Update digitalocean-deploy.yml #5

Update digitalocean-deploy.yml

Update digitalocean-deploy.yml #5

name: Build and Push Docker Image to DigitalOcean Droplet
on:
push:
branches:
- master
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Set up Docker Image Tag
run: |
echo "IMAGE_TAG=todoapp:$(date +%s)" >> $GITHUB_ENV
- name: Build Docker image with secrets
run: |
echo "${{ secrets.MONGO_CONNECTION_STRING }}" | docker secret create mongo_connection_string -
echo "${{ secrets.MONGO_DATABASE_NAME }}" | docker secret create mongo_database_name -
echo "${{ secrets.MONGO_COLLECTION_NAME }}" | docker secret create mongo_collection_name -
docker buildx build -t "${{ env.IMAGE_TAG }}" .
- name: Save Docker image to a tar file
run: |
docker save ${{ env.IMAGE_TAG }} -o image.tar
- name: Setup SSH
env:
SSH_PRIVATE_KEY: ${{ secrets.DROPLET_SSH_KEY }}
KNOWN_HOSTS: ${{ secrets.KNOWN_HOSTS }}
run: |
mkdir -p ~/.ssh
echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
echo "$KNOWN_HOSTS" > ~/.ssh/known_hosts
- name: Create home directory on Droplet
env:
HOST: ${{ secrets.DROPLET_IP }}
USERNAME: ${{ secrets.DROPLET_USERNAME }}
run: |
ssh -i ~/.ssh/id_rsa ${USERNAME}@${HOST} "mkdir -p /home/${USERNAME}"
- name: Transfer Docker image to DigitalOcean droplet
env:
HOST: ${{ secrets.DROPLET_IP }}
USERNAME: ${{ secrets.DROPLET_USERNAME }}
run: |
scp -i ~/.ssh/id_rsa image.tar ${USERNAME}@${HOST}:/home/${USERNAME}/image.tar
- name: SSH into Droplet, Initialize Swarm, and Load Docker Image
env:
HOST: ${{ secrets.DROPLET_IP }}
USERNAME: ${{ secrets.DROPLET_USERNAME }}
run: |
ssh -i ~/.ssh/id_rsa ${USERNAME}@${HOST} << EOF
# Initialize Docker Swarm if not already initialized
docker info | grep 'Swarm: active' || docker swarm init
# Load the Docker image
sudo docker load -i /home/${USERNAME}/image.tar
# Stop and remove the existing container if it exists
sudo docker stop my-container || true
sudo docker rm my-container || true
# Deploy the container using secrets
sudo docker run -d --name my-container -p 8081:8080 \
--secret mongo_connection_string \
--secret mongo_database_name \
--secret mongo_collection_name \
${{ env.IMAGE_TAG }}
# Clean up
rm /home/${USERNAME}/image.tar
EOF