Server간 연결 :: NginX – Rstudio – Shiny
http://www.joinc.co.kr/w/Site/System_management/Proxy
https://support.rstudio.com/hc/en-us/articles/200552326-Running-RStudio-Server-with-a-Proxy
https://support.rstudio.com/hc/en-us/articles/213733868-Running-Shiny-Server-with-a-Proxy
NginX serer는 Rstudio server와 Shiny server의 Proxy server역할을 하여,
각 서버의 결과물을 외부에서 http server (web page)를 통해 접속함.
0. 각 서버 상태 확인
NginX 설정파일 확인
⇒ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
RStudio Server 상태확인
⇒ sudo systemctl status rstudio-server
● rstudio-server.service - RStudio Server Loaded: loaded (/etc/systemd/system/rstudio-server.service; enabled; vendor preset: enabled) Active: active (running) since 목 2017-04-20 23:18:57 KST; 16s ago Process: 8763 ExecStop=/usr/bin/killall -TERM rserver (code=exited, status=0/SUCCESS) Process: 8808 ExecStart=/usr/lib/rstudio-server/bin/rserver (code=exited, status=0/SUCCESS) Main PID: 990 (code=killed, signal=TERM) CGroup: /system.slice/rstudio-server.service ├─7710 /usr/lib/rstudio-server/bin/rsession -u onesixx └─8809 /usr/lib/rstudio-server/bin/rserver
Shiny Server 상태확인
⇒ sudo systemctl status shiny-server
● shiny-server.service - ShinyServer Loaded: loaded (/etc/systemd/system/shiny-server.service; enabled; vendor preset: enabled) Active: active (running) since 목 2017-04-20 22:43:10 KST; 53min ago Process: 842 ExecStartPost=/bin/sleep 3 (code=exited, status=0/SUCCESS) Main PID: 845 (shiny-server) CGroup: /system.slice/shiny-server.service ├─840 /bin/bash -c /opt/shiny-server/bin/shiny-server --pidfile=/var/run/shiny-server.pid >> /var/log/shiny-server.log 2>&1 └─845 /opt/shiny-server/ext/node/bin/shiny-server /opt/shiny-server/lib/main.js --pidfile=/var/run/shiny-server.pid
⇒ curl -I localhost HTTP/1.1 200 OK Server: nginx/1.10.0 (Ubuntu) Date: Thu, 20 Apr 2017 14:12:18 GMT Content-Type: text/html Content-Length: 612 Last-Modified: Tue, 11 Apr 2017 14:43:05 GMT Connection: keep-alive ETag: "58eceb79-264" Accept-Ranges: bytes ⇒ sudo su - -c "R -e \"system('shiny-server --version')\"" ⇒ apt-cache showpkg rstudio-server ⇒ apt-cache showpkg shiny-server
상태확인
4월 20 22:43:07 sixxEOS systemd[1]: Starting ShinyServer... 4월 20 22:43:10 sixxEOS systemd[1]: shiny-server.service: Supervising process 845 which is not our child. We'll most likely not notice when it exits. 4월 20 22:43:10 sixxEOS systemd[1]: Started ShinyServer. 4월 20 23:28:28 sixxEOS su[9854]: Successful su for shiny by root 4월 20 23:28:28 sixxEOS su[9854]: + ??? root:shiny 4월 20 23:28:28 sixxEOS su[9854]: pam_unix(su:session): session opened for user shiny by (uid=0) 4월 20 23:28:28 sixxEOS su[9870]: Successful su for shiny by root 4월 20 23:28:28 sixxEOS su[9870]: + ??? root:shiny 4월 20 23:28:28 sixxEOS su[9870]: pam_unix(su:session): session opened for user shiny by (uid=0)
설치방법
- nginx.service – A high performance web server and a reverse proxy server
http://onesixx.com/install-nginx-ubuntu/ - rstudio-server.service – RStudio Server\\\\\\\\\\\\\\\\\\\\
http://onesixx.com/install-rstudio-server-ubuntu/
shiny-server.service – ShinyServer
http://onesixx.com/install-shiny-server-ubuntu/
1. 설정파일 수정
– 모든 서버 shut down
sudo systemctl stop nginx sudo systemctl stop rstudio-server sudo systemctl stop shiny-server
– Nginx의 default.conf 수정
sudo vi /etc/nginx/sites-available/default
아래내용 추가
location /rstudio/ { rewrite ^/rstudio/(.*)$ /$1 break; proxy_set_header X-RSC-Request $scheme://$host:$server_port$request_uri; proxy_pass http://localhost:8787; proxy_redirect / /rstudio/; proxy_set_header Upgrade $http_upgrade; #proxy_set_header Connection $connection_upgrade; proxy_http_version 1.1; } location /shiny/ { rewrite ^/shiny/(.*)$ /$1 break; proxy_pass http://localhost:3838; proxy_redirect http://localhost:3838/ $scheme://$host/shiny/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; #proxy_set_header Connection $connection_upgrade; proxy_read_timeout 20d; auth_basic "Username and Password are required"; auth_basic_user_file /etc/nginx/.htpasswd; }
* shiny아래 auth_basic은 로그인 창을 위한 설정
– RStudio server 의 Configuration 수정
/etc/rstudio/rserver.conf
없으면 만든다.
Proxy 서버역할을 하는 NginX를 통해서만 접근가능하도록 변경. RStudio Server 와 NginX server가 한 머신에서 실행되고 있다면,
RStudior가 0.0.0.0 (all remote clients) 에서 127.0.0.1 (only the localhost)를 Listen할수 있도록 port를 변경한다.
www-address=127.0.0.1
– Shiny server 의 Configuration 수정
/etc/shiny-server/shiny-server.conf
Proxy 서버역할을 하는 NginX를 통해서만 접근가능하도록 변경.
listen 3838 127.0.0.1
5. 서비스 시작
Restart Service
sudo systemctl start rstudio-server sudo systemctl start shiny-server sudo systemctl start nginx
6. 확인
xxx.xxx.xxx.xxx:8787 이나 localhost:3838 로는 접속이 안되고, host_ip/rstudio나 host_ip/shiny로만 접속된다.
## # You should look at the following URL's in order to grasp a solid understanding # of Nginx configuration files in order to fully unleash the power of Nginx. # http://wiki.nginx.org/Pitfalls # http://wiki.nginx.org/QuickStart # http://wiki.nginx.org/Configuration # # Generally, you will want to move this file somewhere, and start with a clean # file but keep this around for reference. Or just disable in sites-enabled. # # Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples. ## # Default server configuration # server { listen 80 default_server; listen [::]:80 default_server; # SSL configuration # # listen 443 ssl default_server; # listen [::]:443 ssl default_server; # # Note: You should disable gzip for SSL traffic. # See: https://bugs.debian.org/773332 # # Read up on ssl_ciphers to ensure a secure configuration. # See: https://bugs.debian.org/765782 # # Self signed certs generated by the ssl-cert package # Don't use them in a production server! # # include snippets/snakeoil.conf; root /var/www/html; # Add index.php to the list if you are using PHP index index.html index.htm index.nginx-debian.html; server_name _; location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. try_files $uri $uri/ =404; } location /rstudio/ { rewrite ^/rstudio/(.*)$ /$1 break; proxy_pass http://localhost:8787; proxy_redirect http://localhost:8787/ $scheme://$host/rstudio/; #proxy_redirect / /rstudio/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; #proxy_set_header X-RSC-Request $scheme://$host:$server_port$request_uri; #proxy_set_header Connection $connection_upgrade; proxy_read_timeout 20d; } location /shiny/ { rewrite ^/shiny/(.*)$ /$1 break; proxy_pass http://localhost:3838; proxy_redirect http://localhost:3838/ $scheme://$host/shiny/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; #proxy_set_header Connection $connection_upgrade; proxy_read_timeout 20d; auth_basic "Username and Password are required"; auth_basic_user_file /etc/nginx/.htpasswd; } # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ { # include snippets/fastcgi-php.conf; # # # With php7.0-cgi alone: # fastcgi_pass 127.0.0.1:9000; # # With php7.0-fpm: # fastcgi_pass unix:/run/php/php7.0-fpm.sock; #} # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} } # Virtual Host configuration for example.com # # You can move that to a different file under sites-available/ and symlink that # to sites-enabled/ to enable it. # #server { # listen 80; # listen [::]:80; # # server_name example.com; # # root /var/www/example.com; # index index.html; # # location / { # try_files $uri $uri/ =404; # } #}
접근가능한 폴더 추가
위 default파일에서 서버 Root는 아래와 같고,
root /var/www/html;
해당 폴더에 링크를 추가하여, 원하는 폴더를 추가한다.
sudo ln -s /Users/onesixx/Dropbox/RHome/lecture /var/www/html/lecture
결과 확인
⇒ pwd /var/www/html ⇒ ll -rw-r--r-- 1 root root 612 4월 17 16:30 index.nginx-debian.html lrwxrwxrwx 1 root root 37 4월 20 09:28 lecture -> /Users/onesixx/Dropbox/RHome/lecture lrwxrwxrwx 1 root root 29 5월 4 16:34 rhome -> /Users/onesixx/Dropbox/RHome