Când îmbătrânești din ce în ce mai, nu... ÂNu vreau să menținem un server în plus pentru a găzdui câteva site-uri și bloguri ca acesta, monitorizați dacă certificatul de criptare este reînnoit chiar și pe site-uri vechi învechite și așa mai departe... cel puțin acest lucru este valabil pentru eu :) Și am decis să o mut pe o platformă complet gestionată. Pentru prima vedere, stocarea Google Cloud a fost o soluție suficient de bună, dar după ce am creat găleată și am aruncat un tutorial complet, înțeleg că activarea https nu va fi nici ușoară (folosind echilibrul de încărcare și așa mai departe) nici ieftină (itâàÃÂs 0,025 USD pentru primele 5 reguli pe oră =>18 USD pe lună) Tocmai am folosit Google Cloud Run pentru câteva API-uri și este plătit doar pentru timpul folosit/CPU/RAM, dar în cazul unui site web nu foarte activ, chiar și Free Tier este suficient pentru a găzdui absolut unele site-uri web. gratuit După citirea documentației, pare foarte simplu, nici măcar nu trebuie să furnizați acreditări manual în instanțele de container Cloud Run (gestionate complet) atunci când utilizați bibliotecile client GCP! P.S.: dacă doriți doar să aveți codul final pentru a vă implementa propriul container, vă rugăm să vizitați github.com/kanocz/gclwebgcs Mai întâi trebuie să ascultăm pe portul oferit de Variabila de mediu PORT: http.ListenAndServe + os.Getenv(âÃÂÃÂPORT nil) Prin intermediul GCS env vom specifica numele compartimentului Google Cloud Storage (trebuie să fie în același proiect ctx : = context.Background() client, err := storage.NewClient(ctx) bucket = client.Bucket(os.Getenv(âÃÂÃÂGCS) Și obiect de citire de trimis: obj := bucket.Object(r.URL.Path[1 // strip firstobjAttrs, err := obj.Attrs(ctx) obj = obj.ReadCompressed(true) // noi nu... nu vreau să-l decomprimați și să-l comprimați din nou pentru transfer // copiați antetele cu 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) // și trimiteți cititor de date, err := obj.NewReader(ctx) io.Copy(w, cititor) Într-adevăr, pentru a servi site-ul web, avem nevoie și de index de server, de a gestiona erorile negăsite și așa mai departe, dar nici nu este atât de complicat. Nu uitați să creați go.mod pentru a ajuta Google Cloud Build :) Decât implementarea în registrul containerului doar gcloud builds submit --tag gcr.io/project1/gclwebgcs (vă rugăm să înlocuiți project1 cu numele proiectului dvs.) și creați/actualizați serviciul folosind gcloud beta run deploy --image gcr.io/project1/gclwebgcs \ --platform managed --set-env-vars=GCS=GCSbucketName serviceName Nu uitați să încărcați fișiere în GCSbucketName în același proiect și atribuiți un nume de domeniu noului serviciu, certificatul ssl va fi furnizat și gestionat automat! Asta e tot :)