why-have-a-home-server.png

 

클라우드 서비스는 편리하지만, 그래도 원하지 않게 유입 트래픽이 많으면 요금 폭탄을 맞을 수도 있습니다 (미국이라면, 월 $200 훌쩍 넘기게 될 수도 ...) 그저 뭔가 테스트 해 보려고 사용하기엔, 좀 아깝다는 생각이 들더군요. 요즘은 가정용 인터넷 속도도 빠르고, 나름 안정적이라 우선, 집에서 테스트용 서버를 돌려보기로 했습니다.

  • 블로그 웹사이트도 하나 올리고,
  • 내 인터넷 도메인 이름도 그대로 사용했으면 좋겠고,
  • 제대로된 SSL certificate도 사용해서 괜히 피싱 사이트 처럼, 보이게 하고 싶지 않기도 하구요,
  • DB server, SMTP server, SSH, telnet, sftp, 기타등등 서버를 '제약없이' 돌려보고 싶은데요

위 요건을 다 만족하는 방식으로 가정용 인터넷에 서버를 운영할 수 있는 방법을 알아보도록 하죠 (이미 아시는 분들도 많지만). 다음과 같은 과정으로 셋업하면 됩니다.

Dell_Inspiron.half.size.png

 

  • 우선 안 쓰는 컴퓨터를 하나 준비했습니다. 하드디스크가 소음이 있어 방치한 랩탑에, 128GB SSD로 교체해주었습니다.
  • Ubuntu 18.04 LTS 설치하고, 회사에서 많이 쓰는 Spring Boot 말고, Microsoft ASP.NET Core 2.2 를 설치하기로 했습니다 (굳이 맨날 쓰는 거 또 쓰느니, 새로운 거 한번 해 보자는 ...) Ubuntu 18.04 download
  • Ubuntu 깔면 기본으로 활성화되는 방화벽(ufw)에서 서비스에 사용할 네트워트 포트를 열어줍니다. (http:80, https:443)

$ sudo ufw allow http 

$ sudo ufw allow https 

  • 네트워크 라우터에 서버가 사용할 위한 포트 포워딩(port forwarding)을 설정합니다. 라우터 마다 설정 방법이 조금씩 다르지만 port forwarding 이라는 기능은 거의 모두 제공합니다.

Home_server_setup.png

인터넷 서비스 업체(ISP)가 제공하는 인터넷 모뎀(라우터 일체형)을 사용하면 다음과 같은 방식으로 설정해야 합니다

Web_Server_Network_Setup.png

인터넷 서비스 업체(ISP)가 제공하는 인터넷 모뎀과 가정용 라우터를 모두 사용하는 경우엔 다음과 비슷한 설정이 되겠네요

 

  • 인터넷 도메인을 가지고 있다면, 동적(dynamic) DNS를 설정합니다. 그냥 동적 IP 주소를 써도 괜찮다면, 이 과정은 무시하고 다음으로 넘어가도 됩니다. 약간 부가적인 설명을 드리자면, 가정용 인터넷용으로 ISP가 제공하는 IP address는 수시로 바뀌는 동적 IP 주소라서 계속 동일한 이름으로 접속하고 싶다면 인터넷 도메인을 사용하는 것이 좋겠죠. 도메인 서비스 제공자가 동적 DNS 서비스를 제공하는지 먼저 확인하세요. 개인적으로는 구글 도메인 Google Domains 을 추천합니다. 구글 도메인 서비스는 동적 DNS를 제공하는 것 뿐만 아니라, 도메인 사용자의 개인정보 보호기능이 기본으로 제공되므로, 도메인 정보에 공개된 개인 이메일 때문에 스팸메일 '폭탄'을 받는 가능성이 많이 줄어듭니다.

Google_Domain_Setup_yours.png

 

여기까지 마쳤으면,이제는 어떤 서버를 올리든 원하는대로 설정하면 되구요 (SSH, SFTP, TELNET, WEB SERVER, REST API server, etc). 여기서부터는 web server를 올리고, 도메인에서 사용할 SSL certificate를 역시 '무료'로 획득하는 방법을 간단히 기록합니다.

 

  • 블로그용 웹서버로 만든 오픈소스 프로젝트 Blogifier 소스를 다운로드 받아 Readme.md 파일에 설명한대로 컴파일하고 실행합니다. 보통은 웹서버로 아파치를 더 많이 사용하겠지만, 저는 여기선, C#으로 된 블로그 웹사이트를 사용해 보기로 했구요. Blogifier : Blog website project written in ASP.NET Core

  • SSL certificate (인증서)를 획득해서, website에 연결합니다. Letsencrypt는 공짜로 공인인증서를 발급 및 갱신해 주는 오픈소스 프로젝트입니다. 자신의 서버에 따라 설정방식은 약간씩 차이가 나니까, 해당 웹사이트의 설명을 차근차근 따라 하세요. 참고로 갱신주기는 90일이므로 60일 정도 지났을때 갱신하라는 이메일이 날아옵니다. 자동으로 갱신되도록 cron으로 스크립트를 걸어 놓을 수도 있긴 하지만, 실제로 갱신이 제대로 되었는지 체크해 보는 게 좋겠죠. Let's Encrypt Project

  • ASP.NET Core 웹사이트를 Linux 서비스로 실행하기 : Linux systemd를 사용하여 컴퓨터가 전원이 꺼졌다가 다시 켜진 경우에도, 로그인하지 않고도 자동으로 실행되도록 설정합니다. Understanding systemd

  • Blogifier를 셋업했다면, sendgrid 도 같이 셋업해 줘서, 뉴스레터를 보내는 작업이 자동화될 수 있도록 하면 더 편리하겠죠. sendgrid는 외부로 메일을 보낼때 사용하는 SMTP 대체용 서비스입니다. SendGrid website

이상으로 간단하게 셋업하는 절차만 기록해 봤는데요, 자신의 인터넷 도메인과 컴퓨터만 있다면, 일반 가정용 인터넷에서도 서버를 설치해서 안팎에서 자유롭게 접속하고 운영할 수 있습니다. 사용하는 인터넷에 따라 셋팅 방법이 약간씩 다를 수 있어 더 구체적으로 확인하기가 쉽지 않은 것 같네요 ㅠㅠ

 

다음 글에서는, 외부에서 아이폰이나 아이패드로 집에서 호스팅 중인 서버에 접속하는 간단한 방법을 소개하겠습니다. 

 

Comments


Comments are closed