When youâÃÂàngày càng già đi, bạn donâÃÂà Âkhông muốn duy trì thêm một máy chủ để lưu trữ một vài trang web và blog như trang này, hãy theo dõi xem có cho phép mã hóa chứng chỉ được gia hạn ngay cả trên các trang web cũ đã lỗi thời, v.v. tôi :) Và tôi đã quyết định chuyển nó sang một số nền tảng được quản lý hoàn toàn. Đối với cái nhìn đầu tiên, bộ nhớ Google Cloud là giải pháp đủ tốt, nhưng sau khi tạo nhóm và thực hiện hướng dẫn hoàn chỉnh, tôi hiểu rằng việc bật https sẽ không dễ dàng (sử dụng bộ cân bằng tải, v.v.) cũng không rẻ (itâàÃÂs $0,025 mỗi 5 quy tắc đầu tiên mỗi giờ =>$18 mỗi tháng) Chỉ sử dụng Google Cloud Run cho một vài API và nó được trả tiền chỉ cho thời gian/CPU/RAM đã sử dụng, nhưng trong trường hợp trang web không hoạt động nhiều, ngay cả Bậc miễn phí cũng đủ để lưu trữ hoàn toàn một số trang web miễn phí Sau khi đọc tài liệu, có vẻ rất đơn giản, bạn thậm chí không cần cung cấp thông tin xác thực theo cách thủ công bên trong các phiên bản bộ chứa Cloud Run (được quản lý hoàn toàn) khi sử dụng thư viện máy khách GCP! P.S.: nếu bạn chỉ muốn mã cuối cùng của mình để triển khai vùng chứa của riêng bạn, vui lòng truy cập github.com/kanocz/gclwebgcs Trước tiên, chúng ta cần lắng nghe trên cổng được cung cấp bởi PORT env biến: http.ListenAndServe + os.Getenv(âÃÂÃÂPORT nil) Qua GCS env weâÃÂàsẽ chỉ định tên bộ chứa Google Cloud Storage (cần nằm trong cùng một dự án ctx := context.Background() client, err := storage.NewClient(ctx) bucket = client.Bucket(os.Getenv(âÃÂÃÂGCS Và đọc đối tượng để gửi: obj := bucket.Object(r.URL.Path[1 // dải firstobjAttrs, err := obj.Attrs(ctx) obj = obj.ReadCompressed(true) // chúng tôi không âÃÂàkhông muốn giải nén và nén lại để chuyển // sao chép tiêu đề 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) // và gửi trình đọc dữ liệu, err := obj.NewReader(ctx) io.Copy(w, người đọc) Thực sự để phục vụ trang web, chúng tôi cũng yêu cầu lập chỉ mục máy chủ, xử lý các lỗi không tìm thấy, v.v., nhưng nó cũng không quá phức tạp Đừng quên tạo go.mod để giúp Google Cloud Build :) Hơn việc triển khai vào sổ đăng ký vùng chứa, nó chỉ bản dựng gcloud gửi --tag gcr.io/project1/gclwebgcs (vui lòng thay thế project1 với tên dự án của bạn) và tạo/cập nhật dịch vụ bằng cách sử dụng gcloud beta chạy triển khai --image gcr.io/project1/gclwebgcs \ --platform Managed --set-env-vars=GCS=GCSbucketName serviceName Đừng quên tải tệp lên GCSbucketName trong cùng một dự án và gán tên miền cho dịch vụ mới, chứng chỉ ssl sẽ được cung cấp và quản lý tự động! ĐóâÃÂàlà tất cả :)