Shinyproxy: [๋ฒ„๊ทธ ์ œ๋ณด] ShinyProxy(๋ฒ„์ „ 2.2.0 ์ด์ƒ) ์ƒˆ ๋ฆด๋ฆฌ์Šค์˜ AJAX ์˜ค๋ฅ˜

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

ShinyProxy์˜ ์ƒˆ ๋ฆด๋ฆฌ์Šค ๋ฒ„์ „(2.2.0)์—์„œ๋Š” DT๋ฅผ ์„œ๋ฒ„ ์ฒ˜๋ฆฌ ๋ชจ๋“œ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ์•ฑ์ด ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค. ShinyProxy ๋กœ๊ทธ์— Request Methods 'Post' not supported ๋ผ๊ณ  ํ‘œ์‹œ๋˜๋Š” ๋™์•ˆ ๋ธŒ๋ผ์šฐ์ €๋Š” Ajax ์˜ค๋ฅ˜๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

์Šคํฌ๋ฆฐ์ƒท

ๅฑๅน•ๅฟซ็…ง 2019-03-28 ไธ‹ๅˆ11 24 18
ๅฑๅน•ๅฟซ็…ง 2019-03-28 ไธ‹ๅˆ11 24 32

์˜ˆ์‹œ ์•ฑ

library(shiny)
ui <- fluidPage(DT::DTOutput('tbl'))
server <- function(input, output, session) {
  output$tbl <- DT::renderDT(iris, server = TRUE)
}
shinyApp(ui, server)

