-
Notifications
You must be signed in to change notification settings - Fork 4
/
block_3_session_1_terminology_n_context.qmd
324 lines (149 loc) · 5.22 KB
/
block_3_session_1_terminology_n_context.qmd
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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
---
title: "Hacking for Science"
subtitle: "Block 3, Session 1: A Glimpse of DevOps"
author: "Matt Bannert ([@whatsgoodio](https://twitter.com/whatsgoodio))"
format: revealjs
chalkboard: true
echo: true
footer: "Hacking for Science by Dr. Matthias Bannert is licensed under [CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/?ref=chooser-v1)"
---
<style>
.small{
font-size:.5em;
}
.smaller{
font-size:.7em;
}
</style>
## [review](https://rse-book.github.io/stack-developer-toolkit.html) {.center}
## Today's Goals {.center}
- Catch a Glimpse of Development and Operations
- Terminology & Context
- Get an idea of apt infrastructure for team projects
## {.center}
![](img/server-thinking.jpg){fig-align="center"}
## {.center}
![](img/listen.jpg){fig-align="center"}
## {.center}
![](img/cloud.png){fig-align="center"}
## {.center}
![](img/inefficient.png){fig-align="center"}
## Resources -- <br> And What to Look For ... {.center}
## Size {.center}
## {.center}
![](img/overkill.png){fig-align="center"}
## {.center}
![](img/overload.jpg){fig-align="center"}
## Persistency
![](img/quit_py.png){fig-align="center"}
![](img/quit_r.png){fig-align="center"}
## Availability & Exposure {.center}
## Data Science Webserver Example
![](img/server-setup1.jpg){fig-align="center"}
##
![](img/server-setup2.jpg){fig-align="center"}
## Data Science Webserver Example
![](img/server-setup3.jpg){fig-align="center"}
## Common Servers
```{r, echo=FALSE}
library(dplyr)
library(kableExtra)
tri <- tribble(
~ name, ~ "common ports", ~ description ,
"Apache", "80, 443", "Basic Webserver",
"nginx", "80, 443", "Webserver, Reverse Proxy",
"Postgres", "5432", "Database",
"RStudio Server", "8787", "RStudio made available through a web browser",
"Shiny Server", "3838", "A webserver for shiny apps"
)
kable(tri)
```
## Reproducibility {.center}
![](img/version_error.png)
# Hosting Options
## {.center}
>Do not forget that hosting requires a development strategy.
## On Premise (in house)
- [ETH Gitlab](https://gitlab.ethz.ch/)
- [Gitea](https://gitea.io/en-us/)
- [shiny server](https://rstudio.com/products/shiny/shiny-server/)
## SaaS (software as a service) {.center}
## SaaS (software as a service) / Serverless
:::: {.columns}
::: {.column width="40%" .smaller}
### Examples
- [Overleaf](https://www.overleaf.com/)
- [shinyapps.io](https://www.shinyapps.io/)
- [Google NLP](https://cloud.google.com/natural-language/#demo)
:::
::: {.column width="60%" .smaller}
### Advantages
- Hassle free (Hosting)
- Onboarding of non-hackers easier
- transparent pricing models
### Disadvantages
- Blackbox
- Vendor Lock-in depending on pricing model and software
- Relatively Expensive per Unit
:::
::::
## The Cloud {.center}
## Common Cloud Products
### Basic VMs
e.g., Google Compute Engine, Microsoft Azure Cloud VMs
### Single Purpose Environments
Docker hosts, e.g., Google Kubernetes Engine, Azure Kubernetes Service (AKS)
### Ready Made Services
AI & machine learning products, e.g., Google Cloud AutoML, SQL Cloud Hosting
# Containers - Building Blocks of Modern Infrastructure
## {.center}
>A container is a standard unit of software that packages up code and all its dependencies so the application runs quickly and reliably from one computing environment to another
*--docker.com, what is a container ?*
## Excursion: Docker in one Slide
- single purpose, application focused virtualization
- **images: blueprints** for **containers**
- **Registries**: store images
- Docker files are text based configs from which images are created.
- Images can be stacked, so we can build on existing images
- Docker containers run on a Docker Host / Docker Desktop or in Docker Cluster like Docker Swarm or Kubernetes.
## A Basic Docker File: R with Postgres Driver
```sh
FROM rocker/r-ver:4.2.0 as deps
RUN apt-get update && apt-get install -y \
libpq-dev \
libcurl4-openssl-dev \
libxml2-dev \
libssl1.0-dev \
libssh-dev
```
Start and log into the container...
```sh
# start the container in the background
docker run -it -d --name pgr_container pgr
# log into the running container, use bash
docker exec -it pgr_container /bin/bash
```
<!--
a docker solution without docker desktop
https://www.viget.com/articles/how-to-use-docker-on-os-x-the-missing-guide/
-->
## What Is Docker Good for? {.center}
## Test Stack, Conserve Setups {.center}
e.g., [PostgreSQL version on docker hub](https://hub.docker.com/_/postgres)
## Run Applications w/o Side Effects {.center}
## Develop @home, Run in the Cloud {.center}
## Two Docker Based Examples {.center}
## Shiny Server {.center}
```
docker run --rm -p 1234:3838 rocker/shiny
```
## Postgres Server
```
docker run --rm --name pg-docker -e POSTGRES_PASSWORD=postgres -d -p 1111:5432
-v local/path:/var/lib/postgresql/data postgres:11
```
-d: run as daemon, i.e., terminal window available
-e: pass on an environment parameter, in this case a password
-p: port forwarding: host port:docker port
-v: Mount for persistent storage
(!): To make the two containers talk to each other, [consider docker compose](https://rse-book.github.io/infrastructure.html#docker-compose-manage-multiple-containers).