{"id":314247,"date":"2020-12-03T15:01:22","date_gmt":"2020-12-03T15:01:22","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=314247"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=314247","title":{"rendered":"\u041e\u043f\u044b\u0442 \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u044f Shiny \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043e\u0442\u0447\u0435\u0442\u043d\u043e\u0441\u0442\u0438"},"content":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\">\n<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0421\u0435\u0440\u0433\u0435\u0439, \u044f \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a \u0432 \u0413\u041a \u00ab\u0412\u0435\u0437\u0451\u0442\u00bb. \u0418\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438 \u0442\u0430\u043a \u0441\u043b\u043e\u0436\u0438\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u0432 \u043d\u0430\u0448\u0435\u0439 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0431\u044b\u043b\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0441\u0438\u0441\u0442\u0435\u043c \u043e\u0442\u0447\u0435\u0442\u043d\u043e\u0441\u0442\u0438: \u043e\u0442 \u043f\u043b\u0430\u0442\u043d\u044b\u0445 \u0432 \u0432\u0438\u0434\u0435 Looker \u0438 Qlick \u2013 \u0434\u043e \u0441\u0430\u043c\u043e\u043f\u0438\u0441\u043d\u044b\u0445 \u0432\u0435\u0431-\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432. \u041e\u0434\u043d\u0430\u0436\u0434\u044b \u0440\u0435\u0448\u0438\u0432, \u0447\u0442\u043e \u0442\u0430\u043a \u0434\u0430\u043b\u044c\u0448\u0435 \u0436\u0438\u0442\u044c \u043d\u0435\u043b\u044c\u0437\u044f, \u043c\u044b \u0441\u0442\u0430\u043b\u0438 \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u0435\u0434\u0438\u043d\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u0443\u0434\u0435\u0442 \u0432\u0441\u0435, \u0438 \u0432 \u0438\u0442\u043e\u0433\u0435 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0438\u0441\u044c \u043d\u0430 Shiny. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043f\u0440\u043e \u043d\u0430\u0448 \u043e\u043f\u044b\u0442 \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u044f Shiny \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0433\u043e BI. \u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u0430 \u0432\u0441\u0435\u043c, \u043a\u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043e\u0442\u0447\u0435\u0442\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p><a name=\"habracut\"><\/a>  <\/p>\n<h2 id=\"soderzhanie\">\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435<\/h2>\n<p>  <\/p>\n<ul>\n<li><a href=\"#prichiny-vybora-shiny\">\u041f\u0440\u0438\u0447\u0438\u043d\u044b \u0432\u044b\u0431\u043e\u0440\u0430 Shiny<\/a><\/li>\n<li><a href=\"#vybiraem-sposob-razvertyvaniya-prilozheniy\">\u0412\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0441\u043f\u043e\u0441\u043e\u0431 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439<\/a><br \/> \n<ul>\n<li>Shiny Server <\/li>\n<li>Shiny Server Pro \u0438\u043b\u0438 RStudio Connect<\/li>\n<li>ShinyProxy<\/li>\n<li>Load Balancing<\/li>\n<\/ul>\n<\/li>\n<li><a href=\"#nastroyka-shinyproxy\">\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 ShinyProxy<\/a><\/li>\n<li><a href=\"#deploy-otchetov\">\u0414\u0435\u043f\u043b\u043e\u0439 \u043e\u0442\u0447\u0435\u0442\u043e\u0432<\/a><\/li>\n<li><a href=\"#sbor-statistiki\">\u0421\u0431\u043e\u0440 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438<\/a><\/li>\n<li><a href=\"#obschaya-struktura-otchetov-i-kontrol-dostupov\">\u041e\u0431\u0449\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043e\u0442\u0447\u0435\u0442\u043e\u0432 \u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u0432<\/a><\/li>\n<li><a href=\"#process-vnedreniya\">\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u044f <\/a><\/li>\n<li><a href=\"#nedostatki-i-neudobstva\">\u041d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438 \u0438 \u043d\u0435\u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430<\/a><\/li>\n<li><a href=\"#vyvod\">\u0412\u044b\u0432\u043e\u0434<\/a><\/li>\n<\/ul>\n<p>  <\/p>\n<h2 id=\"prichiny-vybora-shiny\">\u041f\u0440\u0438\u0447\u0438\u043d\u044b \u0432\u044b\u0431\u043e\u0440\u0430 Shiny<\/h2>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u0440\u0430\u0442\u043a\u0438\u0439 \u0440\u0430\u0441\u0441\u043a\u0430\u0437 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 Shiny<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<p>Shiny \u2013 \u044d\u0442\u043e \u043f\u0430\u043a\u0435\u0442 \u0434\u043b\u044f R, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0432\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u043e\u0442\u0447\u0435\u0442\u044b.<br \/>  <a href=\"https:\/\/shiny.rstudio.com\/\" rel=\"nofollow\">\u041e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0430\u0439\u0442<\/a> \u043f\u0440\u043e\u0435\u043a\u0442\u0430.<br \/>  <a href=\"https:\/\/shiny.rstudio.com\/gallery\/\" rel=\"nofollow\">\u0417\u0434\u0435\u0441\u044c<\/a> \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0432\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0438 \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u043e\u0432.<\/p>\n<\/div><\/div>\n<p>  <\/p>\n<ul>\n<li>\u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 UI \u2013 \u0432 \u0440\u044f\u0434\u0435 \u043e\u0442\u0447\u0435\u0442\u043e\u0432, \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0443\u0441\u043b\u043e\u0432\u0438\u0439 \u0432\u044b\u0431\u043e\u0440\u0430 \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u044b, \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440\u044b.<\/li>\n<li>\u0413\u0438\u0431\u043a\u043e\u0441\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043e\u0442\u0447\u0435\u0442\u043e\u0432 \u2013 \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 BI \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f \u0440\u0430\u0437\u043d\u044b\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043e\u0442\u0447\u0435\u0442\u0430\u043c\u0438, \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0431\u0438\u0437\u043d\u0435\u0441-\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0445\u043e\u0442\u0435\u043b \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u0442\u0447\u0435\u0442\u0430.<\/li>\n<li>\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 \u043e\u0442\u0447\u0435\u0442\u0430\u0445 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0433\u0438\u0442\u0430 \u2013 \u044d\u0442\u043e \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430, \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c \u043a\u0442\u043e, \u043a\u043e\u0433\u0434\u0430 \u0438 \u0447\u0442\u043e \u043c\u0435\u043d\u044f\u043b \u0432 \u043e\u0442\u0447\u0435\u0442\u0435.<\/li>\n<li>\u0411\u044b\u0441\u0442\u0440\u043e\u0435 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u043e\u0442\u0447\u0435\u0442\u043e\u0432 \u2013 \u0438\u043d\u043e\u0433\u0434\u0430 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0431\u0438\u0437\u043d\u0435\u0441-\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u043d\u0435 \u0434\u043e \u043a\u043e\u043d\u0446\u0430 \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u043a\u0430\u043a\u043e\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043e\u043d \u0445\u043e\u0447\u0435\u0442 \u0432 \u0438\u0442\u043e\u0433\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043f\u0440\u043e\u0439\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0433\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430 \u043e\u0442\u0447\u0435\u0442\u0430.<\/li>\n<li>\u041c\u0430\u043b\u043e\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432.<\/li>\n<li>\u0423\u0434\u043e\u0431\u043d\u0430\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0430 \u043e\u0442\u0447\u0435\u0442\u043e\u0432 \u2013 \u0442.\u043a. \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u044e\u0442 \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u043e\u0442\u0447\u0435\u0442\u044b, \u043d\u0443\u0436\u043d\u0430 \u0435\u0433\u043e \u0443\u0434\u043e\u0431\u043d\u0430\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0430, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u0432 \u043a\u0430\u043a\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u043e\u0442\u0447\u0435\u0442 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.<\/li>\n<li>\u0411\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e\u0441\u0442\u044c \u2013 \u043a\u0430\u043a \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u043b\u044e\u0441<\/li>\n<\/ul>\n<p>  <\/p>\n<h2 id=\"vybiraem-sposob-razvertyvaniya-prilozheniy\">\u0412\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0441\u043f\u043e\u0441\u043e\u0431 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439<\/h2>\n<p>  <\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u043e\u0442\u0447\u0435\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u043a\u0430\u043a-\u0442\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0431\u0438\u0437\u043d\u0435\u0441-\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0439.<\/p>\n<p>  <\/p>\n<p><strong><a href=\"https:\/\/rstudio.com\/products\/shiny\/shiny-server\/\" rel=\"nofollow\">Shiny Server<\/a><\/strong> (\u0411\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0439)<\/p>\n<p>  <\/p>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a \u0432\u0441\u0435\u0445 \u043e\u0442\u0447\u0435\u0442\u043e\u0432 \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 R<\/p>\n<p>  <\/p>\n<p>\u041f\u043b\u044e\u0441\u044b:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u041d\u0435\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.<\/li>\n<li>\u041f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435.<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u041c\u0438\u043d\u0443\u0441\u044b:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u041e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c 20 \u0441\u0435\u0430\u043d\u0441\u043e\u0432, \u0442.\u0435. \u0431\u043e\u043b\u044c\u0448\u0435 20 \u0447\u0435\u043b\u043e\u0432\u0435\u043a \u0441\u0435\u0440\u0432\u0435\u0440 \u043d\u0435 \u043f\u0440\u0438\u043c\u0435\u0442.<\/li>\n<li>\u041d\u0435\u0442 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.<\/li>\n<li>\u0412\u0441\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0447\u0435\u0440\u0435\u0437 \u043e\u0434\u0438\u043d \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043d\u0435\u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430: \u0435\u0441\u043b\u0438 \u043a\u0442\u043e-\u0442\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442 \u0442\u044f\u0436\u0435\u043b\u044b\u0439 \u043e\u0442\u0447\u0435\u0442, \u0442\u043e \u0432\u0441\u044f \u043e\u0442\u0447\u0435\u0442\u043d\u043e\u0441\u0442\u044c \u0431\u0443\u0434\u0435\u0442 \u0434\u0438\u043a\u043e \u0442\u0443\u043f\u0438\u0442\u044c.<\/li>\n<\/ul>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/jy\/n9\/mg\/jyn9mgqa3kxooj7geihjng0tlii.png\"><br \/>  <em><a href=\"https:\/\/appsilon.com\/alternatives-to-scaling-shiny\/\" rel=\"nofollow\">\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438<\/a><\/em><\/p>\n<p>  <\/p>\n<p><strong><a href=\"https:\/\/rstudio.com\/products\/shiny-server-pro\/\" rel=\"nofollow\">Shiny Server Pro \u0438\u043b\u0438 RStudio Connect<\/a><\/strong> (\u041f\u043b\u0430\u0442\u043d\u044b\u0439)<\/p>\n<p>  <\/p>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a \u0440\u0430\u0437\u043d\u044b\u0445 \u043e\u0442\u0447\u0435\u0442\u043e\u0432 \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u0445 R.<\/p>\n<p>  <\/p>\n<p>\u041f\u043b\u044e\u0441\u044b:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u041d\u0435\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.<\/li>\n<li>\u041d\u0435\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439.<\/li>\n<li>\u041c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.<\/li>\n<li>\u041c\u043e\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0430\u0440\u043e\u043b\u044c \u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435.<\/li>\n<li>\u0420\u0430\u0431\u043e\u0442\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u0445.<\/li>\n<li>\u041f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435.<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u041c\u0438\u043d\u0443\u0441\u044b:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u041d\u0435 \u043d\u0430\u0448\u0435\u043b.<\/li>\n<\/ul>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/42\/dc\/nb\/42dcnbxd5eghtsjboicxjb5bjek.png\"><br \/>  <em><a href=\"https:\/\/appsilon.com\/alternatives-to-scaling-shiny\/\" rel=\"nofollow\">\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438<\/a><\/em><\/p>\n<p>  <\/p>\n<p><strong><a href=\"https:\/\/www.shinyproxy.io\/\" rel=\"nofollow\">ShinyProxy<\/a><\/strong> (\u0411\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0439)<\/p>\n<p>  <\/p>\n<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u0434\u043e\u043a\u0435\u0440\u0435.<\/p>\n<p>  <\/p>\n<p>\u041f\u043b\u044e\u0441\u044b:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u041d\u0435\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.<\/li>\n<li>\u041d\u0435\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439.<\/li>\n<li>\u041c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u041c\u0438\u043d\u0443\u0441\u044b:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u0422\u0430\u043a \u043a\u0430\u043a \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f ShinyProxy \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440, \u0442\u043e \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u044f\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430.<\/li>\n<li>\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0434\u043e\u043b\u0436\u0435\u043d \u0434\u043e\u0436\u0434\u0430\u0442\u044c\u0441\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430.<\/li>\n<\/ul>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/tx\/ta\/_7\/txta_7so8nnazervcqeonlc_7mg.png\"><br \/>  <em><a href=\"https:\/\/appsilon.com\/alternatives-to-scaling-shiny\/\" rel=\"nofollow\">\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438<\/a><\/em><\/p>\n<p>  <\/p>\n<p><strong><a href=\"https:\/\/appsilon.com\/shiny\/\" rel=\"nofollow\">Load Balancing<\/a><\/strong> (\u041f\u043b\u0430\u0442\u043d\u044b\u0439)<\/p>\n<p>  <\/p>\n<p>\u0420\u0430\u0437\u0432\u0438\u0442\u0438\u0435 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0438 ShinyProxy \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f, \u0435\u0441\u043b\u0438 \u0432\u0430\u0448 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0441 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u043e\u0447\u0435\u043d\u044c \u0442\u044f\u0436\u0435\u043b\u044b\u0439 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u043e\u043a\u043e\u043b\u043e \u043c\u0438\u043d\u0443\u0442\u044b \u0438 \u0431\u043e\u043b\u0435\u0435. \u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u043f\u0440\u0435\u0434\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438.<\/p>\n<p>  <\/p>\n<p>\u041f\u043b\u044e\u0441\u044b:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u041d\u0435\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.<\/li>\n<li>\u041d\u0435\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439.<\/li>\n<li>\u041c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u041c\u0438\u043d\u0443\u0441\u044b:<\/p>\n<p>  <\/p>\n<ul>\n<li>Load Balancing \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u044f\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430.<\/li>\n<\/ul>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/ba\/uy\/bq\/bauybqschf5b0gwbblq5a7fvkny.png\"><br \/>  <em><a href=\"https:\/\/appsilon.com\/alternatives-to-scaling-shiny\/\" rel=\"nofollow\">\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438<\/a><\/em><\/p>\n<p>  <\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0440\u0435\u0448\u0438\u043b\u0438 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f \u043d\u0430 ShinyProxy.<\/p>\n<p>  <\/p>\n<h2 id=\"nastroyka-shinyproxy\">\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 ShinyProxy<\/h2>\n<p>  <\/p>\n<p>\u0412 \u0446\u0435\u043b\u043e\u043c <a href=\"https:\/\/www.shinyproxy.io\/getting-started\/\" rel=\"nofollow\">\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043f\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438<\/a> \u043f\u0440\u043e\u0448\u043b\u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e, \u0431\u044b\u043b\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u044b \u0434\u0432\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438 HAProxy \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430 \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438.<br \/>  \u0414\u043b\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0431\u044b\u043b \u0432\u044b\u0431\u0440\u0430\u043d \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b LDAP \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0439 Active Directory.<\/p>\n<p>  <\/p>\n<p>\u0418\u0442\u043e\u0433\u043e\u0432\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 ShinyProxy \u043d\u0430 \u0434\u0432\u0443\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u0445 \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u0442\u0430\u043a.<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">proxy:   title: ShinyProxy   bind-address:     - 0.0.0.0   heartbeat-timeout: 60000   container-wait-time: 60000   authentication: ldap   admin-groups: Domain Users # LDAP configuration   ldap:     url: ldap:\/\/host:port\/dc=ad,dc=corp     user-search-base:     user-search-filter: (sAMAccountName={0})     group-search-base: OU=Groups     group-search-filter: (member={0})     manager-dn: CN=shinyproxy,CN=Users,DC=ad,DC=corp     manager-password: password # Docker configuration   docker:     cert-path: \/home\/none     url: http:\/\/localhost:2375     port-range-start: 20010     port-range-max: 20900<\/code><\/pre>\n<p>  <\/p>\n<p>\u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u0432\u044b\u044f\u0441\u043d\u0438\u043b\u043e\u0441\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<p>  <\/p>\n<ul>\n<li>ShinyProxy \u0442\u0435\u0440\u044f\u0435\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u0434\u043e\u043a\u0435\u0440\u0430 \u0438 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0438\u0445 \u043d\u0430\u0439\u0442\u0438 \u0434\u043b\u044f \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f, \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0448\u043b\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0441\u0430. \u0420\u0435\u0448\u0435\u043d\u043e \u0431\u044b\u043b\u043e \u043f\u043e\u0432\u0435\u0441\u0438\u0442\u044c \u043d\u0430 \u043a\u0440\u043e\u043d \u043a\u0438\u043b\u043b \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 45 \u043c\u0438\u043d.<br \/> \n<pre><code class=\"bash\">*\/5 * * * * docker ps --format='{{.Names}}' | grep -v cadvisor | xargs -n 1 -r docker inspect -f '{{.ID}} {{.State.Running}} {{.State.StartedAt}}' | awk '$2 == &quot;true&quot; &amp;&amp; $3 &lt;= &quot;'$(date -d '45 minutes ago' -Ins --utc | sed 's\/+0000\/Z\/')'&quot; { print $1 }' | xargs -r docker kill<\/code><\/pre>\n<\/li>\n<li>\u0411\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u0440\u0435\u043a\u043b\u0430\u043c\u044b \u0437\u0430\u043f\u0440\u0435\u0449\u0430\u043b \u0434\u043e\u0441\u0442\u0443\u043f \u043d\u0430 \u043e\u0442\u0447\u0435\u0442\u044b, \u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u044b\u043b \u043f\u0440\u0435\u0444\u0438\u043a\u0441 webstat. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u043b\u0438 \u0432\u0441\u0435\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0438 \u0440\u0435\u043a\u043b\u0430\u043c\u044b \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 \u0441 \u043e\u0442\u0447\u0435\u0442\u043d\u043e\u0441\u0442\u044c\u044e.<\/li>\n<\/ul>\n<p>  <\/p>\n<h2 id=\"deploy-otchetov\">\u0414\u0435\u043f\u043b\u043e\u0439 \u043e\u0442\u0447\u0435\u0442\u043e\u0432<\/h2>\n<p>  <\/p>\n<p>\u0418\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u0432\u0441\u0435\u0445 \u043e\u0442\u0447\u0435\u0442\u043e\u0432 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 GitLab. \u0415\u0433\u043e \u0438 \u0440\u0435\u0448\u0438\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043e\u0442\u0447\u0435\u0442\u043e\u0432 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d\u043e\u0432. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0431\u044b\u043b\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u0411\u044b\u043b \u0441\u043e\u0437\u0434\u0430\u043d &quot;\u0433\u043b\u0430\u0432\u043d\u044b\u0439&quot; \u0434\u043e\u043a\u0435\u0440, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d ShinyServer, \u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043d\u0430\u0431\u043e\u0440 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0434\u043b\u044f R. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043c\u044b \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u043c \u0441\u0443\u043c\u043c\u0430\u0440\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043c \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u043c\u043e\u0433\u043e \u0434\u0438\u0441\u043a\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0438 \u0443\u0441\u043a\u043e\u0440\u0438\u043c \u0441\u0431\u043e\u0440\u043a\u0443 \u043e\u0442\u0447\u0435\u0442\u043e\u0432.<\/li>\n<\/ul>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u0418\u0441\u0445\u043e\u0434\u043d\u0438\u043a \u0433\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u0434\u043e\u043a\u0435\u0440\u0430<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"plaintext\">FROM rocker\/r-ver:latest  RUN apt-get update -y &amp;&amp; \\   apt-get install --no-install-recommends -y sudo gdebi-core pandoc pandoc-citeproc libcurl4-gnutls-dev libcairo2-dev libxt-dev wget libpq-dev \\     libjpeg-dev libssl-dev libprotobuf-dev libjq-dev protobuf-compiler libudunits2-dev gdal-bin proj-bin libgdal-dev libproj-dev #gnupg dirmngr   RUN apt-get update &amp;&amp; \\   apt-get install --no-install-recommends -y java-common  RUN echo oracle-java8-installer shared\/accepted-oracle-license-v1-1 select true | \/usr\/bin\/debconf-set-selections RUN TEMP_DEB=&quot;$(mktemp)&quot; &amp;&amp; \\   wget -O &quot;$TEMP_DEB&quot; 'https:\/\/launchpad.net\/~webupd8team\/+archive\/ubuntu\/java\/+build\/12469417\/+files\/oracle-java8-installer_8u131-1~webupd8~2_all.deb' &amp;&amp; \\   dpkg -i &quot;$TEMP_DEB&quot; &amp;&amp; \\   rm -f &quot;$TEMP_DEB&quot;  RUN wget --no-verbose https:\/\/download3.rstudio.org\/ubuntu-14.04\/x86_64\/VERSION  -O &quot;version.txt&quot; &amp;&amp; \\     VERSION=$(cat version.txt)  &amp;&amp; \\     wget --no-verbose &quot;https:\/\/download3.rstudio.org\/ubuntu-14.04\/x86_64\/shiny-server-$VERSION-amd64.deb&quot; -O ss-latest.deb &amp;&amp; \\     gdebi -n ss-latest.deb &amp;&amp; \\     rm -f version.txt ss-latest.deb &amp;&amp; \\     . \/etc\/environment &amp;&amp; \\     rm -rf \/var\/lib\/apt\/lists\/*  RUN R -e &quot;install.packages(c('highcharter','clickhouse','data.table','DataCombine','DBI','devtools','dplyr','dqshiny','DT','esquisse','forcats','ggplot2','ggthemes','gridExtra','hexbin','htmlwidgets','lattice','lazyeval','leaflet','leaflet.extras','lubridate','openxlsx','pivottabler','plotly','raster','RClickhouse','reactable','readxl','reshape','reshape2','rgdal','rhandsontable','RPostgres','RPostgreSQL','RSQLite','scales','sf','shiny','shinycssloaders','shinydashboard','shinyjqui','shinyjs','shinyMatrix','shinyTime','shinyWidgets','sjmisc','sp','sqldf','stringr','tibble','tidyr','writexl','yaml','geosphere'), repos='https:\/\/cran.rstudio.com\/')&quot;  RUN apt-get update &amp;&amp; \\   apt-get install -y r-cran-rjava  RUN R CMD javareconf  RUN R -e &quot;install.packages(c('RJDBC'), repos='https:\/\/cran.rstudio.com\/')&quot;  RUN java -version<\/code><\/pre>\n<\/div><\/div>\n<p>  <\/p>\n<ul>\n<li>&quot;\u0413\u043b\u0430\u0432\u043d\u044b\u0439&quot; \u0434\u043e\u043a\u0435\u0440 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u043e\u0442\u0447\u0435\u0442\u0435<\/li>\n<\/ul>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041f\u0440\u0438\u043c\u0435\u0440 \u0434\u043e\u043a\u0435\u0440 \u0444\u0430\u0439\u043b\u0430 \u043e\u0442\u0447\u0435\u0442\u0430<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"plaintext\">FROM host:port\/db\/for_shiny_reports\/shiny_docker:latest # \u0413\u043b\u0430\u0432\u043d\u044b\u0439 \u0434\u043e\u043a\u0435\u0440 EXPOSE 3838 COPY app \/srv\/shiny-server\/app RUN mkdir -p \/var\/lib\/shiny-server\/bookmarks\/shiny  CMD [&quot;R&quot;, &quot;-e&quot;, &quot;shiny::runApp('\/srv\/shiny-server\/app', port = 3838, host = '0.0.0.0')&quot;]<\/code><\/pre>\n<\/div><\/div>\n<p>  <\/p>\n<ul>\n<li>\u0412 \u043a\u0430\u0436\u0434\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043d \u043f\u0430\u0439\u043f\u0430\u043b\u0439\u043d \u0441\u0431\u043e\u0440\u043a\u0438, \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u043a\u043e\u043c\u0438\u0442 \u0432 \u043e\u0442\u0447\u0435\u0442\u0435, \u0442\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0441\u0431\u043e\u0440\u043a\u0430 \u043e\u0442\u0447\u0435\u0442\u0430.<\/li>\n<\/ul>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041f\u0440\u0438\u043c\u0435\u0440 \u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d\u0430 \u0441\u0431\u043e\u0440\u043a\u0438 \u043e\u0442\u0447\u0435\u0442\u0430(.gitlab-ci.yml)<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"plaintext\">stages: - build  variables:   IMAGE_TAG: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG   DOCKER_DRIVER: overlay2  build-master:   image: docker:18.09.7   services:   - name: docker:18.09.7-dind   stage: build   before_script:     - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY   script:     - apk add --update curl     - docker pull $CI_REGISTRY_IMAGE || true     - docker build --cache-from $CI_REGISTRY_IMAGE:latest --pull -t $CI_REGISTRY_IMAGE .     - docker run -d -e SHINYPROXY_USERNAME=$SHINYPROXY_USERNAME1 -e SHINYPROXY_USERGROUPS=$SHINYPROXY_USERGROUPS1  -p 0.0.0.0:3838:3838\/tcp $CI_REGISTRY_IMAGE R -e &quot;shiny::runApp('\/srv\/shiny-server\/app', port = 3838, host = '0.0.0.0')&quot;     - sleep 30 &amp;&amp; curl -Is http:\/\/docker:3838\/ | grep &quot;200 OK&quot;     - docker push $CI_REGISTRY_IMAGE   only:     - master <\/code><\/pre>\n<\/div><\/div>\n<p>  <\/p>\n<ul>\n<li>\u0422.\u043a. \u0437\u0430 \u0434\u0435\u043d\u044c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0430\u0432\u043e\u043a \u043f\u043e \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c \u043e\u0442\u0447\u0435\u0442\u0430\u043c \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u0430\u043a\u043e\u0433\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u043d\u043e\u0432\u043e\u0433\u043e \u043e\u0442\u0447\u0435\u0442\u0430, \u0442\u043e \u0437\u0430\u043b\u0438\u0432\u043a\u0443 \u0434\u043e\u043a\u0435\u0440-\u043e\u0431\u0440\u0430\u0437\u043e\u0432 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0431\u044b\u043b\u043e \u0440\u0435\u0448\u0435\u043d\u043e \u0432\u044b\u043d\u0435\u0441\u0442\u0438 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u0441 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c CI\/CD \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043f\u043b\u0435\u0439\u0431\u0443\u043a\u043e\u0432 Ansible. \u041f\u0440\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u043d\u043e\u0432\u043e\u0433\u043e \u043e\u0442\u0447\u0435\u0442\u0430 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043d\u043e\u0432\u043e \u043f\u0435\u0440\u0435\u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u043e\u043d\u0444\u0438\u0433 \u0434\u043b\u044f ShinyProxy. \u041d\u0438\u0436\u0435 \u0448\u0430\u0431\u043b\u043e\u043d \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0430 \u0434\u043b\u044f Ansible<\/li>\n<\/ul>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u0428\u0430\u0431\u043b\u043e\u043d application.yml<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"plaintext\">proxy:   title: ShinyProxy   bind-address:     - 0.0.0.0   heartbeat-timeout: 60000   container-wait-time: {{ shinyproxy_container_wait_time }}   authentication: {{ shinyproxy_authentication }}   admin-groups: {{ shinyproxy_admin_group }}   usage-stats-url: {{shinyproxy_usage_stats_url}}   usage-stats-username: {{shinyproxy_usage_stats_username}}   usage-stats-password: {{shinyproxy_usage_stats_password}} # LDAP configuration   ldap:     url: {{ shinyproxy_ldap_server }}     user-search-base: {{ shinyproxy_ldap_user_search_base }}     user-search-filter: {{ shinyproxy_ldap_user_search_filter }}     group-search-base: {{ shinyproxy_ldap_group_search_base }}     group-search-filter: {{ shinyproxy_ldap_group_search_filter }}     manager-dn: {{ shinyproxy_ldap_admin }}     manager-password: {{ shinyproxy_ldap_admin_pwd }} # Docker configuration   docker:     cert-path: \/home\/none     url: {{ shinyproxy_docker_url }}     port-range-start: {{ shinyproxy_docker_port_range_start }}     port-range-max: {{ shinyproxy_docker_port_range_max }}   specs: {% if shinyproxy_apps is defined %} {% for app in shinyproxy_apps %}   - id: {{ app.id }}     display-name: {{ app.display_name }} {% if app.description is defined %}     description: {{ app.description }} {% endif %}     container-cmd: [&quot;R&quot;, &quot;-e&quot;, &quot;shiny::runApp('\/srv\/shiny-server\/app', port = 3838, host = '0.0.0.0')&quot;]     container-image: {{ CI_REGISTRY }}\/db\/shinyproxy\/{{ app.container_image }} #    docker-memory: {{ app.docker_memory | default('2g') }} {% if app.access_groups is defined %}     access-groups: [{{ app.access_groups }}] {% endif %}     groups: [{{ app.groups }}] {% if app.container_volumes is defined %}     container-volumes: [&quot;{{ app.container_volumes }}&quot;] {% endif %}  {% endfor %} {% endif %}  server:   servlet.session.timeout: 900  logging:   file:     shinyproxy.log<\/code><\/pre>\n<\/div><\/div>\n<p>  <\/p>\n<p>\u042d\u0442\u043e\u0442 \u0448\u0430\u0431\u043b\u043e\u043d \u043f\u043e\u0434\u0430\u0435\u0442\u0441\u044f \u0432 \u0437\u0430\u0434\u0430\u0447\u043d\u0438\u043a ansible<\/p>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u0417\u0430\u0434\u0430\u0447\u0438 \u043f\u043e \u0437\u0430\u043b\u0438\u0432\u043a\u0435 \u043e\u0442\u0447\u0435\u0442\u043e\u0432 \u0438 \u0441\u0431\u043e\u0440\u043a\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0430<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"plaintext\">--- - name: Log into registry and force re-authorization   docker_login:     registry: &quot;{{ CI_REGISTRY }}&quot;     username: gitlab-ci-token     password: &quot;{{ CI_JOB_TOKEN }}&quot;     reauthorize: true  - name: Pull the docker images   command: docker pull host:port\/db\/shinyproxy\/{{ item.container_image }}:latest   with_items: &quot;{{ shinyproxy_apps }}&quot;  - name: Install the shinyproxy configuration file   template: src=shinyproxy-conf.yml.j2 dest=\/etc\/shinyproxy\/application.yml   become: true   when: not ansible_check_mode   notify: Restart shinyproxy  - name: Ensure that the shinyproxy service is enabled and running   service: name=shinyproxy state=started enabled=yes   become: true<\/code><\/pre>\n<\/div><\/div>\n<p>  <\/p>\n<p>\u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445 (<code>shinyproxy_apps<\/code>) \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432 json, \u0432 \u0442\u0430\u043a\u043e\u043c \u0432\u0438\u0434\u0435.<\/p>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u0428\u0430\u0431\u043b\u043e\u043d application.yml<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"json\">{   &quot;shinyproxy_apps&quot;: [       {       &quot;id&quot;: &quot;report_one&quot;,       &quot;display_name&quot;: &quot;\u041e\u0442\u0447\u0435\u0442 1&quot;,       &quot;container_image&quot;: &quot;report_one&quot;,       &quot;access_groups&quot;: &quot;\u0413\u0440\u0443\u043f\u043f\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 1, \u0413\u0440\u0443\u043f\u043f\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 2&quot;,       &quot;groups&quot;: &quot;Domain Users&quot;     },     {       &quot;id&quot;: &quot;report_two&quot;,       &quot;display_name&quot;: &quot;\u041e\u0442\u0447\u0435\u0442 2&quot;,       &quot;container_image&quot;: &quot;report_two&quot;,       &quot;access_groups&quot;: &quot;\u0413\u0440\u0443\u043f\u043f\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 1, \u0413\u0440\u0443\u043f\u043f\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 2&quot;,       &quot;groups&quot;: &quot;Domain Users&quot;     }   ] }<\/code><\/pre>\n<\/div><\/div>\n<p>  <\/p>\n<p>\u0412\u0441\u0435 \u044d\u0442\u043e \u0431\u0435\u0437\u043e\u0431\u0440\u0430\u0437\u0438\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u043a\u0438\u043c CI<\/p>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">.gitlab-ci.yml<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"plaintext\">stages: - deploy - test  variables:   IMAGE_TAG: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG  deploy:   stage: deploy   image: $CI_REGISTRY_IMAGE   script:     - ansible-playbook --check playbook.yml -i hosts.inil --extra-vars=@apps.json -e CI_PROJECT_NAME=$CI_PROJECT_NAME -e CI_REGISTRY_IMAGE=$IMAGE_TAG -e CI_PROJECT_NAMESPACE=$CI_PROJECT_NAMESPACE -e CI_REGISTRY=$CI_REGISTRY -eCI_JOB_TOKEN=$CI_JOB_TOKEN -vv     - ansible-playbook playbook.yml -i hosts.ini --extra-vars=@apps.json -e CI_PROJECT_NAME=$CI_PROJECT_NAME -e CI_REGISTRY_IMAGE=$IMAGE_TAG -e CI_PROJECT_NAMESPACE=$CI_PROJECT_NAMESPACE -e CI_REGISTRY=$CI_REGISTRY -e CI_JOB_TOKEN=$CI_JOB_TOKEN -vv   except:     - triggers<\/code><\/pre>\n<\/div><\/div>\n<p>  <\/p>\n<h2 id=\"sbor-statistiki\">\u0421\u0431\u043e\u0440 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438<\/h2>\n<p>  <\/p>\n<p>\u0412 ShinyProxy \u0435\u0441\u0442\u044c \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e <a href=\"https:\/\/www.shinyproxy.io\/usage-statistics\/\" rel=\"nofollow\">\u0441\u0431\u043e\u0440\u0430 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438<\/a>, \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043e\u043d\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e 2 \u0421\u0423\u0411\u0414; InfluxDB \u0438 MonetDB. \u0421\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0432\u0438\u0434\u0430: \u0432\u0440\u0435\u043c\u044f \u0441\u043e\u0431\u044b\u0442\u0438\u044f; \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c; \u0442\u0438\u043f \u0441\u043e\u0431\u044b\u0442\u0438\u044f (\u043b\u043e\u0433\u0438\u043d\/\u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0435\/\u0437\u0430\u043a\u0440\u044b\u0442\u0438\u0435 \u043e\u0442\u0447\u0435\u0442\u0430); \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043e\u0442\u0447\u0435\u0442\u0430.<\/p>\n<p>  <\/p>\n<p>\u041d\u043e \u0434\u043b\u044f \u043d\u0430\u0448\u0438\u0445 \u0446\u0435\u043b\u0435\u0439 \u043c\u044b \u043e\u0442\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u043e\u0442 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430, \u0437\u0430\u043c\u0435\u043d\u0438\u0432 \u0435\u0433\u043e \u0441\u0430\u043c\u043e\u043f\u0438\u0441\u043d\u044b\u043c\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u044f\u043c\u0438 \u0441 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u043e\u0439 \u0432 Postgres, \u0442\u0430\u043a \u043c\u044b \u0442\u0435\u0440\u044f\u0435\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u0438\u0434\u0435\u0442\u044c \u043a\u0442\u043e \u043b\u043e\u0433\u0438\u043d\u0438\u043b\u0441\u044f (\u043d\u043e \u043d\u0430\u043c \u044d\u0442\u043e \u0438 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e), \u0437\u0430\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u0435\u0441\u0442\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u0443\u044e \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443 \u043f\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c. \u041f\u043e\u043c\u0438\u043c\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u0445\u043e\u0434\u0430, \u0438\u043c\u0435\u043d\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438 \u043e\u0442\u0447\u0435\u0442\u0430, \u0435\u0449\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0433\u0440\u0443\u043f\u043f\u0430\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 Active Directory. \u0422\u0430\u043a \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0442\u043e\u0447\u043d\u0435\u0435 \u043f\u043e\u043d\u044f\u0442\u044c, \u0438\u0437-\u0437\u0430 \u0447\u0435\u0433\u043e \u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043e\u0442\u0447\u0435\u0442.<\/p>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041f\u0440\u0438\u043c\u0435\u0440 \u0441\u0431\u043e\u0440\u0430 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"r\">con_stat &lt;- dbConnect(RPostgres::Postgres(),host = 'host', port = 5432, dbname = &quot;dbname&quot;, user = &quot;user&quot;, password = &quot;password&quot;) vizit_df &lt;- data.frame(user = Sys.getenv(&quot;SHINYPROXY_USERNAME&quot;), groups = Sys.getenv(&quot;SHINYPROXY_USERGROUPS&quot;), app = 'app_name', timie_visit = Sys.time()) dbWriteTable(con_stat, &quot;visit_apps&quot;, vizit_df, append=TRUE) dbDisconnect(con_stat) rm(vizit_df)<\/code><\/pre>\n<\/div><\/div>\n<p>  <\/p>\n<p>\u041e\u0431\u0449\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u0432\u0441\u0435\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043e\u0442\u0447\u0435\u0442\u043d\u043e\u0441\u0442\u0438 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a-\u0442\u043e \u0442\u0430\u043a<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/jl\/jq\/ls\/jljqlsqijevftfgm_r9o_s3kw0w.png\"><\/p>\n<p>  <\/p>\n<h2 id=\"obschaya-struktura-otchetov-i-kontrol-dostupov\">\u041e\u0431\u0449\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043e\u0442\u0447\u0435\u0442\u043e\u0432 \u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u0432<\/h2>\n<p>  <\/p>\n<p>\u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u043c\u0435\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043e\u0442\u0447\u0435\u0442\u0430\u043c \u0438 \u0438\u0445 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u043c\u0443. \u041d\u0430\u0431\u043e\u0440 \u043e\u0442\u0447\u0435\u0442\u043e\u0432 \u0434\u043b\u044f \u0442\u043e\u043f-\u043c\u0435\u043d\u0435\u0434\u0436\u043c\u0435\u043d\u0442\u0430 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u043d\u0430\u0431\u043e\u0440\u0430 \u043e\u0442\u0447\u0435\u0442\u043e\u0432 \u0434\u043b\u044f \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430 \u0433\u043e\u0440\u043e\u0434\u0430. \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0438 \u0441 \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u043c \u043a \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438: \u0440\u0435\u0433\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u043c\u043e\u0436\u0435\u0442 \u0432\u0438\u0434\u0435\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0432\u043e\u0439 \u0433\u043e\u0440\u043e\u0434, \u0430 \u0442\u043e\u043f \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u043c\u043e\u0436\u0435\u0442 \u0432\u0438\u0434\u0435\u0442\u044c \u0432\u0441\u0435 \u0433\u043e\u0440\u043e\u0434\u0430. \u0427\u0442\u043e\u0431\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u0431\u044b\u043b\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435.<\/p>\n<p>  <\/p>\n<p>\u0412 \u0441\u0430\u043c\u043e\u043c ShinyProxy \u0435\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u043c \u0433\u0440\u0443\u043f\u043f\u0430\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0440\u0430\u0437\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u043e\u0442\u0447\u0435\u0442\u043e\u0432, \u043e\u043d \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0433\u0440\u0443\u043f\u043f Active Directory \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0435 \u043e\u0442\u0447\u0435\u0442\u0430, \u0432 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0435 <a href=\"https:\/\/www.shinyproxy.io\/configuration\/#apps\" rel=\"nofollow\">access-groups<\/a>. \u0414\u043b\u044f \u044d\u0442\u0438\u0445 \u0446\u0435\u043b\u0435\u0439 \u0431\u044b\u043b\u0438 \u0437\u0430\u0432\u0435\u0434\u0435\u043d\u044b \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0433\u0440\u0443\u043f\u043f\u044b LDAP \u0434\u043b\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u0439, \u0432\u0438\u0434\u0430: \u041c\u0430\u0440\u043a\u0435\u0442\u0438\u043d\u0433, \u0410\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430, \u0422\u043e\u043f-\u043c\u0435\u043d\u0435\u0434\u0436\u043c\u0435\u043d\u0442 \u0438 \u043f\u0440.<\/p>\n<p>  <\/p>\n<p>\u041d\u043e \u0432\u043e\u0442 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u0433\u043e\u0440\u043e\u0434\u0430\u043c \u0438\u043b\u0438 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430\u043c \u0443\u0436\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0430\u043c\u043e\u043f\u0438\u0441\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442.<\/p>\n<p>  <\/p>\n<ol>\n<li>\u0423 \u0432\u0441\u0435\u0445 \u0440\u0435\u0433\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u043e\u0432 \u0432 \u0433\u0440\u0443\u043f\u043f\u0430\u0445 Active Directory \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043d \u0433\u043e\u0440\u043e\u0434, \u0430 ShinyProxy \u043f\u0440\u0438 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0447\u0435\u0440\u0435\u0437 LDAP \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0443 \u0441 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u043c\u0438 \u0433\u0440\u0443\u043f\u043f\u0430\u043c\u0438 \u0432 <a href=\"https:\/\/www.shinyproxy.io\/configuration\/#environment-variables\" rel=\"nofollow\">\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0441\u0440\u0435\u0434\u044b<\/a> <code>SHINYPROXY_USERGROUPS<\/code>. \u041f\u0440\u043e\u0447\u0438\u0442\u0430\u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e, \u043c\u044b \u0441\u043c\u043e\u0436\u0435\u043c \u0438\u0437\u0432\u043b\u0435\u0447\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0433\u043e\u0440\u043e\u0434\u043e\u0432 \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. <\/li>\n<li>\u0422\u0430\u043a\u0436\u0435 \u0432\u0441\u0435 \u0433\u0440\u0443\u043f\u043f\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 (\u041c\u0430\u0440\u043a\u0435\u0442\u0438\u043d\u0433, \u0410\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430, \u0422\u043e\u043f-\u043c\u0435\u043d\u0435\u0434\u0436\u043c\u0435\u043d\u0442 \u0438 \u043f\u0440.) \u0431\u044b\u043b\u0438 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u044b \u043d\u0430 \u0442\u0435\u0445, \u043a\u043e\u043c\u0443 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043c\u043e\u0436\u043d\u043e \u0432\u0438\u0434\u0435\u0442\u044c \u0432\u0441\u0435 \u0433\u043e\u0440\u043e\u0434\u0430, \u0438 \u0442\u0435\u0445, \u043a\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0432\u0438\u0434\u0435\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0433\u043e\u0440\u043e\u0434\u0430 \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0432 LDAP. \u0422\u0430\u043a, \u043f\u0440\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0438 \u043e\u0442\u0447\u0435\u0442\u0430, \u043c\u044b \u0441\u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043d\u044f\u0442\u044c, \u043d\u0443\u0436\u043d\u043e \u043b\u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u043e\u0434\u0438\u043d \u0433\u043e\u0440\u043e\u0434 \u0438\u043b\u0438 \u0432\u0441\u0435 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a \u0438\u043b\u0438 \u0442\u043e\u043f-\u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440).<\/li>\n<li>\u0415\u0449\u0451 \u0431\u044b\u043b\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u00ab\u0418\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439\u00bb. \u0423 \u0442\u0435\u0445 \u0436\u0435 \u043c\u0430\u0440\u043a\u0435\u0442\u043e\u043b\u043e\u0433\u043e\u0432 \u0438\u043b\u0438 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u043e\u0432 \u0433\u043e\u0440\u043e\u0434\u0430 \u0435\u0441\u0442\u044c \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u0438, \u044d\u0442\u0438 \u043b\u044e\u0434\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0432\u0438\u0434\u0435\u0442\u044c \u0432\u0441\u0435 \u0433\u043e\u0440\u043e\u0434\u0430 \u043f\u0440\u0438 \u0442\u043e\u043c \u0436\u0435 \u0441\u0430\u043c\u043e\u043c \u043d\u0430\u0431\u043e\u0440\u0435 \u043e\u0442\u0447\u0435\u0442\u043e\u0432. \u0422\u0430\u043a \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0434\u043b\u044f \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c 100+ \u0433\u043e\u0440\u043e\u0434\u043e\u0432 \u0432 Active Directory. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0432 \u044d\u0442\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0437\u0430\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u043b\u043e\u0433\u0438\u043d\u044b \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u0435\u0439 \u043e\u0442\u0434\u0435\u043b\u043e\u0432, \u0438 \u043f\u0440\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0438 \u043e\u0442\u0447\u0435\u0442\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u0432\u0438\u0434\u0435\u0442\u044c \u0432\u0441\u0435 \u0433\u043e\u0440\u043e\u0434\u0430.<\/li>\n<\/ol>\n<p>  <\/p>\n<p><strong>\u041e\u0431\u0449\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043e\u0442\u0447\u0435\u0442\u0430 Shiny<\/strong><\/p>\n<p>  <\/p>\n<pre><code class=\"r\">username &lt;- Sys.getenv(&quot;SHINYPROXY_USERNAME&quot;) # \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0438\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f user_groups &lt;- Sys.getenv(&quot;SHINYPROXY_USERGROUPS&quot;) # \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0433\u0440\u0443\u043f\u043f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 LDAP. \u0422\u0430\u043a \u043c\u044b \u0443\u0437\u043d\u0430\u0435\u043c, \u043c\u043e\u0436\u043d\u043e \u043b\u0438 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u0432\u0441\u0435 \u0433\u043e\u0440\u043e\u0434\u0430 \u0438\u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0438 \u043a\u0430\u043a\u043e\u0439 \u0438\u043c\u0435\u043d\u043d\u043e  # \u0431\u043b\u043e\u043a \u0441\u0431\u043e\u0440\u0430 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438, \u043f\u0438\u0448\u0435\u043c \u043a\u0442\u043e \u043e\u0442\u043a\u0440\u044b\u043b \u043e\u0442\u0447\u0435\u0442 \u0441 \u043a\u0430\u043a\u0438\u043c\u0438 \u043f\u0440\u0430\u0432\u0430\u043c\u0438 con_stat &lt;- dbConnect(RPostgres::Postgres(),host = 'host', port = 5432, dbname = &quot;dbname&quot;, user = &quot;user&quot;, password = &quot;password&quot;) vizit_df &lt;- data.frame(user = username, groups = user_groups, app = 'report_name', timie_visit = Sys.time()) dbWriteTable(con_stat, &quot;visit_apps&quot;, vizit_df, append=TRUE) dbDisconnect(con_stat) rm(vizit_df)  # \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c, \u043c\u043e\u0436\u043d\u043e \u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432\u0441\u0435 \u0433\u043e\u0440\u043e\u0434\u0430 # \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0433\u043e\u0440\u043e\u0434\u043e\u0432  # \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c, \u043c\u043e\u0436\u043d\u043e \u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u0432\u0438\u0434\u0435\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0433\u043e\u0440\u043e\u0434 #   \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u0435\u043c. \u0415\u0441\u043b\u0438 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c, \u0442\u043e \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0432\u0441\u0435 \u0433\u043e\u0440\u043e\u0434\u0430 # \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0433\u043e\u0440\u043e\u0434\u043e\u0432  ui &lt;- dashboardPage(       # \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 UI )  server &lt;- function(input, output) {   # \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 SQL \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432  }  shinyApp(ui, server)<\/code><\/pre>\n<p>  <\/p>\n<h2 id=\"process-vnedreniya\">\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u044f<\/h2>\n<p>  <\/p>\n<p>\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u0431\u0438\u0442\u044c \u043d\u0430 4 \u044d\u0442\u0430\u043f\u0430:<\/p>\n<p>  <\/p>\n<ol>\n<li>\u041f\u043e \u043d\u0430\u0447\u0430\u043b\u0443 \u0441\u0442\u043e\u044f\u043b\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u0437\u0430\u043a\u0440\u044b\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u0438 \u0440\u0435\u0433\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u0438 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0438 \u043c\u043e\u0433\u043b\u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u0435 \u0441\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0438 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443 \u043f\u043e \u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044f\u043c, \u043f\u0430\u0441\u0441\u0430\u0436\u0438\u0440\u0430\u043c (\u043e\u0431\u0435\u0437\u043b\u0438\u0447\u0435\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435) \u0438 \u043f\u043e\u0435\u0437\u0434\u043a\u0430\u043c. \u041d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0433\u043e\u0440\u043e\u0434\u0430\u043c-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430\u043c, \u0447\u0442\u043e\u0431\u044b \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0435\u0433\u0438\u043e\u043d\u0430\u043b\u044c\u0449\u0438\u043a \u0432\u0438\u0434\u0435\u043b \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0432\u043e\u0439 \u0433\u043e\u0440\u043e\u0434. \u0418 \u0441\u0442\u043e\u044f\u043b\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u043e\u0442\u0447\u0435\u0442\u043d\u043e\u0441\u0442\u044c Looker&#8217;\u0430.<\/li>\n<li>\u0417\u0430\u0442\u0435\u043c \u043c\u044b \u0441\u0442\u0430\u043b\u0438 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u0438 \u043c\u0430\u0440\u043a\u0435\u0442\u043e\u043b\u043e\u0433\u043e\u0432. \u0422\u0430\u043a \u0436\u0435 \u043d\u0430 \u0434\u0430\u043d\u043d\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u0431\u044b\u043b \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u0435\u043d \u043f\u0435\u0440\u0435\u043d\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u043e\u0432 \u0438\u0437 Qlick Sense.<\/li>\n<li>\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0448\u0430\u0433\u043e\u043c \u043c\u044b \u0441\u0442\u0430\u043b\u0438 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u044c \u043e\u0442\u0447\u0435\u0442\u044b \u0438\u0437 \u0441\u0430\u043c\u043e\u043f\u0438\u0441\u043d\u044b\u0445 \u0432\u0435\u0431-\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432, \u0442\u0430\u043c \u0443\u0436\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0431\u044b\u043b\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u0437\u0430\u043a\u0440\u044b\u0442\u044c \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u0438 \u0444\u0438\u043d\u0430\u043d\u0441\u0438\u0441\u0442\u043e\u0432.<\/li>\n<li>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043e\u0431\u0449\u0435\u0439 \u043e\u0442\u0447\u0435\u0442\u043d\u043e\u0441\u0442\u0438 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0432\u0441\u0435\u0439 \u0433\u0440\u0443\u043f\u043f\u044b \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0439. \u0417\u0434\u0435\u0441\u044c \u0443\u0436\u0435 \u0441\u0442\u043e\u044f\u043b\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u0443\u043d\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439 \u043c\u0435\u0436\u0434\u0443 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u0431\u044d\u043a\u043e\u0444\u0438\u0441\u0430\u043c\u0438, \u0441 \u0446\u0435\u043b\u044c\u044e \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e \u0432\u0441\u0435\u0439 \u0433\u0440\u0443\u043f\u043f\u0435 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0439. \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u0442\u0447\u0435\u0442\u0430 \u0447\u0435\u043c-\u0442\u043e \u043f\u043e\u0445\u043e\u0436\u0435\u0433\u043e \u043d\u0430 \u0441\u0432\u043e\u0434\u043d\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0441\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e\u043c \u0441\u0440\u0435\u0437\u043e\u0432 \u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439. \u041d\u0430 \u0434\u0430\u043d\u043d\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u0437\u0430\u043a\u0430\u0437\u0447\u0438\u043a\u0430\u043c\u0438 \u043e\u0442\u0447\u0435\u0442\u043d\u043e\u0441\u0442\u0438 \u044f\u0432\u043b\u044f\u043b\u0438\u0441\u044c \u043f\u0440\u043e\u0434\u0430\u043a\u0442-\u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u044b \u0438 \u0442\u043e\u043f-\u043c\u0435\u043d\u0435\u0434\u0436\u043c\u0435\u043d\u0442.<\/li>\n<\/ol>\n<p>  <\/p>\n<h2 id=\"nedostatki-i-neudobstva\">\u041d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438 \u0438 \u043d\u0435\u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430<\/h2>\n<p>  <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0441\u0442\u043e\u0438\u0442 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043e \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0430\u0445 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043e\u0442\u0447\u0451\u0442\u043d\u043e\u0441\u0442\u0438:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u0421\u043f\u0443\u0441\u0442\u044f \u0432\u0440\u0435\u043c\u044f \u0441\u043b\u043e\u0438 \u043e\u0442 \u0434\u043e\u043a\u0435\u0440\u043e\u0432 \u043c\u043e\u0433\u0443\u0442 \u0437\u0430\u043d\u044f\u0442\u044c \u0432\u0441\u0435 \u0434\u0438\u0441\u043a\u043e\u0432\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0434\u043e\u043a\u0435\u0440. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0443\u0434\u0430\u043b\u044f\u0442\u044c \u043b\u0438\u0448\u043d\u0438\u0435 \u0441\u043b\u043e\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e \u043a\u0430\u043a\u043e\u0439-\u043b\u0438\u0431\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f.<\/li>\n<li>\u041f\u0440\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0438 \u0442\u044f\u0436\u0435\u043b\u044b\u0445 \u043e\u0442\u0447\u0435\u0442\u043e\u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043c\u043e\u0436\u0435\u0442 \u0434\u043e\u043b\u0433\u043e \u0434\u0443\u043c\u0430\u0442\u044c (\u0441\u0435\u043a\u0443\u043d\u0434 5-15) \u043f\u043e\u043a\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0434\u043e\u043a\u0435\u0440 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043a \u0411\u0414. \u0412 \u044d\u0442\u043e\u043c \u043f\u043b\u0430\u043d\u0435 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0431\u0435\u0441\u0448\u043e\u0432\u043d\u043e\u0441\u0442\u0438, \u043d\u043e \u044d\u0442\u043e, \u0432\u0438\u0434\u0438\u043c\u043e, \u0441\u0443\u0433\u0443\u0431\u043e \u043c\u043e\u0438 \u0445\u043e\u0442\u0435\u043b\u043a\u0438, \u0442.\u043a. \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0434\u0430\u043d\u043d\u044b\u0439 \u0444\u0430\u043a\u0442 \u043d\u0435 \u0441\u043c\u0443\u0449\u0430\u0435\u0442.<\/li>\n<li>\u0423 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u043f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u043c \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0438 \u043e\u0442\u0447\u0435\u0442\u0430, \u0438\u043d\u043e\u0433\u0434\u0430 \u043f\u043e \u043d\u0435\u0432\u0435\u0434\u043e\u043c\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435, \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0434\u0430\u0432\u0430\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0443 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0430\u0434\u0440\u0435\u0441 \u043d\u0435 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442, \u0442.\u043a. \u0434\u043e\u043a\u0435\u0440 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u043d\u0435 \u0443\u0441\u043f\u0435\u043b \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432\u0432\u043e\u0434\u0438\u0442 \u0432 \u0437\u0430\u0431\u043b\u0443\u0436\u0434\u0435\u043d\u0438\u0435. \u041f\u0440\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u043c \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0438 \u043e\u0442\u0447\u0435\u0442\u0430 \u0434\u0430\u043d\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043f\u0440\u043e\u043f\u0430\u0434\u0430\u0435\u0442.<\/li>\n<li>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043e\u0442\u0447\u0451\u0442\u043e\u0432 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u0434\u043e\u0432\u0435\u0440\u0438\u0442\u044c &quot;\u0430\u0431\u044b \u043a\u043e\u043c\u0443&quot; \u0442.\u043a. \u043d\u0443\u0436\u043d\u044b \u0437\u043d\u0430\u043d\u0438\u044f R. \u0418 \u0435\u0441\u043b\u0438 \u043f\u0440\u0438\u0434\u0435\u0442 \u043d\u043e\u0432\u044b\u0439 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a, \u0442\u043e \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043b\u0438\u0431\u043e \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0441\u043e \u0437\u043d\u0430\u043d\u0438\u044f\u043c\u0438 R, \u043b\u0438\u0431\u043e \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u0435\u0433\u043e \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0435 \u0443\u0436\u0435 \u043d\u0430 \u0440\u0430\u0431\u043e\u0447\u0435\u043c \u043c\u0435\u0441\u0442\u0435. <\/li>\n<li>\u041f\u043e\u0441\u043b\u0435 \u0432\u043d\u0435\u0441\u0435\u043d\u0438\u044f \u043f\u0440\u0430\u0432\u043e\u043a \u0432 \u043e\u0442\u0447\u0435\u0442 \u0438\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0433\u043e \u043e\u0442\u0447\u0435\u0442\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0441\u043b\u0443\u0436\u0431\u0443 ShinyProxy \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435.<\/li>\n<\/ul>\n<p>  <\/p>\n<h2 id=\"vyvod\">\u0412\u044b\u0432\u043e\u0434<\/h2>\n<p>  <\/p>\n<p>\u0412 \u0446\u0435\u043b\u043e\u043c \u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043e\u0442\u0447\u0435\u0442\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0430 \u0441\u0435\u0431\u044f \u0445\u043e\u0440\u043e\u0448\u043e. \u0417\u0430 \u0433\u043e\u0434 \u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0435 \u0431\u044b\u043b\u043e \u0437\u0430\u043c\u0435\u0447\u0435\u043d\u043e \u043a\u0430\u043a\u0438\u0445-\u0442\u043e \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0430\u0436\u043d\u044b\u0445 \u043d\u0435\u0440\u0435\u0448\u0430\u0435\u043c\u044b\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c. \u041a\u043e\u043d\u0435\u0447\u043d\u043e\u0433\u043e \u0431\u0438\u0437\u043d\u0435\u0441-\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432\u0441\u0435 \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442, \u0442.\u043a. \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043b\u044e\u0431\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u043e\u0442\u0447\u0435\u0442\u0430. \u0412 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0442\u0447\u0435\u0442 \u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0432 \u043d\u0435\u043c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u0431\u044b\u0441\u0442\u0440\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u0441\u044f. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043c\u044b \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u043b\u0438 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u0437\u0430 \u0441\u0447\u0435\u0442 \u043e\u0442\u043a\u0430\u0437\u0430 \u043e\u0442 Looker&#8217;a, Qlick\u2019a \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432, \u0442.\u043a \u043f\u0435\u0440\u0435\u0432\u0435\u043b\u0438 \u0440\u0430\u0437\u043d\u0443\u044e \u043e\u0442\u0447\u0451\u0442\u043d\u043e\u0441\u0442\u044c \u043d\u0430 \u043e\u0434\u043d\u0443 \u0441\u0438\u0441\u0442\u0435\u043c\u0443.<\/p>\n<p>  <\/p>\n<p>\u041d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043e\u0442\u0447\u0435\u0442\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f 30 \u0447\u0435\u043b\u043e\u0432\u0435\u043a \u0435\u0436\u0435\u0434\u043d\u0435\u0432\u043d\u043e. \u0412 \u0441\u0440\u0435\u0434\u043d\u0435\u043c \u043e\u0434\u0438\u043d \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 3 \u043e\u0442\u0447\u0435\u0442\u0430. \u041e\u0431\u0449\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u2013 200 \u0447\u0435\u043b\u043e\u0432\u0435\u043a, \u043e\u0431\u0449\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0442\u0447\u0435\u0442\u043e\u0432 \u2013 83 \u0448\u0442\u0443\u043a\u0438.<\/p>\n<p>  <\/p>\n<p>\u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u043e\u0442\u0447\u0435\u0442\u043e\u0432 \u0431\u044b\u043b\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u043e 1-3 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430\u043c\u0438 \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u0443\u0433\u043e\u0434\u0430. \u041d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043e\u0442\u0447\u0435\u0442\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043e\u0434\u043d\u0438\u043c \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u043e\u043c.<\/p>\n<\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/513634\/\"> https:\/\/habr.com\/ru\/post\/513634\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\">\n<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0421\u0435\u0440\u0433\u0435\u0439, \u044f \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a \u0432 \u0413\u041a \u00ab\u0412\u0435\u0437\u0451\u0442\u00bb. \u0418\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438 \u0442\u0430\u043a \u0441\u043b\u043e\u0436\u0438\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u0432 \u043d\u0430\u0448\u0435\u0439 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0431\u044b\u043b\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0441\u0438\u0441\u0442\u0435\u043c \u043e\u0442\u0447\u0435\u0442\u043d\u043e\u0441\u0442\u0438: \u043e\u0442 \u043f\u043b\u0430\u0442\u043d\u044b\u0445 \u0432 \u0432\u0438\u0434\u0435 Looker \u0438 Qlick \u2013 \u0434\u043e \u0441\u0430\u043c\u043e\u043f\u0438\u0441\u043d\u044b\u0445 \u0432\u0435\u0431-\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432. \u041e\u0434\u043d\u0430\u0436\u0434\u044b \u0440\u0435\u0448\u0438\u0432, \u0447\u0442\u043e \u0442\u0430\u043a \u0434\u0430\u043b\u044c\u0448\u0435 \u0436\u0438\u0442\u044c \u043d\u0435\u043b\u044c\u0437\u044f, \u043c\u044b \u0441\u0442\u0430\u043b\u0438 \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u0435\u0434\u0438\u043d\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u0443\u0434\u0435\u0442 \u0432\u0441\u0435, \u0438 \u0432 \u0438\u0442\u043e\u0433\u0435 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0438\u0441\u044c \u043d\u0430 Shiny. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043f\u0440\u043e \u043d\u0430\u0448 \u043e\u043f\u044b\u0442 \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u044f Shiny \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0433\u043e BI. \u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u0430 \u0432\u0441\u0435\u043c, \u043a\u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043e\u0442\u0447\u0435\u0442\u043d\u043e\u0441\u0442\u0438.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-314247","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/314247","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=314247"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/314247\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=314247"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=314247"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=314247"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}