์‹ค์ œ๋กœ ์ด๋ฅผ ์œ„ํ•ด docker-compose ์˜ˆ์ œ๋ฅผ ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค( https://github.com/shrektan/shinyproxy-docker-compose-example ์ฐธ์กฐ).

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

๊ฐ์‚ฌ ํ•ด์š”! ์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ์„ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ๊ณ  ์ž‘์—… ์ค‘์ž…๋‹ˆ๋‹ค.

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

๊ฐ์‚ฌ ํ•ด์š”! ์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ์„ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ๊ณ  ์ž‘์—… ์ค‘์ž…๋‹ˆ๋‹ค.

@shrektan ๋ฌธ์ œ๋ฅผ ๋ณด๊ณ ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.
์ˆ˜์ • ์‚ฌํ•ญ์ด ์ปค๋ฐ‹๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
https://github.com/openanalytics/containerproxy/commit/6455abdaed031297baf600f5e71e2242b689d940

์ด ๊ฐœ๋ฐœ์ž ๋นŒ๋“œ๋ฅผ ์‹œ๋„ํ•ด๋ณด๊ณ  ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜๋Š”์ง€ ํ™•์ธํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?
https://nexus.openanalytics.eu/nexus/content/repositories/snapshots/eu/openanalytics/shinyproxy/2.2.1-SNAPSHOT/shinyproxy-2.2.1-20190329.093240-2.jar

@fmichielssen ๋น ๋ฅธ ์ˆ˜์ •์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. DT์™€ fileInput() ๋ชจ๋‘ dev ๋นŒ๋“œ์—์„œ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ™•์ธํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค, @shrektan! ShinyProxy 2.2.1์˜ ์ผ๋ถ€๋กœ ์ถœ์‹œ

๋ฐฉ๊ธˆ 2.2.1๋กœ ์ƒˆ๋กœ ์„ค์น˜ ํ–ˆ๋Š”๋ฐ @shrektan์ด ๋ณด๊ณ ํ•œ ๊ฒƒ๊ณผ ๋™์ผํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

Screen Shot 2019-03-31 at 2 27 42 PM

๊ทธ๋Ÿฐ ๋‹ค์Œ, shinyproxy.log์—์„œ ๋‹ค์Œ์„ ์–ป์Šต๋‹ˆ๋‹ค.

2019-03-31 21:27:33.548 ERROR 9925 --- [XNIO-2 I/O-3] io.undertow.proxy                        : UT005028: Proxy request to /proxy_endpoint/b77c8f8f-8dc9-45c3-a858-e12c7e33e159/session/cf6134effe616504495d1d75171f0546/dataobj/de_main_table failed

io.undertow.server.TruncatedResponseException: null
    at io.undertow.client.http.HttpRequestConduit.truncateWrites(HttpRequestConduit.java:711) ~[undertow-core-1.4.22.Final.jar!/:1.4.22.Final]
    at io.undertow.conduits.AbstractFixedLengthStreamSinkConduit.terminateWrites(AbstractFixedLengthStreamSinkConduit.java:256) ~[undertow-core-1.4.22.Final.jar!/:1.4.22.Final]
    at org.xnio.conduits.ConduitStreamSinkChannel.shutdownWrites(ConduitStreamSinkChannel.java:178) ~[xnio-api-3.3.8.Final.jar!/:3.3.8.Final]
    at io.undertow.channels.DetachableStreamSinkChannel.shutdownWrites(DetachableStreamSinkChannel.java:79) ~[undertow-core-1.4.22.Final.jar!/:1.4.22.Final]
    at io.undertow.server.handlers.proxy.ProxyHandler$HTTPTrailerChannelListener.handleEvent(ProxyHandler.java:754) ~[undertow-core-1.4.22.Final.jar!/:1.4.22.Final]
    at io.undertow.server.handlers.proxy.ProxyHandler$ProxyAction$1.completed(ProxyHandler.java:646) [undertow-core-1.4.22.Final.jar!/:1.4.22.Final]
    at io.undertow.server.handlers.proxy.ProxyHandler$ProxyAction$1.completed(ProxyHandler.java:561) [undertow-core-1.4.22.Final.jar!/:1.4.22.Final]
    at io.undertow.client.http.HttpClientExchange.invokeReadReadyCallback(HttpClientExchange.java:212) [undertow-core-1.4.22.Final.jar!/:1.4.22.Final]
    at io.undertow.client.http.HttpClientConnection.initiateRequest(HttpClientConnection.java:410) [undertow-core-1.4.22.Final.jar!/:1.4.22.Final]
    at io.undertow.client.http.HttpClientConnection.sendRequest(HttpClientConnection.java:343) [undertow-core-1.4.22.Final.jar!/:1.4.22.Final]
    at io.undertow.server.handlers.proxy.ProxyHandler$ProxyAction.run(ProxyHandler.java:561) [undertow-core-1.4.22.Final.jar!/:1.4.22.Final]
    at io.undertow.util.SameThreadExecutor.execute(SameThreadExecutor.java:35) [undertow-core-1.4.22.Final.jar!/:1.4.22.Final]
    at io.undertow.server.HttpServerExchange.dispatch(HttpServerExchange.java:815) [undertow-core-1.4.22.Final.jar!/:1.4.22.Final]
    at io.undertow.server.handlers.proxy.ProxyHandler$ProxyClientHandler.completed(ProxyHandler.java:316) [undertow-core-1.4.22.Final.jar!/:1.4.22.Final]
    at io.undertow.server.handlers.proxy.ProxyHandler$ProxyClientHandler.completed(ProxyHandler.java:290) [undertow-core-1.4.22.Final.jar!/:1.4.22.Final]
    at io.undertow.server.handlers.proxy.ProxyConnectionPool.connectionReady(ProxyConnectionPool.java:338) [undertow-core-1.4.22.Final.jar!/:1.4.22.Final]
    at io.undertow.server.handlers.proxy.ProxyConnectionPool.connect(ProxyConnectionPool.java:525) [undertow-core-1.4.22.Final.jar!/:1.4.22.Final]
    at io.undertow.server.handlers.proxy.LoadBalancingProxyClient.getConnection(LoadBalancingProxyClient.java:301) [undertow-core-1.4.22.Final.jar!/:1.4.22.Final]
    at eu.openanalytics.containerproxy.util.ProxyMappingManager$1.getConnection(ProxyMappingManager.java:88) [containerproxy-0.8.1.jar!/:0.8.1]
    at io.undertow.server.handlers.proxy.ProxyHandler$ProxyClientHandler.run(ProxyHandler.java:310) [undertow-core-1.4.22.Final.jar!/:1.4.22.Final]
    at org.xnio.nio.WorkerThread.safeRun(WorkerThread.java:582) [xnio-nio-3.3.8.Final.jar!/:3.3.8.Final]
    at org.xnio.nio.WorkerThread.run(WorkerThread.java:466) [xnio-nio-3.3.8.Final.jar!/:3.3.8.Final]

ํฅ๋ฏธ๋กœ์šด ์ ์€ ์ด๊ฒƒ์ด ๋‹ค๋ฅธ ํŒจํ‚ค์ง€์ธ shinyWidget์— ์˜ํ–ฅ์„ ๋ฏธ์นœ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. insertUI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑ๋˜๋Š” ์ž…๋ ฅ์ด ๋งŽ์ด ์žˆ์œผ๋ฉฐ ์•„๋ž˜ ๊ฐ•์กฐ ํ‘œ์‹œ๋œ ๋“œ๋กญ๋‹ค์šด ๋ชฉ๋ก์˜ ๊ฐ’์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(๋™์ )์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ๋กœ์ปฌ๋กœ ์‹คํ–‰ํ•˜๋ฉด ๋ชจ๋“  ๊ฒƒ์ด ํ›Œ๋ฅญํ•˜๊ฒŒ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค(์‹ค์ œ ๊ฐ’์„ ์–ป์Œ). Shinyproxy์— ๋ฐฐํฌํ•  ๋•Œ NA1, NA2, NA3...๋งค์šฐ ์ด์ƒํ•ฉ๋‹ˆ๋‹ค.

Screen Shot 2019-03-31 at 2 30 48 PM

๋‚˜๋Š” 2.1.0์—์„œ ์ž˜ ์ž‘๋™ํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์–ธ๊ธ‰ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์ฐจ์ด๊ฐ€ ๋‚˜๋Š” ๊ฒฝ์šฐ LetsEncrypt ์ธ์ฆ์„œ์™€ ํ•จ๊ป˜ nginx ๋’ค์—์„œ shinyproxy๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

@bogdanrau ๋น ๋ฅด๊ฒŒ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๋”๋ฏธ ์˜ˆ์ œ ์•ฑ( @shrektan์—์„œ ์ œ๊ณตํ•œ

@tverbeke ์ด์ œ 2.2.1์„ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๊นŒ?

์•ˆ๋…•ํ•˜์„ธ์š” @dylancis : ์šฐ๋ฆฌ ํ…Œ์ŠคํŠธ์™€ @shrektan์— ์˜ํ•ด ํ™•์ธ๋œ ๋Œ€๋กœ ์›๋ž˜ ๋ฌธ์ œ๋Š” ํ™•์‹คํžˆ ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค. @bogdanrau ๊ฐ€ ๋ณด๊ณ ํ•œ ๋ฌธ์ œ์˜ ๊ฒฝ์šฐ ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ์˜ˆ๊ฐ€ ์•„์ง ์—†๊ฑฐ๋‚˜(๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์˜ ํ™•์ธ์— ์—ฌ์ „ํžˆ ๋ฌธ์ œ๊ฐ€ ์žˆ์Œ).

@tverbeke , ๋ฐฉ๊ธˆ @shrektan์—์„œ ์ œ๊ณตํ•œ ์ƒ˜ํ”Œ ์•ฑ์„ ์‹œ๋„ํ–ˆ๋Š”๋ฐ ํ•ด๋‹น ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋ณผ ์ˆ˜์žˆ๋Š” ์œ ์ผํ•œ ์ฐจ์ด์ ์€ .jar ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  .deb๋ฅผ ์„œ๋น„์Šค๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. .deb ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

2.2.1 ์™€ ํ•จ๊ป˜ ์—ฌ๊ธฐ์—์„œ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

2.2.1 ์™€ ํ•จ๊ป˜ ์—ฌ๊ธฐ์—์„œ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์€ deb ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด jar ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? .deb ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฒ˜์Œ๋ถ€ํ„ฐ ์ƒˆ VM์„ ๋งŒ๋“ค์—ˆ์ง€๋งŒ ์–ด๋–ค ์ด์œ ๋กœ๋“  ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๊ณ„์† ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

.deb ํŒŒ์ผ์ด ๋ญ”๊ฐ€์š”?

@shrektan : Shinyproxy ๋‹ค์šด๋กœ๋“œ ํŽ˜์ด์ง€(https://www.shinyproxy.io/downloads/)๋ฅผ ๋ณด๋ฉด ํ”Œ๋žซํผ ๋…๋ฆฝ์ ์ธ ํŒŒ์ผ(.jar) ๋˜๋Š” ์„ค์น˜ํ•œ Ubuntu ์ „์šฉ deb ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. dpkg์™€ ํ•จ๊ป˜. ํ”Œ๋žซํผ ๋…๋ฆฝ ํŒŒ์ผ๊ณผ ๋น„๊ตํ•˜์—ฌ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.

@bogdanrau์™€ ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
๋‚ด ์„ค์ •: nginx ๋’ค์—์„œ shinyproxy 2.2.1(ํ”Œ๋žซํผ ๋…๋ฆฝ์ ์ธ .jar)์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
ShinyProxy์—์„œ ์„ ํƒํ•œ ์ธ์ฆ ๋ฐฉ๋ฒ•์— ๋”ฐ๋ผ ์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. @shrektan (docker pull shrektan/rdocker4working)์˜ ์˜ˆ๋ฅผ nginx, ShinyProxy 2.2.1 ๋ฐ authentication: simple๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด ๋ชจ๋“  ๊ฒƒ์ด ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์ธ์ฆ: keycloak์œผ๋กœ ์ „ํ™˜ํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. Keycloak ์ธ์ฆ ์ž์ฒด๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

nginx์™€ ํ•จ๊ป˜ keycloak๋„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ๋ฒ„์ „ 2.1.0(๋งˆ์ง€๋ง‰์œผ๋กœ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์•Œ๋ ค์ง„)์—์„œ ์ด ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ฌ์ง€์–ด 2.2.1๋„ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
Traefik ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ v1.7.12 ๋’ค์— ํ”Œ๋žซํผ ๋…๋ฆฝ ํ•ญ์•„๋ฆฌ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” dockerized shinyproxy๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
์ธ์ฆ/๊ถŒํ•œ ๋ถ€์—ฌ๋ฅผ ์œ„ํ•ด keycloak v6.0.1์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
ajax๊ฐ€ ํ™œ์„ฑํ™”๋œ(server=TRUE) ๋ฐ์ดํ„ฐ ํ…Œ์ด๋ธ”์„ ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ๋ฒ„์ „ 2.1๋กœ ๋˜๋Œ๋ ค์•ผ ๋น„ํ™œ์„ฑํ™”๋˜์—ˆ์„ ๋•Œ ์ตœ์‹  ๋ฒ„์ „์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

ํ•ด๋‹น ๋ฒ„๊ทธ์— ๋Œ€ํ•œ ์†Œ์‹์ด๋‚˜ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋‚˜๋Š” ์ •ํ™•ํžˆ ๊ฐ™์€ ๋ฌธ์ œ๋กœ ์‹คํ–‰ํ•˜๊ณ  ๋ฌธ์ œ๊ฐ€ keycloak ์ธ์ฆ๊ณผ ๊ฒฐํ•ฉํ•˜์—ฌ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Ubuntu 18.04.2 LTS ์‹œ์Šคํ…œ์˜ dockerized ํ™˜๊ฒฝ์—์„œ shinyproxy-2.3.0.jar๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Nginx๋Š” letsencrypt SSL ์ธ์ฆ์„œ์™€ ํ•จ๊ป˜ ์—ญ๋ฐฉํ–ฅ ํ”„๋ก์‹œ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ-๋ฐ˜์ง์ด-์•ฑ:

library(shiny)
library(DT)

ui <- fluidPage(DT::dataTableOutput('tbl'))
server <- function(input, output, session) {
  output$tbl <- DT::renderDataTable(data.frame(Col_1=c(1:10), Col_2=c(11:20)))
}
shinyApp(ui, server)

Shinyproxy ๋ฐ keycloak-auth(btw. ๋™์ผํ•œ ์„œ๋ฒ„์—์„œ ์‹คํ–‰)๋กœ ์ƒ์œ„ ์˜ˆ์ œ๋ฅผ ์‹คํ–‰ํ•˜๋ ค๊ณ  ํ•˜๋ฉด ์–ธ๊ธ‰๋œ 503 Service Unavailable AJAX ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. server=FALSE๋ฅผ ์„ค์ •ํ•˜๋ฉด ํ•ด๋‹น ์˜ค๋ฅ˜๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€๋งŒ ํฐ ํ…Œ์ด๋ธ”์—์„œ๋Š” ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

application.yml์—์„œ ๊ฐ„๋‹จํ•œ auth ๋˜๋Š” ldap ์œผ๋กœ ์ •ํ™•ํžˆ ๋™์ผํ•œ ์‹œ์Šคํ…œ(docker,shinyproxy,nginx ์„ค์ •)์ด ๋ฌธ์ œ ์—†์ด ์‹คํ–‰

billy34์™€ ๊ฐ™์€ ๋ฌธ์ œ
ShinyProxy 2.3.0์—์„œ DT::renderDataTable์„ ์‚ฌ์šฉํ•˜๋ฉด ์—ฌ์ „ํžˆ ๋™์ผํ•œ ajax ์˜ค๋ฅ˜ 503์ด ์žˆ์Šต๋‹ˆ๋‹ค.
์ธ์ฆ/๊ถŒํ•œ ๋ถ€์—ฌ์— keycloak v7.0.0 ์‚ฌ์šฉ
๊ทธ๋Ÿฌ๋‚˜ 2.1๋กœ ๋ฐ˜๋Œ€๋กœํ•˜๋ฉด ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์ œ ์•ฑ

library(shiny)
ui <- fluidPage(DT::dataTableOutput('tbl'))
server <- function(input, output, session) {
output$tbl <- DT::renderDataTable({
DT::datatable(iris, class = 'cell-border stripe')
})
}

๋‚˜๋Š” dockerized Shiny Proxy > 2.1(๊ฐ„๋‹จํ•œ ์ธ์ฆ ๋ฐฉ๋ฒ• ์‚ฌ์šฉ) ๋‚ด์—์„œ ์‹คํ–‰๋˜๋Š” RStudio์— ํŒŒ์ผ์„ ์—…๋กœ๋“œ ํ•˜๋ฉด์„œ @bogdanrau ๊ฐ€ ์–ธ๊ธ‰ํ•œ ๊ฒƒ๊ณผ ๋™์ผํ•œ TruncatedResponseException ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. https://github.com/openanalytics/shinyproxy/issues/170

'๋‚˜๋„'๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” Keycloak ์ธ์ฆ ๋ฐฑ์—”๋“œ์— ์žˆ์œผ๋ฉฐ ๋‹ฌ๋ฆฌ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. 2.1๋กœ ๋˜๋Œ๋ฆฌ๋ฉด ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

KeyCloak Auth ๋ฐ ShinyProxy ๋ฒ„์ „ > 2.1.0์—์„œ๋„ ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

nginx(ssl ์‚ฌ์šฉ) ๋ฐ keycloak ์ธ์ฆ ์„œ๋น„์Šค์—์„œ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ DT๋Š” ํ‚คํด๋กœํ‚น ์—†์ด ์™„๋ฒฝํ•˜๊ฒŒ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
์ฒจ๋ถ€๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค!

Error-Traceback

Http-Response

nginx(ssl ์‚ฌ์šฉ) ๋ฐ keycloak ์ธ์ฆ ์„œ๋น„์Šค์—์„œ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ DT๋Š” ํ‚คํด๋กœํ‚น ์—†์ด ์™„๋ฒฝํ•˜๊ฒŒ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
์ฒจ๋ถ€๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค!

Error-Traceback

Http-Response

Shinyproxy.io์˜ ShinyProxy 2.3.0 ๋ณ‘

Keycloak์œผ๋กœ ๋ฒˆ์‹ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ˆ˜์ • ์‚ฌํ•ญ์€ ๋‹ค์Œ ๋ฆด๋ฆฌ์Šค์—์„œ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

Keycloak์œผ๋กœ ๋ฒˆ์‹ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ˆ˜์ • ์‚ฌํ•ญ์€ ๋‹ค์Œ ๋ฆด๋ฆฌ์Šค์—์„œ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

๋˜๋Œ๋ ค์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

์–ด๋–ค ์ข…๋ฅ˜์˜ ์ธ์ฆ๋„ ์—†์ด ๋™์ผํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. content-type: multipart/form-data์˜ POST ์š”์ฒญ์„ ํ•  ๋•Œ. ์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๋‘ ๋ฒ„์ „์˜ ์ฐจ์ด์ ์ด ๋ฌด์—‡์ธ์ง€ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜๋Œ๋ฆฌ๊ธฐ๊ฐ€ ์˜ต์…˜์ด ์•„๋‹Œ ๊ฒฝ์šฐ ๋ช‡ ๊ฐ€์ง€ ํ•ด๊ฒฐ์ฑ…์„ ์ œ์•ˆํ•˜์‹ญ์‹œ์˜ค. Btw ๋‚˜๋Š” shinyproxy ๋’ค์— ํ”Œ๋ผ์Šคํฌ๋ฅผ ์‹คํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค.
๊ฐ์‚ฌ ํ•ด์š”.

@tverbeke ์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋œ <dev> ๋ถ„๊ธฐ์˜ ์Šค๋ƒ…์ƒท์„ ํ‘ธ์‹œํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ์•„๋งˆ๋„ ์ดˆ๊ธฐ ํ…Œ์ŠคํŠธ๋Š” <stable> ๋ถ„๊ธฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ ์ „์— ์ˆ˜์ •์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ ๊ฒƒ์„ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋ฏธ๋ฆฌ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

@jaysnm ์ˆ˜์ • ์‚ฌํ•ญ์€ containerproxy์˜ ๊ฐœ๋ฐœ ๋ถ„๊ธฐ์— ์žˆ์Šต๋‹ˆ๋‹ค.

@tverbeke containerproxy ๋นŒ๋“œ์˜ ๊ฐœ๋ฐœ ๋ถ„๊ธฐ๊ฐ€ ์‹คํŒจ ๊ฐœ๋ฐœ ๋ถ„๊ธฐ๋ฅผ ๊ตฌ์ถ•ํ–ˆ์Šต๋‹ˆ๋‹ค. ์•„์ง ์ˆ˜์ • ์‚ฌํ•ญ์ด ์—†์Šต๋‹ˆ๋‹ค. ์ด ์‹œ์ ์—์„œ ๋‚˜๋Š” ์ด๊ฒƒ์ด ์ด ๋ฌธ์ œ์—์„œ ์ถ”์ ํ•œ ๊ฒƒ๊ณผ ๋‹ค๋ฅธ ๊ฒƒ์ด๋ฏ€๋กœ ๋‚ด ์‚ฌ๊ฑด์„ ์‰ฌ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.
๊ฐ์‚ฌ ํ•ด์š”.

image

@jaysnm ๋‹น๋ถ„๊ฐ„ ์€ Oracle Java๋กœ ์ปดํŒŒ์ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Sun.security.krb5.KrbTgsReq ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๋Š” Oracle Java์™€ OpenJDK์—์„œ ๋‹ค๋ฅด๋ฉฐ ์šฐ๋ฆฌ๋Š” ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊ณต์‹ ๋ฒ„์ „ 2.3.1์—์„œ๋Š” ๋งˆ์นจ๋‚ด ๋‚˜์—๊ฒŒ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ๋‹ซ์„ ์‹œ๊ฐ„ #140?

ํ”ผ๋“œ๋ฐฑ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค, @Dusan-Dingarac

์•ˆ๋…•ํ•˜์„ธ์š”, ShinyProxy 2.3.1์—์„œ 2.4.1๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•œ ํ›„์—๋„ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋ฒ„๊ทธ๋ฅผ ๋‹ค์‹œ ์—ด ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋ธŒ๋ผ์šฐ์ €์—์„œ:
DataTables warning: table id=DataTables_Table_0 - Ajax error. For more information about this error, please see http://datatables.net/tn/7

์ƒค์ด๋‹ˆํ”„๋ก์‹œ์—
at io.undertow.server.handlers.proxy.ProxyConnectionPool.connect(ProxyConnectionPool.java:548) ~[undertow-core-2.1.4.Final.jar!/:2.1.4.Final] โ”‚ โ”‚ at io.undertow.server.handlers.proxy.LoadBalancingProxyClient.getConnection(LoadBalancingProxyClient.java:316) ~[undertow-core-2.1.4.Final.jar!/:2.1.4.Final] โ”‚ โ”‚ at eu.openanalytics.containerproxy.util.ProxyMappingManager$1.getConnection(ProxyMappingManager.java:88) ~[containerproxy-0.8.5.jar!/:0.8.5] โ”‚ โ”‚ at io.undertow.server.handlers.proxy.ProxyHandler$ProxyClientHandler.run(ProxyHandler.java:310) ~[undertow-core-2.1.4.Final.jar!/:2.1.4.Final] โ”‚ โ”‚ at org.xnio.nio.WorkerThread.safeRun(WorkerThread.java:612) ~[xnio-nio-3.8.0.Final.jar!/:3.8.0.Final] โ”‚ โ”‚ at org.xnio.nio.WorkerThread.run(WorkerThread.java:479) ~[xnio-nio-3.8.0.Final.jar!/:3.8.0.Final] โ”‚ โ”‚ 2020-10-23 15:33:30.211 DEBUG 1 --- [ XNIO-1 I/O-2] io.undertow.request.error-response : Setting error code 503 for exchange HttpServerExchange{ POST /system-recommendation-dashboard/pr โ”‚ โ”‚ oxy_endpoint/3913e3ea-8e4d-4c7a-9bf7-4418b3064b26/session/2baa425f53c271bc590b7d1a0c335a89/dataobj/tab_Cov_Linea_O} โ”‚ โ”‚ java.lang.RuntimeException: null โ”‚ โ”‚ at io.undertow.server.HttpServerExchange.setStatusCode(HttpServerExchange.java:1416) ~[undertow-core-2.1.4.Final.jar!/:2.1.4.Final] โ”‚ โ”‚ at io.undertow.server.handlers.proxy.ProxyHandler.handleFailure(ProxyHandler.java:668) ~[undertow-core-2.1.4.Final.jar!/:2.1.4.Final] โ”‚ โ”‚ at io.undertow.server.handlers.proxy.ProxyHandler$HTTPTrailerChannelListener.handleEvent(ProxyHandler.java:769) ~[undertow-core-2.1.4.Final.jar!/:2.1.4.Final] โ”‚ โ”‚ at io.undertow.server.handlers.proxy.ProxyHandler$ProxyAction$1.completed(ProxyHandler.java:646) ~[undertow-core-2.1.4.Final.jar!/:2.1.4.Final] โ”‚ โ”‚ at io.undertow.server.handlers.proxy.ProxyHandler$ProxyAction$1.completed(ProxyHandler.java:561) ~[undertow-core-2.1.4.Final.jar!/:2.1.4.Final] โ”‚ โ”‚ at io.undertow.client.http.HttpClientExchange.invokeReadReadyCallback(HttpClientExchange.java:212) ~[undertow-core-2.1.4.Final.jar!/:2.1.4.Final] โ”‚ โ”‚ at io.undertow.client.http.HttpClientConnection.initiateRequest(HttpClientConnection.java:414) ~[undertow-core-2.1.4.Final.jar!/:2.1.4.Final] โ”‚ โ”‚ at io.undertow.client.http.HttpClientConnection.sendRequest(HttpClientConnection.java:347) ~[undertow-core-2.1.4.Final.jar!/:2.1.4.Final] โ”‚ โ”‚ at io.undertow.server.handlers.proxy.ProxyHandler$ProxyAction.run(ProxyHandler.java:561) ~[undertow-core-2.1.4.Final.jar!/:2.1.4.Final] โ”‚ โ”‚ at io.undertow.util.SameThreadExecutor.execute(SameThreadExecutor.java:35) ~[undertow-core-2.1.4.Final.jar!/:2.1.4.Final] โ”‚ โ”‚ at io.undertow.server.HttpServerExchange.dispatch(HttpServerExchange.java:821) ~[undertow-core-2.1.4.Final.jar!/:2.1.4.Final] โ”‚ โ”‚ at io.undertow.server.handlers.proxy.ProxyHandler$ProxyClientHandler.completed(ProxyHandler.java:316) ~[undertow-core-2.1.4.Final.jar!/:2.1.4.Final] โ”‚ โ”‚ at io.undertow.server.handlers.proxy.ProxyHandler$ProxyClientHandler.completed(ProxyHandler.java:290) ~[undertow-core-2.1.4.Final.jar!/:2.1.4.Final] โ”‚ โ”‚ at io.undertow.server.handlers.proxy.ProxyConnectionPool.connectionReady(ProxyConnectionPool.java:353) ~[undertow-core-2.1.4.Final.jar!/:2.1.4.Final] โ”‚ โ”‚ at io.undertow.server.handlers.proxy.ProxyConnectionPool.connect(ProxyConnectionPool.java:548) ~[undertow-core-2.1.4.Final.jar!/:2.1.4.Final] โ”‚ โ”‚ at io.undertow.server.handlers.proxy.LoadBalancingProxyClient.getConnection(LoadBalancingProxyClient.java:316) ~[undertow-core-2.1.4.Final.jar!/:2.1.4.Final] โ”‚ โ”‚ at eu.openanalytics.containerproxy.util.ProxyMappingManager$1.getConnection(ProxyMappingManager.java:88) ~[containerproxy-0.8.5.jar!/:0.8.5] โ”‚ โ”‚ at io.undertow.server.handlers.proxy.ProxyHandler$ProxyClientHandler.run(ProxyHandler.java:310) ~[undertow-core-2.1.4.Final.jar!/:2.1.4.Final] โ”‚ โ”‚ at org.xnio.nio.WorkerThread.safeRun(WorkerThread.java:612) ~[xnio-nio-3.8.0.Final.jar!/:3.8.0.Final] โ”‚ โ”‚ at org.xnio.nio.WorkerThread.run(WorkerThread.java:479) ~[xnio-nio-3.8.0.Final.jar!/:3.8.0.Final]

๋‚˜๋Š” ๋ถ€ํ•˜๊ฐ€ ์—ญ๋ฐฉํ–ฅ ํ”„๋ก์‹œ๋กœ traefik๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ท ํ˜•๊ณผ ShinyProxy์—†์ด DT์™€ ๊ฐ™์€ ๋ฌธ์ œ์— ๋ด‰์ฐฉํ–ˆ์Šต๋‹ˆ๋‹ค. DT ๋ฐ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์— ์—ฐ๊ฒฐ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?
๋‚ด ์ชฝ์—์„œ ์กฐ์‚ฌํ•ด์•ผ ํ•ด
์ด ๋ฌธ์ œ๋ฅผ ๋ณธ ์ ์ด ์žˆ์Šต๋‹ˆ๊นŒ https://github.com/rstudio/DT/issues/849 ?

๋˜ํ•œ traefik์„ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์ง€๋งŒ 2.3.1๋กœ ๋Œ์•„๊ฐ€์„œ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. 2.4.0 ๋ฐ 2.4.1์—์„œ๋Š” ํ•ด๋‹น ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š” @giordyb

์ด ๋ฌธ์ œ์˜ ์ฒซ ๋ฒˆ์งธ ๊ฒŒ์‹œ๋ฌผ์—์„œ ShinyProxy 2.4.1๋กœ ์˜ˆ์ œ ์ฝ”๋“œ๋ฅผ ํ…Œ์ŠคํŠธํ–ˆ๋Š”๋ฐ ์—ฌ์ „ํžˆ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
๋‹ค์Œ ์ •๋ณด๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

  • ์‚ฌ์šฉ ์ค‘์ธ Shiny ์•ฑ์˜ ์ฝ”๋“œ
  • Traefik์˜ ๊ตฌ์„ฑ
  • ์„ค์ •์„ ์‰ฝ๊ฒŒ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๋„๋ก docker-compose ํŒŒ์ผ

์ ์–ด๋„ ๋‘ ๊ฐœ์˜ ์ฒซ ๋ฒˆ์งธ ์กฐ๊ฐ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋ฌธ์ œ๋ฅผ ์žฌํ˜„ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
๊ฐ์‚ฌ ํ•ด์š”

์—ฌ๊ธฐ์— ๋‚ด 2์„ผํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. DT๊ฐ€ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ(Traefik) ๋’ค์—์„œ ์ž‘๋™ํ•˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด ์ตœ๊ทผ์— Docker swarm์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ๊ฐ„๋‹จํ•œ repo DT-load-balancer ๋ฅผ ์„ธ๋ถ€ ์„ค์ •์œผ๋กœ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค... ์•ฝ๊ฐ„์˜ ๋…ธ๋ ฅ์œผ๋กœ ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ๊ฒƒ์œผ๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ShinyProxy์˜ ์˜ˆ...

@giordyb traefik ๋ฐ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์—ฌ์ „ํžˆ traefik 1.7(1.7.26)์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์—ฌ์ „ํžˆ ๋ˆ์ ์ž„ ๊ตฌ์„ฑ์— ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์„œํ™”๋œ ๋Œ€๋กœ "traefik.backend.loadbalancer.stickiness" ๋ ˆ์ด๋ธ”์„ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ ์„ฑ๊ณตํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋ ˆ์ด๋ธ” "traefik.backend.loadbalancer.sticky=true"๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋‹จ์„œ์ธ์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ๋ˆ„๊ฐ€ ์•Œ๊ฒ ์Šต๋‹ˆ๊นŒ.

@billy34 ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ €๋Š” traefik 2.2๋ฅผ ์‹คํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค. ๊ณ ์ • ์„ธ์…˜์„ ํ™œ์„ฑํ™”ํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์ง€๋งŒ ์•„๋ฌด๋Ÿฐ ์ฐจ์ด๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ์ฝ”๋“œ์™€ traefik ๊ตฌ์„ฑ์„ ๊ณง ๊ฒŒ์‹œํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

@LEDfan kubernetes(๋‹ค์ค‘ ๋…ธ๋“œ ํด๋Ÿฌ์Šคํ„ฐ)์—์„œ traefik์„ ์‹คํ–‰ ์ค‘์ด๋ฏ€๋กœ docker-compose๋กœ ํ™˜๊ฒฝ์„ ๋ณต์ œํ•˜๋Š” ๊ฒƒ์ด ์•ฝ๊ฐ„ ๊นŒ๋‹ค๋กญ์Šต๋‹ˆ๋‹ค.
docker(mac์šฉ docker) ์•„๋ž˜์— ๋‹จ์ผ kubernetes ๋…ธ๋“œ๋กœ ๋” ์ž‘์€ ํ™˜๊ฒฝ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ์•ฑ์˜ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค(์ƒ˜ํ”Œ์ผ ๋ฟ ์˜ค๋ฅ˜๋„ ๋ฐœ์ƒํ•จ).
_ํŽธ์ง‘: ์ฝ”๋“œ์— ๋Œ€ํ•œ ๋‹ค์Œ ๊ฒŒ์‹œ๋ฌผ์„ ์ฐธ์กฐํ•˜์„ธ์š”_

๋‚˜๋Š” ์ด traefik ๊ตฌ์„ฑ์œผ๋กœ Shinyproxy 2.3.0์—์„œ ์ด ์•ฑ ๋ฒ„์ „์„ ํ…Œ์ŠคํŠธํ–ˆ์œผ๋ฉฐ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. 2.4.1์—์„œ ๋™์ผํ•œ ์ž‘์—…์„ ์‹œ๋„ํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์‹œ๋„ํ•œ ๋˜ ๋‹ค๋ฅธ ๊ฒƒ์€ Shinyproxy ์ปจํ…Œ์ด๋„ˆ๋กœ ์ง์ ‘ ํฌํŠธ ํฌ์›Œ๋”ฉํ•˜์—ฌ traefik์„ ์šฐํšŒํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•ด๋„ ์˜ค๋ฅ˜๊ฐ€ ํ‘œ์‹œ๋˜๋ฏ€๋กœ traefik ๋ฌธ์ œ์ธ์ง€ ์ •๋ง ์˜์‹ฌ์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค.

@LEDfan

๋ช‡ ๊ฐ€์ง€ ๋” ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด๋ณด๋‹ˆ traefik๊ณผ ์•„๋ฌด ๊ด€๋ จ์ด ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋‚ด ํ™˜๊ฒฝ์„ ๋ณต์ œํ•˜๋Š” ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค(https://github.com/giordyb/test_shinyproxy.git).

kubernetes๋ฅผ ์‹คํ–‰ํ•˜๋Š” Mac์šฉ ๋„์ปค์—์„œ ๋™์ผํ•œ ๋ฐ˜์ง์ด๋Š” R ์ปจํ…Œ์ด๋„ˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ œ๊ณตํ•˜๋Š” ๋ฐ˜์ง์ด๋Š” ํ”„๋ก์‹œ(2.3.1 ๋ฐ 2.4.1) ๋ฐฐํฌ๋ฅผ 2๊ฐœ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.
๊ด€๋ จ๋œ traefik์ด ์—†์œผ๋ฉฐ ๋ฐ˜์ง์ด๋Š” ํ”„๋ก์‹œ ํฌ๋“œ๋Š” kube-proxy ํฌํŠธ ์ „๋‹ฌ์„ ํ†ตํ•ด ์•ก์„ธ์Šค๋ฉ๋‹ˆ๋‹ค.

2.3.1์—์„œ ๋ฐ์ดํ„ฐ ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ ์š”์ฒญ์ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

2.4.1์—์„œ ๋™์ผํ•œ ์š”์ฒญ์ด ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์„ Shinyproxy ์ปจํ…Œ์ด๋„ˆ์˜ ๋กœ๊ทธ์—์„œ ์–ป์Šต๋‹ˆ๋‹ค.
2020-10-26 15:17:46.359 ERROR 1 --- [ XNIO-1 I/O-2] io.undertow.proxy : UT005028: Proxy request to /proxy_endpoint/884afa30-73a0-444f-b04f-3ae85b6de6bd/session/aacc55466aefc00eabd04b31f9891242/dataobj/tab_Cov_Linea_O failed โ”‚ โ”‚ io.undertow.server.TruncatedResponseException: null โ”‚ โ”‚ at io.undertow.client.http.HttpRequestConduit.truncateWrites(HttpRequestConduit.java:711) ~[undertow-core-2.1.4.Final.jar!/:2.1.4.Final] โ”‚ โ”‚ at io.undertow.conduits.AbstractFixedLengthStreamSinkConduit.terminateWrites(AbstractFixedLengthStreamSinkConduit.java:256) ~[undertow-core-2.1.4.Final.jar!/:2.1.4.Final] โ”‚ โ”‚ at org.xnio.conduits.ConduitStreamSinkChannel.shutdownWrites(ConduitStreamSinkChannel.java:178) ~[xnio-api-3.8.0.Final.jar!/:3.8.0.Final] โ”‚ โ”‚ at io.undertow.channels.DetachableStreamSinkChannel.shutdownWrites(DetachableStreamSinkChannel.java:79) ~[undertow-core-2.1.4.Final.jar!/:2.1.4.Final] โ”‚ โ”‚ at io.undertow.server.handlers.proxy.ProxyHandler$HTTPTrailerChannelListener.handleEvent(ProxyHandler.java:754) ~[undertow-core-2.1.4.Final.jar!/:2.1.4.Final] โ”‚ โ”‚ at io.undertow.server.handlers.proxy.ProxyHandler$ProxyAction$1.completed(ProxyHandler.java:646) ~[undertow-core-2.1.4.Final.jar!/:2.1.4.Final] โ”‚ โ”‚ at io.undertow.server.handlers.proxy.ProxyHandler$ProxyAction$1.completed(ProxyHandler.java:561) ~[undertow-core-2.1.4.Final.jar!/:2.1.4.Final] โ”‚ โ”‚ at io.undertow.client.http.HttpClientExchange.invokeReadReadyCallback(HttpClientExchange.java:212) ~[undertow-core-2.1.4.Final.jar!/:2.1.4.Final] โ”‚ โ”‚ at io.undertow.client.http.HttpClientConnection.initiateRequest(HttpClientConnection.java:414) ~[undertow-core-2.1.4.Final.jar!/:2.1.4.Final] โ”‚ โ”‚ at io.undertow.client.http.HttpClientConnection.sendRequest(HttpClientConnection.java:347) ~[undertow-core-2.1.4.Final.jar!/:2.1.4.Final] โ”‚ โ”‚ at io.undertow.server.handlers.proxy.ProxyHandler$ProxyAction.run(ProxyHandler.java:561) ~[undertow-core-2.1.4.Final.jar!/:2.1.4.Final] โ”‚ โ”‚ at io.undertow.util.SameThreadExecutor.execute(SameThreadExecutor.java:35) ~[undertow-core-2.1.4.Final.jar!/:2.1.4.Final] โ”‚ โ”‚ at io.undertow.server.HttpServerExchange.dispatch(HttpServerExchange.java:821) ~[undertow-core-2.1.4.Final.jar!/:2.1.4.Final] โ”‚ โ”‚ at io.undertow.server.handlers.proxy.ProxyHandler$ProxyClientHandler.completed(ProxyHandler.java:316) ~[undertow-core-2.1.4.Final.jar!/:2.1.4.Final] โ”‚ โ”‚ at io.undertow.server.handlers.proxy.ProxyHandler$ProxyClientHandler.completed(ProxyHandler.java:290) ~[undertow-core-2.1.4.Final.jar!/:2.1.4.Final] โ”‚ โ”‚ at io.undertow.server.handlers.proxy.ProxyConnectionPool.connectionReady(ProxyConnectionPool.java:353) ~[undertow-core-2.1.4.Final.jar!/:2.1.4.Final] โ”‚ โ”‚ at io.undertow.server.handlers.proxy.ProxyConnectionPool.connect(ProxyConnectionPool.java:548) ~[undertow-core-2.1.4.Final.jar!/:2.1.4.Final] โ”‚ โ”‚ at io.undertow.server.handlers.proxy.LoadBalancingProxyClient.getConnection(LoadBalancingProxyClient.java:316) ~[undertow-core-2.1.4.Final.jar!/:2.1.4.Final] โ”‚ โ”‚ at eu.openanalytics.containerproxy.util.ProxyMappingManager$1.getConnection(ProxyMappingManager.java:88) ~[containerproxy-0.8.5.jar!/:0.8.5] โ”‚ โ”‚ at io.undertow.server.handlers.proxy.ProxyHandler$ProxyClientHandler.run(ProxyHandler.java:310) ~[undertow-core-2.1.4.Final.jar!/:2.1.4.Final] โ”‚ โ”‚ at org.xnio.nio.WorkerThread.safeRun(WorkerThread.java:612) ~[xnio-nio-3.8.0.Final.jar!/:3.8.0.Final] โ”‚ โ”‚ at org.xnio.nio.WorkerThread.run(WorkerThread.java:479) ~[xnio-nio-3.8.0.Final.jar!/:3.8.0.Final] โ”‚ โ”‚ 2020-10-26 15:17:46.361 DEBUG 1 --- [ XNIO-1 I/O-2] io.undertow.request.error-response : Setting error code 503 for exchange HttpServerExchange{ POST /proxy_endpoint/884afa30-73a0-444f-b04f-3ae85b6de6bd/session/aacc55466aefc00eabd04b31f9891242 โ”‚ โ”‚ java.lang.RuntimeException: null โ”‚ โ”‚ at io.undertow.server.HttpServerExchange.setStatusCode(HttpServerExchange.java:1416) ~[undertow-core-2.1.4.Final.jar!/:2.1.4.Final] โ”‚ โ”‚ at io.undertow.server.handlers.proxy.ProxyHandler.handleFailure(ProxyHandler.java:668) ~[undertow-core-2.1.4.Final.jar!/:2.1.4.Final] โ”‚ โ”‚ at io.undertow.server.handlers.proxy.ProxyHandler$HTTPTrailerChannelListener.handleEvent(ProxyHandler.java:769) ~[undertow-core-2.1.4.Final.jar!/:2.1.4.Final] โ”‚ โ”‚ at io.undertow.server.handlers.proxy.ProxyHandler$ProxyAction$1.completed(ProxyHandler.java:646) ~[undertow-core-2.1.4.Final.jar!/:2.1.4.Final] โ”‚ โ”‚ at io.undertow.server.handlers.proxy.ProxyHandler$ProxyAction$1.completed(ProxyHandler.java:561) ~[undertow-core-2.1.4.Final.jar!/:2.1.4.Final] โ”‚ โ”‚ at io.undertow.client.http.HttpClientExchange.invokeReadReadyCallback(HttpClientExchange.java:212) ~[undertow-core-2.1.4.Final.jar!/:2.1.4.Final] โ”‚ โ”‚ at io.undertow.client.http.HttpClientConnection.initiateRequest(HttpClientConnection.java:414) ~[undertow-core-2.1.4.Final.jar!/:2.1.4.Final] โ”‚ โ”‚ at io.undertow.client.http.HttpClientConnection.sendRequest(HttpClientConnection.java:347) ~[undertow-core-2.1.4.Final.jar!/:2.1.4.Final] โ”‚ โ”‚ at io.undertow.server.handlers.proxy.ProxyHandler$ProxyAction.run(ProxyHandler.java:561) ~[undertow-core-2.1.4.Final.jar!/:2.1.4.Final] โ”‚ โ”‚ at io.undertow.util.SameThreadExecutor.execute(SameThreadExecutor.java:35) ~[undertow-core-2.1.4.Final.jar!/:2.1.4.Final] โ”‚ โ”‚ at io.undertow.server.HttpServerExchange.dispatch(HttpServerExchange.java:821) ~[undertow-core-2.1.4.Final.jar!/:2.1.4.Final] โ”‚ โ”‚ at io.undertow.server.handlers.proxy.ProxyHandler$ProxyClientHandler.completed(ProxyHandler.java:316) ~[undertow-core-2.1.4.Final.jar!/:2.1.4.Final] โ”‚ โ”‚ at io.undertow.server.handlers.proxy.ProxyHandler$ProxyClientHandler.completed(ProxyHandler.java:290) ~[undertow-core-2.1.4.Final.jar!/:2.1.4.Final] โ”‚ โ”‚ at io.undertow.server.handlers.proxy.ProxyConnectionPool.connectionReady(ProxyConnectionPool.java:353) ~[undertow-core-2.1.4.Final.jar!/:2.1.4.Final] โ”‚ โ”‚ at io.undertow.server.handlers.proxy.ProxyConnectionPool.connect(ProxyConnectionPool.java:548) ~[undertow-core-2.1.4.Final.jar!/:2.1.4.Final] โ”‚ โ”‚ at io.undertow.server.handlers.proxy.LoadBalancingProxyClient.getConnection(LoadBalancingProxyClient.java:316) ~[undertow-core-2.1.4.Final.jar!/:2.1.4.Final] โ”‚ โ”‚ at eu.openanalytics.containerproxy.util.ProxyMappingManager$1.getConnection(ProxyMappingManager.java:88) ~[containerproxy-0.8.5.jar!/:0.8.5] โ”‚ โ”‚ at io.undertow.server.handlers.proxy.ProxyHandler$ProxyClientHandler.run(ProxyHandler.java:310) ~[undertow-core-2.1.4.Final.jar!/:2.1.4.Final] โ”‚ โ”‚ at org.xnio.nio.WorkerThread.safeRun(WorkerThread.java:612) ~[xnio-nio-3.8.0.Final.jar!/:3.8.0.Final] โ”‚ โ”‚ at org.xnio.nio.WorkerThread.run(WorkerThread.java:479) ~[xnio-nio-3.8.0.Final.jar!/:3.8.0.Final]

๋ฌธ์ œ๋ฅผ ์ถ”๊ฐ€๋กœ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋‚ด๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์•ˆ๋…•ํ•˜์„ธ์š” @giordyb

์˜ˆ์ œ ๋ฐฐํฌ ๋ฐ ๋ณด๊ณ ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์˜ค๋Š˜ ๋ฌธ์ œ๋ฅผ ์‚ดํŽด๋ณด๋‹ˆ ์ƒ๋‹นํžˆ ์ด์ƒํ•œ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.
๋””๋ฒ„๊ทธ ๋กœ๊น…์ด ํ™œ์„ฑํ™”๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ShinyProxy๋ฅผ ํ†ตํ•ด ๋ณด๋‚ด๋Š” ์š”์ฒญ์˜ ์ผ๋ถ€๋ฅผ ๊ธฐ๋กํ•˜๋Š” DispatcherServlet ํด๋ž˜์Šค๊ฐ€ ํ•˜๋‚˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Ÿฌํ•œ ์š”์ฒญ์˜ ์ผ๋ถ€๋Š” ํ•œ ๋ฒˆ๋งŒ ์ฝ์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ถ€ ํ”„๋ก์‹œ ์š”์ฒญ์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Shiny ์•ฑ์€ ์ž˜๋ชป๋œ ์š”์ฒญ์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ์ฑ…์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด org.springframework.web.servlet.DispatcherServlet ํด๋ž˜์Šค์— ๋Œ€ํ•œ ๋””๋ฒ„๊ทธ ๋กœ๊น…์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

logging:
  level:
     root: DEBUG
     org:
        springframework:
           web:
              servlet:
                 DispatcherServlet: INFO

์ด๊ฒƒ์€ ๋‹ค์Œ ShinyProxy ๋ฆด๋ฆฌ์Šค์—์„œ ๊ธฐ๋ณธ๊ฐ’์ด ๋˜๋ฏ€๋กœ ์ด ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ๋” ์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š” @LEDfan์ž…๋‹ˆ๋‹ค .

์ด๋ ‡๊ฒŒ ๋นจ๋ฆฌ ์กฐ์‚ฌํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‹น์‹ ์ด ์ œ์•ˆํ•œ๋Œ€๋กœ ๋กœ๊น… ๊ตฌ์„ฑ์„ ์ถ”๊ฐ€ํ–ˆ๊ณ  ์ด์ œ ๋ชจ๋“  ๊ฒƒ์ด ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•˜๋ฏ€๋กœ ํ–‰๋ณตํ•œ ์บ ํ•‘์นด์ž…๋‹ˆ๋‹ค.

๋‹น์‹ ์˜ ๋„์›€์„ ์ฃผ์…”์„œ ๋Œ€๋‹จํžˆ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

NGINX ๋ฐ Azure Active Directory ๋’ค์— ์žˆ๋Š” kubernetes์™€ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ํ…Œ์ด๋ธ”์€ 2.3.1์—์„œ๋Š” ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํ‘œ์‹œ๋˜์ง€๋งŒ 2.4.1์—์„œ๋Š” ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. JDK8 ๋ฐ JDK11๋กœ ๋นŒ๋“œ๋ฅผ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค.

application.yml ์—์„œ ๋ชจ๋“  ๋กœ๊น… ๊ตฌ์„ฑ์„ ์ œ๊ฑฐํ•˜๊ณ  '๊ณ ์ •' ์„ธ์…˜์„ ์‹คํ–‰ํ•˜๋„๋ก NGINX๋ฅผ ์„ค์ •ํ–ˆ์ง€๋งŒ ์ง€๊ธˆ๊นŒ์ง€๋Š” ์šด์ด ์—†์Šต๋‹ˆ๋‹ค.

์ปค๋ฎค๋‹ˆํ‹ฐ ์ง€์› ํŽ˜์ด์ง€์— application.yml ๋ฐ shinyproxy ํฌ๋“œ ๋กœ๊ทธ์˜ ๋‹จ์ˆœํ™”๋œ ๋ฒ„์ „์„ ๊ฒŒ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค. https://support.openanalytics.eu/t/datatables-ajax-error-with-shinyproxy-v-2-4-1/1763 .

์•ˆ๋…•ํ•˜์„ธ์š” @smlehman๋‹˜ , ์ถ”๊ฐ€ ์ •๋ณด ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

DataTables๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์˜ˆ์ œ Shiny ์•ฑ(Dockerfile ๋ฐ R ์†Œ์Šค)์„ ์ œ๊ณตํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?
ํ•˜๋‚˜์˜ ์•ฑ์ด ์žˆ์ง€๋งŒ Kubernetes ์„ค์ •(nginx๋„ ์‚ฌ์šฉ)์—๋Š” ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌ ํ•ด์š”!

์•ˆ๋…•ํ•˜์„ธ์š” @LEDfan
ํ™•์‹คํ•œ ๊ฒƒ. ์ „์ฒด ๊ทธ๋ฆผ์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ๊ธฐ๋ณธ ํŒŒ์ผ๋กœ ์ž‘์€ ์ €์žฅ์†Œ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์„ค์ •์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์ปจํ…์ŠคํŠธ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ์‚ฌ์šฉ์— ๊ด€์‹ฌ์ด ์žˆ๋Š” ์‚ฌ๋žŒ๋“ค์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ์ž‘์—… ์ค‘์ธ README๋„ ํฌํ•จํ–ˆ์Šต๋‹ˆ๋‹ค.

https://github.com/smlehman/shinyproxy-debugDT
๋ฌธ์ œ ํ•ด๊ฒฐ์— ๋„์›€์ด ๋  ๋‹ค๋ฅธ ๊ฒƒ์ด ์žˆ์œผ๋ฉด ์•Œ๋ ค์ฃผ์„ธ์š”.

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