Shinyproxy: Shinyproxy๊ฐ€ ์ปจํ…Œ์ด๋„ˆ์— ์žˆ์„ ๋•Œ navbar.html ํŒŒ์ผ์„ ํŽธ์ง‘ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2020๋…„ 03์›” 19์ผ  ยท  8์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: openanalytics/shinyproxy

์—ฌ๋ณด์„ธ์š”!

ShinyProxy๊ฐ€ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋กœ ์‹คํ–‰ ์ค‘์ผ ๋•Œ navbar.html์„ ํŽธ์ง‘ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํŽธ์ง‘ํ•œ navbar.html์„ templates/fragments ๋””๋ ‰ํ† ๋ฆฌ์— ๋„ฃ์€ ๋‹ค์Œ /opt/shinyproxy/templates์— ๋ณต์‚ฌํ•˜๋ ค๊ณ  ํ–ˆ์ง€๋งŒ ์„œ๋ฒ„๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•ด๋„ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, "Sair"์— ๋Œ€ํ•ด "๋กœ๊ทธ์•„์›ƒ"์„ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

image


๋„์ปค ํŒŒ์ผ:

openjdk:8-jre ์—์„œ

์‹คํ–‰ mkdir -p /opt/shinyproxy/
์‹คํ–‰ wget https://www.shinyproxy.io/downloads/shinyproxy-2.3.0.jar -O /opt/shinyproxy/shinyproxy.jar
๋ณต์‚ฌ application.yml /opt/shinyproxy/application.yml
mkdir ํ…œํ”Œ๋ฆฟ ์‹คํ–‰
๋ณต์‚ฌ ํ…œํ”Œ๋ฆฟ/* /opt/shinyproxy/templates/
mkdir ํ…œํ”Œ๋ฆฟ/์กฐ๊ฐ ์‹คํ–‰
COPY ํ…œํ”Œ๋ฆฟ/์กฐ๊ฐ/* /opt/shinyproxy/templates/fragments/

WORKDIR /opt/shinyproxy/
CMD ["์ž๋ฐ”", "-jar", "/opt/shinyproxy/shinyproxy.jar"]


application.yml:

๋Œ€๋ฆฌ:
์ œ๋ชฉ: LicitaR
๋ฐฉ๋ฌธ ํŽ˜์ด์ง€: /
ํ…œํ”Œ๋ฆฟ ๊ฒฝ๋กœ: ./templates
ํฌํŠธ: 8080
์ธ์ฆ: ๋‹จ์ˆœ
๊ด€๋ฆฌ์ž ๊ทธ๋ฃน: ๊ด€๋ฆฌ์ž
์‚ฌ์šฉ์ž:

  • ์ด๋ฆ„: ์žญ
    ๋น„๋ฐ€๋ฒˆํ˜ธ: ๋น„๋ฐ€๋ฒˆํ˜ธ
    ๊ทธ๋ฃน: ๊ด€๋ฆฌ์ž
  • ์ด๋ฆ„: ์ œํ”„
    ๋น„๋ฐ€๋ฒˆํ˜ธ: ๋น„๋ฐ€๋ฒˆํ˜ธ
    ๋„์ปค:
    ๋‚ด๋ถ€ ๋„คํŠธ์›Œํ‚น: ์‚ฌ์‹ค
    ์ปจํ…Œ์ด๋„ˆ ๋„คํŠธ์›Œํฌ: dnv-net
    ๋ช…์„ธ์„œ:
  • ์•„์ด๋””: 01_์•ˆ๋…•ํ•˜์„ธ์š”
    ํ‘œ์‹œ ์ด๋ฆ„: Hello ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ
    ์„ค๋ช…: Shiny ์•ฑ์˜ ๊ธฐ๋ณธ์„ ๋ณด์—ฌ์ฃผ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜
    ์ปจํ…Œ์ด๋„ˆ cmd: ["R", "-e", "shinyproxy::run_01_hello()"]
    ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€: openanalytics/shinyproxy-demo
    ์ปจํ…Œ์ด๋„ˆ ๋„คํŠธ์›Œํฌ: "${proxy.docker.container-network}"
  • ์•„์ด๋””: ์˜ค์ผ๋Ÿฌ
    ํ‘œ์‹œ ์ด๋ฆ„: ์˜ค์ผ๋Ÿฌ ์ˆ˜
    ์ปจํ…Œ์ด๋„ˆ cmd: ["R", "-e", "shiny::runApp('/root/euler')"]
    ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€: ์˜ค์ผ๋Ÿฌ ๋„์ปค
    ์ปจํ…Œ์ด๋„ˆ ๋„คํŠธ์›Œํฌ: "${proxy.docker.container-network}"

๋ฒŒ์ฑ„ ๋ฐ˜์ถœ:
ํŒŒ์ผ:
/log/shinyproxy.log


๋‚ด๊ฐ€ ๋ญ”๊ฐ€ ์ž˜๋ชปํ•˜๊ณ  ์žˆ๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋„์™€์ฃผ์‹œ๊ฒ ์–ด์š”? ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

ํŒŒ์šธ๋กœ

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ด๋ฏธ์ง€๋ฅผ ๋‹ค์‹œ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

BTW, ๋‹น์‹ ์€ ํŒŒ์ผ์„ ๋ณต์‚ฌํ•ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค. ๋Œ€์‹  ํด๋”๋ฅผ ๋ณผ๋ฅจ์œผ๋กœ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฐ ์‹์œผ๋กœ ํŒŒ์ผ์„ ๋ณ€๊ฒฝํ•œ ํ›„ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ƒˆ๋กœ ๊ณ ์น˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  8 ๋Œ“๊ธ€

์ด๋ฏธ์ง€๋ฅผ ๋‹ค์‹œ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

BTW, ๋‹น์‹ ์€ ํŒŒ์ผ์„ ๋ณต์‚ฌํ•ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค. ๋Œ€์‹  ํด๋”๋ฅผ ๋ณผ๋ฅจ์œผ๋กœ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฐ ์‹์œผ๋กœ ํŒŒ์ผ์„ ๋ณ€๊ฒฝํ•œ ํ›„ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ƒˆ๋กœ ๊ณ ์น˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

@shrektan ๋‹ต๋ณ€ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

  1. ๋ณ€๊ฒฝ ํ›„ sudo docker-compose build ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์‹œ ๋งŒ๋“ค์—ˆ์ง€๋งŒ ์•„๋ฌด ๊ฒƒ๋„ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋งž์•„?

  2. ๋ณผ๋ฅจ์œผ๋กœ์„œ์˜ ํด๋”์— ๋Œ€ํ•ด ์˜ˆ๋ฅผ ๋“ค์–ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ์ €๋Š” ShinyProxy์˜ ์ƒˆ๋กœ์šด ์‚ฌ์šฉ์ž์ด๊ธฐ ๋•Œ๋ฌธ์— ์กฐ๊ธˆ ํ—ค๋งค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์ง€๊ธˆ์€ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์‹œ๊ฐ„์ด ์—†์ง€๋งŒ ํ”„๋กœ๋•์…˜ ์„ค์ •์„ ์Šคํฌ๋ฆฐ์ƒท์œผ๋กœ ๋ณด์—ฌ ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์›Œ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋„์ปค ํŒŒ์ผ

image

Docker ์ž‘์„ฑ YAML

image

ํด๋” ๊ตฌ์กฐ

image

@shrektan ๋„์™€ ์ฃผ์…”์„œ ์ •๋ง ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

1) docker-compose.yml์— '๋ณผ๋ฅจ'์„ ๋งŒ๋“ค๊ณ  ๋ง์”€ํ•˜์‹  ๋Œ€๋กœ Dockerfile์„ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค. ํŒŒ์ผ(admin, app, index, login)์€ ํŽ˜์ด์ง€๋ฅผ ์ƒˆ๋กœ๊ณ ์นจํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค(๋•๋ถ„์—). ๊ทธ๋Ÿฌ๋‚˜ sudo docker-compose build ๋ฅผ ์ž…๋ ฅํ•˜๊ณ  sudo docker-compose up -d shinyproxy ๋ช…๋ น์— "dnv_shinyproxy๊ฐ€ ์ตœ์‹  ์ƒํƒœ์ž…๋‹ˆ๋‹ค"๋ผ๊ณ  ํ‘œ์‹œ๋˜์–ด๋„ shinyproxy/application.yml์€ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‚˜๋Š” application.yml์— ๊ด€ํ•œ Dockerfile์— ํ•˜๋‚˜์˜ CP๋ฅผ ๋‚จ๊ฒผ์Šต๋‹ˆ๋‹ค. :(


docker-compose.yml

๋ฒ„์ „: "3.6"
์„œ๋น„์Šค:
์ƒค์ด๋‹ˆํ”„๋ก์‹œ:
์ด๋ฏธ์ง€: ๋ฐ์ดํ„ฐ๋…ธ๋น„์•„/์ƒค์ด๋‹ˆํ”„๋ก์‹œ
container_name: dnv_shinyproxy
์žฌ์‹œ์ž‘: ์‹คํŒจ ์‹œ
๋นŒ๋“œ: ./shinyproxy
๋„คํŠธ์›Œํฌ:
- dnv-net
ํฌํŠธ:
- 8080:8080
๋ณผ๋ฅจ:
- "/var/run/docker.sock:/var/run/docker.sock"
- "./shinyproxy-logs/์„œ๋ฒ„:/๋กœ๊ทธ"
- "./shinyproxy-logs/container:/container-logs"
- "./shinyproxy/application.yml:/opt/shinyproxy/application.yml"
- "./shinyproxy/templates/:/opt/shinyproxy/templates"
- "./shinyproxy/templates/fragments/navbar.html:/opt/shinyproxy/templates/fragments/navbar.html"
์˜ค์ผ๋Ÿฌ:
์ด๋ฏธ์ง€: ์˜ค์ผ๋Ÿฌ ๋„์ปค
์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„: dnv_euler
๋นŒ๋“œ: ./shinyapps/euler-docker
๋„คํŠธ์›Œํฌ:
- dnv-net

๋„คํŠธ์›Œํฌ:
dnv-net:
์ด๋ฆ„: dnv-net


๋„์ปคํŒŒ์ผ

openjdk:8-jre ์—์„œ

์‹คํ–‰ mkdir -p /opt/shinyproxy/
์‹คํ–‰ wget https://www.shinyproxy.io/downloads/shinyproxy-2.3.0.jar -O /opt/shinyproxy/shinyproxy.jar
๋ณต์‚ฌ application.yml /opt/shinyproxy/application.yml

WORKDIR /opt/shinyproxy/
CMD ["์ž๋ฐ”", "-jar", "/opt/shinyproxy/shinyproxy.jar"]


application.yml

๋Œ€๋ฆฌ:
์ œ๋ชฉ: LicitaR
๋ฐฉ๋ฌธ ํŽ˜์ด์ง€: /
์ˆจ๊ธฐ๊ธฐ ํƒ์ƒ‰ ๋ชจ์Œ: ๊ฑฐ์ง“
ํ…œํ”Œ๋ฆฟ ๊ฒฝ๋กœ: ./templates/
ํฌํŠธ: 8080
์ธ์ฆ: ๋‹จ์ˆœ
๊ด€๋ฆฌ์ž ๊ทธ๋ฃน: ๊ด€๋ฆฌ์ž
์‚ฌ์šฉ์ž:

  • ์ด๋ฆ„: ์žญ
    ๋น„๋ฐ€๋ฒˆํ˜ธ: ํŒจ์Šค
    ๊ทธ๋ฃน: ๊ด€๋ฆฌ์ž
  • ์ด๋ฆ„: ์ œํ”„
    ๋น„๋ฐ€๋ฒˆํ˜ธ: ํŒจ์Šค
    ๋„์ปค:
    ๋‚ด๋ถ€ ๋„คํŠธ์›Œํ‚น: ์‚ฌ์‹ค
    ์ปจํ…Œ์ด๋„ˆ ๋„คํŠธ์›Œํฌ: dnv-net
    ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ: /home/paulo/shinyproxy-config/
    ๋ช…์„ธ์„œ:
  • ์•„์ด๋””: 01_์•ˆ๋…•ํ•˜์„ธ์š”
    ํ‘œ์‹œ ์ด๋ฆ„: Hello Simple APP <3
    ์„ค๋ช…: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ Shiny ์•ฑ
    ์ปจํ…Œ์ด๋„ˆ cmd: ["R", "-e", "shinyproxy::run_01_hello()"]
    ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€: openanalytics/shinyproxy-demo
    ์ปจํ…Œ์ด๋„ˆ ๋„คํŠธ์›Œํฌ: "${proxy.docker.container-network}"
  • ์•„์ด๋””: ์˜ค์ผ๋Ÿฌ
    ํ‘œ์‹œ ์ด๋ฆ„: ์˜ค์ผ๋Ÿฌ ์ˆ˜
    ์ปจํ…Œ์ด๋„ˆ cmd: ["R", "-e", "shiny::runApp('/root/euler')"]
    ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€: ์˜ค์ผ๋Ÿฌ ๋„์ปค
    ์ปจํ…Œ์ด๋„ˆ ๋„คํŠธ์›Œํฌ: "${proxy.docker.container-network}"

๋ฒŒ์ฑ„ ๋ฐ˜์ถœ:
ํŒŒ์ผ:
/log/shinyproxy.log


2) ์—ฌ์ „ํžˆ navbar.html ํŒŒ์ผ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. template-path: ./templates/fragments ๋„ฃ์—ˆ์„ ๋•Œ ๊ฐ€๋Šฅํ–ˆ๋Š”๋ฐ ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋‚ด๊ฐ€ ๋ณ€๊ฒฝํ•œ ๋‹ค๋ฅธ ํŒŒ์ผ(admin, app, index, login)์€ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.


3) ๋‚˜๋ฌด

image

@PauloJhonny

ํ…œํ”Œ๋ฆฟ ๋‚ด๋ถ€์— ์กฐ๊ฐ์„ ๋„ฃ์„ ์ˆ˜ ์žˆ์ง€๋งŒ index.html ๋˜๋Š” ๋จผ์ € ์–ด๋”˜๊ฐ€์— ์ด๋ฅผ ์ฃผ์žฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์ •ํ™•ํ•œ ์œ„์น˜๊ฐ€ ๊ธฐ์–ต๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค).

๋ฌด์—‡์„ ํ•˜๊ณ  ์žˆ๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๋Š” ๊ฒฝ์šฐ(๋˜๋Š” ํ™•์‹คํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ) shinyproxy/ ์•„๋ž˜์— $ fragments ํด๋”๋ฅผ ๋ฐฐ์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์ด์œ ๋Š” ์ž‘๋™ ๋ฐฉ์‹์„ ์•Œ์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ Shinyproxy์™€ ๋™์ผํ•œ ํด๋” ๊ตฌ์กฐ๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ Shinyproxy์˜ ๊ธฐ๋ณธ ํด๋” ๊ตฌ์กฐ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค: https://github.com/openanalytics/shinyproxy/tree/master/src/main/resources

๊ธ€์Ž„, ๋‚˜๋Š” ์‹ค์ œ๋กœ ๋‹น์‹ ์„ ์œ„ํ•ด docker-compose ์˜ˆ์ œ๋ฅผ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค. https://github.com/shrektan/shinyproxy-docker-compose-example์„ ์ฐธ์กฐํ•˜์„ธ์š”. ์ด๊ฒƒ์ด ๋‹น์‹ ์˜ ํ˜ผ๋ž€์„ ๋ช…ํ™•ํžˆ ํ•ด์ฃผ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

(๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ, ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ ์ด๋Ÿฌํ•œ ํ…œํ”Œ๋ฆฟ HTML ํŒŒ์ผ์€ ํ•ซ๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ณ„์†ํ•ด์„œ ์ข…๋ฃŒํ•˜๊ณ  ๋‹ค์‹œ ์‹œ์ž‘ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €๋ฅผ ํŽธ์ง‘, ์ €์žฅ ๋ฐ ์ƒˆ๋กœ ๊ณ ์นจํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ํ›จ์”ฌ ๊ฐ„๋‹จํ•œ UI ์กฐ์ • ์›Œํฌํ”Œ๋กœ์ž…๋‹ˆ๋‹ค. .)

์˜ˆ์ œ์˜ ์Šคํฌ๋ฆฐ์ƒท

image

@shrektan ์ •๋ง ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ •๋ง ๋„์›€์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์€ ํšจ๊ณผ๊ฐ€ ์žˆ์—ˆ๋‹ค. ์กฐ๊ฐ ํด๋”๋ฅผ ์ž˜๋ชป๋œ ์œ„์น˜์— ๋„ฃ์—ˆ์Šต๋‹ˆ๋‹ค(์˜ฌ๋ฐ”๋ฅธ ํŠธ๋ฆฌ ์ฐธ์กฐ). ์ด์ œ application.yml์„ ์ œ์™ธํ•œ ๋ชจ๋“  ํŒŒ์ผ์ด ํ•ซ๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

image

์ข‹์€ ์†Œ์‹์ž…๋‹ˆ๋‹ค.

BTW, ์ถ”๊ฐ€ ์งˆ๋ฌธ์ด ์—†์œผ๋ฉด ๋ฌธ์ œ๋ฅผ ์ข…๋ฃŒํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๊ฐ์‚ฌ ํ•ด์š”.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. :)

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