Как настроить Shiny Server в Ubuntu 16.04

  • Https://www.digitalocean.com/community/tutorials/how-to-set-up-shiny-server-on-ubuntu-14-04[older версия этой статьи] была написана https: // www .digitalocean.com / community / users / daattali [Дин Аттали]. *

Вступление

В то время как многие люди в основном обращаются к open-source язык программирования R для статистических и графических приложений, Shiny является R package, который позволяет вам конвертировать код R в интерактивный интернет страницы. И в сочетании с Shiny Server - доступным как в бесплатном, с открытым исходным кодом, так и в платном, профессиональном формате - вы также можете размещать и управлять Shiny приложения и interactive R уценочные документы.

В этом руководстве вы установите и настроите Shiny и версию Shiny Server с открытым исходным кодом на сервере под управлением Ubuntu 16.04, защитите соединение с сервером Shiny с помощью SSL-сертификата Let’s Encrypt, а затем установите дополнительный пакет для запуска интерактивного R Уценка документов.

Предпосылки

Для завершения этого урока вам понадобится следующее:

  • Один сервер Ubuntu 16.04 с * минимум 1 ГБ ОЗУ *, настроенный следующим образом: руководство по установке], включая пользователя без полномочий root и брандмауэр.

  • Последняя версия R, установленная в соответствии с Шагом 1 в https://www.digitalocean.com/community/tutorials/how-to-install-r-on-ubuntu-16-04-2, это установка R в учебнике по Ubuntu 16.04. ].

  • Nginx устанавливается, следуя this Как установить Nginx в Ubuntu 16.04 учебник, включая разрешение доступа к портам + 80 + и + 443 + на шаге 2 с командой + sudo ufw allow 'Nginx Full' +.

  • Полностью зарегистрированное доменное имя. В этом руководстве будет использоваться + example.com +. Вы можете приобрести доменное имя на https://namecheap.com [Namecheap], получить его бесплатно на Freenom или использовать регистратор домена по вашему выбору. ,

  • Обе следующие записи DNS настроены для вашего сервера. Вы можете следовать thutorial этого имени хоста для получения подробной информации о том, как их добавить.

  • Запись A с ++, указывающая на публичный IP-адрес вашего сервера.

  • Запись A с + www. +, Указывающая на публичный IP-адрес вашего сервера.

  • SSL-сертификат Let’s Encrypt для домена, установленного по адресу https://www.digitalocean.com/community/tutorials/how-to-use-certbot-standalone-mode-to-retrieve-let-s-encrypt-ssl-certificates [это руководство Let’s Encrypt Certbot].

Как только все необходимые условия будут готовы, мы начнем с установки Shiny на сервер.

Шаг 1 - Установка Shiny

Перед установкой Shiny Server вам необходимо установить пакет Shiny R, который обеспечивает среду, на которой работают веб-приложения Shiny.

Если вы знакомы с R, у вас может возникнуть желание установить пакеты непосредственно из R, а не из командной строки. Но использование следующей команды является самым безопасным способом гарантировать, что пакет будет установлен для всех пользователей, а не только для пользователя, в настоящий момент работающего с R.

+ Su - + запускает следующую команду, как будто в собственной среде пользователя, а опция + -c + указывает команду, которая будет выполняться. Эта команда, в данном случае, является тем, что следует в двойных кавычках.

+ Install.packages + - это команда R, используемая для установки пакетов R. Таким образом, именно в этой команде пакет + глянцевый + устанавливается из указанного репозитория.

sudo su - -c "R -e \"install.packages('shiny', repos='http://cran.rstudio.com/')\""

После завершения R скажет вам, что установка + DONE + и куда она поместила загруженные исходные пакеты:

Output...
* DONE (shiny)

The downloaded source packages are in
   ‘/tmp//downloaded_packages’

С Shiny на месте, теперь вы готовы установить Shiny Server и открыть экран приветствия по умолчанию в вашем браузере.

Шаг 2 - Установка Shiny Server

На этом шаге вы установите сервер Shiny и настроите брандмауэр, чтобы пропускать трафик через порт, который прослушивает Shiny Server.

В соответствии с официальными инструкциями по установке Shiny Server, мы будем использовать + wget, чтобы загрузить готовый двоичный файл для 64-битной архитектуры. Поскольку Shiny Server находится в активной разработке, вам следует обратиться к официальной странице загрузки Shiny Server, чтобы получить URL-адрес последнего 64-разрядного предварительно подготовленного двоичного файла. соответствует вашей операционной системе. Получив адрес, измените URL в следующей команде соответственно.

wget https://download3.rstudio.org/ubuntu-12.04/x86_64/shiny-server--amd64.deb

