개요
웹사이트(WordPress), 미디어 서버(Plex), 클라우드 스토리지(NextCloud), Torrent(Transmission) 등 NAS에서 많이 사용되는 서비스는 웹 기반으로 운영되기 때문에 이들을 이용하려면 가장 먼저 웹 서버 소프트웨어를 설치해야 합니다.
본 글에서는 여러 가지 웹 서버 소프트웨어 중 가볍고 성능이 우수한 Nginx를 우분투 20.04 서버에 설치해 웹서버를 구축하겠습니다.
※ 앞선 글 Docker와 Portainer 설치하기 작업까지 완료된 후를 가정하고 설명합니다.
사전작업
도메인 연결
DigitalOcean의 DNS에 A 레코드로 도메인과 서버 또는 가상 머신(VM)의 공인 IP 주소를 연결하였습니다. 이에 대한 내용은 앞선 글 무료 도메인 신청 및 DNS 설정을 참고 바랍니다.
외부 접속을 위한 포트 개방
외부에서 웹서버와 통신을 하려면 Nginx 웹서버가 기본적으로 사용하는 HTTP를 위한 TCP 80 포트와 HTTPS를 위한 TCP 443 포트를 개방해야 합니다. 따라서 오라클의 가상 클라우드 네트워크의 접근 규칙과 iptables 방화벽에 서비스가 사용하는 해당 포트를 허용하는 규칙을 생성합니다.
- 오라클 가상 클라우드 네트워크 접근 규칙 수정
※ 메뉴 접근 방법은
Oracle Cloud Infrastructure에서 특정 포트로 접근 허용하기를 참조합니다.
메뉴 접근 후, 설정할 항목은 다음과 같습니다.
- 소스 CIDR :
0.0.0.0/0
- IP프로토콜 :
TCP
- 대상 포트 범위 :
80, 443
- iptables 방화벽 포트 허용
sudo iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
- iptables 방화벽의 설정 내용을 저장하고 다시 불러옵니다.
sudo netfilter-persistent save
sudo netfilter-persistent reload
Docker 설치
NAS의 서비스를 편리하게 설치, 관리하기 위해 가상화 소프트웨어인 도커를 설치하였습니다. 해당 내용은 이전에 작성한 도커 및 포테이너 설치하기를 참고합니다.
웹 서버 소프트웨어
포테이너의 사용방법 및 도커의 설정 방법을 알아보기 위하여 최대한 상세히 내용을 작성하겠습니다.
※ 이하 예시의 example.com
은 모두 자신이 발급받은 도메인명으로 교체하여 적용합니다.
Nginx 설치
- 포테이너 관리자 페이지(
http://example.com:9000
)에 접속하여, [Stacks] → [+ Add stack]으로 이동합니다. 다음 그림과 같이 항목별 내용을 모두 입력한 후, 창 하단의 [Deploy the stack] 버튼을 누릅니다.
[Name]
: nginx-ssl[Web editor]
:
version: "2"
services:
nginx:
image: nginx:latest
restart: always
ports:
- 80:80
- 웹브라우저에 자신이 신청한 도메인(예를 들어,
http://example.com/
)을 입력합니다. Nginx에서 제공하는 기본 페이지가 표시됩니다.
Nginx 설정
Nginx에서 보여줄 페이지 생성
도커를 이용하여 설치한 Nginx는 기본적으로 하나의 서버 블록이 활성화되어 /usr/share/nginx/html
의 디렉터리에서 문서를 제공하도록 설정되어 있습니다. 앞서 보았던 기본 페이지가 해당 폴더에 있습니다.
만약 하나의 도메인만 사용할 것이라면 html
디렉터리를 사용하는 기본 설정만으로도 잘 작동하지만 여러 도메인에 대해 서비스를 제공하려면 도메인 별로 추가 디렉터리를 만드는 것이 관리를 위해 편리합니다.
example.com 도메인을 사용한다고 가정하고, example.com 웹사이트가 사용할 디렉터리를 생성합니다. /usr/share/nginx
디렉터리는 Nginx가 기본으로 생성하는 디렉터리이며, /usr/share/nginx
하위의 디렉터리 이름을 example.com과 같이 자신이 신청한 도메인을 그대로 사용하겠습니다.
하지만 이 폴더는 도커 이미지 내부에 있기 때문에 우리가 이 페이지에 호스트에서 접근하려면 Vmware나 VirtualBox를 이용할 때 그런 했던 것처럼 공유폴더에 해당하는 도커의 볼륨을 설정해주면 됩니다.
- 호스트에서 공유할 폴더를 생성합니다.
mkdir -p ~/docker/nginx-ssl/usr/share/nginx
- 도메인명으로 디렉터리를 생성합니다.
cd ~/docker/nginx-ssl/usr/share/nginx/
mkdir -p ./example.com/html
※ 도커와 공유할 폴더아래 도메인별로 구분하여 생성할 계획입니다.
- example.com으로 접속 시 표시할 내용을 작성하기 위해
index.html
파일을 생성합니다.
vim ~/docker/nginx-ssl/usr/share/nginx/example.com/html/index.html
파일 내용은 아래와 같이 작성하고 저장한 후 텍스트 편집기를 빠져나옵니다.
<html>
<head>
<title>Welcome to your_domain!</title>
</head>
<body>
<h1>Success! The your_domain server block is working!</h1>
</body>
</html>
- 포테이너 관리자 페이지(
http://example.com:9000
)에 접속하여, [Stacks] → [nginxssl]으로 이동합니다. 입력된 내용을 아래와 같이 수정한 후, [Deploy the stack] 버튼을 누릅니다.
version: "2"
services:
nginx:
image: nginx:latest
restart: always
ports:
- 80:80
volumes:
- /home/ubuntu/docker/nginx-ssl/usr/share/nginx/example.com/html:/usr/share/nginx/html
서버 블록 파일 생성
Nginx는 텍스트 형식의 파일로 설정을 관리합니다. 각 설정 정보를 담은 텍스트 파일은 최소 하나 이상의 server { }
로 구성되는데 Nginx에서는 이것을 서버블록이라고 합니다. 설정 파일의 내용은 특정 도메인이나 IP 주소에 대한 요청을 처리할 가상의 서버의 동작을 정의하는 것입니다.
서버블록은 여러 개를 생성할 수 있기 때문에 단일 서버에서도 둘 이상의 도메인을 호스팅 할 수 있습니다. (추후 이를 이용해 서브도메인을 호스팅 할 것입니다.)
앞서 만든 index.html 파일을 Nginx가 올바르게 제공하도록 서버블록을 생성합니다. example.com
웹사이트의 설정을 담을 서버 블록 파일을 새로 생성 합니다. 서버 블록 파일명은 도메인명을 그대로 사용했습니다.
mkdir -p ~/docker/nginx-ssl/etc/nginx/conf.d
sudo vim ~/docker/nginx-ssl/etc/nginx/conf.d/example.com.conf
다음 설정 내용을 복사하여 붙여 넣습니다. 내용은 기본적으로 제공되는 default.conf
내용과 동일하며, 도메인과 접근할 디렉터리의 이름은 example.com
으로 설정합니다.
server {
listen 80;
listen [::]:80;
root /usr/share/nginx/example.com/html;
index index.html index.htm;
server_name example.com www.example.com;
location / {
try_files $uri $uri/ =404;
}
}
※ 각 항목에 대한 상세한 설명은 Nginx 문서를 참조합니다.
- 다시 포테이너 관리자 페이지(
http://example.com:9000
)에 접속하여, [Stacks] → [nginxssl] 으로 이동합니다. 입력된 내용을 아래와 같이 수정한 후, [Deploy the stack] 버튼을 누릅니다.
version: "2"
services:
nginx:
image: nginx:latest
restart: always
ports:
- 80:80
volumes:
- /home/ubuntu/docker/nginx-ssl/usr/share/nginx:/usr/share/nginx
- /home/ubuntu/docker/nginx-ssl/etc/nginx/conf.d:/etc/nginx/conf.d
화면에 우리가 설정한 example.com.conf
파일에 의해 앞서 작성하였던 index.html
의 내용(Success! The your_domain server block is working!
)이 표시됩니다.
정리
이번 글에서는 Docker를 이용하여 간단히 웹서버 소프트웨어인 Nginx를 설치하였습니다. 다음 글에서는 웹서버의 보안강화를 위하여 앞선 글에서 발급 받은 TLS 인증서를 이용하여 HTTPS로 웹 서버에 접속할 수 있도록 설정을 변경하겠습니다.
참고
'기타' 카테고리의 다른 글
[자작 NAS] 1. 우분투 서버 마련하기 (0) | 2020.09.12 |
---|---|
[자작 NAS] 6. 토렌트 클라이언트 - Transmission (0) | 2020.09.07 |
[자작 NAS] 3. TLS 인증서 발급 (0) | 2020.08.29 |
[자작 NAS] 2. 무료 도메인 신청 및 DNS 설정 (0) | 2020.08.28 |
외부 JavaScript 불러오기 (async, defer) (0) | 2020.07.08 |