• Stars
    star
    267
  • Rank 153,621 (Top 4 %)
  • Language
    HTML
  • License
    Apache License 2.0
  • Created over 5 years ago
  • Updated 3 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A FTP(S) server with a couple of twists written in Rust. Follow and talk to us on https://t.me/unftp. Docs on https://unftp.rs

unFTP

Crate Version Build Status Docker Pulls Follow on Telegram

When you need to FTP, but don't want to.

logo

Website | Docs | libunftp

unFTP is an FTP(S) server written in Rust and built on top of libunftp and the Tokio asynchronous run-time. It is unlike your normal FTP server in that it provides:

  • Configurable Authentication (e.g. Anonymous, PAM or a JSON file).
  • Configurable storage back-ends (e.g. GCS or filesystem)
  • An HTTP server with health endpoints for use for example in Kubernetes for readiness and liveness probes.
  • Integration with Prometheus for monitoring.
  • A proxy protocol mode for use behind proxies like HA Proxy and Nginx.
  • Structured logging and the ability to ship logs to a Redis instance.

With unFTP, you can present RFC compliant FTP(S) to the outside world while freeing yourself to use modern APIs and techniques on the inside of your perimeter.

Installation and Usage

User documentation are available on our website unftp.rs

Docker image

The project contains templated Dockerfiles . To get a list of available commands, run:

make help

We offer 3 different options for building an unFTP docker image:

  • scratch: builds the binary in rust:slim and deploys in a FROM scratch image. The unFTP binary is statically linked using musl libc.
  • alpine (default): builds in rust:slim and deploy in alpine. This image is built with musl instead of a full-blown libc. The unFTP binary is statically linked using musl libc.
  • alpine-debug: same images as alpine but using the debug build of unftp and adds tools like lftp and CurlFtpFS while also running as root.
  • alpine-istio: same as alpine but with scuttle installed. For use together with Istio.
  • alpine-istio-debug: same as alpine-debug but with the additions of alpine-istio.

To build the alpine docker image:

make docker-image-alpine

Alternatively you can download pre-made images from docker hub.

Enabling tokio-console

You can use tokio-console to analyze async tasks running in unFTP. To do this you need to compile a build or run with the tokio_console feature enabled while also enabling the tokio_unstable cfg.

For example:

RUSTFLAGS="--cfg tokio_unstable" cargo build --features tokio_console

or:

RUSTFLAGS="--cfg tokio_unstable" cargo run --features tokio_console -- -vv

unFTP will listen on default port 6669 for connections from tokio-console.

Getting help and staying informed

Support is given on a best effort basis. You are welcome to engage us on the discussions page or create a Github issue.

You can also follow news and talk to us on Telegram

License

You're free to use, modify and distribute this software under the terms of the Apache-2.0 license.

See also

More Repositories

1

libunftp

Extensible, async, cloud orientated FTP(S) server library and the core of unFTP: https://github.com/bolcom/unFTP. Follow up and talk to us on https://t.me/unftp
Rust
182
star
2

serenade

Session-based recommender system: Serenade
Rust
76
star
3

hive_compared_bq

hive_compared_bq compares/validates 2 (SQL like) tables, and graphically shows the rows/columns that are different.
Python
28
star
4

avro-schema-viewer

Visualizer for Avro Schemas (.avsc) - Try it yourself at:
TypeScript
28
star
5

bol-technical-assignments

bol.com technical recruitment assignments
Java
10
star
6

prometheus-remote-storage-adapter

Go
8
star
7

terraform-provider-calico

Terraform Provider for Calico
Go
5
star
8

local-prometheus-grafana

5
star
9

mesos_metrics

Go definitions for the Mesos `{master}:5050/metrics/snapshot` and `{slave}:5051/metrics/snapshot` endpoints
Go
4
star
10

cryptvault

Generic, versioned crypto implementation
Java
3
star
11

muts

Go package with utilities to create shell and make-like files in Go
Go
3
star
12

serenade-experiments-sigmod

Rust
2
star
13

docker-for-testers

Introductory Docker training, focused on use on your local machine
CSS
2
star
14

recon

Python
1
star
15

k8s-scheduler-tester

Active monitoring of Kubernetes scheduler health, with Prometheus metrics endpoint.
Python
1
star
16

fleet-java-api

Java api using fleet REST api https://github.com/coreos/fleet
Java
1
star
17

log15-redis-handler

handler for the log15 package that sends JSON messages in Logstash format to a Redis queue
Go
1
star
18

student-dojo

Java Dojo used for student workshop @ bol.com
Java
1
star
19

stash-java-client-cd

Java Client for Atlassian Stash
Java
1
star
20

jira-java-client

Java Client for Atlassian Jira
Java
1
star
21

spring-data-mongodb-rollback

A distributed, optimistic, cross-microservice/generic transaction engine for spring-data & mongodb
Java
1
star
22

parsival

OpenAPI differ and backwards compatibility checker
Kotlin
1
star