Shinyproxy: Shinyproxy application.yml을 μ‚¬μš©ν•˜μ—¬ λŸ°νƒ€μž„μ— SQL 자격 증λͺ… 전달

에 λ§Œλ“  2020λ…„ 10μ›” 27일  Β·  5μ½”λ©˜νŠΈ  Β·  좜처: openanalytics/shinyproxy

μ•ˆλ…•ν•˜μ„Έμš”,

LDAP 인증을 μ‚¬μš©ν•˜λŠ” μž‘λ™ν•˜λŠ” Shinyproxy 앱이 μžˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ SQL λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ 데이터λ₯Ό κ²€μƒ‰ν•˜κΈ° μœ„ν•΄ μ—¬κΈ°μ—μ„œ μ–ΈκΈ‰ν•œ 자격 증λͺ…을 μ‚¬μš©ν•˜μ—¬ R μ½”λ“œμ—μ„œ ν•˜λ“œμ½”λ”©λœ μ—°κ²° λ¬Έμžμ—΄μ„ μ‚¬μš©ν•©λ‹ˆλ‹€(ꢌμž₯ν•˜μ§€ μ•ŠμŒ)(μ΅œμ’… μ‚¬μš©μžμ—κ²Œ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό 쿼리할 κΆŒν•œμ΄ μ—†κΈ° λ•Œλ¬Έμ— μ„œλΉ„μŠ€ μ‚¬μš©μžλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€).

con <- DBI::dbConnect(odbc::odbc(), encoding = "latin1", .connection_string = 'Driver={Driver};Server=Server;Database=dbb;UID=UID;PWD=PWD') 

이 μ—°κ²° λ¬Έμžμ—΄μ„ Linux ν˜ΈμŠ€νŠΈμ—μ„œ μ»¨ν…Œμ΄λ„ˆλ‘œ μ „λ‹¬ν•˜λŠ” ν™˜κ²½ λ³€μˆ˜λ‘œ λ°”κΎΈλ €κ³  ν–ˆμŠ΅λ‹ˆλ‹€. 이제 R μ½”λ“œκ°€ λ‹€μŒκ³Ό 같이 λ³€κ²½λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

connString <- Sys.getenv("CONNSTRING")
connString <- sub("\\\\","\\", connString)
con <- DBI::dbConnect(odbc::odbc(), encoding = "latin1", .connection_string = connString)

이것은 ShinyProxy μ™ΈλΆ€μ—μ„œ μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‹€ν–‰ν•  λ•Œ 잘 μž‘λ™ν•˜λ―€λ‘œ λŸ°νƒ€μž„μ— λ‹€μŒ docker λͺ…령을 μ‚¬μš©ν•˜μ—¬ ν™˜κ²½ λ³€μˆ˜λ₯Ό μ „λ‹¬ν•©λ‹ˆλ‹€.

docker run -it --env-file .env.list app123 

ν™˜κ²½ λ³€μˆ˜λŠ” μ‹€ν–‰ 쀑인 μ»¨ν…Œμ΄λ„ˆμ— λ“€μ–΄κ°€ 'env'λ₯Ό μž…λ ₯ν•  λ•Œλ„ λ°œκ²¬λ©λ‹ˆλ‹€.

κ·ΈλŸ¬λ‚˜ ShinyProxyλ₯Ό μ‚¬μš©ν•  λ•Œ λŸ°νƒ€μž„ μ‹œ yaml ꡬ성 파일과 bash-commandμ—μ„œ 이λ₯Ό κ΅¬μ„±ν•˜λŠ” 방법이 λͺ…ν™•ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ•± μ»¨ν…Œμ΄λ„ˆμ— λŒ€ν•œ container-env-file λ§€κ°œλ³€μˆ˜λ₯Ό μ–΄λ–»κ²Œ μ •μ˜ν•©λ‹ˆκΉŒ? 그리고 μ—°κ²°λœ μ»¨ν…Œμ΄λ„ˆμ—μ„œ μ„ νƒλ˜λ„λ‘ λŸ°νƒ€μž„μ— --env-file .env.list 문을 μ–΄λ–»κ²Œ μ „λ‹¬ν•©λ‹ˆκΉŒ?

λ‚΄ μ‘μš© ν”„λ‘œκ·Έλž¨ yaml은 이제 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€(λ‚˜λŠ” μ˜λ„μ μœΌλ‘œ ldap ꡬ성을 λΉ„μ›Œ λ‘μ—ˆμŠ΅λ‹ˆλ‹€).

