Όταν γερνάς και μεγαλώνεις, δεν Δεν θέλετε να διατηρήσετε έναν ακόμη διακομιστή για να φιλοξενήσει λίγους ιστότοπους και ιστολόγια όπως αυτό, παρακολουθήστε εάν το πιστοποιητικό κρυπτογράφησης ανανεώνεται ακόμη και σε παλιούς απαρχαιωμένους ιστότοπους και ούτω καθεξής. τουλάχιστον αυτό ισχύει για εγώ :) Και αποφάσισα να το μεταφέρω σε κάποια πλήρως διαχειριζόμενη πλατφόρμα. Εκ πρώτης όψεως, ο χώρος αποθήκευσης Google Cloud ήταν αρκετά καλή λύση, αλλά μετά τη δημιουργία του κάδου και τη ρίψη του πλήρους εκπαιδευτικού προγράμματος, καταλαβαίνω ότι η ενεργοποίηση του https δεν θα είναι ούτε εύκολη (χρησιμοποιώντας εξισορροπητή φορτίου και ούτω καθεξής) ούτε φθηνή (είναι ÃÂs 0,025 $ ανά 5 πρώτους κανόνες ανά ώρα =>18 $ το μήνα) Μόλις χρησιμοποίησα το Google Cloud Run για λίγα API και πλήρωσα μόνο για χρησιμοποιημένο χρόνο/CPU/RAM, αλλά σε περίπτωση που δεν είναι πολύ ενεργός ιστότοπος, ακόμη και το Free Tier είναι αρκετό για να φιλοξενήσει ορισμένους ιστότοπους απολύτως δωρεάν Μετά την ανάγνωση της τεκμηρίωσης φαίνεται πολύ απλό, δεν χρειάζεται καν να παρέχετε διαπιστευτήρια με μη αυτόματο τρόπο μέσα σε παρουσίες κοντέινερ Cloud Run (πλήρης διαχείριση) όταν χρησιμοποιείτε τις βιβλιοθήκες πελατών GCP! Υ.Γ.: αν θέλετε απλώς να σας στείλετε τον τελικό κωδικό για να αναπτύξετε το δικό σας κοντέινερ, επισκεφτείτε το github.com/kanocz/gclwebgcs Πρώτα πρέπει να ακούσουμε τη θύρα που παρέχεται από Μεταβλητή PORT env: http.ListenAndServe + os.Getenv(âÃÂÃÂPORT μηδέν) Μέσω GCS env θα καθορίσουμε το όνομα του κάδου Google Cloud Storage (πρέπει να είναι στο ίδιο έργο ctx : = client.Background() client, err := storage.NewClient(ctx) bucket = client.Bucket(os.Getenv(âÃÂÃÂGCS Και ανάγνωση αντικειμένου προς αποστολή: obj := bucket.Object(r.URL.Path[1 // strip firstobjAttrs, err := obj.Attrs(ctx) obj = obj.ReadCompressed(true) // δεν κάνουμε Δεν θέλετε να το αποσυμπιέσετε και να το συμπιέσετε ξανά για μεταφορά // αντιγραφή κεφαλίδων 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) // και αποστολή αναγνώστη δεδομένων, err := obj.NewReader(ctx) io.Copy(w, αναγνώστης) Πραγματικά για την εξυπηρέτηση του ιστότοπου χρειαζόμαστε επίσης ευρετήριο διακομιστή, χειρισμό σφαλμάτων που δεν βρέθηκαν και ούτω καθεξής, αλλά δεν είναι επίσης τόσο περίπλοκο Μην ξεχάσετε να δημιουργήσετε go.mod για να βοηθήσει το Google Cloud Build :) Από την ανάπτυξη στο μητρώο κοντέινερ είναι απλώς Οι εκδόσεις gcloud υποβάλλουν --tag gcr.io/project1/gclwebgcs (παρακαλώ αντικαταστήστε project1 με το όνομα του έργου σας) και δημιουργία/ενημέρωση υπηρεσίας χρησιμοποιώντας ανάπτυξη εκτέλεσης beta του gcloud --image gcr.io/project1/gclwebgcs \ --διαχειριζόμενη πλατφόρμα --set-env-vars=GCS=GCSbucketName serviceName Μην ξεχάσετε να ανεβάσετε αρχεία σε GCSbucketName στο ίδιο έργο και εκχώρηση ονόματος τομέα σε νέα υπηρεσία, το πιστοποιητικό ssl θα παρέχεται και θα διαχειρίζεται αυτόματα! Αυτό είναι όλο :)