194 lines
		
	
	
		
			7.8 KiB
		
	
	
	
		
			YAML
		
	
	
	
			
		
		
	
	
			194 lines
		
	
	
		
			7.8 KiB
		
	
	
	
		
			YAML
		
	
	
	
| ---
 | |
| - name: Docker Swarm Migration Plan for ash3c
 | |
|   hosts: ash3c
 | |
|   become: yes
 | |
|   gather_facts: yes
 | |
|   
 | |
|   vars:
 | |
|     # 定义服务迁移计划
 | |
|     swarm_services:
 | |
|       high_priority:
 | |
|         - name: ghproxy
 | |
|           image: wjqserver/ghproxy:latest
 | |
|           ports: "8046:8080"
 | |
|           replicas: 2
 | |
|           networks: ["app-network"]
 | |
|           
 | |
|         - name: redis
 | |
|           image: redis:latest
 | |
|           ports: "63789:6379"
 | |
|           replicas: 1
 | |
|           networks: ["app-network"]
 | |
|           volumes: ["redis-data:/data"]
 | |
|           
 | |
|       medium_priority:
 | |
|         - name: consul
 | |
|           image: bitnami/consul:latest
 | |
|           ports: 
 | |
|             - "8310:8300"
 | |
|             - "8311:8301"
 | |
|             - "8312:8302"
 | |
|             - "8501:8500"
 | |
|             - "8601:8600/udp"
 | |
|           replicas: 1
 | |
|           networks: ["consul-network"]
 | |
|           
 | |
|         - name: discourse-app
 | |
|           image: bitnami/discourse:3.4.1
 | |
|           ports: "31080:3000"
 | |
|           replicas: 1
 | |
|           networks: ["app-network"]
 | |
|           depends_on: ["postgres", "redis"]
 | |
|           
 | |
|         - name: discourse-sidekiq
 | |
|           image: bitnami/discourse:3.4.1
 | |
|           replicas: 1
 | |
|           networks: ["app-network"]
 | |
|           depends_on: ["postgres", "redis"]
 | |
|           
 | |
|       low_priority:
 | |
|         - name: elasticsearch
 | |
|           image: bitnami/elasticsearch:8.17.2
 | |
|           ports: "59200:9200"
 | |
|           replicas: 1
 | |
|           networks: ["elastic-network"]
 | |
|           volumes: ["elastic-data:/bitnami/elasticsearch/data"]
 | |
|           constraints: ["node.role==manager"]
 | |
|           
 | |
|         - name: postgres
 | |
|           image: postgres:17.2
 | |
|           ports: "54322:5432"
 | |
|           replicas: 1
 | |
|           networks: ["db-network"]
 | |
|           volumes: ["postgres-data:/var/lib/postgresql/data"]
 | |
|           constraints: ["node.role==manager"]
 | |
|           secrets: ["postgres_password"]
 | |
|   
 | |
|   tasks:
 | |
|     - name: Display migration plan
 | |
|       debug:
 | |
|         msg: |
 | |
|           🚀 DOCKER SWARM MIGRATION PLAN FOR {{ inventory_hostname }}
 | |
|           =========================================================
 | |
|           
 | |
|           📋 PHASE 1 - HIGH PRIORITY (Low Risk)
 | |
|           {% for service in swarm_services.high_priority %}
 | |
|           ✅ {{ service.name }}:
 | |
|              - Image: {{ service.image }}
 | |
|              - Replicas: {{ service.replicas }}
 | |
|              - Networks: {{ service.networks | join(', ') }}
 | |
|              - Migration: Safe, stateless service
 | |
|           {% endfor %}
 | |
|           
 | |
|           📋 PHASE 2 - MEDIUM PRIORITY (Medium Risk)
 | |
|           {% for service in swarm_services.medium_priority %}
 | |
|           ⚠️  {{ service.name }}:
 | |
|              - Image: {{ service.image }}
 | |
|              - Replicas: {{ service.replicas }}
 | |
|              - Networks: {{ service.networks | join(', ') }}
 | |
|              - Migration: Requires coordination
 | |
|           {% endfor %}
 | |
|           
 | |
|           📋 PHASE 3 - LOW PRIORITY (High Risk)
 | |
|           {% for service in swarm_services.low_priority %}
 | |
|           🔴 {{ service.name }}:
 | |
|              - Image: {{ service.image }}
 | |
|              - Replicas: {{ service.replicas }}
 | |
|              - Networks: {{ service.networks | join(', ') }}
 | |
|              - Migration: Requires careful planning
 | |
|           {% endfor %}          
 | |
|     
 | |
|     - name: Create migration script
 | |
|       copy:
 | |
|         content: |
 | |
|           #!/bin/bash
 | |
|           # Docker Swarm Migration Script for {{ inventory_hostname }}
 | |
|           # Generated: {{ ansible_date_time.iso8601 }}
 | |
|           
 | |
|           set -e
 | |
|           
 | |
|           echo "🚀 Starting Docker Swarm Migration..."
 | |
|           
 | |
|           # Create networks
 | |
|           echo "📡 Creating overlay networks..."
 | |
