Caddy를 사용하여 Linux에 ASP.NET Core 호스팅

Caddy를 사용하여 Linux에 ASP.NET Core 호스팅

시작

나는 .NET 개발자이며 Linux 환경에 익숙하지 않다. 이제 .NET은 .NET Core가 .NET 5가 되면서 Windows, Linux및 macOS 운영체제에서 .NET 기반 프로그램을 안정적이면서 최적화된 실행할 수 있게 되었다.

Windows 기반 개발서버를 Linux로 변경할 일이 생겼는데, 기존 IIS에서 호스팅 하던 ASP.NET Core 기반 사이트를 Linux로 이관해야 했고, 적절한 웹 서버를 찾다가 많이 사용하는 Nginx 대신 HTTPS TSL 인증서를 자동으로 관리하는 Caddy 웹 서버를 이용하기로 하였다.

Caddy에 ASP.NET Core를 호스팅하는 한글로 된 글이 없어 기록으로 남긴다.

Caddy 소개

Caddy는 Go언어로 개발되었으며 현재 버전은 Caddy v2 이다. 모듈 아키텐처를 지향하고 종속성이 없으며 30여 메가로 단일파일이다. 특히 TLS 인증서 갱신을 자동으로 하는 기능이 특별하다고 할 수 있고, Caddy를 선택한 이유이기도 하다.

.NET 5 설치

쉘 형태로 설치할 수 있는 방식을 제공하며, 어떤 리눅스 환경이던 이 방식이 가장 간단하고 편리하다. 기본설치보다는 /usr/share/dotnet에 설치하는것으로 선호하므로 다음과 같이 설치한다.


wget https://dotnet.microsoft.com/download/dotnet-core/scripts/v1/dotnet-install.sh

chmod +x ./dotnet-install.sh

sudo ./dotnet-install.sh --version 5.0.100 --install-dir /usr/share/dotnet

sudo ln -s /usr/share/dotnet/dotnet /usr/bin/dotnet

다음과 같이 잘 동작하는지를 확인한다.


dotnet --version

정상적으로 설치되었다면 5.0.100 버젼이 표시될 것이다.

Caddy 설치

Caddy는 다양한 Platform의 바이너리를 제공한다. Download에서 적절한 Platform을 찾아 설치한다. 내가 설치할 환경은 Linux amd64이므로 이를 선택하고 다운로드 하였다.


wget https://caddyserver.com/api/download?os=linux&arch=amd64&idempotency=6576255341450

이제 Install를 참조하여 설치를 진행한다.

권장사항

  • 다운로드 하거나 컴파일된 Caddy

  • systemctl 버젼 232 또는 그 이상 systemctl --version

  • sudo 권한

다음을 실행한다.


sudo mv caddy /usr/bin/

sudo groupadd --system caddy

sudo useradd --system \

   --gid caddy \

   --create-home \

   --home-dir /var/lib/caddy \

   --shell /usr/sbin/nologin \

   --comment "Caddy web server" \

   caddy

wget https://raw.githubusercontent.com/caddyserver/dist/master/init/caddy.service

sudo mv ./caddy.service /etc/systemd/system/caddy.service

기본 caddy.service를 보면 Caddy에서 참조하는 설정파일의 경로가 /etc/caddy/Caddyfile인 것을 알 수 있다. 설정을 하기 전에 사용 할 도메인이 제대로 세팅이 되었는지를 다음을 통해 레코드를 확인한다.

example.comwww.example.com을 본인의 도메인명으로 변경해야 합니다.


curl "https://cloudflare-dns.com/dns-query?name=example.com&type=A" \

  -H "accept: application/dns-json"

Caddyfile을 다음과 같이 설정한 후 접속 확인한다.


example.com {

   redir https://www.example.com{uri}

}

www.example.com {

   respond "Hello, Good!"

}

접속 확인을 한다.

ASP.NET Core 호스팅

위의 respond ... 대신 reverse_proxy 127.0.0.1:5000 로 바꾼다.

5000번으로 ASP.NET Core 어프리케이션을 실행한다.

문서 보완할 점

  • ASP.NET Core 호스팅 보완

  • 권한 설정 보완

Caddy의 장점은 TLS인증서에 대한 어떠한 설정도 없다는 것입니다. 리버스프락시를 쓰는 가장 간단한 환경일 것 같습니다