ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [웹서버] 라즈베리파이로 홈 서버 만들기
    CS/Server 2020. 10. 30. 11:04

    안녕하세요 점점 날씨가 차가워지고 있네요.

    오늘은 제가 집 어딘가 구석에 숨겨두었다가 어느날 이걸로 뭐 할 수 있는게 없을까? 해서 라즈베리 파이로 웹 서버를 만들게 된 이야기를 포스팅 해보려고 합니다.

    마침 요즘 사이드 프로젝트로 책을 읽고 독후감을 쓸 수 있는 웹 사이트를 하나 만들고 있었는데 이 웹을 aws 같은 호스팅 서비스를 이용하지 않고 라즈베리파이를 이용해서 집에 직접 서버를 운영하기로 했습니다.

     

    1. 웹 서버 설치하기

    라즈베리 파이를 서버로 이용하기 위하여는 라즈베리 파이가 서버로서 동작할 수 있도록 웹 서버 소프트웨어를 설치해주어야 합니다. 일반적으로 많이 쓰이는 웹 서버 소프트웨어는 아파치(Apache), 엔진엑스(Nginx) 등이 있는데 라즈베리 파이라는 제한된 환경을 고려하여 아파치HTTP서버보다는 많이 가벼운 특징을 가지는 엔진엑스(Nginx) 를 사용하도록 했습니다.

    설치하고 테스트하기

    sudo apt-get install nginx

    설치는 라즈베리 파이에서 위 명령어를 입력하는 것만으로 아주 손쉽게 완료됩니다!

     

    설치가 완료되었으면 실제로 웹 브라우져에서 확인하여 볼 수 있는데요,

    sudo /etc/init.d/nginx start

    위와 같이 입력하여 nginx 서버를 실행시킨 후에, 라즈베리 파이와 같은 네트워크에 접속한 아무 기기로 라즈베리 파이의 IP 를 주소창에 입력하면 아래와 같은 기본 페이지가 나올 것입니다. 라즈베리 파이에서 접속할 땐 192.0.0.1 로 접속하면 됩니다.

    Nginx 웹 서버는 기본적으로 라즈베리 파이의 /var/www/html 이라는 폴더에 들어있고, 이 안에 index.html 이라는 페이지가 위 사진처럼 나오는 기본 페이지이고 이를 수정하여 나만의 페이지가 나오도록 할 수 있습니다.

     

    2. npm 설치

    라즈베리 파이에 주로 사용되는 운영체제는 라즈비안OS로 리눅스 기반의 운영체제 입니다. NodeJS 기반 프로젝트를 관리하기 위하여 npm 을 설치해주어야 하는데, 윈도우에서 설치할 때는 node.js 홈페이지에 들어가 LTS버전을 설치하면 되지만, 리눅스에서 패키지 관리자로 npm 을 설치하게 되면 상당히 지난 버전의 npm 이 설치됩니다.

    sudo apt-get install npm

    위와 같이 apt-get 으로 npm 을 설치하면 지난 버전의 npm 이 설치되어 새로운 기능들이 실행되지 않는 경우가 많습니다.

     

    그래서 원하는 버전의 npm 을 설치하려면

    curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash - 
    sudo apt-get install -y nodejs

    이렇게 설치를 진행해주도록 합니다.

    첫째 줄에 setup_ 다음에 나오는 12는 12 버전을 설치하겠다는 뜻이고 최신 버전을 확인하고 이 숫자를 바꾸어주면 해당하는 버전을 설치할 수 있습니다.

     

    3. 프로젝트 실행하기

    이제 지금까지 로컬에서 작업하던 프로젝트를 라즈베리 파이로 옮겨와야 합니다. git 을 사용하여도 되고 ssh 를 사용한다면 scp 로 옮길 수도 있겠네요.

    저는 git 을 사용하여 프로젝트 폴더를 옮겨왔습니다. 이제 옮겨온 프로젝트를 실행하면 되는데, 한 가지 문제가 있습니다.

    제 웹 서버는 nodeJS 로 구현하였고, npm 으로 구동시키는데 일정 시간이 지나거나 여러 이벤트로 앱이 중단될 가능성이 있습니다. 이를 막고 node 서버가 중단되지 않고 영구적으로 구동되도록 하기 위해 NodeJS의 무중단 관리도구인 forever 를 사용했습니다.

    forever 는 node 앱을 실행시키고, 앱이 비정상종료되었을 때 자동으로 재실행을 시켜주는 관리도구입니다.

    설치 (forever)

    npm install forever -g

    npm 을 이용하여 간단하게 패키지를 설치할 수 있으며 -g 로 글로벌로 적용되도록 해줍니다.

     

    설치가 완료되면 forever 명령어 몇 가지를 이용하여 앱을 실행시킬 수 있습니다!

    forever 시작하기

    forever start app.js
    forever start -c "npm run start" ./

    앱을 실행시키는 명령어는 start 입니다.

    첫 줄과 같이 app.js 파일을 바로 실행시킬 수도 있고, 두 번째 줄과 같이 npm run 명령어를 사용하여 구동시킬 수도 있습니다.

    forever 목록

    forever list

    위 명령어는 현재 forever 로 실행시킨 프로세스들의 리스트와 정보를 보여줍니다.

    이 목록에서 uid 앞에 [0] 으로 각각의 프로세스 번호가 붙는데 이 번호를 이용해 프로세스를 종료하거나 재시작 할 수 있습니다.

    forever 종료

    forever stop [번호]

    stop 명령어는 해당 번호에 해당하는 forever 프로세스를 정지시킵니다.

    forever 재시작

    forever restart [번호]

    restart 명령어로 프로세스를 재시작 할 수 있습니다. 저는 이거를 은근 편리하게 잘 사용했습니다!

    stop, kill, start 이 세 명령어로 처리되는 과정을 하나의 명령어로 퉁치는게 되니 생각 이상으로 편리하더라구요.

    4. 포트포워딩

    서버를 실행시켰으면 이제 포트포워딩을 통해 이 서버에 외부에서 접속할 수 있도록 해야합니다. 이건 따로 포스트를 하였으니 링크로 들어가서 확인해주세요.

    poalim.tistory.com/12

     

    [포트포워딩] 라즈베리파이 외부접속하기

    안녕하세요, 오늘 다를 주제는 라즈베리 파이에 관한 주제입니다. 요즘 사이드프로젝트로 웹 사이트를 하나 만들고 있던 와중에 방 정리를 하는데 예전에 구매해두었던 라즈베리 파이를 발견했

    poalim.tistory.com

    포트포워딩을 통해 ssh 통신으로 외부에서 작업을 할 수도 있고, 웹 서버에 외부에서 접속할 수도 있습니다.

    포트포워딩을 할 때 외부포트 번호를 80 으로 주면, TCP/UDP 의 HTTP 통신을 위한 기본 포트가 80 번 이기 때문에 뒤에 포트 번호를 붙이지 않고 ip 주소만으로 접속할 수 있습니다!

     

    제 프로젝트를 기준으로 로컬에서 작업할 때 http://localhost:3000 으로 접속하였고, 3000포트를 사용하므로 포트포워딩 규칙에 외부포트 80, 내부포트 3000 으로 설정하면 글로벌IP 만으로 라즈베리 파이에서 동작하는 사이트에 접속할 수 있습니다.

     

    5. IP 고정

    라즈베리 파이는 기본적으로 DHCP 를 통해 동적으로 IP 를 할당받습니다. 제 경우에는 집에서 사용하는 공유기 네트워크에 라즈베리 파이를 연결해두었기 때문에 이 라즈베리 파이의 IP 를 고정해주어야 할 필요가 있습니다.

    라즈베리 파이가 연결된 iptime 공유기에 접속해서 라즈베리파이의 내부 IP 를 고정IP 로 할당되도록 해주어야 합니다.

    우선 각 공유기 별 관리자 페이지에 접속합니다. iptime 은 192.168.0.1 이며, 라즈베리 파이에서 ip route 명령어를 입력하면 default via 다음에 나오는 주소로 접속하면 됩니다.

    공유기 설정에 들어갔으면 관리도구 -> 고급설정 -> 네트워크 관리 -> 내부 네트워크 관리 로 들어가시면 현재 공유기에 연결되어 있는 기기들의 목록이 나오고, 맨 밑에 수동 주소 입력이라는 창이 있습니다. 여기에 라즈베리 파이의 맥주소와 할당할 IP 를 입력하면 고정 IP 를 할당할 수 있습니다.

    iptime 외의 다른 공유기들도 메뉴는 다 비슷하니 잘 찾아보시면 될 거에요 :)

     

    이렇게 있는 부분에 앞에 4칸짜리는 할당할 IP 주소를 적는 부분입니다. 내부 IP 주소로 고정하고 싶은 IP 를 적어주시면 되고, 뒤에 6칸짜리는 라즈베리파이의 맥주소를 적어주시면 됩니다. 맥주소는 라즈베리 파이에서 ifconfig 명령어로 확인할 수 있는데요, ifconfig 명령어 입력 시 inet xxx.xxx.xxx.xxx 이렇게 나오는 부분이 현재 IP 이고, 그 밑에쯤에 ether xx:xx:xx:xx:xx:xx 이런식으로 있는 주소가 맥주소입니다.

     

    이걸 넣으시고 설명을 입력한 수 등록하시고 맨 위 오른쪽에 있는 '저장' 을 꼭 눌러주셔야 해요!

     

    이제 내부 IP 를 고정했으니 공유기의 외부 IP 를 통해 언제나 라즈베리 파이 서버에 접속하실 수 있습니다.

    여기서, 한 가지 사항이 더 있는데 외부 IP 의 문제인데 일반적으로 회사가 아닌 일반 가정에서는 IP 를 보안이나 IP 부족 문제로 DHCP 를 통한 동적 할당을 받습니다. 물론 고정 IP 를 ISP로부터 구입할 수는 있지만 요금이 붙어요.

     

    제가 만든 것은 라즈베리 파이를 사용한 간단한 홈서버이기 때문에 고정 IP 를 구매하지는 않았습니다. 원래 DHCP 를 통한 IP 의 동적할당은 기기의 전원이 꺼지거나 유효기간이 만료되었을 때 IP 가 새로 할당되지만, 가정에서 사용하는 공유기의 특성상 한 번 전원을 연결하면 잘 건드리지 않죠! 따라서 정전이나, 특이한 사항이 없는 경우 공유기는 IP 가 새로 할당되지 않습니다. 그래서 현재 공유기에 할당된 IP 를 사용하기로 했어요.

    완전한 고정 IP 는 아니지만 어떻게 보면 반고정 IP 로 사용할 수 있겠네요.

     

     

    감사합니다!

    'CS > Server' 카테고리의 다른 글

    [포트포워딩] 라즈베리파이 외부접속하기  (2) 2020.10.24
Designed by Tistory.