166 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			YAML
		
	
	
	
			
		
		
	
	
			166 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			YAML
		
	
	
	
| version: '3.8'
 | |
| 
 | |
| services:
 | |
|   # Web 应用示例
 | |
|   webapp:
 | |
|     image: nginx:alpine
 | |
|     networks:
 | |
|       - traefik-public
 | |
|     configs:
 | |
|       - source: webapp-html
 | |
|         target: /usr/share/nginx/html/index.html
 | |
|     deploy:
 | |
|       replicas: 2
 | |
|       labels:
 | |
|         - traefik.enable=true
 | |
|         - traefik.http.routers.webapp.rule=Host(`app.local`)
 | |
|         - traefik.http.routers.webapp.entrypoints=web
 | |
|         - traefik.http.services.webapp.loadbalancer.server.port=80
 | |
|       update_config:
 | |
|         parallelism: 1
 | |
|         delay: 10s
 | |
|       restart_policy:
 | |
|         condition: on-failure
 | |
| 
 | |
|   # API 服务示例
 | |
|   api:
 | |
|     image: httpd:alpine
 | |
|     networks:
 | |
|       - traefik-public
 | |
|     configs:
 | |
|       - source: api-html
 | |
|         target: /usr/local/apache2/htdocs/index.html
 | |
|     deploy:
 | |
|       replicas: 2
 | |
|       labels:
 | |
|         - traefik.enable=true
 | |
|         - traefik.http.routers.api.rule=Host(`api.local`)
 | |
|         - traefik.http.routers.api.entrypoints=web
 | |
|         - traefik.http.services.api.loadbalancer.server.port=80
 | |
|         # 添加路径前缀
 | |
|         - traefik.http.routers.api-path.rule=Host(`app.local`) && PathPrefix(`/api`)
 | |
|         - traefik.http.routers.api-path.entrypoints=web
 | |
|         - traefik.http.routers.api-path.service=api
 | |
|       update_config:
 | |
|         parallelism: 1
 | |
|         delay: 10s
 | |
|       restart_policy:
 | |
|         condition: on-failure
 | |
| 
 | |
|   # 监控服务示例
 | |
|   monitor:
 | |
|     image: nginx:alpine
 | |
|     networks:
 | |
|       - traefik-public
 | |
|     configs:
 | |
|       - source: monitor-html
 | |
|         target: /usr/share/nginx/html/index.html
 | |
|     deploy:
 | |
|       replicas: 1
 | |
|       labels:
 | |
|         - traefik.enable=true
 | |
|         - traefik.http.routers.monitor.rule=Host(`monitor.local`)
 | |
|         - traefik.http.routers.monitor.entrypoints=web
 | |
|         - traefik.http.services.monitor.loadbalancer.server.port=80
 | |
|         # 添加基本认证 (可选)
 | |
|         - traefik.http.routers.monitor.middlewares=auth
 | |
|         - traefik.http.middlewares.auth.basicauth.users=admin:$$2y$$10$$DLKjKQKQKQKQKQKQKQKQKe
 | |
|       restart_policy:
 | |
|         condition: on-failure
 | |
| 
 | |
| networks:
 | |
|   traefik-public:
 | |
|     external: true
 | |
| 
 | |
| configs:
 | |
|   webapp-html:
 | |
|     content: |
 | |
|       <!DOCTYPE html>
 | |
|       <html>
 | |
|       <head>
 | |
|           <title>Web App - Traefik Swarm Demo</title>
 | |
|           <style>
 | |
