unFTP
When you need to FTP, but don't want to.
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 aFROM 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 asalpine
but using the debug build of unftp and adds tools like lftp and CurlFtpFS while also running as root.alpine-istio
: same asalpine
but with scuttle installed. For use together with Istio.alpine-istio-debug
: same as alpine-debug but with the additions ofalpine-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.