Thứ tư, 25/10/2017 | 00:00 GMT+7

Cách thiết lập Shiny Server trên Ubuntu 16.04

Phiên bản cũ hơn của bài báo này được viết bởi Dean Attali .

Trong khi nhiều user root yếu chuyển sang ngôn ngữ lập trình open-souce R cho các ứng dụng thống kê và đồ họa, Shiny là một gói R cho phép bạn chuyển đổi mã R của bạn thành các trang web tương tác. Và khi được kết hợp với Server Shiny - có sẵn ở cả định dạng miễn phí, open-souce và trả phí, định dạng chuyên nghiệp - bạn cũng có thể lưu trữ và quản lý các ứng dụng Shiny và tài liệu đánh dấu R tương tác .

Trong hướng dẫn này, bạn sẽ cài đặt và cấu hình Shiny và version nguồn mở của Server Shiny trên server chạy Ubuntu 16.04, bảo mật kết nối với server Shiny bằng certificate SSL Let's Encrypt, sau đó cài đặt một gói bổ sung để chạy tương tác R Đánh dấu tài liệu.

Yêu cầu

Để hoàn thành hướng dẫn này, bạn cần những thứ sau:

Cảnh báo: Bất kỳ thứ gì dưới 1GB RAM trên server của bạn có thể khiến quá trình cài đặt Server Shiny hoặc các gói R liên quan của nó không thành công.

  • Phiên bản mới nhất của R được cài đặt theo Bước 1 trong hướng dẫn cài đặt R trên Ubuntu 16.04 này .

  • Đã cài đặt Nginx theo hướng dẫn Cách cài đặt Nginx trên Ubuntu 16.04 này , bao gồm cho phép truy cập vào các cổng 80443 ở Bước 2 bằng lệnh sudo ufw allow 'Nginx Full' .

  • Tên domain đã đăng ký đầy đủ. Hướng dẫn này sẽ sử dụng example.com xuyên suốt. Bạn có thể mua domain trên Namecheap , nhận một domain miễn phí trên Freenom hoặc sử dụng công ty đăng ký domain mà bạn chọn.

  • Cả hai bản ghi DNS sau được cài đặt cho server của bạn. Bạn có thể làm theo hướng dẫn tên server này để biết chi tiết về cách thêm chúng.

    • Bản ghi A với example.com trỏ đến địa chỉ IP công cộng của server của bạn.
    • Một bản ghi A với www. example.com trỏ đến địa chỉ IP công cộng của server của bạn.
  • Chứng chỉ SSL Let's Encrypt cho domain được cài đặt theo hướng dẫn Let's Encrypt Certbot này .

Khi tất cả các yêu cầu đã có, ta sẽ bắt đầu bằng cách cài đặt Shiny trên server .

Bước 1 - Cài đặt Shiny

Trước khi cài đặt Shiny Server, bạn cần cài đặt gói Shiny R, gói này cung cấp khung mà các ứng dụng web Shiny chạy trên đó.

Nếu bạn đã quen với R, bạn có thể cần cài đặt các gói trực tiếp từ R thay vì từ dòng lệnh. Tuy nhiên, sử dụng lệnh sau là cách an toàn nhất đảm bảo rằng gói được cài đặt cho tất cả user chứ không chỉ cho user hiện đang chạy R.

su - chạy lệnh sau như thể trong môi trường riêng của user và tùy chọn -c chỉ định lệnh sẽ được chạy. Trong trường hợp này, lệnh đó được đặt trong dấu ngoặc kép.

install.packages là lệnh R được sử dụng để cài đặt các gói R. Vì vậy, trong lệnh này cụ thể, gói shiny được cài đặt từ repository được chỉ định.

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

Khi hoàn tất, R sẽ cho bạn biết rằng quá trình cài đặt đã DONE và nơi đặt các gói nguồn đã download :

Output
  • ...
  • * DONE (shiny)
  • The downloaded source packages are in
  • ‘/tmp/Rtmp2GcWv4/downloaded_packages’

