Skip to content

Commit

Permalink
Legg inn GITHUB_PAT i docker image som secret (#44)
Browse files Browse the repository at this point in the history
For å kunne kjøre uten api-feil fra github.

- Oppdaterte i tillegg readme med seksjon om docker, og samkjørte de to readme-filene.
- La inn en liten docker-compose-fil.
  • Loading branch information
arnfinn authored Oct 2, 2024
1 parent f55507a commit 4c22eb9
Show file tree
Hide file tree
Showing 5 changed files with 84 additions and 25 deletions.
1 change: 1 addition & 0 deletions .github/workflows/docker.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ jobs:
- name: Build package (tarball)
run: R CMD build .
- name: Lint Dockerfile
continue-on-error: true
uses: hadolint/hadolint-action@v3.1.0
with:
dockerfile: "Dockerfile"
Expand Down
6 changes: 3 additions & 3 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
FROM rapporteket/base-r:4.2.2

LABEL maintainer "Arnfinn Hykkerud Steindal <arnfinn.hykkerud.steindal@helse-nord.no>"
LABEL maintainer="Arnfinn Hykkerud Steindal <arnfinn.hykkerud.steindal@helse-nord.no>"

LABEL no.rapporteket.cd.enable="true"

WORKDIR /app/R

# hadolint ignore=DL3010
COPY *.tar.gz .

RUN R -e "remotes::install_local(list.files(pattern = \"*.tar.gz\"))" \
RUN --mount=type=secret,id=GITHUB_PAT,env=GITHUB_PAT \
R -e "remotes::install_local(list.files(pattern = \"*.tar.gz\"))" \
&& rm ./*.tar.gz

EXPOSE 3838
Expand Down
50 changes: 38 additions & 12 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,9 @@
Beskrivelsen under er ikke nødvendigvis utfyllende og forutsetter kjennskap til RStudio og bruk av git og GitHub. Som en ekstra støtte anbefales [R pacakges](http://r-pkgs.had.co.nz/) av Hadley Wickham og spesielt [beskrivelsen av git og GitHub](http://r-pkgs.had.co.nz/git.html#git-rstudio).

## Prøv templatet
1. Installér pakken [rapRegTemplate](https://github.com/Rapporteket/rapRegTemplate) i RStudio (`devtools::install_github("Rapporteket/rapRegTemplate")`)
1. Installér pakken [rapRegTemplate](https://github.com/Rapporteket/rapRegTemplate) i RStudio (`remotes::install_github("Rapporteket/rapRegTemplate")`)
1. Hent ned prosjektet [rapRegTemplate](https://github.com/Rapporteket/rapRegTemplate) til RStudio (for mer info, se [her](https://support.rstudio.com/hc/en-us/articles/200526207-Using-Projects))
1. Åpne fila inst/shinyApps/app1/ui.R og start Shiny-applikasjonen ("Run App")
1. Åpne fila R/ui.R og start Shiny-applikasjonen ("Run App")
1. Navigér i applikasjonen for å se på struktur og farger (innhold mangler)

## Valgfritt: lag ditt eget prosjekt basert på templatet
Expand All @@ -34,7 +34,7 @@ Denne delen er satt som valgfri men kan likevel være relevant, særlig om det e
### Alternativ 1: med Docker for Rapporteket
1. Åpne fila R/GetRegData.R
1. Se på de tre delene av funksjonen som definerer registernavn og sql-spørringen samt den som bruker de to forrige til å hente data (og som returnerer ei dataramme fra funksjonen)
1. Sjekk at egen konfigurasjon (i fila /home/rstudio/rap_config) er i henhold til det datagrunnlaget som er gjort tilgjengelig
1. Sjekk at egen konfigurasjon (i mappen /home/rstudio/rap_config) er i henhold til det datagrunnlaget som er gjort tilgjengelig
1. Endre i SQL-spørringen slik at den er i henhold til datagrunnlaget som ønskes benyttet
1. Prøv funksjonen fra kommandolinja (Console i RStudio), _e.g._ `df <- getRegData("navn_på_register")`
1. Sjekk at du får returnert ei dataramme med X observasjoner for Y variabler, _e.g._ `attributes(df)`
Expand All @@ -49,30 +49,30 @@ Denne delen er satt som valgfri men kan likevel være relevant, særlig om det e
Utgangspunket for de neste stegene er bruk av det innebygde datasettet "mtcars", jf. "Alternativ 2" over.

1. I shiny-applikasjonen, naviger til arkfanen "Figur og tabell"
1. Åpne fila inst/shinyApps/app1/ui.R
1. Åpne fila R/ui.R
1. Bla ned til linja `tabPanel("Figur og tabell"`
1. Kommenter inn linjene under, lagre fila og last applikasjonen på nytt ("Reload App")
1. Sjekk at det er kommet inn GUI-elementer i arkfanen "Figur og tabell" som før var tom
1. Prøv gjerne de brukervalg som er i venstre kolonne
1. Oppgave: gjør endringer i inst/shinyApps/app1/ui.R (på de linjene som nettopp er kommentert inn) slik at maks antall grupper endres fra 10 til 12 i applikasjonen
1. Oppgave: gjør endringer i R/ui.R (på de linjene som nettopp er kommentert inn) slik at maks antall grupper endres fra 10 til 12 i applikasjonen

## Lag innhold i Shiny-applikasjonen, steg 2
1. Ãpne fila inst/shinyApps/app1/server.R
1. Åpne fila R/server.R
1. Bla ned til kommentaren `# Last inn data` og kommenter inn linja under
1. Bla videre ned til kommentaren `# Figur og tabell` og kommenter inn de linjene som ligger under `## Figur` og `## Tabell`, hhv
1. Sjekk at det er samsvar mellom id-ene definert i inst/shinyApps/app1/ui.R og de datastrukturene (`output$distPlot` og `output$distTable`) du nå har definert i inst/shinyApps/app1/server.R
1. Sjekk at det er samsvar mellom id-ene definert i R/ui.R og de datastrukturene (`output$distPlot` og `output$distTable`) du nå har definert i R/server.R
1. Se at `regData` gis inn til de funksjoner som lager figur og tabell, hhv
1. Se også at de samme funksjonene tar i mot de brukervalg som er definert i inst/shinyApps/app1/ui.R (`input$var` og `input$bins`)
1. Se også at de samme funksjonene tar i mot de brukervalg som er definert i R/ui.R (`input$var` og `input$bins`)
1. Valgfritt: ta en titt på funksjonen som lager innholdet i figur og tabell: `?makeHist`
1. Lagre fila, start applikasjonen på nytt og sjekk at figur og tabell er på plass og at disse reagerer på ulike brukervalg
1. Oppgave A: lag en ny arkfane "Sammendrag" (etter "Figur" og "Tabell") ved å legge til kode i inst/shinyApps/app1/ui.R
1. Oppgave B: fyll "Sammendrag" med en tabell som viser `summary` av valgt variabel ved å legge til kode i inst/shinyApps/app1/server.R
1. Oppgave A: lag en ny arkfane "Sammendrag" (etter "Figur" og "Tabell") ved å legge til kode i R/ui.R
1. Oppgave B: fyll "Sammendrag" med en tabell som viser `summary` av valgt variabel ved å legge til kode i R/server.R

Tips til oppgave B:

```r
## Sammendrag
output$distSummary <- renderTable({
output$distSummary <- shiny::renderTable({
as.data.frame(sapply(regData, summary))[input$var]
}, rownames = TRUE)
```
Expand All @@ -84,7 +84,7 @@ Bruk samme tilnærming som over, men for "Samlerapport". Her er det en del nye e
- funksjonalitet for nedlasting av rapporten

## Lag innhold i Shiny-applikasjonen, steg 4
Denne delen forutsetter bruk av [Docker for Rapporteket](https://github.com/Rapporteket/docker) eller tilsvarende utviklingsmiljø¸ som "simulerer" Rapporteket. Her skal hver enkelt bruker kunne bestille rutinemessig tilsending per epost av gitte rapporter, eksempelvis slik som samlerapporten over med predefinerte verdier for "Variabel" og "Antall grupper". Tilnærmingen introduserer noen nye elementer, slik som:
Denne delen forutsetter bruk av [Docker for Rapporteket](https://github.com/Rapporteket/docker) eller tilsvarende utviklingsmiljø som "simulerer" Rapporteket. Her skal hver enkelt bruker kunne bestille rutinemessig tilsending per epost av gitte rapporter, eksempelvis slik som samlerapporten over med predefinerte verdier for "Variabel" og "Antall grupper". Tilnærmingen introduserer noen nye elementer, slik som:

- reaktive verdier
- lagring av innstillinger som er "varige" også etter at appliksjonen er avsluttet
Expand All @@ -104,3 +104,29 @@ NB Ved etablering av et nøkkelpar for bruk av Secure Shell (ssh) i kommunikasjo
1. Om du ikke allerede har gjort det, bli medlem av organisasjonen Rapporteket på GitHub
1. Under din egen side på GitHub, opprett et Repository med navn tilsvarende din egen pakke (_e.g._ "testRegister")
1. I RStudio, push pakken til ditt nye Repository på GitHub

## Valgfritt: bygg docker image lokalt

For å bygge og kjøre docker image lokalt kan man gjøre følgende:

1. Bygg pakken til en `tar.gz`-fil
```sh
R CMD build .
```
2. Lag Github Personal Access Token. Dette kan enten gjøres direkte på github (https://github.com/settings/tokens) eller gjennom R (`usethis::create_github_token()`). Det tryggeste er å *ikke* gi den noe særlig med rettigheter (kun lese). Vi lager og bruker en token for å ikke få feil fordi man har for mange api-kall til github.
3. Putt den i miljøvariablen `GITHUB_PAT`.
```sh
export GITHUB_PAT=ghp_ETT_ELLER_ANNET # token du nettop lagde
```
4. Bygg image med navn `some_image_name`. Bruker `--progress plain` for å få ut alt av `stdout`, og mater inn token som en hemmelighet
```sh
docker build -t some_image_name --progress plain --secret id=GITHUB_PAT .
```
5. Kjør image
```sh
# enten
docker run -p 3838:3838 some_image_name
# eller
docker compose up
```
6. Åpne siden http://localhost:3838/ og se resultatet
5 changes: 5 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
services:
app:
image: some_image_name
ports:
- 3838:3838
47 changes: 37 additions & 10 deletions inst/veiledning.Rmd
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ Beskrivelsen under er ikke nødvendigvis utfyllende og forutsetter kjennskap til
## Prøv templatet
1. Installér pakken [rapRegTemplate](https://github.com/Rapporteket/rapRegTemplate) i RStudio (`remotes::install_github("Rapporteket/rapRegTemplate")`)
1. Hent ned prosjektet [rapRegTemplate](https://github.com/Rapporteket/rapRegTemplate) til RStudio (for mer info, se [her](https://support.rstudio.com/hc/en-us/articles/200526207-Using-Projects))
1. Åpne fila inst/shinyApps/app1/ui.R og start Shiny-applikasjonen ("Run App")
1. Åpne fila R/ui.R og start Shiny-applikasjonen ("Run App")
1. Navigér i applikasjonen for å se på struktur og farger (innhold mangler)

## Valgfritt: lag ditt eget prosjekt basert på templatet
Expand All @@ -33,7 +33,7 @@ Denne delen er satt som valgfri men kan likevel være relevant, særlig om det e
### Alternativ 1: med Docker for Rapporteket
1. Åpne fila R/GetRegData.R
1. Se på de tre delene av funksjonen som definerer registernavn og sql-spørringen samt den som bruker de to forrige til å hente data (og som returnerer ei dataramme fra funksjonen)
1. Sjekk at egen konfigurasjon (i fila `r Sys.getenv("R_RAP_CONFIG_PATH")`) er i henhold til det datagrunnlaget som er gjort tilgjengelig
1. Sjekk at egen konfigurasjon (i mappen /home/rstudio/rap_config) er i henhold til det datagrunnlaget som er gjort tilgjengelig
1. Endre i SQL-spørringen slik at den er i henhold til datagrunnlaget som ønskes benyttet
1. Prøv funksjonen fra kommandolinja (Console i RStudio), _e.g._ `df <- getRegData("navn_på_register")`
1. Sjekk at du får returnert ei dataramme med X observasjoner for Y variabler, _e.g._ `attributes(df)`
Expand All @@ -47,25 +47,25 @@ Denne delen er satt som valgfri men kan likevel være relevant, særlig om det e
## Lag innhold i Shiny-applikasjonen, steg 1
Utgangspunket for de neste stegene er bruk av det innebygde datasettet "mtcars", jf. "Alternativ 2" over.

1. I shiny-applikasjonen, navigér til arkfanen "Figur og tabell"
1. Åpne fila inst/shinyApps/app1/ui.R
1. I shiny-applikasjonen, naviger til arkfanen "Figur og tabell"
1. Åpne fila R/ui.R
1. Bla ned til linja `tabPanel("Figur og tabell"`
1. Kommenter inn linjene under, lagre fila og last applikasjonen på nytt ("Reload App")
1. Sjekk at det er kommet inn GUI-elementer i arkfanen "Figur og tabell" som før var tom
1. Prøv gjerne de brukervalg som er i venstre kolonne
1. Oppgave: gjør endringer i inst/shinyApps/app1/ui.R (på de linjene som nettopp er kommentert inn) slik at maks antall grupper endres fra 10 til 12 i applikasjonen
1. Oppgave: gjør endringer i R/ui.R (på de linjene som nettopp er kommentert inn) slik at maks antall grupper endres fra 10 til 12 i applikasjonen

## Lag innhold i Shiny-applikasjonen, steg 2
1. Åpne fila inst/shinyApps/app1/server.R
1. Åpne fila R/server.R
1. Bla ned til kommentaren `# Last inn data` og kommenter inn linja under
1. Bla videre ned til kommentaren `# Figur og tabell` og kommenter inn de linjene som ligger under `## Figur` og `## Tabell`, hhv
1. Sjekk at det er samsvar mellom id-ene definert i inst/shinyApps/app1/ui.R og de datastrukturene (`output$distPlot` og `output$distTable`) du nå har definert i inst/shinyApps/app1/server.R
1. Sjekk at det er samsvar mellom id-ene definert i R/ui.R og de datastrukturene (`output$distPlot` og `output$distTable`) du nå har definert i R/server.R
1. Se at `regData` gis inn til de funksjoner som lager figur og tabell, hhv
1. Se også at de samme funksjonene tar i mot de brukervalg som er definert i inst/shinyApps/app1/ui.R (`input$var` og `input$bins`)
1. Se også at de samme funksjonene tar i mot de brukervalg som er definert i R/ui.R (`input$var` og `input$bins`)
1. Valgfritt: ta en titt på funksjonen som lager innholdet i figur og tabell: `?makeHist`
1. Lagre fila, start applikasjonen på nytt og sjekk at figur og tabell er på plass og at disse reagerer på ulike brukervalg
1. Oppgave A: lag en ny arkfane "Sammendrag" (etter "Figur" og "Tabell") ved å legge til kode i inst/shinyApps/app1/ui.R
1. Oppgave B: fyll "Sammendrag" med en tabell som viser `summary` av valgt variabel ved å legge til kode i inst/shinyApps/app1/server.R
1. Oppgave A: lag en ny arkfane "Sammendrag" (etter "Figur" og "Tabell") ved å legge til kode i R/ui.R
1. Oppgave B: fyll "Sammendrag" med en tabell som viser `summary` av valgt variabel ved å legge til kode i R/server.R

Tips til oppgave B:
```{r eval=FALSE}
Expand Down Expand Up @@ -102,3 +102,30 @@ NB Ved etablering av et nøkkelpar for bruk av Secure Shell (ssh) i kommunikasjo
1. Om du ikke allerede har gjort det, bli medlem av organisasjonen Rapporteket på GitHub
1. Under din egen side på GitHub, opprett et Repository med navn tilsvarende din egen pakke (_e.g._ "testRegister")
1. I RStudio, push pakken til ditt nye Repository på GitHub

## Valgfritt: bygg docker image lokalt

For å bygge og kjøre docker image lokalt kan man gjøre følgende:

1. Bygg pakken til en `tar.gz`-fil
```sh
R CMD build .
```
2. Lag Github Personal Access Token. Dette kan enten gjøres direkte på github (https://github.com/settings/tokens) eller gjennom R (`usethis::create_github_token()`). Det tryggeste er å *ikke* gi den noe særlig med rettigheter (kun lese). Vi lager og bruker en token for å ikke få feil fordi man har for mange api-kall til github.
3. Putt den i miljøvariablen `GITHUB_PAT`.
```sh
export GITHUB_PAT=ghp_ETT_ELLER_ANNET # token du nettop lagde
```
4. Bygg image med navn `some_image_name`. Bruker `--progress plain` for å få ut alt av `stdout`, og mater inn token som en hemmelighet
```sh
docker build -t some_image_name --progress plain --secret id=GITHUB_PAT .
```
5. Kjør image
```sh
# enten
docker run -p 3838:3838 some_image_name
# eller
docker compose up
```
6. Åpne siden http://localhost:3838/ og se resultatet

0 comments on commit 4c22eb9

Please sign in to comment.