|           docker network create -d overlay --attachable app-network || true
 | |
|           docker network create -d overlay --attachable db-network || true
 | |
|           docker network create -d overlay --attachable consul-network || true
 | |
|           docker network create -d overlay --attachable elastic-network || true
 | |
|           
 | |
|           # Create volumes
 | |
|           echo "💾 Creating volumes..."
 | |
|           docker volume create redis-data || true
 | |
|           docker volume create postgres-data || true
 | |
|           docker volume create elastic-data || true
 | |
|           
 | |
|           # Create secrets (example)
 | |
|           echo "🔐 Creating secrets..."
 | |
|           echo "your_postgres_password" | docker secret create postgres_password - || true
 | |
|           
 | |
|           echo "✅ Infrastructure setup complete!"
 | |
|           echo ""
 | |
|           echo "🔄 PHASE 1 - Migrate high priority services:"
 | |
|           echo "docker service create --name ghproxy-svc --replicas 2 --network app-network -p 8046:8080 wjqserver/ghproxy:latest"
 | |
|           echo "docker service create --name redis-svc --replicas 1 --network app-network -p 63789:6379 --mount type=volume,source=redis-data,target=/data redis:latest"
 | |
|           echo ""
 | |
|           echo "🔄 PHASE 2 - Migrate medium priority services:"
 | |
|           echo "docker service create --name consul-svc --replicas 1 --network consul-network -p 8310:8300 -p 8311:8301 -p 8312:8302 -p 8501:8500 -p 8601:8600/udp bitnami/consul:latest"
 | |
|           echo "docker service create --name discourse-app-svc --replicas 1 --network app-network -p 31080:3000 bitnami/discourse:3.4.1"
 | |
|           echo "docker service create --name discourse-sidekiq-svc --replicas 1 --network app-network bitnami/discourse:3.4.1"
 | |
|           echo ""
 | |
|           echo "🔄 PHASE 3 - Migrate low priority services (CAREFUL!):"
 | |
|           echo "docker service create --name postgres-svc --replicas 1 --network db-network -p 54322:5432 --mount type=volume,source=postgres-data,target=/var/lib/postgresql/data --secret postgres_password --constraint 'node.role==manager' postgres:17.2"
 | |
|           echo "docker service create --name elasticsearch-svc --replicas 1 --network elastic-network -p 59200:9200 --mount type=volume,source=elastic-data,target=/bitnami/elasticsearch/data --constraint 'node.role==manager' bitnami/elasticsearch:8.17.2"
 | |
|           echo ""
 | |
|           echo "📊 Monitor services:"
 | |
|           echo "docker service ls"
 | |
|           echo "docker service ps <service-name>"
 | |
|           echo ""
 | |
|           echo "⚠️  IMPORTANT NOTES:"
 | |
|           echo "1. Stop original containers before creating services"
 | |
|           echo "2. Backup data before migrating databases"
 | |
|           echo "3. Test each phase before proceeding"
 | |
|           echo "4. Monitor logs: docker service logs <service-name>"          
 | |
|         dest: "/tmp/swarm-migration-{{ inventory_hostname }}.sh"
 | |
|         mode: '0755'
 | |
|     
 | |
|     - name: Create rollback script
 | |
|       copy:
 | |
|         content: |
 | |
|           #!/bin/bash
 | |
|           # Docker Swarm Rollback Script for {{ inventory_hostname }}
 | |
|           
 | |
|           echo "🔄 Rolling back Swarm services..."
 | |
|           
 | |
|           # Remove services
 | |
|           docker service rm ghproxy-svc redis-svc consul-svc discourse-app-svc discourse-sidekiq-svc postgres-svc elasticsearch-svc 2>/dev/null || true
 | |
|           
 | |
|           # Remove networks (optional)
 | |
|           # docker network rm app-network db-network consul-network elastic-network 2>/dev/null || true
 | |
|           
 | |
|           echo "✅ Rollback complete. Original containers should be restarted manually."          
 | |
|         dest: "/tmp/swarm-rollback-{{ inventory_hostname }}.sh"
 | |
|         mode: '0755'
 | |
|     
 | |
|     - name: Migration plan complete
 | |
|       debug:
 | |
|         msg: |
 | |
|           🎉 MIGRATION PLAN GENERATED!
 | |
|           
 | |
|           📄 Files created:
 | |
|           - /tmp/swarm-migration-{{ inventory_hostname }}.sh (Migration script)
 | |
|           - /tmp/swarm-rollback-{{ inventory_hostname }}.sh (Rollback script)
 | |
|           
 | |
|           🚀 RECOMMENDED APPROACH:
 | |
|           1. Backup all data first
 | |
|           2. Test migration in phases
 | |
|           3. Start with Phase 1 (low risk services)
 | |
|           4. Monitor each service before proceeding
 | |
|           5. Keep rollback script ready
 | |
|           
 | |
|           💡 NEXT STEPS:
 | |
|           1. Review and customize the migration script
 | |
|           2. Plan maintenance window
 | |
|           3. Execute phase by phase
 | |
|           4. Monitor and validate each service           |