Server

CRAN 서버 구축을 위한 간단한 웹서버

개발허재 2023. 5. 20. 19:46

기본적으로는 Nexus 서버를 구축해서 R, python 등 여러 언어를 통합하여 지원하는 것이 일반적이지만 간단하게 웹서버를 구축하여도 cran 서버를 구축할 수 있습니다.

 

NGINX 세팅

# cat /etc/nginx/nginx.conf

user root;
worker_processes auto;
pid /run/nginx.pid;

events {
	worker_connections 4096;
	multi_accept on;
}

http {

	##
	# Basic Settings
	##

	#sendfile on;
	#tcp_nopush on;
	#tcp_nodelay on;
	#keepalive_timeout 65;
	#types_hash_max_size 2048;
	# server_tokens off;

	# server_names_hash_bucket_size 64;
	# server_name_in_redirect off;

	#include /etc/nginx/mime.types;
	default_type application/x-gzip;

	##
	# SSL Settings
	##

	#ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
	#ssl_prefer_server_ciphers on;

	##
	# Logging Settings
	##

	access_log /var/log/nginx/access.log;
	error_log /var/log/nginx/error.log;

	##
	# Gzip Settings
	##

	gzip on;
	gzip_disable "msie6";

	# gzip_vary on;
	# gzip_proxied any;
	# gzip_comp_level 6;
	# gzip_buffers 16 8k;
	# gzip_http_version 1.1;
	# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

	##
	# Virtual Host Configs
	##

	#include /etc/nginx/conf.d/*.conf;
	#include /etc/nginx/sites-enabled/*;

	server {
      	    listen 8080;
      	    server_name localhost;
      	    root /var/www/html;

      	    location / {
         	root /home/apps/r-packages/;
         	autoindex on;
      		}
   	}
}


#mail {
#	# See sample authentication script at:
#	# http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
#
#	# auth_http localhost/auth.php;
#	# pop3_capabilities "TOP" "USER";
#	# imap_capabilities "IMAP4rev1" "UIDPLUS";
#
#	server {
#		listen     localhost:110;
#		protocol   pop3;
#		proxy      on;
#	}
#
#	server {
#		listen     localhost:143;
#		protocol   imap;
#		proxy      on;
#	}
#}

http server 블록을 보면 8080 port로 들어온 요청을 /home/apps/r-packages 을 바라보도록 구성해주었습니다.

 

/home/apps/r-packages 디렉토리 하위에 cran 공식 서버와 같이 src/contrib 디렉토리를 추가로 구성해줍니다.

R install_version 모듈(https://github.com/r-lib/remotes/blob/main/R/install-version.R)함수를 직접 열어보면 src/contrib과 src/contrib/Archive 디렉토리 구성을 기본으로 가지고 있어야 하는 것을 알 수 있습니다.

 

위 cran.r-project.org/src/contrib의 모든 패키지를 wget이나 scp로 가져와서 /home/apps/r-packages/src/contrib 하위에 동일하게 구축해줍니다. (또는, 필요한 패키지 목록만 가져옵니다. 다만, PACKAGES와 Meta 디렉토리 하위의 archive.rds 파일들은 꼭 가져오도록 합니다.)

 

구성이 완료되면 이제 외부 client에 R을 설치한 후, Rprofile.site 파일을 수정합니다. (/etc/R 디렉토리 하위에 있습니다)

그다음, 아래와 같이 기본 R cran 주소를 변경해줍니다.

local({
    r <- getOption("repos")
    r["CRAN"] <- "http://r-cran.webserver:8080"
    options(repos = r)
})

 

이제 우리는 private한 CRAN 레포지토리를 사용할 수 있습니다!