När du blir äldre och äldre gör du det inte.  vill inte behålla en server mer för att vara värd för få webbplatser och bloggar som den här, övervaka om låter kryptera certifikat som förnyas även på gamla föråldrade webbplatser och så vidare. Åtminstone är detta sant för mig :) Och jag bestämde mig för att flytta den till någon fullständigt hanterad plattform. För den första titten var Google Cloud-lagring en tillräckligt bra lösning, men efter att ha skapat en hink och gått igenom en komplett handledning förstår jag att det inte kommer att vara eller lätt att aktivera https (med belastningsbalanserare och så vidare) varken billigt (itâàDet är 0,025 USD per första 5 reglerna per timme =>18 USD per månad) Har precis använt Google Cloud Run för ett fåtal API:er och det betalas bara för använd tid/CPU/RAM, men i händelse av en inte särskilt aktiv webbplats räcker till och med Free Tier för att vara värd för vissa webbplatser. gratis Efter att ha läst dokumentationen ser det väldigt enkelt ut, du behöver inte ens tillhandahålla referenser manuellt i Cloud Run (helt hanterade) containerinstanser när du använder GCP-klientbiblioteken! P.S.: om du bara vill ha din slutliga kod för att distribuera din egen container, besök github.com/kanocz/gclwebgcs Först måste vi lyssna på port som tillhandahålls av PORT env-variabel: http.ListenAndServe + os.Getenv(âÃÂÃÂPORT noll) Via GCS env vi kommer att ange Google Cloud Storage-hinkens namn (måste vara i samma projekt ctx : = context.Background() klient, err := storage.NewClient(ctx) bucket = client.Bucket(os.Getenv(âÃÂÃÂGCS Och läsobjekt att skicka: obj := bucket.Object(r.URL.Path[1 // strip firstobjAttrs, err := obj.Attrs(ctx) obj = obj.ReadCompressed(true) // we donâÃÂàJag vill inte dekomprimera och komprimera den igen för överföring // kopiera rubriker 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) // och skicka dataläsare, err := obj.NewReader(ctx) io.Copy(w, läsare) För att betjäna webbplatser kräver vi också serverindex, hantera ej hittade fel och så vidare, men det är inte heller så komplicerat Glöm inte att skapa go.mod för att hjälpa Google Cloud Build :) Än distribution till container registret det bara gcloud builds submit --tagg gcr.io/project1/gclwebgcs (snälla byt ut projekt1 med ditt projektnamn) och skapa/uppdatera tjänst med hjälp av gcloud beta run deploy --image gcr.io/project1/gclwebgcs \ --plattformshantering --set-env-vars=GCS=GCSbucketName tjänstnamn Glöm inte att ladda upp filer till GCSbucketName i samma projekt och tilldela domännamn till ny tjänst, ssl-certifikat kommer att tillhandahållas och hanteras automatiskt! Det är allt :)