Với Shiny tại chỗ, bây giờ bạn đã sẵn sàng cài đặt Server Shiny và hiển thị màn hình chào mừng mặc định của nó trong trình duyệt của bạn.

Bước 2 - Cài đặt Server Shiny

Trong bước này, bạn sẽ cài đặt server Shiny và tinh chỉnh firewall để cho phép lưu lượng truy cập qua cổng mà Server Shiny lắng nghe.

Theo hướng dẫn cài đặt chính thức của Server Shiny, ta sẽ sử dụng wget để download file binary được tạo sẵn cho kiến trúc 64-bit. Vì Server Shiny đang trong quá trình phát triển tích cực, bạn nên tham khảo trang download Server Shiny chính thức để lấy URL cho bản binary 64bit, được tạo sẵn mới nhất phù hợp với hệ điều hành của bạn. Khi bạn đã có địa chỉ, hãy thay đổi URL trong lệnh sau cho phù hợp.

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

Sau khi file được download , hãy xác minh tính toàn vẹn của file bằng cách so sánh kết quả kết quả của lệnh sau với tổng kiểm tra MD5 được liệt kê trên trang download Server RStudio Shiny ở đầu hướng dẫn download binary 64 bit, được tạo sẵn.

  • md5sum shiny-server-1.5.5.872-amd64.deb

Nếu tổng kiểm tra không khớp, hãy download lại file và thử xác minh lại tính toàn vẹn của file trước khi tiếp tục.

Vì Shiny Server phụ thuộc vào GDebi - một công cụ cài đặt các gói gỡ lỗi local đồng thời giải quyết và cài đặt các phụ thuộc bổ sung - để cài đặt nó, bạn cần cập nhật danh sách gói của bạn và sau đó cài đặt gói gdebi-core tiếp theo.

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

Đến đây bạn đã sẵn sàng để cài đặt Shiny Server.

  • sudo gdebi shiny-server-1.5.5.872-amd64.deb

Nhập y khi GDebi yêu cầu bạn xác nhận bạn muốn cài đặt gói.

[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]:y 

Đến đây, kết quả sẽ cho biết một dịch vụ có tên ShinyServer được cài đặt và một dịch vụ Systemd active . Nếu kết quả cho biết có sự cố, hãy theo dõi lại các bước trước đó của bạn trước khi tiếp tục.

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

Tiếp theo, xác minh Server Shiny thực sự đang lắng nghe trên cổng 3838 .

  • sudo netstat -plunt | grep -i shiny

Nếu thành công, kết quả sẽ bao gồm dòng sau:

Output
tcp 0 0 0.0.0.0:3838 0.0.0.0:* LISTEN 18749/shiny-server

Nếu kết quả của bạn không giống như thế này, hãy kiểm tra kỹ terminal của bạn để biết thêm các cảnh báo và thông báo lỗi.

Bây giờ, hãy sửa đổi firewall để cho phép lưu lượng truy cập đến Server Shiny.

  • sudo ufw allow 3838

Cuối cùng, trỏ trình duyệt của bạn đến http:// www.example.com :3838 để hiển thị trang chủ Shiny Server mặc định, chào mừng bạn đến với Shiny Server và chúc mừng bạn đã cài đặt.

LƯU Ý: Bạn có thể thấy một hộp nhỏ ở phía bên tay phải của màn hình với thông báo cho biết, Đã xảy ra lỗi . Sau khi bạn cài đặt rmarkdown ở Bước 4, thông báo lỗi sẽ được thay thế bằng một Tài liệu sáng bóng tương tác.

Đến đây bạn đã cài đặt và kiểm tra cả Server sáng bóng và Server sáng bóng, vì vậy hãy bảo mật cài đặt bằng cách cấu hình Nginx để phục vụ như một Reverse Proxy và định tuyến tất cả lưu lượng truy cập qua HTTPS.

Bước 3 - Bảo mật server sáng bóng bằng certificate SSL và Reverse Proxy