Как только файл загружен, проверьте его целостность, сравнив выходные данные следующей команды с контрольной суммой MD5, указанной на странице загрузки RStudio Shiny Server по адресу верх 64-битных, предварительно собранных бинарных инструкций по загрузке.

md5sum shiny-server--amd64.deb

Если контрольные суммы не совпадают, повторно загрузите файл и попробуйте еще раз проверить его целостность, прежде чем двигаться дальше.

Поскольку Shiny Server зависит от GDebi - инструмента, который устанавливает локальные пакеты deb при одновременном разрешении и установке дополнительных зависимостей - для его установки вам потребуется обновить список пакетов, а затем установить пакет + gdebi-core +.

sudo apt-get update
sudo apt-get install gdebi-core

Теперь вы готовы установить Shiny Server.

sudo gdebi shiny-server--amd64.deb

Введите + y +, когда GDebi попросит вас подтвердить, что вы хотите установить пакет.

[Secondary_label Output]
Shiny Server
Shiny Server is a server program from RStudio, Inc. that makes Shiny applications available over the web. Shiny is a web application framework for the R statistical computation language.
Do you want to install the software package? [y/N]:

На этом этапе выходные данные должны указывать, что служба с именем + ShinyServer + и установлена, и служба + active + Systemd. Если выходные данные указывают на наличие проблемы, проследите ваши предыдущие шаги, прежде чем продолжить.

[Secondary_label Output]
...
● shiny-server.service - ShinyServer
  Loaded: loaded (/etc/systemd/system/shiny-server.service; enabled; vendor preset: enabled)
  Active:  since Fri 2017-10-13 14:24:28 UTC; 2 days ago
...

Затем убедитесь, что Shiny Server действительно прослушивает порт + 3838 +.

sudo netstat -plunt | grep -i shiny

В случае успеха вывод будет содержать следующую строку:

Outputtcp        0      0 0.0.0.0:3838            0.0.0.0:*               LISTEN      18749/shiny-server

Если ваш вывод не выглядит так, дважды проверьте ваш терминал на наличие дополнительных предупреждений и сообщений об ошибках.

Теперь измените брандмауэр, чтобы пропускать трафик на Shiny Server.

sudo ufw allow 3838

Наконец, укажите в браузере + http: //: 3838 +, чтобы открыть домашнюю страницу Shiny Server по умолчанию, приветствуя вас на Shiny Server и поздравляя с установкой.

Теперь у вас установлены и протестированы как Shiny, так и Shiny Server, поэтому давайте защитим настройку, настроив Nginx в качестве обратного прокси-сервера и перенаправляя весь трафик через HTTPS.

Шаг 3 - Защита Shiny Server с помощью обратного прокси и SSL-сертификата

На этом этапе вы сконфигурируете Nginx для пересылки входящих запросов на Shiny Server с помощью WebSocket - протокола обмена сообщениями между веб-серверами и клиентами.

Поскольку мы хотим создать переменные конфигурации, которые может использовать любой блок сервера Nginx, откройте основной файл конфигурации Nginx, + nginx.conf +, для редактирования.

sudo nano /etc/nginx/nginx.conf

С помощью map модуля Nginx создайте переменные для значений, которые нужны WebSocket скопировав следующую директиву в блок + http +:

/etc/nginx/nginx.conf

http {
   ...
   # Map proxy settings for RStudio
   map $http_upgrade $connection_upgrade {
       default upgrade;
       '' close;
   }
}

Директива + map + сравнивает + $ http_upgrade + - значение клиентского заголовка * Upgrade * - с условиями в фигурных скобках. Если значение равно + '' +, + map + создает переменную + $ connection_upgrade и устанавливает ее в` + close`. В противном случае + map + создает переменную + $ connection_upgrade и устанавливает для нее значение по умолчанию` + upgrade`.

Сохраните свою работу и закройте файл, чтобы продолжить.

Затем создайте совершенно новый блок сервера Nginx, чтобы у вас все еще был файл конфигурации по умолчанию, к которому можно вернуться, если позже вы столкнетесь с проблемой.

sudo nano /etc/nginx/sites-available/

Создайте новый набор директив для Shiny Server, скопировав и вставив в новый файл следующее:

example.com»> / и т.д. / Nginx / сайты-доступные /

server {
  listen 80 default_server;
  listen [::]:80 default_server ipv6only=on;
  server_name ;
  return 301 https://$server_name$request_uri;
}
server {
  listen 443 ssl;
  server_name ;
  ssl_certificate /etc/letsencrypt/live//fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live//privkey.pem;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_prefer_server_ciphers on;
  ssl_ciphers AES256+EECDH:AES256+EDH:!aNULL;

  location / {
      proxy_pass http://:3838;
      proxy_redirect http://:3838/ https://$host/;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection $connection_upgrade;
      proxy_read_timeout 20d;
  }
}

