Skip to content

Simple github action to run docker-compose on remote host.

License

Notifications You must be signed in to change notification settings

brooktec/brooktec-github-action-ssh-docker-compose

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

44 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

github-action-ssh-docker-compose

Simple github action to run docker compose on remote host.

This action packs contents of the action workspace into archive. Logs into remote host via ssh. Unpacks the workspace there and runs docker compose up -d command.

Comparing to other actions with similar behavior this one does not use any unknown docker-images. It is entirely built from Dockerfile on top of alpine:3.8.

Inputs

  • ssh_private_key - Private SSH key used for logging into remote system. Please, keep your key securely in github secrets.
  • ssh_host - Remote host name or IP.
  • ssh_port - Remote port for SSH connection. Default is 22.
  • ssh_user - Remote user which should have access to docker.
  • worspace - Remote workspace.
  • docker_compose_filename - Path to the docker compose file in the repository.
  • docker_compose_down - Execute docker compose-down.

Usage example

Let's say we have a repo with single docker compose file in it and remote ubuntu based server with docker and docker compose installed.

  1. Generate key pair, do not use a password here.
ssh-keygen -t ed25519 deploy_key
  1. Create a user which will deploy containers for you on the remote server, do not set password for this user:
ssh example.com
$ sudo useradd -m -b /var/lib -G docker docker-deploy
  1. Allow to log into that user with the key you generated on the step one.
scp deploy_key.pub example.com:~
ssh example.com
$ sudo mkdir /var/lib/docker-deploy/.ssh
$ sudo chown docker-deploy:docker-deploy /var/lib/docker-deploy/.ssh
$ sudo install -o docker-deploy -g docker-deploy -m 0600 deploy_key.pub /var/lib/docker-deploy/.ssh/authorized_keys
$ sudo chmod 0500 /var/lib/docker-deploy/.ssh
$ rm deploy_key.pub
  1. Test that key works.
ssh -i deploy_key docker-deploy@example.com
  1. Add private key and user name into secrets for the repository. Let's say that names of the secrets are EXAMPLE_COM_SSH_PRIVATE_KEY and EXAMPLE_COM_SSH_USER.

  2. Remove your local copy of the ssh key:

rm deploy_key
  1. Setup a github-actions workflow (e.g. .github/workflows/main.yml):
name: Deploy

on:
  push:
    branches: [ master ]

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2

    - uses: alex-ac/github-action-ssh-docker-compose@master
      name: Docker-Compose Remote Deployment
      with:
        ssh_host: example.com
        ssh_private_key: ${{ secrets.EXAMPLE_COM_SSH_PRIVATE_KEY }}
        ssh_user: ${{ secrets.EXAMPLE_COM_SSH_USER }}
        docker_compose_prefix: example_com
  1. You're all set!

Swarm & Stack

In case you want to use some advanced features like secrets. You'll need to setup a docker swarm cluster and use docker stack command instead of the plain docker compose. To do that just set use_stack input to "true":

name: Deploy
on:
  push:
    branches: [ master ]

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
    - actions/chockout@v2

    - uses: alex-ac/github-action-ssh-docker-compose@master
      name: Docker-Stack Remote Deployment
      with:
        ssh_host: example.com
        ssh_private_key: ${{ secrets.EXAMPLE_COM_SSH_PRIVATE_KEY }}
        ssh_user: ${{ secrets.EXAMPLE_COM_SSH_USER }}
        docker_compose_prefix: example.com
        use_stack: 'true'

Down deploy (Docker Compose down)

If you need to run a docker compose down to do a clean rollback. Only one down of the services will be executed To do that just set docker_compose_down input to "true":

name: Deploy
on:
  push:
    branches: [ master ]

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
    - actions/chockout@v2

    - uses: alex-ac/github-action-ssh-docker-compose@master
      name: Docker-Stack Remote Deployment
      with:
        ssh_host: example.com
        ssh_private_key: ${{ secrets.EXAMPLE_COM_SSH_PRIVATE_KEY }}
        ssh_user: ${{ secrets.EXAMPLE_COM_SSH_USER }}
        docker_compose_prefix: example.com
        docker_compose_down: 'true'

About

Simple github action to run docker-compose on remote host.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Shell 90.3%
  • Dockerfile 9.7%