환경 : centos7
참고1 : 책 "모바일 서버 프로그래밍 입문 얼랭으로 만들며 배운다"
참고2 : https://tecadmin.net/install-erlang-on-centos/
참고3 : https://medium.com/erlang-central/building-your-first-erlang-app-using-rebar3-25f40b109aad
책 "모바일 서버 프로그래밍 입문 얼랭으로 만들며 배운다" 에 나오는 튜토리얼을 따라하며
플러그인들은 최신 버전으로 적용했습니다.
해당 튜토리얼은 간단히 GET /hello/world 라는 http 요청을 받아서 "hello world" 라는 문자열로 응답해보는 것입니다.
erlang 설치
$ sudo yum install epel-release
$ wget https://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpm
$ sudo rpm -Uvh erlang-solutions-1.0-1.noarch.rpm
$ sudo yum install erlang
$ sudo yum install esl-erlang
rebar3 설치
$ git clone https://github.com/erlang/rebar3.git
$ cd rebar3
$ ./bootstrap
$ sudo cp ~/rebar3/rebar3 /usr/bin/rebar3
rebar3 app 생성
myapp 이라는 이름으로 생성한다.
$ rebar3 new app myapp
$ cd myapp
rebar3_hex 플러그인 추가
$ vi rebar.config
# 맨 밑줄에 다음 추가
{plugins, [rebar3_hex]}.
$ rebar3 update
cowboy 추가
$ vi rebar.config
# deps 부분에 cowboy 추가
{deps, [cowboy]}.
$ rebar3 compile
# 잘 설치 됬는지 확인
$ rebar3 deps
서버시작 스크립트 생성
####################
# start 라는 이름의 스크립트 파일 생성.
# vm.args 라는 파일을 읽어서 인자를 받아 얼랭 실행
$ vi start
erl -args_file vm.args
$ chmod 775 start
####################
# vm.args 생성
$ vi vm.args
-pa _build/default/lib/myapp/ebin
-pa _build/default/lib/ranch/ebin
-pa _build/default/lib/cowlib/ebin
-pa _build/default/lib/cowboy/ebin
-eval "application:start(myapp)"
src/myapp_app.erl 수정
-module(myapp_app).
-behaviour(application).
-export([start/2, stop/1]).
start(_StartType, _StartArgs) ->
%% 필요한 어플리케이션 실행
ok = application:start(crypto),
ok = application:start(asn1),
ok = application:start(public_key),
ok = application:start(ssl),
ok = application:start(ranch),
ok = application:start(cowlib),
ok = application:start(cowboy),
%% Cowboy Router 설정
Dispatch = cowboy_router:compile([
{'_', [
{"/hello/world", myapp_http, []}
]}
]),
%% HTTP Server 설정
{ok, _} = cowboy:start_clear(http, [{port, 8080}], #{
env => #{dispatch => Dispatch}
}),
case myapp_sup:start_link() of
{ok, Pid} ->
io:format("start ok~n"),
{ok, Pid};
Error ->
Error
end.
stop(_State) ->
ok.
src/myapp_http.erl
-module(myapp_http).
%% API
-export([init/2, terminate/3]).
init(Req0, State) ->
Req = cowboy_req:reply(200, #{
<<"content-type">> => <<"text/plain">>
}, <<"Hello World!">>, Req0),
{ok, Req, State}.
terminate(_Reason, _Req, _State) ->
ok.
서버시작
$ rebar3 compile
$ ./start
브라우저로 요청해서 결과 확인