This is a slack bot that is used for managing deployments of our docerized projects at DevClub.
- You need to have docker and docker-compose installed
- The following directory structure (where id_rsa is the private key of ssh-key associated with github account)
.
├── docker-compose.yml
├── Dockerfile
├── ignore
│ └── keys
│ └── id_rsa (ssh private key associated with github account)
│ └── gpg_private.asc (gpg private key associated with github account)
.
.
.
Nothing needs to be done in this case.
- Comment the
read_only: true
line fordocker_conf
volume indocker-compose.yml
- Run:
docker-compose up -d
- ssh into the running docker container using:
docker exec -it DeployBot_deploy /bin/bash
- Setup docker-machine for all the child server using commands like:
docker-machine -D create -d generic --generic-ip-address <vm_dns_name> --generic-ssh-key <ssh_key_path> --generic-ssh-user <user_name> --generic-ssh-port <ssh_port> --generic-engine-port <docker_daemon_port> <server_name>
- Uncomment the commented line in first step
- Run:
docker-compose down
These steps will create a volume named docker_conf
which will contain all the necessary information for our bot to deploy projects on configured servers.
NOTE: You will also have to deploy ServerConfig
on each server for projects deployed to be accessible.
Required environment variable are listed in .env.sample
file. All the environment variables should be present in a .env
file.
If initial setup has been done once, then just running docker-compose up -d
will start the deploybot service. The bot will listen to incoming connections on port 7777
by default.
- Each project should have a
.env
file for environment variables which should be encrypted usinggit-secret
withdevclubiitd
user as collaborator.devclubiitd
's public gpg key can be found here - Each project should have
docker-compose.yml
to build their projects. - Sample
docker-compose.yml
is given here with namesample_docker-compose.yml
. - The service names in
docker-compose.yml
must be of the form<project name>_<service name>
to avoid any docker container clashes. - The image names in
docker-compose.yml
must be preceded by${REGISTRY_NAME}
- The service that will listen for requests must have:
reverseproxy
networkVIRTUAL_HOST
environment variable Note: Never use bind mounts in your compose file.