proxy:
  port: 8080
  authentication: ldap
  admin-groups: admins
  ldap:
    url: url
    manager-dn: manager-dn
    manager-password: manager-password
    user-search-base: user-search-base
    user-search-filter: user-search-filter
    group-search-filter:  group-search-filter
    group-search-base: group-search-base  
  docker:
      internal-networking: true
  specs:
  - id: 01_ok
    display-name: dashboard
    description: Dashboard 
    container-cmd: ["R", "-e", "shiny::runApp('/root/R')"]
    container-image: hberten/app123
    container-env-file: .env.list
    container-network: shineyproxyn-net
    access-groups: [GG_APP_ShinyProxy]

logging:
  file:
    shinyproxy.log

그런 λ‹€μŒ λ‹€μŒ λͺ…령을 μ‹€ν–‰ν•˜μ—¬ ShinyProxy μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‹œμž‘ν•©λ‹ˆλ‹€.

sudo docker run -d --env-file ~/.env.list -v /var/run/docker.sock:/var/run/docker.sock --net shineyproxyn-net -p 8080:8080 hberten/shinyproxy

κ΄€λ ¨ λ¬Έμ œλŠ” here μ—μ„œ 찾을 수 μžˆμ§€λ§Œ 이 λ¬Έμ œλŠ” Docker compose.yml을 μ‚¬μš©ν•©λ‹ˆλ‹€. Docker Compose 없이 ꡬ성할 수 μžˆμŠ΅λ‹ˆκΉŒ? λ‚΄κ°€ 무엇을 λ†“μΉ˜κ³  μžˆμŠ΅λ‹ˆκΉŒ?

도움을 μ£Όμ‹œλ©΄ κ°μ‚¬ν•˜κ² μŠ΅λ‹ˆλ‹€!

question

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

λ‚˜λŠ” 더 λͺ…ν™•ν•˜κ²Œ μ„€λͺ…ν•˜λ €κ³  λ…Έλ ₯ν•  κ²ƒμž…λ‹ˆλ‹€. 호슀트 μ‹œμŠ€ν…œκ³Ό 2개의 μ»¨ν…Œμ΄λ„ˆκ°€ μžˆμŠ΅λ‹ˆλ‹€. ν•˜λ‚˜λŠ” Shinyproxyκ°€ μ‹€ν–‰λ˜λŠ” μ™ΈλΆ€ μ»¨ν…Œμ΄λ„ˆμ΄κ³  λ‹€λ₯Έ ν•˜λ‚˜λŠ” 앱이 μžˆλŠ” λ‚΄λΆ€ μ»¨ν…Œμ΄λ„ˆμž…λ‹ˆλ‹€.
호슀트 μ‹œμŠ€ν…œμ—μ„œ docker run --env-file ... λ₯Ό μ‹€ν–‰ν•˜λ©΄ 호슀트 μ‹œμŠ€ν…œμ˜ ν•΄λ‹Ή νŒŒμΌμ—μ„œ ν™˜κ²½ λ³€μˆ˜λ₯Ό μ™ΈλΆ€ μ»¨ν…Œμ΄λ„ˆμ—μ„œ env vars둜 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이제 container-env λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λ‚΄λΆ€ μ»¨ν…Œμ΄λ„ˆμ— μΆ”κ°€λ‘œ 전달할 수 μžˆμŠ΅λ‹ˆλ‹€.
λ˜λŠ” 파일이 μžˆλŠ” 호슀트 폴더λ₯Ό μ™ΈλΆ€ μ»¨ν…Œμ΄λ„ˆμ— λ§ˆμš΄νŠΈν•œ λ‹€μŒ container-env-file λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ ν•΄λ‹Ή 파일의 env λ³€μˆ˜λ₯Ό λ‚΄λΆ€ μ»¨ν…Œμ΄λ„ˆμ—μ„œ μ‚¬μš©ν•  수 μžˆλ„λ‘ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

두 번째 λŒ€μ•ˆμ— λŒ€ν•œ 예제 λͺ…령은 λ‹€μŒκ³Ό 같을 수 μžˆμŠ΅λ‹ˆλ‹€.

sudo docker run -d -v /home/envs:/tmp/envs -v /var/run/docker.sock:/var/run/docker.sock --net shineyproxyn-net -p 8080:8080 hberten/shinyproxy

.env.list 파일이 호슀트의 /home/envs/에 μžˆλ‹€κ³  κ°€μ • - λ³Όλ₯¨ 마운트λ₯Ό μ‚¬μš©ν•˜μ—¬ /tmp/envs/env.list μ•„λž˜μ˜ μ™ΈλΆ€ μ»¨ν…Œμ΄λ„ˆμ—μ„œ μ‚¬μš©ν•  수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€. 이제 container-env-file: /tmp/envs/.env.list μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. κ·€ν•˜μ˜ application.ymlμ—μ„œ

