尽管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

使用s3-sftp-proxy 暴露minio s3 数据为sftp 访问的更多相关文章

  1. streamsets 集成 minio s3测试

    具体streamsets crate 集成可以参考 streamsets crate 以下文档只关注minio 集成的配置 minio 服务 搭建 具体搭建参考: https://www.cnblog ...

  2. k8s helm 私服chartmuseum minio s3 存储配置

    1. 安装minio 使用docker 安装 参考项目 https://github.com/rongfengliang/mino-thumbor-openresty 备注: 因为是一个集成项目可能会 ...

  3. cronicle minio s3 存储配置集成

    cronicle 后端存储是可配置的 ,通过使用不同的存储配置,我们可以解决多实例部署以及数据共享的问题 cronicle 的后端存储模型,设计的特别方便,包含了基于文件的,基于s3 的,同时我们也可 ...

  4. 使用Apache Hudi + Amazon S3 + Amazon EMR + AWS DMS构建数据湖

    1. 引入 数据湖使组织能够在更短的时间内利用多个源的数据,而不同角色用户可以以不同的方式协作和分析数据,从而实现更好.更快的决策.Amazon Simple Storage Service(amaz ...

  5. 上海上传数据重复-sftp端口关闭

    关键: (1) sftp的测试指令:sftp -oPort=2125 meituan@220.248.104.170 (2)让上海那边自己试了一下,也不行,他们自己重置了一下sftp的密码,我们可以登 ...

  6. 海量日志数据提取某日访问百度次数最多的那个IP的Java实现

    海量日志数据提取某日访问百度次数最多的那个IP的Java实现 前几天在网上看到july的一篇文章<教你如何迅速秒杀掉:99%的海量数据处理面试题>,里面说到百度的一个面试题目,题目如下: ...

  7. cmd窗口使用sftp命令非密钥和密钥登录SFTP服务器的两种方式

    cmd窗口使用sftp命令非密钥和密钥登录SFTP服务器的两种方式 一.在Windows环境下搭建SFTP服务器可参见http://www.cnblogs.com/Kevin00/p/6341295. ...

  8. R语言学习笔记(六): 列表及数据框的访问

    List R语言中各组件的名称叫做标签(tags),访问列表有3种方法: j$salary 通过标签名字访问,只要不引起歧义,可以只写出前几个字母. j[['sal']] 夹在两个中括号时引号里的标签 ...

  9. 中国联通改造 Apache DolphinScheduler 资源中心,实现计费环境跨集群调用与数据脚本一站式访问

    截止2022年,中国联通用户规模达到4.6亿,占据了全中国人口的30%,随着5G的推广普及,运营商IT系统普遍面临着海量用户.海量话单.多样化业务.组网模式等一系列变革的冲击. 当前,联通每天处理话单 ...

随机推荐

  1. Java学习:迭代器简介

    迭代器 java.util.Iterator接口:迭代器(对集合进行遍历) 有两个常用的方法 boolean hasNext() 如果仍有元素可以迭代,则返回 true. 判断集合中还有没有下一个元素 ...

  2. 这两个小技巧,让我的SQL语句不仅躲了坑,还提升了1000 倍

    原文: https://cloud.tencent.com/developer/article/1465618 本次来讲解与 SQL 查询有关的两个小知识点,掌握这些知识点,能够让你避免踩坑以及提高查 ...

  3. python中用分别用selenium、requests库实现Windows认证登录

    最近在搞单位的项目,实现python自动化,结果在第一步就把我给拒之门外,查资料问大佬,问我们开发人员,从周一折腾到周五才搞定了 接下给大家分享一下 项目背景:我们系统是基于Windows平台实现的, ...

  4. Lumen 使用事件需要注意的事项

    Lumen 版本 5.2 参考手册 laravel event 需要注意的事项 如果是第一次在lumen下使用事件,需要修改bootstrap\app.php文件 添加对EventServicePro ...

  5. Python pip安装第三方库的国内镜像

    Windows系统下,一般情况下使用pip在DOS界面安装python第三方库时,经常会遇到超时的问题,导致第三方库无法顺利安装,此时就需要国内镜像源的帮助了. 使用方法如下: 例如:pip inst ...

  6. Python进阶----索引原理,mysql常见的索引,索引的使用,索引的优化,不能命中索引的情况,explain执行计划,慢查询和慢日志, 多表联查优化

    Python进阶----索引原理,mysql常见的索引,索引的使用,索引的优化,不能命中索引的情况,explain执行计划,慢查询和慢日志, 多表联查优化 一丶索引原理 什么是索引:       索引 ...

  7. [Tools] 多媒体视频处理工具FFmpeg

    FFMpeg FFmpeg是一套可以用来记录.转换数字音频.视频,并能将其转化为流的开源计算机程序.采用LGPL或GPL许可证.它提供了录制.转换以及流化音视频的完整解决方案.它包含了非常先进的音频/ ...

  8. 时间格式在ios和安卓兼容性的问题:

    在做项目时,在时间显示上遇到一个问题,取后台返回的时间时,在ios手机上时间不显示,安卓手机正常,最后通过Vconsole工具发现,ios不能支持用“—”分割的时间,此外后台返回的时间格式为x年x月x ...

  9. 学习笔记之Python 3

    学习笔记之Python 3 教程 https://www.cnblogs.com/pegasus923/p/7624416.html 学习笔记之X分钟速成Python3 https://www.cnb ...

  10. tail: inotify cannot be used, reverting to polling: Too many open files

    tail -f catalina.out 出现警告: tail: inotify cannot be used, reverting to polling: Too many open files l ...