잡담

자작 NAS - Docker로 환경 구축하기 (1)

라르티그 2023. 5. 16.

Docker로 NAS 환경을 구축한 과정을 공유하고자 한다.

Docker가 뭔지 잘 모르시는 분이라도 따라 하면 설정이 가능할 것이다.

DDNS 설정

집 안에서만 사용할 계획이라면 필요없겠지만, 밖에서도 접속할 수 있게 해 주면 NAS의 활용도가 훨씬 더 올라간다.

밖에서 접속하기 위해 네트워크에 이름을 붙여주어야 한다.

IpTime과 Asus 공유기 등에서 이 기능을 제공한다. 

IpTime 공유기에서 DDNS 설정하는 방법은 아래 블로그를 참조하자

 

 

ipTime 공유기 집 밖에서 접속하고 설정하는 방법

집에 공유기 하나씩은 갖고 계실 것입니다. 집에서 설정하는 것은 192.168.0.1로 접속해 공유기에 접속하는 것은 대부분 알고 계실 것이라 생각하는데요. 갑자기 집 밖에서 공유기 설정을 해야 할

my-rom.tistory.com

설정한 DDNS 주소는 이 후 여기저기에서 쓰이니 잘 기억해 두자.

OS 설치

웹크롤링 기능 대응을 위해 Ubuntu Desktop으로 선택하고,

오랫동안 지원이 가능한 LTS 중 최신 버전을 선택했다.

현재는 22.04.02 LTS다.

이미지 다운로드

 

Ubuntu 22.04.2 LTS (Jammy Jellyfish)

Select an image Ubuntu is distributed on three types of images described below. Desktop image The desktop image allows you to try Ubuntu without changing your computer at all, and at your option to install it permanently later. This type of image is what m

releases.ubuntu.com

원 링크가 느릴 경우를 대비해 kakao 미러도 추가한다.

 

Ubuntu 22.04.2 LTS (Jammy Jellyfish)

Select an image Ubuntu is distributed on three types of images described below. Desktop image The desktop image allows you to try Ubuntu without changing your computer at all, and at your option to install it permanently later. This type of image is what m

mirror.kakao.com

위 링크 중 마음에 드는 곳에서 ISO 파일을 다운로드한다.

설치 USB 만들기

 

 

Rufus - 간편하게 부팅 가능한 USB 드라이브 만들기

Rufus는 USB 메모리 및 플래시 드라이브를 포맷하고 부팅할 수 있도록 만드는 도구입니다. 이 페이지 아래에 나열된 ISO 이미지 이외에도 Rufus는 여러 종류의 ISO 이미지를 지원합니다. (1) Windows 8 이

rufus.ie

위 링크에서 Rufus를 다운로드하자.

USB를 연결하고 Device에서 선택을 해준다.

Boot selection에서 위에서 다운로드한 ISO 파일을 선택해 주자.

다른 설정은 건드릴 필요 없이 START 하면 부팅 가능한 Ubuntu 설치 USB가 만들어진다.

Ubuntu 설치

PC에 위에서 만든 USB를 연결하고 부팅 순서를 USB로 바꿔주자.

요새 Ubuntu는 그냥 Next만 눌러주면 간단하게 설치가 가능하다.

SSL 인증서 설치

HTTPS로 접근하기 위해서는 SSL 인증서가 필요하다.

Portainer와 Rocketchat 사용 시 HTTPS를 필요로 한다.

외부 여러 사람이 접근하는 경우는 안정성을 위해 유료를 사용하는 게 좋겠지만, 

개인 용도라면 무료로 사용해 보자.

Let's Encrypt라고 하는 비영리 단체에서 제공하는 서비스가 있다.

 

 

