使用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"
- s3-sftp-proxy 项目说明
项目fork 了https://github.com/moriyoshi/s3-sftp-proxy 添加了go mod 的支持同时添加了docker 镜像
go mod 转换处理
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 访问的更多相关文章
- streamsets 集成 minio s3测试
具体streamsets crate 集成可以参考 streamsets crate 以下文档只关注minio 集成的配置 minio 服务 搭建 具体搭建参考: https://www.cnblog ...
- k8s helm 私服chartmuseum minio s3 存储配置
1. 安装minio 使用docker 安装 参考项目 https://github.com/rongfengliang/mino-thumbor-openresty 备注: 因为是一个集成项目可能会 ...
- cronicle minio s3 存储配置集成
cronicle 后端存储是可配置的 ,通过使用不同的存储配置,我们可以解决多实例部署以及数据共享的问题 cronicle 的后端存储模型,设计的特别方便,包含了基于文件的,基于s3 的,同时我们也可 ...
- 使用Apache Hudi + Amazon S3 + Amazon EMR + AWS DMS构建数据湖
1. 引入 数据湖使组织能够在更短的时间内利用多个源的数据,而不同角色用户可以以不同的方式协作和分析数据,从而实现更好.更快的决策.Amazon Simple Storage Service(amaz ...
- 上海上传数据重复-sftp端口关闭
关键: (1) sftp的测试指令:sftp -oPort=2125 meituan@220.248.104.170 (2)让上海那边自己试了一下,也不行,他们自己重置了一下sftp的密码,我们可以登 ...
- 海量日志数据提取某日访问百度次数最多的那个IP的Java实现
海量日志数据提取某日访问百度次数最多的那个IP的Java实现 前几天在网上看到july的一篇文章<教你如何迅速秒杀掉:99%的海量数据处理面试题>,里面说到百度的一个面试题目,题目如下: ...
- cmd窗口使用sftp命令非密钥和密钥登录SFTP服务器的两种方式
cmd窗口使用sftp命令非密钥和密钥登录SFTP服务器的两种方式 一.在Windows环境下搭建SFTP服务器可参见http://www.cnblogs.com/Kevin00/p/6341295. ...
- R语言学习笔记(六): 列表及数据框的访问
List R语言中各组件的名称叫做标签(tags),访问列表有3种方法: j$salary 通过标签名字访问,只要不引起歧义,可以只写出前几个字母. j[['sal']] 夹在两个中括号时引号里的标签 ...
- 中国联通改造 Apache DolphinScheduler 资源中心,实现计费环境跨集群调用与数据脚本一站式访问
截止2022年,中国联通用户规模达到4.6亿,占据了全中国人口的30%,随着5G的推广普及,运营商IT系统普遍面临着海量用户.海量话单.多样化业务.组网模式等一系列变革的冲击. 当前,联通每天处理话单 ...
随机推荐
- gitblit搭建
gitblit 1.8.0 + java7 下载安装java7 https://download.oracle.com/otn/java/jdk/7u80-b15/jdk-7u80-windows- ...
- php 逻辑题
越长大约发现,高中学的数学,都还给了数学老师,一点都没有留住. 最近遇到了一个 逻辑题,然后想了半天,后来做出来了,我就发现了,我可能是一个假的理科生.很简单的样子. 废话不说,看看这道题吧. /** ...
- 比较器Comparable和Comparator
在java中要实现自定义类的比较,提供了以下两个接口: Comparable(内部排序) int compareTo(Object obj);返回值为int,默认升序排序 Comparator(外部排 ...
- 【转】Apache的架构师们遵循的30条设计原则
本文作者叫Srinath,是一位科学家,软件架构师,也是一名在分布式系统上工作的程序员. 他是Apache Axis2项目的联合创始人,也是Apache Software基金会的成员. 他是WSO2流 ...
- Entity Framework 学习系列(3) - MySql Code First 开发方式+数据迁移
目录 # 写在前面 一.开发环境 二.创建项目 三.安装程序包 四.创建模型 五.连接字符串 六.编辑程序 七.数据迁移 写在最后 # 写在前面 这几天,一直都在学习Entity Framework ...
- (原创)C#操作MYSQL数据库
应用程序对数据库的操作都是只有4个:增,删,改,查. 只有”查”的操作需要使用适配器来存储查询得到的数据.其它3个操作不需要用到适配器. 不同的数据库有共同操作方法:都要建立连接对象,连接对象要有连接 ...
- c++关于IOCP(完成端口)的服务器开发
本文转载,以便更好的学习C++的服务器开发 1.对IOCP的理解,转载地址 2.在C++中对IOCP的实现,转载地址 注:其实在.net中 ,Socket的服务器开发中,SocketAsyncEven ...
- C# 获取系统SysWOW64的方法
string path = Environment.GetFolderPath(Environment.SpecialFolder.SystemX86); 64位系统获取的SysWOW64 ,32位获 ...
- 基于elementUI创建的vue项目
这周对公司的内容使用vue进行重构,所以记录一下开始项目的过程 下载elementUI: 项目文件夹中在命令行中输入:npm install elementui -s 下载完成后在 main.js 中 ...
- PHP获取当前脚本的绝对路径方法
一.dirname(__FILE__) 比如:a.php所在路径为/var/www/web/a.php dirname(__FILE__)返回的则是/var/www/web/ 二.__DIR__ a. ...