Trong bước này, bạn sẽ cấu hình Nginx để chuyển tiếp các yêu cầu đến Shiny Server bằng cách sử dụng WebSocket , một giao thức để nhắn tin giữa web server và client .

Vì ta muốn tạo các biến cấu hình mà bất kỳ khối server Nginx nào cũng có thể sử dụng, hãy mở file cấu hình Nginx chính, nginx.conf , để chỉnh sửa.

  • sudo nano /etc/nginx/nginx.conf

Sử dụng mô-đun bản đồ của Nginx, tạo các biến cho các giá trị mà WebSocket cần bằng cách sao chép lệnh sau vào khối http :

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

Chỉ thị map so sánh $http_upgrade - giá trị của tiêu đề Nâng cấp của khách hàng - với các điều kiện trong dấu ngoặc nhọn. Nếu giá trị là '' , map sẽ tạo biến $connection_upgrade connect_upgrade và đặt biến này thành close . Nếu không, map sẽ tạo biến $connection_upgrade connect_upgrade và đặt nó thành giá trị mặc định, upgrade .

Lưu công việc của bạn và đóng file để tiếp tục.

Tiếp theo, tạo một khối server Nginx hoàn toàn mới, để bạn vẫn có file cấu hình mặc định để hoàn nguyên nếu gặp sự cố sau này.

  • sudo nano /etc/nginx/sites-available/example.com

Tạo một bộ chỉ thị mới cho Server sáng bóng, bằng cách copy paste phần sau vào file mới:

