zoukankan      html  css  js  c++  java
  • 使用s3-sftp-proxy 暴露minio s3 数据为sftp 访问

    尽管s3 很不错,但是ftp 也有自己存在的价值,以下是一个简单的通过s3-sftp-proxy 暴露minio s3 数据为ftp 的访问方式

    环境准备

    • docker-compose 文件
    version: "3"
    services: 
      minio:
        image: minio/minio
        command: server /export
        ports:
        - "9000:9000"
        environment:
        - "MINIO_ACCESS_KEY=dalongdemo"
        - "MINIO_SECRET_KEY=dalongdemo"
      s3-proxy:
        build: ./
        image: dalongrong/s3-sftp-proxy
        command: -debug
        ports: 
        - "10022:10022"
        volumes: 
        - "./host_key:/app/host_key"
        - "./s3-sftp-proxy.example.toml:/app/s3-sftp-proxy.example.toml"
     
    git clone https://github.com/moriyoshi/s3-sftp-proxy.git
    cd s3-sftp-proxy 
    go mod init 
    go mod tidy
     

    本地构建

    go  build 

    docker 镜像通过多阶段构建

    FROM golang:alpine as build
    WORKDIR /app
    ENV GOPROXY=https://mirrors.aliyun.com/goproxy/
    RUN apk update && apk add wget unzip build-base git bzr mercurial gcc 
    RUN git clone https://github.com/moriyoshi/s3-sftp-proxy.git
    RUN cd s3-sftp-proxy && go mod init && go mod tidy && go build 
    FROM alpine:latest
    LABEL EMAIL="1141519465@qq.com"
    LABEL AUTHOR="dalongrong"
    WORKDIR /app
    ENV BIND=:10022
    ENV CONFIG=/app/s3-sftp-proxy.example.toml
    EXPOSE 10022
    COPY entrypoint.sh /app/entrypoint.sh
    RUN chmod +x /app/entrypoint.sh
    ENV PATH=$PATH:/usr/local/bin
    COPY s3-sftp-proxy.example.toml /app/s3-sftp-proxy.example.toml
    COPY --from=build /app/s3-sftp-proxy/s3-sftp-proxy /usr/local/bin/s3-sftp-proxy
    ENTRYPOINT ["./entrypoint.sh"]
     
    • s3-sftp-proxy demo 配置文件
      s3-sftp-proxy.example.toml 文件
    host_key_file = "./host_key"
    [buckets.test]
    endpoint = "http://minio:9000"
    s3_force_path_style = true
    disable_ssl = true
    bucket = "demoapp"
    region = "us-east-1"
    max_object_size = 65536
    writable = true
    readable = true
    listable = true
    auth = "test"
    keyboard_interactive_auth = false
    [buckets.test.credentials]
    aws_access_key_id = "dalongdemo"
    aws_secret_access_key = "dalongdemo"
    [auth.test]
    type = "inplace"
    [auth.test.users.user01]
    password = "test"
    [auth.test.users.user02]
    password = "test"
     
     

    启动&&测试

    • 启动
    docker-compose up -d
    • 效果

    • sftp 连接
    sftp -P 10022 user01@localhost

     

    使用goreleaser 构建以及发布

    • goreleaser 说明
      goreleaser 是一个很不错的golang 软件构建 工具,可以快速的构建支持跨平台的二进制软件包,同时还支持rpm,deb 包的制作
    • 初始化goreleaser 项目
      goreleaser 提供了方便的cli 命令可以快速生成构建配置文件
     
    goreleaser init
    • 修改文件,添加多平台支持
      .goreleaser.yml
     
    .# This is an example goreleaser.yaml file with some sane defaults.
    # Make sure to check the documentation at http://goreleaser.com
    project_name: s3-sftp-proxy
    before:
      hooks:
        # you may remove this if you don't use vgo
        - sh goproxy.sh
        - go mod download
    builds:
    - env:
      - CGO_ENABLED=0
      goos:
      - freebsd
      - windows
      - darwin
      goarch:
      - amd64
      - arm
      - arm64
    archive:
      replacements:
        darwin: Darwin
        linux: Linux
        windows: Windows
        386: i386
        amd64: x86_64
    checksum:
      name_template: 'checksums.txt'
    changelog:
      sort: asc
      filters:
        exclude:
        - '^docs:'
        - '^test:'
     

    说明
    添加了一个hooks,方便支持goproxy 的加速构建

    • 本地构建
      注意goreleaser 是基于tag 的构建管理,你需要包含tag 分支可以使用git tag 进行操作
    goreleaser release --skip-publish --rm-dist

    效果

    • github release 支持
      goreleaser 可以快速的发布构建好的二进制文件到github,但是提前是需要 GITHUB_TOKEN ,可以直接在github 创建
      添加 GITHUB_TOKEN 环境变量
    export GITHUB_TOKEN=xxxxxxxxxxxx

    发布

    goreleaser release --rm-dist

    效果

       releasing using goreleaser 0.101.0...
       loading config file file=.goreleaser.yml
       RUNNING BEFORE HOOKS
          running sh goproxy.sh
          running go mod download
       GETTING AND VALIDATING GIT STATE
          releasing v1.9, commit e7fa48b35d11406c2a7d8945cfa450865264aba3
       PARSING TAG      
       SETTING DEFAULTS 
          LOADING ENVIRONMENT VARIABLES
          SNAPSHOTING      
          GITHUB RELEASES  
          PROJECT NAME     
          ARCHIVES         
          BUILDING BINARIES
          LINUX PACKAGES WITH NFPM
          SNAPCRAFT PACKAGES
          CALCULATING CHECKSUMS
          SIGNING ARTIFACTS
          DOCKER IMAGES    
          ARTIFACTORY      
          S3               
          HOMEBREW TAP FORMULA
          SCOOP MANIFEST   
       SNAPSHOTING      
          pipe skipped error=not a snapshot
       CHECKING ./DIST  
          --rm-dist is set, cleaning it up
       WRITING EFFECTIVE CONFIG FILE
          writing config=dist/config.yaml
       GENERATING CHANGELOG
          writing changelog=dist/CHANGELOG.md
       LOADING ENVIRONMENT VARIABLES
       BUILDING BINARIES
          building binary=dist/darwin_amd64/s3-sftp-proxy
          building binary=dist/windows_amd64/s3-sftp-proxy.exe
          building binary=dist/freebsd_amd64/s3-sftp-proxy
          building binary=dist/freebsd_arm_6/s3-sftp-proxy
       ARCHIVES         
          creating archive=dist/s3-sftp-proxy_1.9_Darwin_x86_64.tar.gz
          creating archive=dist/s3-sftp-proxy_1.9_Windows_x86_64.tar.gz
          creating archive=dist/s3-sftp-proxy_1.9_freebsd_x86_64.tar.gz
          creating archive=dist/s3-sftp-proxy_1.9_freebsd_armv6.tar.gz
       LINUX PACKAGES WITH NFPM
       SNAPCRAFT PACKAGES
          pipe skipped error=no summary nor description were provided
       CALCULATING CHECKSUMS
          checksumming file=s3-sftp-proxy_1.9_Darwin_x86_64.tar.gz
          checksumming file=s3-sftp-proxy_1.9_freebsd_x86_64.tar.gz
          checksumming file=s3-sftp-proxy_1.9_freebsd_armv6.tar.gz
          checksumming file=s3-sftp-proxy_1.9_Windows_x86_64.tar.gz
       SIGNING ARTIFACTS
          pipe skipped error=artifact signing is disabled
       DOCKER IMAGES    
          pipe skipped error=docker section is not configured
       PUBLISHING       
          S3               
             pipe skipped error=s3 section is not configured
          HTTP PUT         
             pipe skipped error=put section is not configured
          ARTIFACTORY      
             pipe skipped error=artifactory section is not configured
          DOCKER IMAGES    
          SNAPCRAFT PACKAGES
          GITHUB RELEASES  
             creating or updating release repo=rongfengliang/s3-sftp-proxy-docker tag=v1.9
             release updated url=https://github.com/rongfengliang/s3-sftp-proxy-docker/releases/tag/v1.9
             uploading to release file=dist/checksums.txt name=checksums.txt
             uploading to release file=dist/s3-sftp-proxy_1.9_Darwin_x86_64.tar.gz name=s3-sftp-proxy_1.9_Darwin_x86_64.tar.gz
             uploading to release file=dist/s3-sftp-proxy_1.9_freebsd_x86_64.tar.gz name=s3-sftp-proxy_1.9_freebsd_x86_64.tar.gz
             uploading to release file=dist/s3-sftp-proxy_1.9_Windows_x86_64.tar.gz name=s3-sftp-proxy_1.9_Windows_x86_64.tar.gz
             uploading to release file=dist/s3-sftp-proxy_1.9_freebsd_armv6.tar.gz name=s3-sftp-proxy_1.9_freebsd_armv6.tar.gz
          HOMEBREW TAP FORMULA
             pipe skipped error=brew section is not configured
          SCOOP MANIFEST   
             pipe skipped error=scoop section is not configured
       release succeeded after 26.53s

    参考资料

    https://github.com/moriyoshi/s3-sftp-proxy
    https://github.com/rongfengliang/s3-sftp-proxy-docker
    https://goreleaser.com/
    https://github.com/goreleaser/goreleaser

  • 相关阅读:
    ClickHouse
    SparkSql运行原理详细解析
    Hive优化一
    低代码平台,到底能给企业带来什么?
    观点:BPM已经过时了?
    一个好产品,只是帮用户做好了一件事
    高科技电子行业的信息化怎么做?
    【重要!】告K2老客户书
    移动互联网公司如何将BPM流程管理变身移动化?
    BPM业务流程管理与SAP如何更好集成整合?
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/11381125.html
Copyright © 2011-2022 走看看