무료 SSL 인증서 적용(Let's Encrypt)

오늘은 무료 SSL 인증서 "Let's Encrypt" 적용 방법에 대해서 알아보겠습니다. https는 http의 보안프로토콜입니다. 이를 이용하기 위해서는 SSL 인증서라는 게 있어야 되는데 보통 유료로 구입들을 하게

nhj12311.tistory.com

설명이 상세하게 잘 되어 있는 블로그를 링크한다.

위에서 설정한 DDNS 주소로 SSL 인증서를 설치하고

cron을 이용해서 자동 업데이트까지 설정해 주자.

Docker 환경 구축

Docker로 설정할 수 있는 기능들은 Docker로 설치하고 관리하면 편하다.

Docker 설치

지원 Ubuntu 버전

  • Ubuntu Lunar 23.04
  • Ubuntu Kinetic 22.10
  • Ubuntu Jammy 22.04 (LTS)
  • Ubuntu Focal 20.04 (LTS)
  • Ubuntu Bionic 18.04 (LTS)

x86_64 (or amd64), armhf, arm64, s390x 아키텍처를 지원한다.

구 버전 삭제

기존에 설치된 Docker가 있다면 삭제해 준다.

sudo apt-get remove docker docker-engine docker.io containerd runc

기존 Docker를 사용하면서 image나 container, volume, network를 만들었다면 /var/lib/docker/ 에 저장되어 있을 것이다.클린 설치를 원한다면 해당 파일들을 삭제해 준다.

설치 방법

Docker Desktop, 수동 설치, script 설치 등을 지원하지만, apt repository를 이용해 설치하는 방법을 추천한다.

Repository 설정

1. apt 인덱스를 업데이트하고 HTTPS로 repository에 접근할 수 있도록 설정해 준다.

sudo apt-get update
sudo apt-get install ca-certificates curl gnupg

2. Docker의 공식 GPG key를 추가해 준다.

sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

3. 다음 명령어로 Repository를 설정해 준다.

echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Docker 엔진 설치

1. apt 패키지 인덱스를 업데이트해준다.

sudo apt-get update

2. Docker Engine, containerd, Docker Compose를 설치해 준다.

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

3. Hello-world 이미지 구동으로 Docker Engine 설치 확인 (필수 아님)

sudo docker run hello-world

이미지가 정상 구동되는 것을 확인하는 과정으로 무시해도 된다.

Docker 엔진 삭제

혹시 삭제를 원한 경우를 대비해 방법을 적어놓는다.

1. Docker Engine, CLI, containerd, Docker compose 패키지 삭제

sudo apt-get purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras

2. Image, container, volume, 설정 파일들은 자동 삭제가 되지 않는다.

sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd

Portainer 설치

Docker에 Container를 올리고 관리하는 것은 command line으로도 가능하지만, 사용이 편치만은 않다.

Web UI를 통해서 쉽게 관리할 수 있도록 해주는 Portainter라고 하는 관리 툴이 있다.

먼저 설치해 주자

docker run -d -p 9443:9443 -p 8000:8000 \
    --name portainer --restart always \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -v portainer_data:/data \
    -v /etc/letsencrypt/live/yourdomain:/certs/live/yourdomain:ro \
    -v /etc/letsencrypt/archive/yourdomain:/certs/archive/yourdomain:ro \
    portainer/portainer-ce:latest \
    --sslcert /certs/live/yourdomain/fullchain.pem \
    --sslkey /certs/live/yourdomain/privkey.pem

위 명령어에서 yourdomain이라고 되어 있는 부분을 DDNS에서 설정한 주소로 바꿔서 입력해 주면 된다.

접속 확인

{NAS IP}:9443으로 접속하면 다음과 같은 화면을 확인할 수 있을 것이다.

공유기 설정에서 포트포워딩으로 원하는 포트와 NAS IP의 9443을 연결해 주자

{DDNS 서버}:Port 명으로 접속하면 외부에서도 동일한 화면을 볼 수 있을 것이다.

Pure-FTP 설치

Portainer에서 설치하는 방법이다.

Container 탭으로 들어가서 + Add container를 눌러준다.

Name

pure-ftpd

구분을 위한 항목으로 꼭 pure-ftpd일 필요는 없다

Image

gists/pure-ftpd:latest

Network ports

  • host : 2021 container :21 TCP
  • host : 30000-30009 container : 30000-30009 TCP

Volumes

  • container : /etc/pureftpd Bind
  • host : /home/사용자/docker/pureftpd Writable

pure-ftp의 설정이 저장되는 곳이다.

  • container : /home/ftpuser Bind
  • host : /mnt Writable

실제 데이터가 저장되는 곳으로 HDD가 마운트 된 곳으로 설정해 주자.

Env

name value
PUBLIC_HOST DDNS로 설정한 주소
MIN_PASV_PORT 30000
MAX_PASV_PORT 30009
UID 1000
GID 1000

Restart policy

Always

위와 같이 설정해 주고 Deploy the container를 눌러주면 이미지를 다운로드하고 실행이 된다.

폴더 권한과 사용자를 추가하자. Linux shell에서 입력하면 된다.

Linux shell에서 설정

폴더 권한 설정

docker exec -it pure-ftpd chown ftpuser:ftpuser -R /home/ftpuser

사용자 추가

docker exec -it pure-ftpd pure-pw useradd test -m -u ftpuser -d /home/ftpuser

test라는 유저가 /mnt 폴더를 사용하도록 추가하는 명령어이다. 

사용자 반영

docker exec -it pure-ftpd pure-pw mkdb

네트워크 설정

공유기 설정에서 포트포워딩으로 원하는 포트와 NAS IP의 2021을 연결해 주자

PC에서는 파일질라, 안드로이드 폰에서는 탐색기 어플을 사용해서 접속이 가능하다.

내부에서는 {NAS IP}:2021

외부에서는 {DDNS}:포트포워딩한 포트로 파일 서버에 접속이 가능하다.

 

OS, Docker, Portainer, FTP까지 설치를 완료했다.

다음 글에서는 Samba, Torrent, jDownloader, rocketchat, 복합기 서버를 설치하는 방법을 정리하도록 하겠다.

댓글

💲 추천 글