Skip to content

Deploy Docker to VM #33

Deploy Docker to VM

Deploy Docker to VM #33

Workflow file for this run

name: Deploy Docker to VM
on:
workflow_dispatch:
inputs:
IMAGE_TAG:
description: 'The tag of the images to be deployed. This should be the short commit hash (first 7 characters of commit hash) or "latest".'
required: false
type: string
default: latest
jobs:
deploy:
runs-on: self-hosted
environment:
name: production
url: 'https://${{ vars.SERVER_HOST }}'
steps:
- name: SSH to VM and Execute Docker-Compose Down
uses: appleboy/ssh-action@master
with:
host: ${{ vars.VM_HOST }}
username: ${{ vars.VM_USERNAME }}
key: ${{ secrets.VM_SSH_PRIVATE_KEY }}
proxy_host: ${{ vars.DEPLOYMENT_GATEWAY_HOST }}
proxy_username: ${{ vars.DEPLOYMENT_GATEWAY_USER }}
proxy_key: ${{ secrets.DEPLOYMENT_GATEWAY_SSH_KEY }}
proxy_port: ${{ vars.DEPLOYMENT_GATEWAY_PORT }}
script: |
docker compose -f docker-compose.prod.yml --env-file=.env.prod down --remove-orphans --rmi all
- name: checkout
uses: actions/checkout@v4
- name: Set image tag in Docker Compose File
run: |
sed -i "s/\$IMAGE_TAG/${{ github.event.inputs.IMAGE_TAG }}/g" docker-compose.prod.yml
- name: Copy Docker Compose File From Repo to VM Host
uses: appleboy/[email protected]
with:
host: ${{ vars.VM_HOST }}
username: ${{ vars.VM_USERNAME }}
key: ${{ secrets.VM_SSH_PRIVATE_KEY }}
proxy_host: ${{ vars.DEPLOYMENT_GATEWAY_HOST }}
proxy_username: ${{ vars.DEPLOYMENT_GATEWAY_USER }}
proxy_key: ${{ secrets.DEPLOYMENT_GATEWAY_SSH_KEY }}
proxy_port: ${{ vars.DEPLOYMENT_GATEWAY_PORT }}
source: "./docker-compose.prod.yml"
target: /home/${{ vars.VM_USERNAME }}
- name: SSH to VM and create .env.prod file
uses: appleboy/ssh-action@master
with:
host: ${{ vars.VM_HOST }}
username: ${{ vars.VM_USERNAME }}
key: ${{ secrets.VM_SSH_PRIVATE_KEY }}
proxy_host: ${{ vars.DEPLOYMENT_GATEWAY_HOST }}
proxy_username: ${{ vars.DEPLOYMENT_GATEWAY_USER }}
proxy_key: ${{ secrets.DEPLOYMENT_GATEWAY_SSH_KEY }}
proxy_port: ${{ vars.DEPLOYMENT_GATEWAY_PORT }}
script: |
rm -f .env.prod # Delete if exists
touch .env.prod
echo "INFLUXDB_TOKEN=\"${{ secrets.INFLUXDB_TOKEN }}\"" >> .env.prod
echo "INFLUXDB_ORG=${{ vars.INFLUXDB_ORG }}" >> .env.prod
echo "INFLUXDB_BUCKET=${{ vars.INFLUXDB_BUCKET }}" >> .env.prod
echo "DOCKER_INFLUXDB_INIT_USERNAME=${{ vars.DOCKER_INFLUXDB_INIT_USERNAME }}" >> .env.prod
echo "DOCKER_INFLUXDB_INIT_PASSWORD=\"${{ secrets.DOCKER_INFLUXDB_INIT_PASSWORD }}\"" >> .env.prod
echo "REPOSITORY_OWNER=${{ vars.REPOSITORY_OWNER }}" >> .env.prod
echo "REPOSITORY_NAME=${{ vars.REPOSITORY_NAME }}" >> .env.prod
echo "GITHUB_TOKEN=${{ secrets.GH_PULL_TOKEN }}" >> .env.prod
- name: Copy Caddyfile
uses: appleboy/[email protected]
with:
host: ${{ vars.VM_HOST }}
username: ${{ vars.VM_USERNAME }}
key: ${{ secrets.VM_SSH_PRIVATE_KEY }}
proxy_host: ${{ vars.DEPLOYMENT_GATEWAY_HOST }}
proxy_username: ${{ vars.DEPLOYMENT_GATEWAY_USER }}
proxy_key: ${{ secrets.DEPLOYMENT_GATEWAY_SSH_KEY }}
proxy_port: ${{ vars.DEPLOYMENT_GATEWAY_PORT }}
source: "./Caddyfile"
target: /home/${{ vars.VM_USERNAME }}
- name: SSH to VM and Execute Docker-Compose Up
uses: appleboy/ssh-action@master
with:
host: ${{ vars.VM_HOST }}
username: ${{ vars.VM_USERNAME }}
key: ${{ secrets.VM_SSH_PRIVATE_KEY }}
proxy_host: ${{ vars.DEPLOYMENT_GATEWAY_HOST }}
proxy_username: ${{ vars.DEPLOYMENT_GATEWAY_USER }}
proxy_key: ${{ secrets.DEPLOYMENT_GATEWAY_SSH_KEY }}
proxy_port: ${{ vars.DEPLOYMENT_GATEWAY_PORT }}
script: |
docker compose -f docker-compose.prod.yml --env-file=.env.prod up --pull=always -d