code: func gceDeployHandler(prefix string) (*gce.DeployHandler, error) {
  	var hostPort string
  	var err error
  	scheme := "https"
  	if inProd {
  		if inStaging {
  			hostPort = stagingHostname + ":443"
  		} else {
  			hostPort = prodDomain + ":443"
  		}
  	} else {
  		addr := *httpsAddr
  		if *devMode && *httpsAddr == "" {
  			addr = *httpAddr
  			scheme = "http"
  		}
  		hostPort, err = netutil.ListenHostPort(addr)
  		if err != nil {
  			// the deploy handler needs to know its own
  			// hostname or IP for the oauth2 callback.
  			return nil, fmt.Errorf("invalid -https flag: %v", err)
  		}
  	}
  	config, err := gceDeployHandlerConfig()
  	if config == nil {
  		return nil, err
  	}
  	gceh, err := gce.NewDeployHandlerFromConfig(hostPort, prefix, config)
  	if err != nil {
  		return nil, fmt.Errorf("NewDeployHandlerFromConfig: %v", err)
  	}
  
  	pageBytes, err := ioutil.ReadFile(filepath.Join(*root, "tmpl", "page.html"))
  	if err != nil {
  		return nil, err
  	}
  	if err := gceh.AddTemplateTheme(string(pageBytes)); err != nil {
  		return nil, fmt.Errorf("AddTemplateTheme: %v", err)
  	}
  	gceh.SetScheme(scheme)
  	log.Printf("Starting Perkeep launcher on %s://%s%s", scheme, hostPort, prefix)
  	return gceh, nil
  }
docs: // gceDeployHandler returns an http.Handler for a GCE launcher,
  // configured to run at /prefix/ (the trailing slash can be omitted).
  // The launcher is not initialized if:
  // - in production, the launcher-config.json file is not found in the relevant bucket
  // - neither CAMLI_GCE_CLIENTID is set, nor launcher-config.json is found in the
  // camlistore server config dir.