do_provision {plumberDeploy} | R Documentation |
Provision a DigitalOcean plumber server
Description
Create (if required), install the necessary prerequisites, and
deploy a sample plumber application on a DigitalOcean virtual machine.
You may sign up for a Digital Ocean account
here.
You should configure an account ssh key with analogsea::key_create()
prior to using this method.
This command is idempotent, so feel free to run it on a single server multiple times.
Usage
do_provision(droplet, unstable = FALSE, example = TRUE, ...)
do_install_plumber(droplet, unstable, ...)
do_ip(droplet, path)
Arguments
droplet |
The DigitalOcean droplet that you want to provision
(see |
unstable |
If |
example |
If |
... |
Arguments passed into the |
path |
path to attach to the IP address before browsing. Should likely
start with a |
Details
Provisions a Ubuntu 20.04-x64 droplet with the following customizations:
A recent version of R installed
plumber installed globally in the system library
An example plumber API deployed at
/var/plumber
A systemd definition for the above plumber API which will ensure that the plumber API is started on machine boot and respawned if the R process ever crashes. On the server you can use commands like
systemctl restart plumber
to manage your API, orjournalctl -u plumber
to see the logs associated with your plumber process.The 'nginx“ web server installed to route web traffic from port 80 (HTTP) to your plumber process.
-
ufw
installed as a firewall to restrict access on the server. By default it only allows incoming traffic on port 22 (SSH) and port 80 (HTTP). A 4GB swap file is created to ensure that machines with little RAM (the default) are able to get through the necessary R package compilations.
Value
The DigitalOcean droplet
The URL to be browsed
Note
Please see https://github.com/sckott/analogsea/issues/205 in case
of an error by default do_provision
and an error of
"Error: Size is not available in this region."
.
Examples
## Not run:
auth = try(analogsea::do_oauth())
if (!inherits(auth, "try-error") &&
inherits(auth, "request")) {
analogsea::droplets()
droplet = do_provision(region = "sfo3", example = FALSE)
analogsea::droplets()
analogsea::install_r_package(droplet, c("readr", "remotes"))
do_deploy_api(droplet, "hello",
system.file("plumber", "10-welcome", package = "plumber"),
port=8000, forward=TRUE)
if (interactive()) {
utils::browseURL(do_ip(droplet, "/hello"))
}
analogsea::droplet_delete(droplet)
}
## End(Not run)