Общий эффект этой конфигурации состоит в том, что все входящие запросы к серверу через порты + 80 + и + 3838 + перенаправляются для использования HTTPS через порт + 443 +.

Обзор некоторых из более сложных аспектов этой конфигурации включает в себя:

  • * return *: создает постоянное перенаправление для запросов, поступающих в виде простого HTTP на HTTPS.

  • * proxy_pass *: Указывает Nginx пересылать запросы, поступающие в корень приложения веб-сервера, на IP-адрес сервера, прослушивающего порт + 3838 +.

  • * proxy_redirect *: перезаписывает входящую строку + http: //: 3838 / + в ее HTTPS-эквивалент на сервере, обрабатывающем запрос. Переменная + $ host + вычисляет имя хоста сервера, на котором работает Nginx.

  • * proxy_set_header *: переопределяет или добавляет поля в заголовок запроса, передаваемый проксируемому серверу.

  • * proxy_read_timeout *: устанавливает тайм-аут для чтения ответа от проксируемого сервера между двумя последовательными операциями чтения.

Сохраните и закройте файл, чтобы продолжить.

Затем включите новый блок сервера, создав для него символическую ссылку в каталоге + / etc / nginx / sites-enabled +.

sudo ln -s /etc/nginx/sites-available/ /etc/nginx/sites-enabled/

И поскольку наш новый серверный блок теперь обрабатывает все запросы на порт + 80 +, вы можете отключить блок по умолчанию, удалив символическую ссылку на него в каталоге + sites-enabled +.

sudo rm -f /etc/nginx/sites-enabled/default

Теперь протестируйте новую конфигурацию перед активацией изменений.

sudo nginx -t

Если вы столкнулись с какими-либо проблемами, следуйте инструкциям в выходных данных для их устранения.

Как только ваш синтаксис будет в порядке и ваш тест пройден успешно, вы готовы активировать все изменения, перезагрузив Nginx.

sudo systemctl restart nginx

После перезапуска Nginx убедитесь, что ваш Shiny Server обслуживает запросы через HTTPS, указав в браузере + https: // +. Вы должны увидеть ту же домашнюю страницу Shiny Server по умолчанию, что и в конце шага 2.

Затем убедитесь, что входящие HTTP-запросы перенаправляются в HTTPS, введя + http: // + в адресную строку браузера. Если он работает правильно, вы должны автоматически перенаправиться на + https: // +.

Shiny Server теперь защищен обратным прокси-сервером и SSL-сертификатом, поэтому вы можете настроить параметры интерактивных документов R Markdown.

Шаг 4 - Размещение документов Interactive R

Shiny Server полезен не только для размещения приложений Shiny, но и для размещения интерактивных документов R Markdown.

На данный момент у вас есть работающий сервер Shiny, на котором могут размещаться приложения Shiny, но он еще не может размещать интерактивные документы R Markdown, поскольку пакет + rmarkdown + R не установлен.

Таким образом, для установки пакета Shiny используйте команду, которая работает как ссылка: # step-1-% E2% 80% 94-Установка-Блестящий [один из Шаг 1], установите + rmarkdown +.

sudo su - -c "R -e \"install.packages('rmarkdown', repos='http://cran.rstudio.com/')\""

Затем проверьте установку, перейдя в + https: /// sample-apps / rmd / +. Вы должны увидеть интерактивный документ R Markdown в вашем браузере. Кроме того, если вы вернетесь к + https: // +, полученное ранее сообщение об ошибке теперь должно быть заменено динамическим содержимым.

Если вы получили сообщение об ошибке, следуйте инструкциям на экране и просмотрите выходные данные вашего терминала для получения дополнительной информации.

Настройка Shiny Server завершена, защищена и готова для обслуживания как приложений Shiny, так и документов Interactive R Markdown.

Заключение

В этом руководстве вы создали и защитили полнофункциональный сервер Shiny, на котором можно размещать приложения Shiny и интерактивные документы R Markdown.

Чтобы использовать текущие настройки, вы можете:

  • Узнайте, как управлять и настраивать сервер в соответствии с вашими потребностями, с Shiny Server Administrator’s Guide.

  • Узнайте больше о написании блестящих приложений с tutorials на rstudio.com.

  • Узнайте больше о написании интерактивных документов R уценки, посетив страницу R Markdown по адресу rstudio.com.

Related