Skip to content

Instantly share code, notes, and snippets.

@gabrielfeitosa
Created September 25, 2020 18:55
Show Gist options
  • Star 7 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save gabrielfeitosa/2daa66d194a3a14201c3572c11b8e3c8 to your computer and use it in GitHub Desktop.
Save gabrielfeitosa/2daa66d194a3a14201c3572c11b8e3c8 to your computer and use it in GitHub Desktop.
Blue/Green deployment (Traefik, docker)
ENVIRONMENT=dev
OTHER_CONFIG=BLAH
#!/bin/bash
blue=$(docker ps -f name=blue -q)
if test -z "$blue"
then
ENV="blue"
OLD="green"
else
ENV="green"
OLD="blue"
fi
echo "Starting "$ENV" container"
docker-compose pull
docker-compose --project-name=$ENV up -d
echo "Waiting..."
sleep 30s
echo "Stopping "$OLD" container"
docker-compose --project-name=$OLD stop
version: "3"
services:
traefik:
image: "traefik:v2.1"
restart: unless-stopped
networks:
- webgateway
command:
- "--api.insecure=true"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
ports:
- "80:80"
- "8080:8080"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
networks:
webgateway:
driver: bridge
version: "3"
services:
membership-app:
image: my-app:latest
labels:
- "traefik.enable=true"
- "traefik.http.middlewares.test-retry.retry.attempts=3"
- "traefik.http.routers.membership.rule=Host(`my-app.com`)"
- "traefik.http.routers.membership.entrypoints=web"
- "traefik.http.services.membership.loadbalancer.server.port=8080"
- "traefik.http.services.membership.loadbalancer.healthCheck.path=/status"
- "traefik.http.services.membership.loadbalancer.healthCheck.interval=10s"
- "traefik.http.services.membership.loadbalancer.healthCheck.timeout=1s"
env_file:
- config.env
restart: unless-stopped
networks:
- traefik
networks:
traefik:
external:
name: traefik_webgateway
@maxcountryman
Copy link

Doesn't your docker-compose need a ports mapping? This also means the deployment script won't work due to port bindings...

@gabrielfeitosa
Copy link
Author

Hi @maxcountryman, it's not necessary to map ports. You will access the system by hostname, like my-app.com.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment