1. AWS EC2 인스턴스 인증된 웹앱 배포 1

R 설치 이전 우분투 위에 사전 정지작업이 필요하다. 운영체제를 설치한 후에 R을 설치하려면 R 및 R 팩키지가 의존하는 기반 소프트웨어를 다수 설치하여야 한다. R을 올리기 전에 자바를 비롯한 R 코어 및 핵심 팩키지들이 필요로 하는 다수 소프트웨어를 사전에 설치한다. R 설치 이전 의존성 갖는 대표적인 소프트웨어 설치의 사례는 다음과 같다.

R 툴체인

1.1. R 의존성 설치

libcurl4-openssl-dev 등 R 기능, 성능과 관련된 다수 소프트웨어를 설치한다.

$ sudo apt-get update 
$ sudo apt-get install -y build-essential \
   fort77 \
   xorg-dev \
   liblzma-dev \
   libblas-dev \
   gfortran \
   gcc-multilib \
   gobjc++ \
   libreadline-dev \
   libcurl4-openssl-dev \
   libcurl4-gnutls-dev \
   default-jdk \
   texlive-latex-base \
   libcairo2-dev 

1.2. R 자바 설치 2

최근에는 자바와 관계가 없이 동작하는 소프트웨어가 많이 개발되고 있지만, 여전히 기존에 개발된 자바의 기능을 활용하는 R 및 R 팩키지가 많아서 자바 의존성과 관련하여 설치 및 환경도 정비한다.

## 1.2. 자바 설치
sudo add-apt-repository -y ppa:webupd8team/java
sudo apt-get update

sudo apt-get -y install oracle-java8-installer
sudo apt-get -y install oracle-java8-set-default
java -version

2. 우분투 위에 최신 R 설치

최신 R 버전을 설치하기 전에 먼저 우분투에서 관리하는 기본 R 버젼을 설치한다. 기본 R 버전은 3.2.x 버젼으로 최신 R 버전과 차이가 크기 때문에 이를 기반으로 작업하게 되면 최신 팩키지의 신기능을 사용할 때 지원이 되지 않는 경우가 많기 때문에 가능하면 최신 버전 R을 설치한다.

크게 방향성이 두가지가 있는데, 기존 R을 그대로 두고 그 위에 신규 R 버젼을 설치하는 방식이 있고, 다른 한 방식은 기존 R을 삭제하고 최신 R 버전을 설치하는 방법이다.

2.1. 기존 R 유지 후 신규 R 버전 설치

r-base를 설치하면 우분투에서 관리하는 기본 R 버젼이 설치된다.

## 1.2.  우분투 위에 R 설치
sudo apt-get install -y r-base

2.1.1. 최신 버전 R 설치

R 최신버젼 - 소스코드을 담아놓은 웹사이트에서 가장 최신 버전 R을 wget 명령어로 다운로드 받아 압축을 풀고 설치를 한다. 기계적인 과정이라 다음 코드를 쉘에서 실행하면 된다.

## 1.3. 최신 버젼 R 설치 
wget https://cran.r-project.org/src/base/R-3/R-3.4.3.tar.gz
tar -xvf R-3.4.3.tar.gz
./configure --prefix=/home/ubuntu/R-3.4.3 --with-readline=no --with-x=no --enable-R-shlib=yes --with-cairo=yes
make

경로명 추가 nano ~/.bashrc 명령얼르 실행하여 하단에 다음 환경설정된 경로를 지정하여 등록하면 로그인시 자동 적용되게 된다.

## 1.4. 최신 버젼 R 설치 
export PATH=~/R-3.4.3/bin:$PATH
export RSTUDIO_WHICH_R=~/R-3.4.3/bin/R

가장 최신 R 버젼이 설치된 모습은 다음과 같다.

ubuntu@ip-xxx-xx-xx-xx:~$ R

R version 3.4.3 (2017-11-30) -- "Kite-Eating Tree"
Copyright (C) 2017 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

  Natural language support but running in an English locale

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

2.2. 기존 R 삭제 후 신규 R 버전 설치 3

기존 R 버전을 제거하고 나서 신규 R 버전을 설치하는 과정을 거치게 되면 먼저 기존에 설치된 R 버전을 제거하거나 어떤 R도 설치되지 않은 상태에서 신규 버전을 설치하면 된다.

만약 이전 버전 R이 설치된 경우 다음 명령어로 제거한다.

$ sudo apt-get remove r-base-core

rstudio 저장소에서 최신 R 버젼을 확인 한 후에 sudo apt-get install r-base 명령어를 실행하게 되면 최신 R 버전을 설치하게 된다.

sudo add-apt-repository "deb http://cran.rstudio.com/bin/linux/ubuntu $(lsb_release -sc)/"

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E084DAB9
sudo add-apt-repository ppa:marutter/rdev
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install r-base

