code: func (s *Server) Close() {
  	ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
  	go func(ctx context.Context) {
  		<-ctx.Done()
  		if ctx.Err() == context.Canceled {
  			return
  		} else if ctx.Err() == context.DeadlineExceeded {
  			panic("Timeout while stopping traefik, killing instance ✝")
  		}
  	}(ctx)
  
  	stopMetricsClients()
  	s.routinesPool.Cleanup()
  	close(s.configurationChan)
  	close(s.configurationValidatedChan)
  	signal.Stop(s.signals)
  	close(s.signals)
  	close(s.stopChan)
  
  	if s.accessLoggerMiddleware != nil {
  		if err := s.accessLoggerMiddleware.Close(); err != nil {
  			log.WithoutContext().Errorf("Could not close the access log file: %s", err)
  		}
  	}
  
  	if s.tracer != nil {
  		s.tracer.Close()
  	}
  
  	cancel()
  }
docs: // Close destroys the server