17 releases (5 stable)
1.1.0 | Oct 3, 2024 |
---|---|
1.0.3 | Sep 16, 2024 |
0.6.0 | Jun 21, 2024 |
0.5.2 | Jan 16, 2024 |
0.2.3 | Dec 1, 2023 |
#211 in HTTP server
125KB
3K
SLoC
faucet
Scale, deploy and route Plumber APIs and Shiny applications with ease and efficiency.
Summary
Welcome to faucet, the most feature complete Shiny Application and Plumber API deployment platform. faucet features load balancing, routing, logging, replication, and more all in one place; unifying your workflow for deploying R based applications.
Features
-
High Performance: faucet is designed with speed in mind, leveraging Rust's performance benefits to ensure your R applications run smoothly and efficiently.
-
Load Balancing: Choose between Round Robin and IP Hash load balancing strategies to distribute incoming requests among multiple instances, optimizing resource utilization.
-
Replicas: Easily scale your Plumber APIs and Shiny Applications by running multiple replicas, allowing for improved performance and increased availability.
-
Simplified Deployment: faucet simplifies the deployment process, making it a breeze to get your R applications up and running quickly.
-
Asynchronous & Concurrent: faucet leverages asynchronous and concurrent processing, ensuring optimal utilization of resources and responsive handling of requests.
-
Routing: Run multiple Shiny Applications, Plumber APIs, Quarto Documents on a single server with our easy to configure router.
Usage
Get some help
To display the help message, run the following command:
faucet --help
Start a Plumber API
To start a plumber API, you will simply need to specify the directory containing the 'plumber.R'
file. faucet will automatically detect the file and start the API.
faucet start --dir /path/to/plumber/api
The server will automatically listen on port 3838
by default. To change the host and port, use the --host
flag to specify the socket address to bind to the service.
faucet start --dir /path/to/plumber/api --host 0.0.0.0:3000
By default faucet will start as many workers as there are logical cores on the machine. To specify the number of workers, use the --workers
flag.
faucet start --dir /path/to/plumber/api --workers 4
Start a Shiny Application
To start a Shiny Application, you will simply need to specify the directory containing the 'app.R'
file. faucet will automatically detect the file and start the application.
faucet start --dir /path/to/shiny/app
The server will automatically listen on port 3838
by default. To change the host and port, use the --host
flag to specify the socket address to bind to the service.
faucet start --dir /path/to/shiny/app --host 0.0.0.0:3000
By default faucet will start as many workers as there are logical cores on the machine. To specify the number of workers, use the --workers
flag.
faucet start --dir /path/to/shiny/app --workers 4
Note: On Shiny applications, faucet will be forced to use IP Hash load balancing. This is because Shiny applications require a persistent connection between the client and the server. If Round Robin load balancing is used, the client will be redirected to a different instance on each request, causing the connection to be lost.
Pick a Load Balancing Strategy for Plumber APIs
faucet supports two load balancing strategies for Plumber APIs: Round Robin and IP Hash.
By default, faucet will use Round Robin load balancing. To change the strategy, use the --strategy
flag.
faucet start --dir /path/to/plumber/api --strategy ip-hash
Explicitly Set the Type of Application
By default, faucet will try to detect the type of application based on the files in the specified directory. If you want to explicitly set the type of application, use the --type
flag.
For Plumber applications:
faucet start --dir /path/to/plumber/api --type plumber
For Shiny applications:
faucet start --dir /path/to/shiny/app --type shiny
For Quarto applications:
faucet start --qmd /path/to/example.qmd --type quarto-shiny
If you are working with a Quarto document, it must be explicitly specified using the --qmd
flag and the --type quarto-shiny
option.
With Nginx / Reverse Proxy
If you want to run multiple faucet instances behind a reverse proxy, or you want to enable HTTPS,
you may use Nginx or any other reverse proxy. However, to make sure faucet correctly detects the
client IP address, you will need to set the X-Forwarded-For
header or the X-Real-IP
header.
Nginx
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://...;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
...
}
}
Additionally, when running faucet, you will need to set the -i
/ --ip-from
flat to either x-forwarded-for
or x-real-ip
depending on which header you
set in Nginx.
faucet start --dir /path/to/plumber/api --ip-from x-forwarded-for
Installation
Option 1: Binary Download (Linux)
Download the latest release of faucet for Linux from the GitHub Releases page. This should work with most Linux distributions.
FAUCET_VERSION="v1.1.0"
wget https://github.com/ixpantia/faucet/releases/download/$FAUCET_VERSION/faucet-x86_64-unknown-linux-musl -O faucet
# Make the binary executable
chmod +x faucet
# Move the binary to a directory in your PATH (e.g., user local bin)
mv faucet ~/.local/bin
Option 2: Install with Cargo (Linux, macOS, Windows)
Install faucet with Cargo, Rust's package manager.
- Install Rust by following the instructions here.
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
- Install faucet with Cargo.
cargo install faucet-server --version ^1.1
Option 3: Build from Source (Linux, macOS, Windows)
- Install Rust by following the instructions here.
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
- Clone the faucet repository.
git clone https://github.com/ixpantia/faucet.git
- Build faucet with Cargo.
cargo install --path .
Contributing
If you want to contribute to faucet
please read the
CONTRIBUTING.md document.
Dependencies
~10–17MB
~224K SLoC