첫 번째 λŒ€μ•ˆμ˜ μ˜ˆλŠ” μ›λž˜ λͺ…령을 μ‚¬μš©ν•œ λ‹€μŒ application.yamlμ—μ„œ container-env λ₯Ό λ‹€μŒκ³Ό 같이 μ‚¬μš©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

container-env:
  VAR11: "${VAR1}"
  VAR22: "${VAR2}"

μ—¬κΈ°μ„œ VAR1 및 VAR2λŠ” 호슀트의 νŒŒμΌμ— μ •μ˜λœ env varsμ΄λ―€λ‘œ μ™ΈλΆ€ μ»¨ν…Œμ΄λ„ˆμ—μ„œ env vars둜 μ‚¬μš©ν•  수 있으며 μ—¬κΈ°μ—μ„œ VAR11 및 VAR22둜 λ‚΄λΆ€ μ»¨ν…Œμ΄λ„ˆμ— μ „λ‹¬ν•©λ‹ˆλ‹€(예: λ¬Όλ‘  λ™μΌν•œ 이름을 μ‚¬μš©ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. )

λͺ¨λ“  5 λŒ“κΈ€

μ•ˆλ…•ν•˜μ„Έμš” @Bertusian ,
λ¬Έμ œλŠ” μ»¨ν…Œμ΄λ„ˆμ—μ„œ Shinyproxy 자체λ₯Ό μ‹€ν–‰ν•˜κ³  μžˆλ‹€λŠ” κ²ƒμ΄λ―€λ‘œ ν•΄λ‹Ή μ»¨ν…Œμ΄λ„ˆ λ‚΄μ—μ„œ .env.list νŒŒμΌμ„ μ‚¬μš©ν•  수 μžˆλ„λ‘ ν•˜κ±°λ‚˜(λ³Όλ₯¨ λ§ˆμš΄νŠΈν•˜μ—¬) λ˜λŠ” env와 ν•¨κ»˜ container-env λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€. docker run λͺ…λ Ήμ—μ„œ νŒŒμΌμ„ 톡해 μ „λ‹¬ν•˜λŠ” vars. λ˜ν•œ container-env-file λŠ” μ ˆλŒ€ 경둜λ₯Ό κΈ°λŒ€ν•œλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

μ•ˆλ…•ν•˜μ„Έμš” @ mnazarovμž…λ‹ˆλ‹€.

μ‹€μ œλ‘œ, λ‚˜λŠ” μ»¨ν…Œμ΄λ„ˆμ—μ„œ shinyproxyλ₯Ό μ‹€ν–‰ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. κ²°κ΅­ (.env.list λ³Όλ₯¨μ΄ νƒ‘μž¬λœ) Shinyproxy μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‹œμž‘ν•˜κΈ° μœ„ν•œ λŸ°νƒ€μž„ λͺ…λ Ήμ˜ 예λ₯Ό μ œκ³΅ν•  수 μžˆμŠ΅λ‹ˆκΉŒ? 그러면 R-app μ»¨ν…Œμ΄λ„ˆμ— μΊ‘μ²˜λ©λ‹ˆκΉŒ? .env.listλŠ” --env-file ~/.env.list(shinyproxy 없이 μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‹€ν–‰ν•  λ•Œ μž‘λ™)λ₯Ό μΆ”κ°€ν•˜μ—¬ μ‚¬μš©ν•  수 μžˆλ‹€κ³  μƒκ°ν–ˆμŠ΅λ‹ˆλ‹€.
그리고 μ—¬μ „νžˆ application.yml을 μ μš©ν•΄μ•Ό ν•©λ‹ˆκΉŒ? μ—¬μ „νžˆ λ‚˜μ—κ²Œ λͺ…ν™•ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ–΄λ–€ λ„μ›€μ΄λ‚˜ 예λ₯Ό λ“€μ–΄ μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€ ...

