-
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.