소박한 가정용 웹서버
TL; DR
- 단순 용도의 개인용 웹 서버를 구축해보자.
- 구매부터 기본 세팅까지 개인이 경험한 전 과정을 소개한다. (역시 나중에 잊어버릴 나 놈을 위한 것이다!)
- 모든 것은 ‘게으른’ 접근이다. 필요한 것을 얻으면 그 이상은 나아가지 않을 것이다.
넋두리
“웹 서버”라고 제목에 쓰긴 했지만 사실 단순한 파이썬 앱 호스팅, 토렌트 다운로드, 그리고 DLNA 서버 정도 만드는 것이 전부이다. 본격적인 의미의 NAS를 만드는 것이 아니다. 깃헙과 스트리밍 서비스가 존재하는 시대에 개인용 NAS까지 만들 정도로 보관해야 할 자료가 나에게는 없다.
서버 구매
목표는 최대한 싸고 간단하게 구축하는 것. 처음에는 라즈베리 파이를 고민했으나 이런 저런 부품을 구비하려면 비용이 꽤 들더라. 이럴 바에야 x86이 낫지 않을까? 알리익스프레스를 검색했다. N95와 같은 준수한 저전력 x86 CPU가 장착된 베이본 물건을 13만원 정도면 살 수 있었다. 윈도 OS도 필요 없고 메모리와 nvme SSD는 이미 굴러다니는 게 있어서 이 녀석을 구매했다. 16GB 메모리는 약 5.5만원 정도, 512GB SSD는 4만원 정도면 구매하니, 대략 베어본 가격에서 10만원 정도 더하면 쓸만한 작은 서버를 갖출 수 있다.
우분투 설치
USB 메모리에 다운받아서 설치하면 된다. 부팅 USB를 macos나 윈도에서 편리하게 만들 수 있다. 여기를 참고하자. 설치 과정에서 경험한 몇 가지 사실을 소개한다.
- “Ubuntu 22.04.3 LTS” 서버 버전 설치했다. 이 녀석을 통해 GUI를 쓸 일이 없을 듯 하기에 GUI 활용을 위한 데스크탑 앱을 깔지 않았다.
- 요즘 버전 우분투 설치시 github을 통해서 ssh 오픈키를 가져올 수 있다. 해당 오픈키의 프라이빗 키가 설정된 노트북에서 바로 서버로 접속이 가능하다.
- OS 설치가 끝난 이후 macos나 윈도가 설치된 기기를 통해 ssh 접속을 통해 작업하기를 권한다. 서버에 디스플레이와 키보드를 붙여서 쓰면 명령어를 모두 타이핑 해야 한다.
설치 후 작업
우분투 설치 후에는 몇가지 필요한 작업을 해야 한다.
기본 저장소 교체 및 업데이트
apt 패키지 업데이트를 위한 주소는 /etc/apt/sources.list
파일을 편집하면 된다.
> sudo nano /etc/apt/sources.list
기본 저장소보다는 카카오의 미러 저장소가 국내에서 빠르다. 해당 파일을 적당한 편집기로 열어 기본 패키지 저장소가 어떻게 되어 있는지 살펴보자. 파일 내의 모든 저장소 URL을 찾아 http://archive.ubuntu.com/ubuntu/
또는 http://kr.archive.ubuntu.com/ubuntu/
등의 주소를 http://mirror.kakao.com/ubuntu/
로 변경하면 된다. 둘 중 뭘로 되어 있는지 모르니 확인 후 작업하는 것을 권한다. nano 앱에서 crtl-w > crtl-r
로 찾아서 바꾸자.
패키지 업데이트와 업그레이드
> sudo apt update
> sudo apt upgrade # OS 요소까지 모두 업그레이드하려면 upgrade > full-upgrade
zsh 설치
> sudo apt update # 이미 실행했다면 건너 뛰자
> sudo apt install zsh # zsh 설치
> chsh -s $(which zsh) # zsh을 기본 셸로 설정
# 로그아웃 후에 다시 로그인하면 zsh이 기본셸로 설정된다.
> sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" # oh my zsh을 설치하자.
p10k 깔기
> git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k
셸 꾸미기로 속 편하게 파워레벨10k를 쓰자.
> nano ~/.zshrc # zsh 설정 열기
# ZSH_THEME="robbyrussell" -> ZSH_THEME="powerlevel10k/powerlevel10k" # 테마를 p10k로 바꾸자
변경 후 셸을 다시 시작하면 p10k 설정화면이 뜬다. 취향대로 설정하도록 하자. 설정을 바꾸고 싶다면, p10k configure
를 실행하거나 ~/.p10k.zsh
를 직접 수정해도 좋다.
brew 설치
우분투에서 필요한 앱을 까는 방법은 apt, snap 그리고 brew가 있다. OS 단위의 업데이트 혹은 OS와 프로세스과 깊게 연관된 앱들은 apt를 통해서 깔자. snap도 나쁘지는 않지만 거추장스런 면이 있다. user 레벨에서 필요한 앱들을 깔고 관리하기에는 brew가 편하다. macos 만큼 편하지는 않지만 리눅스에서도 쓸만하다.
웹 페이지의 소개된 방식대로 설치하자. 설치 후에는 화면에 뜬 메시지대로 사후 작업을 꼭 해줘야 한다. 그래야 brew 명령어를 제대로 실행할 수 있다. 사용하는 셸에 따라서 서로 다른 사후 실행 명령이 등장하니 유의하시라.
gh, pixi with brew
이제 brew를 통해서 필요한 앱들을 깔겠다. 필요한 앱을 알아서 깔면 된다. brew를 통해서 설치할 수 있는지 여부는 brew 홈페이지에서 검색으로 확인할 수 있다. 나는 깃헙을 활용하기 위한 gh와 파이썬 의존성 관리도구인 pixi를 가장 먼저 설치했다.
> brew install gh, pixi
gh를 설치한 후 gh auth login
을 통해 깃헙 계정에 로그인을 해두자. 필요한 리포가 있을 경우 gh repo clone {리포-주소}
를 통해 편하게 당겨올 수 있다.
streamlit
이 소박한 가정용 서버의 목적이 streamlit을 호스팅하기 위한 것이다. 외부 클라우드 컴퓨팅을 사용하면 허름한 것을 쓰더라도 월 만원 정도 나간다. 스트림릿에서 제공하는 무료 티어를 쓸 수도 있지만, 이 녀석은 자주 쓰지 않는 경우 파킹에 들어가기 때문에 사용성이 아주 좋지는 않다. 우분투 깔아서 직접 호스팅하는 편이 소박한 용도라도 제법 편리하다. 앞서 보았듯이 서버 가격이 비싸지 않으며 전기 요금도 얼마 되지 않는다.
설치와 서비스
- pixi를 통해서 streamlit을 설치한다.
- 프로세스를 계속 살려두기 위해서 tmux를 활용하자.
- tmux세션을 만든 후에
- 해당 세션에서 streamlit 프로세스를 띄우고
- 디태치해서 빠져 나온다.
> tmux new-session -s {내-세션} # {내-세션}이라는 이름의 새로운 세션 시작
> pixi run streamlit {당신의-앱.py} --server.port 8880 # 서버 포트는 필요한 경우 추가
> [CTRL-B] + D 로 창을 빠져 나온다.
#
> tmux ls # tmux 세션 조회
> tmux attach -t {내-세션} # 세션 진입하기
- 호스팅 주소가 있다면 해당 서비스의 네임서버에서
A
방식으로 IP 주소를 적어주면 된다. 회사에 따라서는 열어 놓은 포트를 제한하는 곳이 있다. 위에서 스트림릿의--server.port
옵션은 이를 처리하기 위한 것이다.
Cloudflare를 예로 들어보자. http와 https 별로 특정한 포트가 열려 있다(LINK).해당 포트로만 접근이 가능하다. IP 주소를 감추기 위해 다음과 같은 우회로를 쓸 수 있다. A 호스트네임을 IP 주소와 연동하고 proxy를 켠다. 필요한 서비스에 접속하기 위해서는 A:8880
이런 식으로 도메인네임으로 접근하면 된다. 만일 8880을 기억하기 싫다면? CNAME으로 B 호스트네임을 자체 도메인으로 연동한다. 그리고 Rule의 리디렉션 룰을 생성해서 B 호스트네임을 A:8880
으로 리디렉션하면 된다.
토렌트 서버
트랜스미션을 설치할 것이다. 자체적인 웹 인터페이스를 갖고 있어서 서버 버전 용도로 적합하다. 전반적인 설치는 아래 지침을 따르자.
https://hyperhand.tistory.com/entry/우분투에-토렌트-설치
몇 가지 팁
- 설정을 바꿀 때에는 반드시 서비스를 멈춘 상태에서 진행하도록 하자.
- 유저 anari를 가정한 상태에서 이 아래 폴더에 다운로드된 결과를 넣고 싶다고 하자.
\home\anari\downloads
라고 하자. - 이때 다운로드 파일을 넣고 싶은 폴더는
anari
그룹 안에 속해 있고 이용자는debian-transmission
이다. - 이 경우
anari
그룹 안에debian-transmission
이라는 이용자를 추가하면 권한 문제가 해결된다.
> cat \etc\group # 그룹 내역 및 소속 확인하기
> sudo usermod -aG anari debian-transmission # anari 그룹 안에 debian-transmission 이용자 추가하기
DLNA 서버
본격적인 활용을 위해서는 Plex 등을 설치하는 게 좋겠지만, 스마트 티비 앱에 영상 정도 전송하는 것이 목적이라면 DLNA 서버만 있으면 된다. 이 용도에 딱 적합한 것이 minidlna다.
https://www.nemonein.xyz/2020/09/4403/
몇 가지 팁
- 위 설정에 소개된 대로 미디어를 스트리밍할 폴더를 설정해주면 된다.
- 만일 내가 전송할 폴더의 위치가 anari 그룹에 속해있다면 마찬가지로 minidlna 유저를 이 그룹에 넣어주면 되겠다.
> sudo usermod -aG anari minidlna # 유저 추가하기
> sudo systemctl restart minidlna.service # 서비스 재개
서비스를 멈추고 설정을 바꾸는 게 좋다. restart
부분을 start
, stop
등으로 응용하면 된다.