λ‚˜λŠ” 더 λͺ…ν™•ν•˜κ²Œ μ„€λͺ…ν•˜λ €κ³  λ…Έλ ₯ν•  κ²ƒμž…λ‹ˆλ‹€. 호슀트 μ‹œμŠ€ν…œκ³Ό 2개의 μ»¨ν…Œμ΄λ„ˆκ°€ μžˆμŠ΅λ‹ˆλ‹€. ν•˜λ‚˜λŠ” Shinyproxyκ°€ μ‹€ν–‰λ˜λŠ” μ™ΈλΆ€ μ»¨ν…Œμ΄λ„ˆμ΄κ³  λ‹€λ₯Έ ν•˜λ‚˜λŠ” 앱이 μžˆλŠ” λ‚΄λΆ€ μ»¨ν…Œμ΄λ„ˆμž…λ‹ˆλ‹€.
호슀트 μ‹œμŠ€ν…œμ—μ„œ docker run --env-file ... λ₯Ό μ‹€ν–‰ν•˜λ©΄ 호슀트 μ‹œμŠ€ν…œμ˜ ν•΄λ‹Ή νŒŒμΌμ—μ„œ ν™˜κ²½ λ³€μˆ˜λ₯Ό μ™ΈλΆ€ μ»¨ν…Œμ΄λ„ˆμ—μ„œ env vars둜 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이제 container-env λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λ‚΄λΆ€ μ»¨ν…Œμ΄λ„ˆμ— μΆ”κ°€λ‘œ 전달할 수 μžˆμŠ΅λ‹ˆλ‹€.
λ˜λŠ” 파일이 μžˆλŠ” 호슀트 폴더λ₯Ό μ™ΈλΆ€ μ»¨ν…Œμ΄λ„ˆμ— λ§ˆμš΄νŠΈν•œ λ‹€μŒ container-env-file λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ ν•΄λ‹Ή 파일의 env λ³€μˆ˜λ₯Ό λ‚΄λΆ€ μ»¨ν…Œμ΄λ„ˆμ—μ„œ μ‚¬μš©ν•  수 μžˆλ„λ‘ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

두 번째 λŒ€μ•ˆμ— λŒ€ν•œ 예제 λͺ…령은 λ‹€μŒκ³Ό 같을 수 μžˆμŠ΅λ‹ˆλ‹€.

sudo docker run -d -v /home/envs:/tmp/envs -v /var/run/docker.sock:/var/run/docker.sock --net shineyproxyn-net -p 8080:8080 hberten/shinyproxy

.env.list 파일이 호슀트의 /home/envs/에 μžˆλ‹€κ³  κ°€μ • - λ³Όλ₯¨ 마운트λ₯Ό μ‚¬μš©ν•˜μ—¬ /tmp/envs/env.list μ•„λž˜μ˜ μ™ΈλΆ€ μ»¨ν…Œμ΄λ„ˆμ—μ„œ μ‚¬μš©ν•  수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€. 이제 container-env-file: /tmp/envs/.env.list μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. κ·€ν•˜μ˜ application.ymlμ—μ„œ

첫 번째 λŒ€μ•ˆμ˜ μ˜ˆλŠ” μ›λž˜ λͺ…령을 μ‚¬μš©ν•œ λ‹€μŒ application.yamlμ—μ„œ container-env λ₯Ό λ‹€μŒκ³Ό 같이 μ‚¬μš©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

container-env:
  VAR11: "${VAR1}"
  VAR22: "${VAR2}"

μ—¬κΈ°μ„œ VAR1 및 VAR2λŠ” 호슀트의 νŒŒμΌμ— μ •μ˜λœ env varsμ΄λ―€λ‘œ μ™ΈλΆ€ μ»¨ν…Œμ΄λ„ˆμ—μ„œ env vars둜 μ‚¬μš©ν•  수 있으며 μ—¬κΈ°μ—μ„œ VAR11 및 VAR22둜 λ‚΄λΆ€ μ»¨ν…Œμ΄λ„ˆμ— μ „λ‹¬ν•©λ‹ˆλ‹€(예: λ¬Όλ‘  λ™μΌν•œ 이름을 μ‚¬μš©ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. )

μ–΄λ¨Έλ‚˜. 이것은 ν›Œλ₯­ν•©λ‹ˆλ‹€! 이제 μž‘λ™ν•©λ‹ˆλ‹€. λ‚˜λŠ” 첫 번째 μ œμ•ˆμ„ μ‹œλ„ν•˜μ§€ μ•Šμ•˜μ§€λ§Œ (λ‚˜μ€‘μ— ν•  κ²ƒμž…λ‹ˆλ‹€), 두 번째 μ†”λ£¨μ…˜μ€ λ°”λ‘œ ν•΄λƒˆμŠ΅λ‹ˆλ‹€! λ‚˜λŠ” λ‚΄κ°€ κ°€κΉŒμ΄ μžˆλ‹€λŠ” 것을 μ•Œκ³  μžˆμ—ˆμ§€λ§Œ 찾을 수 μ—†μ—ˆμŠ΅λ‹ˆλ‹€.

맀우 κ°μ‚¬ν•©λ‹ˆλ‹€!!

ShinyProxy둜 μ—¬λŸ¬λΆ„μ΄ ν•˜κ³  μžˆλŠ” 멋진 일듀.

νš¨κ³Όκ°€ μžˆμ–΄μ„œ λ‹€ν–‰μž…λ‹ˆλ‹€!

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