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.com
및www.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 호스팅 보완
-
권한 설정 보완