Debian 9에서 Clojure 웹 애플리케이션을 배포하는 방법
이 페이지에서
- 시작하기\n
- Nginx 및 감독자 설치
- Clojure 앱 다운로드
- Clojure 웹 앱 환경 설정\n
- Nginx 및 감독자 구성
- Clojure 웹 앱 액세스
- 결론
Clojure는 운영 체제에서 발견되는 동시 프로그래밍에 중점을 둔 JVM용 최신 범용 프로그래밍 언어입니다. Clojure를 사용하면 도구, 라이브러리 및 애플리케이션 서버를 포함한 기존 JVM 인프라를 사용할 수 있습니다.
이 가이드는 수퍼바이저와 Nginx를 사용하여 Clojure에서 간단한 웹 애플리케이션을 배포하는 과정을 안내합니다.
요구 사항
- Ubuntu 16.04를 실행하는 서버.\n
- 서버의 루트 비밀번호 설정.\n
시작하기
시작하기 전에 다음 명령을 사용하여 패키지를 최신 버전으로 업데이트하는 것이 좋습니다.
apt-get update -y
apt-get upgrade -y
모든 패키지가 업데이트되면 서버를 다시 시작하여 이러한 모든 변경 사항을 적용하십시오.
reboot
다음으로 다음 명령을 사용하여 git, curl, Java와 같은 일부 필수 패키지를 서버에 설치합니다.
apt-get install git curl openjdk-8-jre-headless -y
필요한 모든 패키지가 설치되면 다음 명령을 사용하여 JAVA 버전을 확인할 수 있습니다.
java -version
다음 출력에 JAVA 버전이 표시되어야 합니다.
openjdk version "1.8.0_131" OpenJDK Runtime Environment (build 1.8.0_131-8u131-b11-2-b11) OpenJDK 64-Bit Server VM (build 25.131-b11, mixed mode)
완료되면 Nginx 및 Supervisor 설치를 진행할 수 있습니다.
Nginx 및 감독자 설치
기본적으로 Nginx 및 Supervisor는 Ubuntu 16.04 리포지토리에서 사용할 수 있습니다. 다음 명령을 실행하여 설치할 수 있습니다.
apt-get install nginx supervisor -y
설치가 완료되면 Nginx 및 Supervisor 서비스를 시작하고 다음 명령을 사용하여 부팅 시 시작되도록 활성화합니다.
systemctl start nginx
systemctl start supervisor
systemctl enable nginx
systemctl enable supervisor
완료되면 다음 단계로 진행할 수 있습니다.
클로저 앱 다운로드
먼저 git 저장소에서 샘플 Clojure 프로젝트를 다운로드해야 합니다. 아래와 같이 git clone 명령줄 유틸리티를 사용하여 쉽게 다운로드할 수 있습니다.
git clone https://github.com/do-community/do-clojure-web.git
다음 단계는 Leiningen을 사용하여 이 Clojure 프로젝트를 컴파일하고 실행하는 것입니다. Leiningen은 Clojure 앱을 컴파일하는 데 사용할 수 있는 종속성 관리 및 빌드 자동화 도구입니다. 아래 그림과 같이 curl 명령으로 다운로드할 수 있습니다.
curl https://raw.githubusercontent.com/technomancy/leiningen/stable/bin/lein -o /usr/bin/lein
그런 다음 다음 명령을 사용하여 다운로드한 도구에 적절한 권한을 부여합니다.
chmod 755 /usr/bin/lein
이제 다음 명령을 실행하여 Closure 프로젝트를 컴파일합니다.
cd do-clojure-web
lein uberjar
다음 출력이 표시되어야 합니다.
WARNING: You're currently running as root; probably by accident. Press control-C to abort or Enter to continue as root. Set LEIN_ROOT to disable this warning. Downloading Leiningen to /root/.lein/self-installs/leiningen-2.7.1-standalone.jar now... % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 618 0 618 0 0 309 0 --:--:-- 0:00:02 --:--:-- 207 100 14.6M 100 14.6M 0 0 326k 0 0:00:46 0:00:46 --:--:-- 279k Retrieving lein-ring/lein-ring/0.8.13/lein-ring-0.8.13.pom from clojars Retrieving org/clojure/clojure/1.2.1/clojure-1.2.1.pom from central Retrieving org/clojure/data.xml/0.0.6/data.xml-0.0.6.pom from central Retrieving org/clojure/pom.contrib/0.0.25/pom.contrib-0.0.25.pom from central Retrieving org/sonatype/oss/oss-parent/5/oss-parent-5.pom from central Retrieving org/clojure/clojure/1.3.0/clojure-1.3.0.pom from central Retrieving leinjacker/leinjacker/0.4.1/leinjacker-0.4.1.pom from clojars Retrieving org/clojure/core.contracts/0.0.1/core.contracts-0.0.1.pom from central Retrieving org/clojure/pom.contrib/0.0.26/pom.contrib-0.0.26.pom from central Retrieving org/clojure/core.unify/0.5.3/core.unify-0.5.3.pom from central Retrieving org/clojure/clojure/1.4.0/clojure-1.4.0.pom from central Retrieving org/clojure/clojure/1.2.1/clojure-1.2.1.jar from central Retrieving org/clojure/core.contracts/0.0.1/core.contracts-0.0.1.jar from central Retrieving org/clojure/data.xml/0.0.6/data.xml-0.0.6.jar from central Retrieving org/clojure/core.unify/0.5.3/core.unify-0.5.3.jar from central Retrieving org/clojure/clojure/1.2.1/clojure-1.2.1.jar from clojars
Clojure 프로젝트가 컴파일되면 다음 단계로 진행할 수 있습니다.
Clojure 웹 앱 환경 설정
다음으로 Clojure 웹 애플리케이션의 디렉토리 구조를 생성해야 합니다. 다음 명령으로 이 작업을 수행할 수 있습니다.
mkdir -p /var/www/html/do-clojure-web/app/db
다음으로 Clojure 애플리케이션 파일을 위 디렉토리에 복사합니다.
cp /root/do-clojure-web/target/do-clojure-web-0.1.0-standalone.jar /var/www/html/do-clojure-web/app/
그런 다음 다음 명령을 사용하여 Clojure 앱 디렉터리에 적절한 권한을 부여합니다.
chown -R www-data:www-data /var/www/html/do-clojure-web/
다음으로 다음 명령을 사용하여 clojure 웹 응용 프로그램의 symbolink를 만듭니다.
cd /var/www/html/do-clojure-web/app/
ln -s do-clojure-web-0.1.0-standalone.jar do-clojure-web.jar
이제 Clojure 웹 앱을 사용할 준비가 되었습니다. 다음 명령으로 실행 여부를 확인할 수 있습니다.
java -jar do-clojure-web.jar
모든 것이 정상이면 다음 출력이 표시됩니다.
2017-10-01 10:30:48.349:INFO:oejs.Server:jetty-7.x.y-SNAPSHOT 2017-10-01 10:30:48.590:INFO:oejs.AbstractConnector:Started :5000
Nginx 및 감독자 구성
다음으로, Clojure 애플리케이션을 서비스로 관리하도록 Supervisor를 구성해야 합니다. 아래와 같이 Supervisor config 디렉토리 아래에 do-clojure-web.conf 파일을 생성하면 됩니다.
nano /etc/supervisor/conf.d/do-clojure-web.conf
다음 줄을 추가합니다.
[program:do-clojure-web] command=/usr/bin/java -jar do-clojure-web.jar directory=/var/www/html/do-clojure-web/app user=www-data autostart=true autorestart=true startretries=3 redirect_stderr=true stdout_logfile=/var/log/log/do-clojure-web.app.log
완료되면 파일을 저장하고 닫습니다.
다음으로 리버스 프록시로 사용하도록 Nginx를 구성해야 합니다. Clojure 웹 애플리케이션은 localhost의 연결만 허용하기 때문입니다. Nginx를 사용하여 원격 위치에서 액세스할 수 있습니다. 이렇게 하려면 Nginx 기본 구성 파일을 구성해야 합니다.
nano /etc/nginx/sites-available/default
아래와 같이 파일을 변경합니다.
upstream http_backend { server 127.0.0.1:5000; keepalive 32; } server { listen 80 default_server; listen [::]:80 default_server; root /var/www/html; index index.html index.htm index.nginx-debian.html; server_name _; location / { proxy_pass http://http_backend; proxy_http_version 1.1; proxy_set_header Connection ""; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; access_log /var/log/do-clojure-web.access.log; error_log /var/log/do-clojure-web.error.log; } }
완료되면 파일을 저장하고 닫은 다음 Nginx 및 감독자 서비스를 다시 시작하여 모든 변경 사항을 적용합니다.
systemctl restart nginx
systemctl restart supervisor
다음 명령을 사용하여 Nginx와 Supervisor의 상태를 모두 확인할 수 있습니다.
systemctl status supervisor
모든 것이 정상이면 다음 출력이 표시됩니다.
? supervisor.service - Supervisor process control system for UNIX Loaded: loaded (/lib/systemd/system/supervisor.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2017-10-02 10:19:32 EDT; 22min ago Docs: http://supervisord.org Main PID: 397 (supervisord) Tasks: 19 (limit: 4915) CGroup: /system.slice/supervisor.service ??397 /usr/bin/python /usr/bin/supervisord -n -c /etc/supervisor/supervisord.conf ??446 /usr/bin/java -jar do-clojure-web.jar Oct 02 10:19:32 debian systemd[1]: Started Supervisor process control system for UNIX. Oct 02 10:19:39 debian supervisord[397]: 2017-10-02 10:19:39,656 CRIT Supervisor running as root (no user in config file) Oct 02 10:19:39 debian supervisord[397]: 2017-10-02 10:19:39,665 INFO Included extra file "/etc/supervisor/conf.d/do-clojure-web.conf" during p Oct 02 10:19:39 debian supervisord[397]: 2017-10-02 10:19:39,821 INFO RPC interface 'supervisor' initialized Oct 02 10:19:39 debian supervisord[397]: 2017-10-02 10:19:39,823 CRIT Server 'unix_http_server' running without any HTTP authentication checkin Oct 02 10:19:39 debian supervisord[397]: 2017-10-02 10:19:39,825 INFO supervisord started with pid 397 Oct 02 10:19:40 debian supervisord[397]: 2017-10-02 10:19:40,890 INFO spawned: 'do-clojure-web' with pid 446 Oct 02 10:19:41 debian supervisord[397]: 2017-10-02 10:19:41,893 INFO success: do-clojure-web entered RUNNING state, process has stayed up for
systemctl status nginx
산출:
? nginx.service - A high performance web server and a reverse proxy server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2017-10-02 10:19:35 EDT; 26min ago Docs: man:nginx(8) Process: 425 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Process: 401 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Main PID: 427 (nginx) Tasks: 2 (limit: 4915) CGroup: /system.slice/nginx.service ??427 nginx: master process /usr/sbin/nginx -g daemon on; master_process on; ??429 nginx: worker process Oct 02 10:19:32 debian systemd[1]: Starting A high performance web server and a reverse proxy server... Oct 02 10:19:35 debian systemd[1]: nginx.service: Failed to read PID from file /run/nginx.pid: Invalid argument Oct 02 10:19:35 debian systemd[1]: Started A high performance web server and a reverse proxy server.
Clojure 웹 앱에 액세스
모든 것이 제대로 구성되면 웹 브라우저를 통해 Clojure 웹 애플리케이션에 액세스할 시간입니다.
웹 브라우저를 열고 URL http://your-ip-address를 입력하면 아래와 같이 Clojure 웹 앱 홈 페이지로 리디렉션됩니다.
이제 위치 추가 버튼을 클릭하면 다음 이미지가 표시됩니다.
여기에서 x 값과 y 값 필드에 값을 제공한 다음 위치 제출 버튼을 클릭합니다. 이제 모든 위치 보기 버튼을 클릭하여 제출한 위치를 볼 수 있습니다. 다음 이미지가 표시되어야 합니다.
결론
위 글에서는 Supervisor와 Lein을 이용하여 Clojure 웹 애플리케이션을 배포하는 방법에 대해 알아보았습니다. 또한 Nginx를 리버스 프록시 서버로 설정하여 원격 위치에서 Clojure 웹 애플리케이션에 액세스하는 방법도 배웠습니다. 이제 Clojure, Supervisor 및 lein을 사용하여 사용자 지정 애플리케이션을 쉽게 배포할 수 있기를 바랍니다. 궁금한 점이 있으면 무엇이든 물어보세요.