|               body { font-family: Arial, sans-serif; margin: 40px; background: #f5f5f5; }
 | |
|               .container { background: white; padding: 30px; border-radius: 8px; box-shadow: 0 2px 10px rgba(0,0,0,0.1); }
 | |
|               h1 { color: #2c3e50; }
 | |
|               .info { background: #e8f4fd; padding: 15px; border-radius: 4px; margin: 20px 0; }
 | |
|           </style>
 | |
|       </head>
 | |
|       <body>
 | |
|           <div class="container">
 | |
|               <h1>🚀 Web Application</h1>
 | |
|               <div class="info">
 | |
|                   <p><strong>服务:</strong> webapp</p>
 | |
|                   <p><strong>访问地址:</strong> http://app.local</p>
 | |
|                   <p><strong>负载均衡:</strong> Traefik + Docker Swarm</p>
 | |
|                   <p><strong>时间:</strong> <span id="time"></span></p>
 | |
|               </div>
 | |
|               <p>这是通过 Traefik 路由的 Web 应用示例。</p>
 | |
|           </div>
 | |
|           <script>
 | |
|               document.getElementById('time').textContent = new Date().toLocaleString();
 | |
|           </script>
 | |
|       </body>
 | |
|       </html>      
 | |
| 
 | |
|   api-html:
 | |
|     content: |
 | |
|       <!DOCTYPE html>
 | |
|       <html>
 | |
|       <head>
 | |
|           <title>API Service - Traefik Swarm Demo</title>
 | |
|           <style>
 | |
|               body { font-family: Arial, sans-serif; margin: 40px; background: #f5f5f5; }
 | |
|               .container { background: white; padding: 30px; border-radius: 8px; box-shadow: 0 2px 10px rgba(0,0,0,0.1); }
 | |
|               h1 { color: #27ae60; }
 | |
|               .info { background: #e8f8f5; padding: 15px; border-radius: 4px; margin: 20px 0; }
 | |
|           </style>
 | |
|       </head>
 | |
|       <body>
 | |
|           <div class="container">
 | |
|               <h1>🔌 API Service</h1>
 | |
|               <div class="info">
 | |
|                   <p><strong>服务:</strong> api</p>
 | |
|                   <p><strong>访问地址:</strong> http://api.local</p>
 | |
|                   <p><strong>路径路由:</strong> http://app.local/api</p>
 | |
|                   <p><strong>负载均衡:</strong> Traefik + Docker Swarm</p>
 | |
|                   <p><strong>时间:</strong> <span id="time"></span></p>
 | |
|               </div>
 | |
|               <p>这是通过 Traefik 路由的 API 服务示例。</p>
 | |
|           </div>
 | |
|           <script>
 | |
|               document.getElementById('time').textContent = new Date().toLocaleString();
 | |
|           </script>
 | |
|       </body>
 | |
|       </html>      
 | |
| 
 | |
|   monitor-html:
 | |
|     content: |
 | |
|       <!DOCTYPE html>
 | |
|       <html>
 | |
|       <head>
 | |
|           <title>Monitor Service - Traefik Swarm Demo</title>
 | |
|           <style>
 | |
|               body { font-family: Arial, sans-serif; margin: 40px; background: #f5f5f5; }
 | |
|               .container { background: white; padding: 30px; border-radius: 8px; box-shadow: 0 2px 10px rgba(0,0,0,0.1); }
 | |
|               h1 { color: #e74c3c; }
 | |
|               .info { background: #fdf2e9; padding: 15px; border-radius: 4px; margin: 20px 0; }
 | |
|           </style>
 | |
|       </head>
 | |
|       <body>
 | |
|           <div class="container">
 | |
|               <h1>📊 Monitor Service</h1>
 | |
|               <div class="info">
 | |
|                   <p><strong>服务:</strong> monitor</p>
 | |
|                   <p><strong>访问地址:</strong> http://monitor.local</p>
 | |
|                   <p><strong>认证:</strong> 基本认证保护</p>
 | |
|                   <p><strong>负载均衡:</strong> Traefik + Docker Swarm</p>
 | |
|                   <p><strong>时间:</strong> <span id="time"></span></p>
 | |
|               </div>
 | |
|               <p>这是通过 Traefik 路由的监控服务示例。</p>
 | |
|           </div>
 | |
|           <script>
 | |
|               document.getElementById('time').textContent = new Date().toLocaleString();
 | |
|           </script>
 | |
|       </body>
 | |
|       </html>       |