go-s3-fs

command module
v0.0.0-...-75cf87b Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 17, 2020 License: MIT Imports: 32 Imported by: 0

README

go-s3-fs

Simple auto-indexed fileserver using S3 as a backend. It is possible to use mTLS in the application layer, by adding certificate files before compiling. Additionally, it can be used as a private pypi server, as it will parse package publish requests made by pip or poetry.

Usage

The configurable variables are:

type Config struct {
	Key        string `envconfig:"SPACES_KEY" required:"true"`
	Secret     string `envconfig:"SPACES_SECRET" required:"true"`
	BucketName string `envconfig:"BUCKET_NAME" required:"true"`
	BasePath   string `envconfig:"BASE_PATH" default:"/"`
	Endpoint   string
	Region     string
	Port       string `default:"8080"`
}

To run locally, put these in an do.env file, or put them directly in the compose file. Files placed in /static will be baked into the compiled binary. If you wish to use mTLS in the application layer, you can place files certificate files client-ca.pem, key.pem, cert.pem in this folder.

Then launch the server locally with

docker-compose up -d --build

You can create an arm-based image with

make build-amd64

A sample Kubernetes .yaml stack is found in /k8s.

Setup private Pypi server

Publish packages (with poetry)

Add a private repository. See here for more information:

poetry config repositories.eol http://localhost:8080

To publish a package with poetry to the configured repository

cd my-python-package
poetry publish --repository eol --build

If you use mTLS you can supply the client certificate

poetry config certificates.eol.client-cert /path/to/cert.pem

The required format is PEM with both the certificate and private key in a single file.

Install packages (with pip)

Download packages from official pypi and private repository.

pip install --trusted-host localhost:8080 --extra-index-url http://localhost:8080 -r requirements.txt

Note the required format for the client certificate (like above):

Allow poetry to resolve dependencies for you packages

You propably want to add your published package to some pyproject.toml file, but this requires that poetry knows about your private repository and has access to it.

To enable this, you add your repository to the .toml file like so:

[[tool.poetry.source]]
name = "eol"
url = "http://localhost:8080"

If you use mTLS then poetry also needs to know your client certificates:

poetry config certificates.eol.client-cert /path/to/client.pem

It is now possible to write

poetry add MY-AWSOME-PACKAGE

and poetry will perform dependency resolution based on the dependency version ranges in your published package.

TODO

  • Refactor codebase.

  • minio.io integration in docker-compose setup

  • Use some structured logging library

    • Rework log messages. Use more key/values
  • Prometheus instrumentation

  • Use golanglint.ci

  • Enable uploads from pypi. They send multipart forms to root "/" on a post. Parse and uplaod this to s3.

  • Test mTLS/client-cert authentication with pip install and poetry publish

  • Dockerfile

    • Embed files into binary (favicon + certificates)
  • Docker compose

  • Create Kubernetes yaml (w/ istio)

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis
libraries
box

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL