-
Notifications
You must be signed in to change notification settings - Fork 0
/
deploy_shinyserver.R
111 lines (75 loc) · 4.05 KB
/
deploy_shinyserver.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#############################################################
### EXAMPLE CODE TO PROGRAMATICALLY
### - CREATE A DIGITAL OCEAN (DO) CLOUD SERVER AND
### - DEPLOY YOUR DOCKER APP
### USING THE ANALOGSEA PACKAGE
#############################################################
# Initialize names -------------------------------------------------------
# Set the path to your app
your_path <- paste0(dirname(rstudioapi::getSourceEditorContext()$path), "/app")
# Set names stored at your client
your_client_keyname <- "test-keyname" # the name of the private key at your client
# Just choose some names that you like for stuff at the server
your_droplet_name <- "test-droplet" # this name will appear in your DO list of droplets
# Make connection to DO account -------------------------------------------
#install.packages("ssh")
#install.packages("analogsea")
library(ssh)
library(analogsea)
# Test your DO connection
analogsea::droplets()
# You are redirected to log into your DO account and authorize analoguesea
# If successful, you can now send the deployment commands to DO
# Create a Docker droplet -------------------------------------------------
# Do not forget to delete it with droplet_delete() when you're done
d <- docklet_create(name = your_droplet_name,
size = "s-1vcpu-1gb",
region = "ams3")
d <- droplet(d$id)
d
# Put OpenSSH private key in local directory ------------------------------
# The public portion of the standard SSH key is automatically deployed
# on the new server upon creation. This holds under the assumption that
# you already have a public/private key pair stored in your DO account.
# Otherwise, you have to create such a key pair yet.
# Now you have to make sure that the private portion of this standard key is
# stored in your local folder. Next, set the location of this folder in the
# loc_keyfile variable below.
# Note that the analogsea package assumes OpenSHH private key files.
# This is detailed in the help menu of ssh_connect (package: ssh).
# If you open your private key file in a text editor, the first line
# must be: -----BEGIN RSA PRIVATE KEY-----.
#
# To convert a Putty key (.ppk format), open it in the PuttyGen utility
# and go to Conversions -> Export OpenSSH.
#loc_keyfile = "C:\\Users\\USERNAME\\.ssh\\private.key"
# Spin up a Shiny server with an app (opens in default browser) -----------
##########################################################################
### SSH ISSUES:
### - https://github.com/ropensci/ssh/issues/24 ###
### - https://github.com/pachadotdev/analogsea/blob/master/R/docklet.R
##########################################################################
d %>% docklet_shinyapp(your_path, keyfile = ssh_home(your_client_keyname))
# Install the necessary R packages on the Docker droplet ------------------
# First, get the container ID
d %>% docklet_ps()
#Insert the container ID in the droplet_ssh commands below
droplet_ssh(d, paste0("docker exec 34e304af9eda R -e 'install.packages(\"shinycssloaders\")'"))
droplet_ssh(d, paste0("docker exec 34e304af9eda R -e 'install.packages(\"ggplot2\")'"))
# Stop containers running -------------------------------------------------
d %>% docklet_stop(container = c(
"34e304af9eda"
))
# Remove inactive containers ----------------------------------------------
d %>% docklet_rm(container = c(
"34e304af9eda"
))
# Delete the droplet alltogether ----------------------------------------
d %>% droplet_delete()
# References --------------------------------------------------------------
# - Analogsea package: https://github.com/sckott/analogsea
# - Example guide for deploying Plumber API to a DO droplet: https://www.rplumber.io/articles/hosting.html#digitalocean-1
# - Quickstart to connect to DO droplets: https://www.digitalocean.com/docs/droplets/quickstart/
# - How to set up new SSH key pairs: https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys--2
# - Which SSH keys are in your DO account: go to Settings > Security > SSH Keys
# - SSH client for R: https://cran.rstudio.com/web/packages/ssh/vignettes/intro.html