---
# System prepended metadata

title: s3proxy 環境設定備忘

---

# s3proxy 環境設定備忘

## Windwos 安裝步驟
  * 下載 `s3proxy` 二進位執行檔， 官方的 GitHub 可以找到。
  * 新增 s3proxy.conf 內容如下:
    ```
    s3proxy.endpoint=http://0.0.0.0:8080
    s3proxy.authorization=aws-v2-or-v4
    s3proxy.identity=Z12350s8YcSuxS8ChWasdasd
    s3proxy.credential=yZm43567hBd5ZBB8uXLjDExxasd
    jclouds.provider=filesystem
    jclouds.filesystem.basedir=data
    ```
  * 下載 [NSSM](https://nssm.cc/download)，解壓後提取 win64 下的 `nssm.exe` 出來用就可以了。
  * 建立服務安裝目錄，假設是 `D:\S3Proxy` ，把 `s3proxy` 、 `nssm.exe` `s3proxy.conf` 丟進目錄。
  * 已系統管理員身份開啟 powershell 進入 `D:\S3Proxy` 目錄。
  * 進行服務安裝
    ```
    .\nssm.exe install s3proxy "C:\Program Files\Microsoft\jdk-17.0.4.101-hotspot\bin\java.exe" -jar s3proxy --properties s3proxy.conf
    .\nssm.exe set s3proxy AppDirectory $PWD
    .\nssm.exe set s3proxy Description S3雲端模擬
    .\nssm.exe set s3proxy DisplayName S3雲端模擬
    ```
    那個 java.exe 官方文件是說要 11 以上，實際路徑看佈署環境安裝的 java 版本而定，我這邊使用的是 Microsoft 打包的 OpenJDK 17
   * 服務操作管理
     ```
     啟動 .\nssm.exe start s3proxy
     停止 .\nssm.exe stop s3proxy
     移除 .\nssm.exe remove s3proxy
     ```

## s3proxy.conf 設定說明
  * `s3proxy.endpoint` 設定要 listen 的 port 跟 IP
  * `s3proxy.authorization` 設定認證模式
  * `s3proxy.identity` 設定存取的ID
  * `s3proxy.credential` 設定存取的token
  * `jclouds.provider` 設定使用本地的 filesystem
  * `jclouds.filesystem.basedir` 設定基礎目錄這邊會相對於 AppDirectory , 以上面的假設來說就是 D:\S3Proxy\data

## Linux Docker Compose 佈署
  * 新增 'docker-compose.yml' 內容如下
    ```
    version: '3.8'
    services:
      s3:
        image: andrewgaul/s3proxy:latest
        environment:
          S3PROXY_IDENTITY: "ZVVP0s8YcSuxS8ChWOHN"
          S3PROXY_CREDENTIAL: "yZmuLhBd5ZBB8uXLjDEY"
        ports:
          - "8080:80"
        restart: always
        volumes:
          - ./data:/data
    ```
  * `docker compose up -d`

## 目前已測試環境
  * `Windwos 11` ok
  * `Dokcer on Linux` ok

## 補充說明:
  * 在 data 下面第一層資料夾可以視為 bucket (這邊名稱只能小寫英數-等..)
  * 在 windwos 假設在某一個 bucket 新增 demo 資料夾，會多出現一個 demo\，目前測試只是呈現的時候多一個，不影響存取
  * s3proxy 相較於 minio 相對輕量，也沒辦法做太複雜的控管。不過好處是當 provider 使用 filesystem 模式時，最後存進去的檔案跟平常存放的模式沒兩樣。
  * 專案初期規模小的時候先用 s3proxy 模擬 S3 API 操作，未來系統成長 另外獨立建置專屬的 S3 服務，或直接租賃雲端 S3 服務，程式面都不會受到影響，只是改變 調整連線 S3 API 的位置而已。
  * 現在不少 NAS 產品也都有提供 S3 API 的方式存取貯存空間。
  * 至於雲端服務商雖然一開始是 AWS 提出的，但現在各大雲端商應該都有提供。


## 網路參考資料
  * [s3proxy官方網站](https://github.com/gaul/s3proxy)
  * [s3browser S3瀏覽工具](https://s3browser.com/download.aspx)
  * [為什麼雲端儲存推薦S3？用S3打造企業的資料大倉庫](https://www.easpnet.com/blog/gws-s3/)
  * [大型分佈式存儲方案MinIO介紹](https://developer.aliyun.com/article/994497)