看板 KnucklesNote
作者 標題 [Linode] Object Storage 相容 S3 的檔案儲存空間
時間 2024-01-09 Tue. 03:22:30
Object Storage 是 Linode 提供的檔案儲存空間服務,
與 Amazon S3 (Simple Storage Service) 相容,
可以用來上傳大量靜態檔案讓人連結。
登入 Linode 控制台,點「Create Bucket」,建立一個 Bucket 後,
就會啟用 Object Storage,只要啟動後,每月就要基本費用 $5 美金,
如果要停用的話,要在 Account / Settings 裡點「Cancel Object Storage」
每月 $5 美金就可以有 250G 的空間,超過 250G 的話 $0.02/GB,傳入的流量不計費,
傳出的流量與帳號的「總流量」共用,啟用 Object Storage 時會在帳號的總流量加上 1TB,
用量超過的話 $0.005/GB = $5/TB
例如有買一個最便宜的1GB主機的話有1TB流量可以用,
再加上 Object Storage,每月的總流量就有2TB可以用,
要注意主機與 Object Storage 互連的流量也是會被計費的。
# 建立 Bucket
建立一個 Bucket,取一個名稱並選擇區域,此名稱會用做網址所以不能與同區域的其他人重覆,
例如下圖建立的 Bucket 網址為 disp.jp-osa-1.linodeobjects.com
點進建立的 Bucket 後,可在這邊建立資料夾與上傳檔案
點擊檔案會顯示可供連結的網址,把權限改成「Public Read」可以供所有人讀取
在這邊建立一組 Access Key 和 Secret,用來供其他程式存取選擇的 Bucket
# 使用 Cyberduck
參考: https://www.linode.com/docs/products/storage/object-storage/guides/cyberduck/
官網下載: https://cyberduck.io/download/
下載安裝 Cyberduck for Windows 8.7.1
在「編輯」/「偏好設定」,點「Profiles」,搜尋「Linode」
勾選要使用的 Data Center,例如 Linode Object Storage (Osaka, JP)
點「新增連線」,設定檔選「Linode Object Storage (Osaka, JP)」
輸入 Access key 與 Secret 後按「連線」
選取檔案後點「簡介」,可以取得網址
# 自訂連結網址
參考
https://www.linode.com/docs/products/storage/object-storage/guides/custom-domain/
要使用自訂連結的話,Bucket Label 要使用自訂連結的網址,才能使用 SSL 憑證
例如想要用 https://s3.disp.cc/test/knuckles.png 這樣的網址來讀取檔案的話,Bucket Lable 要設定為「s3.disp.cc」,但要注意這樣 s3.disp.cc.jp-osa-1.linodeobjects.com 的網址就不能使用 https 連線。
修改 DNS 設定,加上 CNAME 記錄,例如使用 Linode Domains 的話,「Hostname」輸入「s3」,「Alias to」輸入「s3.disp.cc.jp-osa-1.linodeobjects.com」
等待 DNS 更新後,就可以用非加密的 http://s3.disp.cc/test/knuckles.png 讀取檔案了
如果要使用 https 加密連線的話,要申請 SSL 憑證,例如使用 certbot 申請 Let's Encrypt 憑證,執行
$ sudo certbot certonly --manual
依顯示的步驟手動完成 HTTP-01 Challenge,要自己將驗證檔上傳到 Bucket,讓 Let's Encrypt 主機驗證所有權,然後將產生的憑證貼在 Bucket 的「SSL/TLS」
「Certificate」輸入 /etc/letsencrypt/live/s3.disp.cc/fullchain.pem 的內容
「Private Key」輸入 /etc/letsencrypt/live/s3.disp.cc/privkey.pem 的內容
但這樣之後不能自動更新憑證
# 自動更新憑證
參考這篇 [Linode] NodeBalancer 使用 Let's Encrypt SSL憑證 - KnucklesNote板 - Disp BBS
使用 DNS-01 Challenge 申請 *.disp.cc 萬用字元憑證(Wildcard Certificate)
在 Linode 產生一個 API Token,Label 取個名稱,Expiry 選 Never,點一下 Select All 的 None,然後點 Account 的 Read Only,點 Object Storage 的 Read/Write,其他權限視需要再增加
複製 Personal Access Token
使用 pip3 安裝 linode-cli
$ sudo yum install python3 python3-pip
$ sudo pip3 install linode-cli --upgrade
$ sudo ln -s /usr/local/bin/linode-cli /usr/bin/linode-cli
設定 linode-cli
$ linode-cli configure
依提示輸入剛剛產生的 Personal Access Token
已輸入過的話也可以編輯 ~/.config/linode-cli 檔就好
將萬用字元憑證使用 linode-cli 上傳至 Object Storage
$ sudo vim /root/update_linode.sh
#!/bin/bash
region=jp-osa-1
# 輸入每個要更新憑證的 bucket,以空格分隔
Buckets="s3.disp.cc img.disp.cc"
cert=$(</etc/letsencrypt/live/disp.cc/fullchain.pem)
key=$(</etc/letsencrypt/live/disp.cc/privkey.pem)
for bucket in ${Buckets}; do
linode-cli object-storage ssl-delete $region $bucket
linode-cli object-storage ssl-upload $region $bucket \
--certificate "$cert" --private_key "$key"
done
region=jp-osa-1
# 輸入每個要更新憑證的 bucket,以空格分隔
Buckets="s3.disp.cc img.disp.cc"
cert=$(</etc/letsencrypt/live/disp.cc/fullchain.pem)
key=$(</etc/letsencrypt/live/disp.cc/privkey.pem)
for bucket in ${Buckets}; do
linode-cli object-storage ssl-delete $region $bucket
linode-cli object-storage ssl-upload $region $bucket \
--certificate "$cert" --private_key "$key"
done
設定 crontab 定期更新,例如每週5的3:45執行一次
$ vim /etc/crontab
45 3 * * 5 root /root/update_linode.sh
參考
https://www.linode.com/docs/products/tools/cli/guides/object-storage/
https://www.linode.com/docs/api/object-storage/#object-storage-tlsssl-cert-upload
錯誤解決記錄:
新增 SSL/TLS 的時候出現
Certificate is not valid for the bucket name. Verify the bucket name is covered by the SANs and/or CN.
→ Bucket Label 要與 SSL 憑證的網址相同才行
# 使用 Linode CLI 存取檔案
Linode CLI 只有一些簡單的操作,可以使用下一節的 s3cmd 就好
依前一節的說明用 pip3 安裝 linode-cli
安裝 boto 函式庫,就可以使用 obj 擴充功能
$ sudo pip3 install boto boto3
執行看看
$ linode-cli obj
第一次執行會詢問預設的區域,選 jp-osa-1
obj 可用的指令:
mb
建立一個新的 bucket
rb
刪除一個 bucket
du
顯示每個 bucket 占用的空間與檔案數,以及總占用的空間
la
列出所有 buckets 上的所有檔案
ls
列出 buckets 或 bucket 上的檔案
put
上傳一個檔案到 bucket
get
下載一個 bucket 上的檔案
del
刪除 bucket 上的一個檔案
rm
刪除 bucket 上的一個檔案
setacl
設定檔案的存取限制
指令加 - h 可顯示說明,例如顯示 ls 的說明
$ linode-cli obj ls -h
列出目前已建立的 buckets
$ linode-cli obj ls
列出 my-bucket 的 test 資料夾中的檔案
$ linode-cli obj ls my-bucket/test/
上傳檔案 test.txt 到 my-bucket 的 test 資料夾
$ linode-cli obj put --acl-public test.txt my-bucket/test/
加上 --acl-public 代表設定為任何人都可以讀取
下載 my-bucket 上的檔案 test/test.txt
$ linode-cli obj test my-bucket test/test.txt
刪除 my-bucket 上的檔案 test/test.txt
$ linode-cli obj rm my-bucket test/test.txt
參考
https://www.linode.com/docs/products/storage/object-storage/guides/linode-cli/
# 使用 s3cmd 存取檔案
s3cmd 是 Amazon S3 用來操作檔案存取的工具,與 S3 相容的服務也可以使用,比 Linode CLI 有更多的功能可以使用。
使用 python 安裝 s3cmd
$ sudo pip3 install s3cmd
$ sudo ln -s /usr/local/bin/s3cmd /usr/bin/s3cmd
輸入 s3cmd 設定值
$ s3cmd --configure
Access Key: 輸入之前產生的 Access Key
Secret Key: 輸入之前產生的 Secret
Default Region: US 使用預設值就好,不要更改
S3 Endpoint (cluster URL): 輸入 jp-osa-1.linodeobjects.com
DNS-style bucket+hostname: 輸入 %(bucket)s.jp-osa-1.linodeobjects.com
Encryption password: 不用填
Path to GPG program: 不用填
Use HTTPS protocol: Yes
HTTP Proxy server name: 不用填
HTTP Proxy server port: 不用填
Test access: 目前使用測試會失敗,先按 n 跳過
Save settings? 按 y 儲存設定
設定值會儲存在 ~/.s3cfg
列出、建立、刪除 Bucket
$ s3cmd ls
$ s3cmd mb s3://my-bucket
$ s3cmd rb s3://my-bucket
如果 bucket 中有檔案的話,加上 -r (--recursive) 與 -f (--force) 可強制刪除
$ s3cmd rb -r -f s3://my-bucket
列出 my-bucket 中 test 資料夾的檔案
$ s3cmd ls s3://my-bucket/test/
上傳檔案 test.txt 到 my-bucket 的 test 資料夾
$ s3cmd put -P test.txt s3://my-bucket/test/
加上 -P (--acl-public) 代表設定檔案權限為公開
下載、刪除 my-bucket 上的檔案 test/test.txt
$ s3cmd get s3://my-bucket/test/test.txt
$ s3cmd rm s3://my-bucket/test/test.txt
刪除 my-bucket 上的 test/ 資料夾與裡面的所有檔案
$ s3cmd rm -r s3://my-bucket/test/
加 -r (--recursive) 代表資料夾中的所有檔案
複製、移動 my-bucket 的 test/test.txt 到 my-bucket2 的 test2/
$ s3cmd cp s3://my-bucket/test/test.txt s3://my-bucket2/test2/
$ s3cmd mv s3://my-bucket/test/test.txt s3://my-bucket2/test2/
設定 my-bucket 的 test/ 資料夾中的檔案權限為公開
$ s3cmd setacl -P -r s3://my-bucket/test/
同步資料夾 test/ 中的檔案到 my-bucket 的 test/ 資料夾
$ s3cmd sync -P test/ s3://my-bucket/test/
或是
$ s3cmd sync -P test s3://my-bucket/
使用 sync 只會上傳有更新或新增的檔案
加 -P (--acl-public) 代表設定權限為公開
參考
https://www.linode.com/docs/products/storage/object-storage/guides/s3cmd/
使用 PHP 讀寫檔案,參考下一篇
[Linode] Object Storage 使用 AWS SDK for PHP - KnucklesNote板 - Disp BBS
--
※ 作者: Knuckles 時間: 2024-01-09 03:22:31 (台灣)
※ 編輯: Knuckles 時間: 2024-06-29 18:32:59 (台灣)
※ 看板: KnucklesNote 文章推薦值: 0 目前人氣: 0 累積人氣: 76
回列表(←)
分享