Quando você está ficando cada vez mais velho, você não Não quero manter um servidor a mais para hospedar alguns sites e blogs como este, monitore se permite criptografar certificado renovado mesmo em sites antigos desatualizados e assim por diante... pelo menos isso é verdade para eu :) E decidi movê-lo para alguma plataforma totalmente gerenciada. À primeira vista, o armazenamento em nuvem do Google foi uma solução boa o suficiente, mas depois de criar o balde e seguir o tutorial completo, entendo que habilitar o https não será fácil (usando o balanceador de carga e assim por diante) nem barato (é US$ 0,025 pelas primeiras 5 regras por hora =>US$ 18 por mês) Apenas usei o Google Cloud Run para algumas APIs e é pago apenas pelo tempo/CPU/RAM usado, mas no caso de um site não muito ativo, mesmo o nível gratuito é suficiente para hospedar alguns sites absolutamente de graça Depois de ler a documentação, parece muito simples, você nem precisa fornecer credenciais manualmente dentro das instâncias de contêiner do Cloud Run (totalmente gerenciadas) ao usar as bibliotecas de cliente do GCP! PS: se você deseja apenas o código final para implantar seu próprio contêiner, visite github.com/kanocz/gclwebgcs Primeiro precisamos escutar na porta fornecida por Variável de ambiente PORT: http.ListenAndServe + os.Getenv(âÃÂÃÂPORT nil) Através da GCS env vamos especificar o nome do bucket do Google Cloud Storage (precisa estar no mesmo projeto ctx : = context.Background() client, err := storage.NewClient(ctx) bucket = client.Bucket(os.Getenv(âÃÂÃÂGCS E objeto de leitura para enviar: obj := bucket.Object(r.URL.Path[1 // remove firstobjAttrs, err := obj.Attrs(ctx) obj = obj.ReadCompressed(true) // não sabemos Não quero descompactá-lo e comprimi-lo novamente para transferência // copiar cabeçalhos w.HeaderSet(âÃÂÃÂContent-TypeâÃÂÃÂ, objAttrs.ContentType) w.HeaderSet(âÃÂÃÂContent-EncodingâÃÂÃÂ, objAttrs.ContentEncoding) w.HeaderSet(âÃÂàContent-LengthâÃÂÃÂ, strconv.Itoa(int(objAttrs.Size w.HeaderSet(âÃÂÃÂContent-DispositionâàÃÂ, objAttrs.ContentDisposition) w.HeaderSet(âÃÂÃÂCache-ControlâÃÂÃÂ, objAttrs.CacheControl) w.HeaderSet(à ¢ÃÂÃÂETagâÃÂÃÂ, objAttrs.Etag) // e envie o leitor de dados, err := obj.NewReader(ctx) io.Copy(w, leitor) Realmente, para servir o site, também exigimos índice do servidor, lidar com erros não encontrados e assim por diante, mas também não é tão complicado Não se esqueça de criar go.mod para ajudar o Google Cloud Build :) Do que a implantação no registro de contêiner, apenas gcloud builds submit --tag gcr.io/project1/gclwebgcs (por favor substitua project1 com o nome do seu projeto) e crie/atualize o serviço usando gcloud beta run deploy --image gcr.io/project1/gclwebgcs \ --platform managed --set-env-vars=GCS=GCSbucketName serviceName Não se esqueça de enviar arquivos para GCSbucketName no mesmo projeto e atribuir o nome de domínio ao novo serviço, o certificado SSL será fornecido e gerenciado automaticamente! Isso é tudo :)