Als je ouder en ouder wordt, doe je dat niet We willen niet één server meer onderhouden om een ​​paar sites en blogs zoals deze te hosten, controleren of we het certificaat kunnen vernieuwen, zelfs op oude verouderde sites enzovoort. Dit geldt in ieder geval voor ik :) En ik besloot het te verplaatsen naar een volledig beheerd platform. Voor de eerste blik was Google Cloud-opslag een goede oplossing, maar na het maken van een bucket en het gooien van de volledige tutorial begrijp ik dat het inschakelen van https niet gemakkelijk zal zijn (met behulp van load balancer enzovoort), noch goedkoop (het is € 0,025 per eerste 5 regels per uur =>$ 18 per maand) Ik heb net Google Cloud Run gebruikt voor een paar API's en het wordt alleen betaald voor gebruikte tijd/CPU/RAM, maar in het geval van een niet erg actieve website is zelfs Free Tier voldoende om sommige websites absoluut te hosten gratis Na het lezen van de documentatie ziet het er gewoon heel eenvoudig uit, u hoeft zelfs niet handmatig inloggegevens op te geven in Cloud Run (volledig beheerde) containerinstanties wanneer u de GCP-clientbibliotheken gebruikt! P.S.: als je alleen je definitieve code wilt om je eigen container te implementeren, ga dan naar github.com/kanocz/gclwebgcs Eerst moeten we luisteren op poort geleverd door PORT env-variabele: http.ListenAndServe + os.Getenv(âÃÂÃÂPOORT nul) Via GCS env we zullen de naam van de Google Cloud Storage-bucket specificeren (moet in hetzelfde project zijn ctx : = context.Background() client, err := storage.NewClient(ctx) bucket = client.Bucket(os.Getenv(âÃÂÃÂGCS En leesobject om te verzenden: obj := bucket.Object(r.URL.Path[1 // strip firstobjAttrs, err := obj.Attrs(ctx) obj = obj.ReadCompressed(true) // we donâÃÂàIk wil het niet decomprimeren en opnieuw comprimeren voor overdracht // kopteksten kopiëren 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) // en gegevenslezer verzenden, err := obj.NewReader(ctx) io.Copy(w, lezer) Echt voor het bedienen van de website hebben we ook een serverindex nodig, omgaan met niet gevonden fouten enzovoort, maar het is ook niet zo ingewikkeld Vergeet niet te creëren go.mod om Google Cloud Build te helpen :) Dan is implementatie naar containerregistratie het gewoon gcloud bouwt indienen --tag gcr.io/project1/gclwebgcs (graag vervangen project1 met uw projectnaam) en maak / update service met behulp van gcloud beta run deploy --image gcr.io/project1/gclwebgcs \ --platform managed --set-env-vars=GCS=GCSbucketName serviceName Vergeet niet bestanden te uploaden naar GCSbucketName in hetzelfde project en wijs de domeinnaam toe aan een nieuwe service, het ssl-certificaat wordt automatisch verstrekt en beheerd! Dat is alles :)