2. R 팩키지 설치

R Shiny 서버를 설치하기에 앞서 shiny도 R 팩키지의 일종이라 먼저 R 관련 팩키지를 설치한다. 개별적으로 팩키지를 설치하기 보다 많이 사용될 분야에 조합을 이루는 팩키지를 묶어 한번에 설치한다.

  • shiny 서버 관련: ‘shiny’, ‘rmarkdown’, ‘shinydashboard’, ‘shinyjs’
  • 공간정보(geospatial) 관련: ‘sp’, ‘rgdal’, ‘rgeos’, ‘adehabitatHR’, ‘geojsonio’, ‘maptools’
  • htmlwidget 관련: ‘leaflet’, ‘highcharter’, ‘DT’
## 2.1. shiny 팩키지 사전 설치  -----
sudo su - -c "R -e \"install.packages(c('shiny', 'rmarkdown', 'shinydashboard', 'shinyjs'), repos='https://cran.rstudio.com/')\""

## 2.2. geospatial 팩키지 설치  -----
sudo su - -c "R -e \"install.packages(c('sp', 'rgdal', 'rgeos', 'adehabitatHR', 'geojsonio', 'maptools'), repos='http://cran.rstudio.com/')\""

## 2.3. htmlwidget 팩키지 설치  -----
sudo su - -c "R -e \"install.packages(c('leaflet', 'highcharter', 'DT'), repos='http://cran.rstudio.com/')\""

3. Shiny 서버 설치 4

RStudio에서 RStudio IDEShiny를 대표적인 제품으로 공급하고 있다. 물론 커뮤니티 무료버젼과 다양한 부가적인 기능이 포함되어 있는 상업용 버젼이 그것이다.

Installing Shiny Server Open Source를 참조하여 Shiny 서버를 설치한다.

## 2.2. shiny 서버 설치  -----
$ sudo apt-get install -y gdebi-core
$ wget https://download3.rstudio.org/ubuntu-12.04/x86_64/shiny-server-1.5.6.875-amd64.deb
$ sudo gdebi shiny-server-1.5.6.875-amd64.deb

정상적으로 Shiny 서버가 설치되었다면 다음과 같은 화면을 볼 수 있게 된다.

Shiny 서버 설치

4. RStudio IDE 서버 설치

4.1. RStudio IDE 서버 설치

RStudio Download RStudio Server 웹사이트를 참조해서 RStudio IDE 서버를 설치한다.

## 2.3. RStudio 서버 설치  -----
$ wget https://download2.rstudio.org/rstudio-server-1.1.442-amd64.deb
$ sudo gdebi rstudio-server-1.1.442-amd64.deb

4.2. RStudio IDE 서버 환경설정 5

RStudio IDE 서버를 설치하게 되면 RStudio 서버에서 사용할 R 버젼을 기본 설치 장소를 /usr/bin/R와 같은 디렉토리를 검색하게 된다. 하지만, 최신 R을 설치하게 되면 설치 위치가 변경되기 때문에 이를 반영할 필요가 있다.

/usr/bin/R
/usr/local/bin/R

우분투 로컬 컴퓨터에 설치해도 유사한 문제가 발생하기 때문에 이에 대해서 다음과 같이 설정을 반영한다.

RStudio IDE에 최신 R 연결

다음 세가지 파일(.bashrc, .profile, rserver.conf) 모두 최신 R 버젼(R-3.4.3)을 설치한 위치가 /home/ubuntu/R-3.4.3/bin/R으로 가정한다.

  • ~/.bashrc 파일 환경추가
export PATH=~/R-3.4.3/bin:$PATH
export RSTUDIO_WHICH_R=~/R-3.4.3/bin/R
  • ~/.profile 파일 환경추가
export RSTUDIO_WHICH_R=/home/ubuntu/R-3.4.3/bin/R
  • /etc/rstudio/rserver.conf 파일 환경추가
rsession-which-r=/home/ubuntu/R-3.4.3/bin/R

4.3. rstudio 사용자추가

rstudio 사용자를 추가해서 RStudio IDE 서버에 로그인 할 수 있다. sudo adduser rstudio 명령어를 쉘에서 사용자를 추가할 수 있다.

$ sudo adduser rstudio

AWS EC2에 설치된 RStudio IDE 서버 최신버전이 정상적으로 설치되었다면 다음과 같은 화면을 확인할 수 있다.

최신 R 버전 설치

5. tidyverse 환경 설치

Base R을 기반으로 작업을 하는 경우 tidyverse 환경설정이 필요는 없으니 생략해도 무관하다. 다만, tidyverse 기반 작업환경을 설치하는 경우 tidyverse가 의존하고 있는 기반 소프트웨어를 다음과 같이 사전에 설치한다.

  • libxml2-dev
  • libcurl4-openssl-dev
  • libssl-dev
