Lorsque vous vieillissez de plus en plus, vous ne Je ne veux pas maintenir un serveur de plus pour héberger quelques sites et blogs comme celui-ci, surveillez si le certificat de cryptage est renouvelé même sur les anciens sites obsolètes et ainsi de suite... au moins c'est vrai pour moi :) Et j'ai décidé de le déplacer vers une plate-forme entièrement gérée. Pour le premier coup d'œil, le stockage Google Cloud était une solution suffisante, mais après avoir créé un compartiment et lancé un didacticiel complet, je comprends que l'activation de https ne sera ni facile (en utilisant l'équilibreur de charge, etc.) ni bon marché (c'est ÃÂs 0,025 $ par 5 premières règles par heure =>18 $ par mois) Je viens d'utiliser Google Cloud Run pour quelques API et il est payé uniquement pour le temps utilisé/CPU/RAM, mais en cas de site Web peu actif, même le niveau gratuit est suffisant pour héberger certains sites Web absolument gratuitement Après avoir lu la documentation, cela semble très simple, vous n'avez même pas besoin de fournir manuellement des informations d'identification dans les instances de conteneur Cloud Run (entièrement gérées) lorsque vous utilisez les bibliothèques clientes GCP ! P.S. : si vous voulez juste votre code final pour déployer votre propre conteneur, veuillez visiter github.com/kanocz/gclwebgcs Nous devons d'abord écouter sur le port fourni par Variable d'environnement PORT : http.ListenAndServe + os.Getenv(âÃÂÃÂPORT nil) Via Env GCS, nous allons spécifier le nom du bucket Google Cloud Storage (doit être dans le même projet ctx : = client context.Background(), err := storage.NewClient(ctx) bucket = client.Bucket(os.Getenv(âÃÂÃÂGCS Et objet de lecture à envoyer : obj := bucket.Object(r.URL.Path[1 // strip firstobjAttrs, err := obj.Attrs(ctx) obj = obj.ReadCompressed(true) // we donâÃÂàJe ne veux pas le décompresser et le compresser à nouveau pour le transfert // copier les en-têtes 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) // et envoyer le lecteur de données, err := obj.NewReader(ctx) io.Copy(w, lecteur) Vraiment, pour servir le site Web, nous avons également besoin d'un index de serveur, de la gestion des erreurs non trouvées, etc., mais ce n'est pas si compliqué non plus. N'oubliez pas de créer go.mod pour aider Google Cloud Build :) Que le déploiement sur le registre de conteneurs, c'est juste gcloud builds submit --tag gcr.io/project1/gclwebgcs (veuillez remplacer project1 avec le nom de votre projet) et créer/mettre à jour le service en utilisant gcloud beta run deploy --image gcr.io/project1/gclwebgcs \ --platform managed --set-env-vars=GCS=GCSbucketName serviceName N'oubliez pas de télécharger des fichiers sur GCSbucketName dans le même projet et attribuez un nom de domaine au nouveau service, le certificat SSL sera fourni et géré automatiquement ! C'est tout :)