example.com '> / etc / nginx / sites-available / example.com
server {    listen 80 default_server;    listen [::]:80 default_server ipv6only=on;    server_name example.com www.example.com;    return 301 https://$server_name$request_uri; } server {    listen 443 ssl;    server_name example.com www.example.com;    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;    ssl_certificate_key /etc/letsencrypt/live/example.com/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://your_server_ip:3838;        proxy_redirect http://your_server_ip:3838/ https://$host/;        proxy_http_version 1.1;        proxy_set_header Upgrade $http_upgrade;        proxy_set_header Connection $connection_upgrade;        proxy_read_timeout 20d;    } } 

Hiệu quả thực sự của cấu hình này là tất cả các yêu cầu đến server trên cổng 803838 được chuyển hướng để sử dụng HTTPS trên cổng 443 .

Tổng quan về một số khía cạnh phức tạp hơn của cấu hình này bao gồm:

  • return : Tạo chuyển hướng vĩnh viễn cho các yêu cầu đến từ HTTP thuần túy đến HTTPS.

  • proxy_pass : Báo cho Nginx chuyển tiếp các yêu cầu đến từ folder root của ứng dụng web server tới địa chỉ IP của server đang nghe trên cổng 3838 .

  • proxy_redirect : Viết lại chuỗi đến, http:// your_server_ip :3838/ , thành HTTPS tương đương trên server đang xử lý yêu cầu. Biến $host đánh giá tên server của server mà Nginx đang chạy.

  • proxy_set_header : Định nghĩa lại hoặc nối các trường vào tiêu đề yêu cầu được chuyển đến server được ủy quyền.

  • proxy_read_timeout : Đặt thời gian chờ để đọc phản hồi từ server được ủy quyền giữa hai hoạt động đọc liên tiếp.

Lưu file để tiếp tục.

Tiếp theo, kích hoạt khối server mới bằng cách tạo một softlink cho nó trong folder /etc/nginx/sites-enabled .

  • sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/example.com

Và, bởi vì khối server mới của ta hiện xử lý tất cả các yêu cầu trên cổng 80 , bạn có thể vô hiệu hóa khối mặc định bằng cách xóa softlink tới nó trong folder sites-enabled .

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

Bây giờ, hãy kiểm tra cấu hình mới của bạn trước khi kích hoạt các thay đổi.

  • sudo nginx -t

Nếu bạn gặp phải sự cố nào , hãy làm theo hướng dẫn trong kết quả để giải quyết chúng.

Khi cú pháp của bạn ổn và kiểm tra thành công, bạn đã sẵn sàng kích hoạt tất cả các thay đổi bằng cách reload Nginx.

  • sudo systemctl restart nginx

Sau khi Nginx khởi động lại, hãy xác minh Server sáng bóng của bạn đang phục vụ các truy cập qua HTTPS bằng cách trỏ trình duyệt của bạn đến https:// example.com . Bạn sẽ thấy cùng một trang chủ Shiny Server mặc định như bạn đã thấy ở cuối Bước 2.

Sau đó, xác minh các yêu cầu HTTP đến được chuyển hướng đến HTTPS bằng lệnh http:// example.com vào thanh địa chỉ của trình duyệt của bạn. Nếu nó hoạt động bình thường, bạn sẽ tự động được chuyển hướng đến https:// example.com .

Server Shiny hiện đã được bảo mật bằng Reverse Proxy và certificate SSL, vì vậy bạn đã sẵn sàng cấu hình cài đặt của bạn cho các tài liệu R Markdown tương tác.

Bước 4 - Lưu trữ Tài liệu R tương tác

Shiny Server không chỉ hữu ích để lưu trữ các ứng dụng Shiny mà còn để lưu trữ các tài liệu R Markdown tương tác.

Đến đây, bạn có một Server sáng bóng đang hoạt động có thể lưu trữ các ứng dụng Sáng bóng, nhưng nó chưa thể lưu trữ các tài liệu R Markdown tương tác vì gói rmarkdown R chưa được cài đặt.

Vì vậy, bằng cách sử dụng lệnh hoạt động giống như lệnh từ Bước 1 để cài đặt gói Shiny, hãy cài đặt rmarkdown .

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

Sau đó, xác minh cài đặt bằng cách truy cập https:// example.com /sample-apps/rmd/ . Bạn sẽ thấy một tài liệu R Markdown tương tác trong trình duyệt của bạn . Ngoài ra, nếu bạn quay lại https:// example.com , thông báo lỗi bạn nhận được trước đó sẽ được thay thế bằng nội dung động.

Nếu bạn nhận được thông báo lỗi, hãy làm theo hướng dẫn trên màn hình và xem lại kết quả terminal của bạn để biết thêm thông tin.

Cài đặt Server Shiny của bạn đã hoàn tất, được bảo mật và sẵn sàng phục vụ cả các ứng dụng Shiny cũng như tài liệu Interactive R Markdown.

Kết luận

Trong hướng dẫn này, bạn cài đặt và bảo vệ một Server Shiny hoạt động đầy đủ có thể lưu trữ các ứng dụng Shiny và tài liệu R Markdown tương tác.

Để xây dựng dựa trên cài đặt hiện tại của bạn, bạn có thể:


Tags:

Các tin liên quan

Cách thiết lập server lưu trữ đối tượng bằng Minio trên Ubuntu 16.04
2017-08-30
Cách chạy server MongoDB an toàn với OpenVPN và Docker trên Ubuntu 16.04
2017-03-24
Kết xuất phía server cơ bản với Vue.js và Express
2017-03-14
Cách thiết lập server VPN IKEv2 với StrongSwan trên Ubuntu 16.04
2017-02-17
Cách cấu hình firewall Linux cho Docker Swarm trên CentOS 7
2017-01-11
Cách cấu hình firewall Linux cho Docker Swarm trên Ubuntu 16.04
2017-01-09
Cách cài đặt Linux, Nginx, MySQL, PHP (LEMP Stack) trên Debian 8
2016-12-20
Cách thiết lập xác thực Linux tập trung với FreeIPA trên CentOS 7
2016-12-15
Cách bảo vệ server của bạn chống lại lỗ hổng Linux COW bẩn
2016-10-31
Cách cấu hình TRIM định kỳ cho bộ lưu trữ SSD trên server Linux
2016-08-25