$ sudo apt-get -y install libxml2-dev libcurl4-openssl-dev libssl-dev

tidyverse 팩키지를 설치하는 방식은 쉘명령어로 설치하는 방식과 R을 실행시켜 install.packages() 명령어로 설치하는 방식 두가지가 있다. library(tidyverse)가 동작되는 방식이 정답이다.

$ sudo su - -c "R -e \"install.packages(c('tidyverse'), repos='https://cran.rstudio.com/')\""
> install.packages("tidyverse")
> library(tidyverse)
── Attaching packages ─────────────────────────────────────── tidyverse 1.2.1 ──
✔ ggplot2 2.2.1     ✔ purrr   0.2.4
✔ tibble  1.4.2     ✔ dplyr   0.7.4
✔ tidyr   0.8.0     ✔ stringr 1.3.0
✔ readr   1.1.1     ✔ forcats 0.3.0
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()

6. 웹서버 설치 6

웹앱을 개발해서 배포할 경우 경우에 따라서는 특정인만 볼 수 있도록 안전장치를 강구하고자 할 때가 있을 것이다. 이런 경우 Shiny로 개발된 다양한 데이터과학, 인공지능 웹앱을 웹서버(nginx, 아파치 웹서버) 인증기능을 활용하는 것도 한 방법이다.

샤이니 웹앱 보안장치

웹서버에서 계정과 비밀번호 인증된 사용자만 Shiny 웹앱에 접근할 수 있도록 해보자. 7 8 9

6.1. nginx 웹서버 설치

nginx를 설치하고 나서 방화벽 관련된 사항을 설치힌다. 그리고, 비밀번호 기반 인증을 위한 소프트웨어(apache2-utils)도 설치힌다.

# nginx 웹서버 설치
$ sudo apt-get install -y nginx

# 방화벽 설정
$ sudo ufw enable
$ sudo ufw allow 'Nginx Full'

# 비밀번호 기반 인증을 위한 소프트웨어 설치
$ sudo apt-get install -y apache2-utils

EC2 IP 주소 확인

curl checkip.amazonaws.com

6.2. nginx 웹서버 및 shiny 서버 운영

비번을 넣어 인증관련 사항을 설정하려면 먼저 nginx, shiny-server를 정지시킨다.

$ sudo systemctl stop nginx
$ sudo systemctl stop shiny-server

6.2.1. nginx 환경설정

sudo nano /etc/nginx/sites-available/default 명령어를 실행하고 다음 사항을 복사하여 붙여넣고 저장한다.

server {
    listen 80;

    location / {
    proxy_pass http://12X.X.X.1:3838/;
    proxy_redirect http://12X.X.X.1:3838/ $scheme://$host/;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    auth_basic "Username and Password are required";
    auth_basic_user_file /etc/nginx/.htpasswd;
 }
}

6.2.2. shiny 환경설정

sudo nano /etc/shiny-server/shiny-server.conf 명령어를 실행하고 다음 사항을 복사하여 붙여넣고 저장한다.

server{
   listen 3838 12X.X.X.1;

   location / {
    site_dir /srv/shiny-server;
    log_dir /var/log/shiny-server;
    directory_index on;
  }
}

6.2.3. 사용자 등록 및 비번 설정

비밀번호 기반 인증을 위한 소프트웨어 설치를 앞서 sudo apt-get install -y apache2-utils 수행했기 때문에 이를 활용하여 임의 사용자명(victor)을 등록하고 비번을 등록하면 된다. 다수 사용자를 추가해도 좋다.

$ cd /etc/nginx
$ sudo htpasswd -c /etc/nginx/.htpasswd victor

6.2.4. nginx 웹서버 및 shiny 서버 다시 시작

사용자 및 비번 설정을 위해 정지시킨 nginx 웹서버 및 shiny 앱서버를 다시 재가동 시킨다.

$ sudo systemctl start shiny-server
$ sudo service nginx start

7. 응용프로그램 설치

RStudio IDE 서버 및 Shiny 서버가 설치되었다면 shiny 툴체인으로 개발한 웹앱을 서버에 배포한다.

app.R 혹은 ui.R, server.R로 개발된 shiny 웹앱을 /srv/shiny-server/ 디렉토리 아래 신규 디렉토리를 만들어서 배포하면된다.

/srv/shiny-server/
                 |
                 /victor
                 | server.R
                 | ui.R

Shiny 웹앱

7.2. shiny 응용프로그램 오류 사항 확인 11

shiny 응용프로그램 오류 사항을 확인하는 방식 중 하나는 /var/log/shiny-server/ 디렉토리에 쌓이는 로그를 살펴보는 것이다.

/var/log/shiny-server/*.log