Ubuntu 에서 Caddy 설치하고 사용하기

Caddy는 코드를 간단하고 효율적으로 작성할 수 있는 현대적인 프로그래밍 언어인 Go로 만들어진 오픈 소스 웹 서버입니다. 2015년에 Matt Holt라는 개발자에 의해 처음 만들어졌으며, 지금도 계속해서 개선되고 있는 빠르고 효율적인 웹 서버입니다.

Caddy는 다른 웹 서버와 구별되는 몇 가지 특징을 가지고 있는데 가장 큰 특징 중 하나가 웹사이트를 더 안전하게 만들어주는 HTTPS를 자동으로 설정해주는 기능이 있어 웹 사이트를 만들 때 한결 편리하고 안전합니다. 또한 웹 서버 설정 파일은 다른 웹 서버와 비교해 상당히 간결하게 만들어져 있어, 웹 서버에 대해 잘 모르는 사람들도 손쉽게 사용할 수 있게 해줍니다.

이런 장점들로 인해 필자 또한 Caddy를 즐겨 사용하기 때문에 기본적인 설치 방법과 사용 방법을 간단하게 정리해보려 합니다. 개인적으로 처음 시작하는 경우 우분투를 권장하는 편이기 때문에 우분투를 기준으로 안내합니다.

아래 설명은 iboxcomein.com 에서 테스트 및 검증 후 작성 된 내용이지만 이것이 본문의 내용의 정확성이나 신뢰성에 대해 보증을 하는 것은 아니니 단순 하게 참고용으로 확인바랍니다.

튜토리얼 환경: Ubuntu 20.04 LTS, Caddy v2.6.4

Caddy 특징

Caddy 웹 서버는 사용하기 쉽고 이해하기 쉬운 구성 방식으로 유명합니다. Caddy는 아래와 같은 특징을 가지고 있어 많은 사람들이 선호합니다

  • 단순한 구문: 구성 파일에서 Caddy는 이해하기 쉬운 단순한 코드를 사용합니다. 설정이 간결하게 표현되어 쉽게 이해할 수 있습니다.
  • 자동 HTTPS: Caddy는 기본적으로 Let's Encrypt와 같은 인증 기관을 사용해 SSL/TLS 인증서를 자동 발급하고 갱신합니다. 이 기능 덕분에 사용자는 HTTPS를 손쉽고 빠르게 적용할 수 있습니다. 단, 해당 도메인이 NS 서버에 등록되어 있어야 하며, 서버 아이피와 연결되어야 합니다.
  • 플러그인: Caddy에는 플러그인 시스템이 있어 Caddy를 사용자 정의하고 다양한 작업을 수행할 수 있습니다. 앞서 설명한 HTTPS를 자동으로 구성하는 것도 플러그인이며 그 밖에도 몇 가지 유용한 플러그인들이 존재합니다.
  • 쉬운 정적 파일 제공: Caddy는 file_server 디렉티브를 사용하여 정적 파일을 간편하게 제공합니다. 이를 통해 별도의 설정 없이 웹 서버가 요청에 즉시 응답하게 됩니다.
  • HTTP/3 지원: Caddy는 최신 HTTP/3 프로토콜을 지원해 웹 사이트 성능이 향상됩니다.
  • 간편한 가상 호스트 설정: Caddy는 여러 도메인이나 가상 호스트 설정을 간단하게 구성할 수 있습니다. 각 도메인별로 독립된 설정을 쉽게 적용할 수 있어 관리에 용이합니다.
  • 성능: 성능이 떨어진다면 사용할 이유가 없지만 Caddy는 빠른 응답 시간과 높은 처리량을 가진 웹 서버로 성능이 좋다고 평가 받고 있기도 합니다.

이와 같은 특징들 덕분에 Caddy 웹 서버는 다른 웹 서버보다 구성과 운영이 훨씬 간단하며, 개발자와 시스템 관리자에게 편리한 사용 경험을 제공하며 초보 사용자들도 손쉽게 시작할 수 있습니다.

VMware 에 ubuntu 20.04 LTS server 전체 설치 과정

Caddy 설치

Caddy는 공식 웹사이트에서 제공하는 바이너리를 다운로드하거나 Docker 컨테이너 또는 소스 코드를 직접 내려받아 빌드하여 설치하는 등 다양한 방식으로 설치할 수 있으며 Ubuntu 또는 Debian 과 같이 Debian 계열 배포판에서는 apt 패키지 관리자를 사용하여 Caddy를 손쉽게 설치할 수 있습니다. 본문에서는 apt 패키지 관리자를 사용하여 Caddy를 공식 저장소에서 설치하는 방법에 대해 안내하며. 이를 통해 시스템은 Caddy를 쉽게 업데이트하고 관리할 수 있습니다.

참고: 모든 명령은 일반 사용자 계정을 기준으로 하여 sudo 명령을 포함합니다. sudo를 사용하면 일반 사용자가 시스템 전체에서 루트 권한을 사용할 필요 없이 필요한 작업을 수행할 수 있으며, 이는 보안상의 이유로 권장되는 방법입니다.
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
  1. 필요한 패키지를 설치하기 위한 준비 작업입니다. debian-keyring, debian-archive-keyring, apt-transport-https 패키지를 자동으로 설치합니다.
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
  1. Caddy의 GPG 키를 다운로드하고, gpg를 사용하여 키를 디코딩하고 /usr/share/keyrings/caddy-stable-archive-keyring.gpg파일로 저장합니다. curl 명령은 관리자 권한 없이도 실행할 수 있는 명령으로 위와 같이 사용합니다.
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
  1. Caddy의 소스를 포함하는 caddy-stable.list 파일을 생성하고, 해당 파일에 Caddy의 다운로드 URL을 입력합니다.
sudo apt update
  1. 위 명령으로 시스템의 패키지 목록을 업데이트합니다. 이 명령으로 새로운 저장소 정보를 가져오고 패키지 관리자를 최신 상태로 유지하기 위함입니다.
sudo apt install caddy
  1. 이제 Caddy를 설치합니다. apt패키지 관리자를 사용하여 Caddy를 자동으로 다운로드하고 설치합니다.

설치 확인

필요한 경우 Caddy 설치 후 설치 상태와 버전을 확인할 수 있습니다. 필수는 아니지만 확인해 보는 것이 좋겠죠.

sudo systemctl status caddy
  1. 이 명령으로 현재 Caddy 서비스의 상태를 확인할 수 있으며 실행하면 Caddy 서비스의 상태 정보를 출력합니다. 일반적으로 다음과 비슷한 형식의 출력을 볼 수 있으며, Caddy 서비스의 상태, 로드된 파일 경로, 도큐먼트 링크, 주 PID, 작업 수, 메모리 및 CPU 사용량, CGroup 정보 등을 확인할 수 있습니다.
 caddy.service - Caddy
   Loaded: loaded (/etc/systemd/system/caddy.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2022-05-10 12:30:00 UTC; 2 days ago
     Docs: https://caddyserver.com/docs/
 Main PID: 12345 (caddy)
    Tasks: 12 (limit: 4915)
   Memory: 52.0M
      CPU: 1.234s
   CGroup: /system.slice/caddy.service
           └─12345 /usr/bin/caddy run --environ --config /etc/caddy/Caddyfile

May 26 16:50:00 server systemd[1]: Started Caddy.
sudo caddy version
  1. 위 명령으로 설치된 Caddy 서버의 버전 정보를 확인할 수 있으며, 다음과 같은 형식으로 버전 정보가 표시됩니다.
Caddy v2.6.4
VMware 에 ubuntu 20.04 LTS server 전체 설치 과정

설정 파일 구성

Caddy 설정 파일은 Caddy 웹 서버의 동작을 구성하는 데 사용되는 텍스트 파일입니다. 일반적으로 Caddyfile이라고도 불립니다. 이 설정 파일은 간단하고 가독성이 높으며, 사용자들이 쉽게 이해하고 편집할 수 있도록 설계되었습니다.

설정 파일 확인

우선 설정 파일의 위치로 이동 해 편집을 위해 에디터로 설정 파일을 열어줍니다.

cd /etc/caddy/Caddyfile
  1. Caddy의 설정은 Caddyfile이라는 텍스트 파일을 통해 이루어지니 위 명령으로 파일의 경로로 이동합니다.
sudo vi /etc/caddy/Caddyfile
  1. 주로 사용하는 에디터를 이용해 Caddyfile을 열어줍니다. 본문에서는 vi 를 사용합니다.
cron crontab 기본 사용방법

가상 호스트 설정 예시

Caddy는 기본적으로 웹 서버로 사용할 수 있습니다. 웹 서버와 연결할 도메인이 your-domain.com이라고 한다면 설정을 다음과 같이 구성합니다. 다른 웹 서버 구성에 비해 상당히 간결하고 직관적인 방식인 것을 확인 할 수 있습니다.

your-domain.com {
  root * /var/www/html
  file_server

  log {
    output file /var/log/caddy/access.log
  }
}
  • root 디렉터리를 /var/www/html/your-domain으로 설정하여 해당 도메인의 정적 파일 서비스를 활성화합니다.
  • 로그 파일은 /var/log/caddy/your-domain-access.log에 출력됩니다.

여러 도메인을 사용하고 싶은 경우에는 다음과 같이 구성합니다. 각 도메인마다 해당하는 루트 디렉터리와 로그 파일의 경로를 설정하고, 필요한 경우 다른 설정 옵션을 추가로 지정할 수 있습니다. 이를 통해 각 도메인에 대한 각각의 독립된 설정을 구성할 수 있습니다.

your-domain.com {
  root * /var/www/html/your-domain
  file_server

  log {
    output file /var/log/caddy/your-domain-access.log
  }
}

another-domain.com {
  root * /var/www/html/another-domain
  file_server

  log {
    output file /var/log/caddy/another-domain-access.log
  }
}

프록시 서버 설정 예시

Caddy는 웹 서버 역할을 하는 동시에 프록시 서버로도 사용할 수 있습니다. 이는 Caddy의 다양한 기능 중 하나로, 편리하게 다른 서버로의 요청을 전달하고 응답을 받아 클라이언트에게 전달할 수 있습니다.

프록시 서버를 사용하기 위해서는 Caddy의 설정 파일에 해당 도메인 및 프록시 설정을 추가해야 합니다. 다음의 예시 코드에서는 "your-domain.com" 도메인에 대한 프록시 서버 설정을 보여주고 있습니다.

your-domain.com {
  reverse_proxy localhost:3000
}
  • 이 설정은 해당 도메인으로 들어오는 모든 요청을 로컬 호스트의 3000번 포트에 실행 중인 서버로 전달하도록 구성되어 있습니다.
  • Caddy를 통해 프록시 서버를 구성하면 웹 서버와 애플리케이션 서버를 분리할 수 있으며, 로드 밸런싱, 캐싱, SSL 암호화 등의 기능을 Caddy에서 제공 받을 수 있습니다. 이는 보안과 성능 측면에서 유리하며, 개발자나 시스템 관리자에게 편리한 환경을 제공합니다.
cron crontab 기본 사용방법

서버 재시작 및 자동 시작

설정 파일은 웹사이트 또는 프록시 서버의 동작 방식을 정의하는 중요한 요소인데요. Caddy의 설정 파일을 구성한 후, 서버를 재시작하여 설정을 적용해야 합니다. 또한 기본적으로 웹 서버는 시스템 부팅 시 자동으로 시작되지 않기 때문에 이 부분도 같이 체크하며 수동으로 다시 시작하거나 중지하는 방법도 같이 추가합니다.

서버 재시작

자신의 설정 파일을 생성하거나 편집한 후, 아래 명령을 사용하여 Caddy 서버를 재시작 합니다. 이렇게 하면 Caddy는 변경된 설정 파일을 적용하여 웹 서버 또는 프록시 서버로 동작합니다.

sudo systemctl restart caddy
  • systemctl은 리눅스 시스템에서 서비스 관리를 위해 사용되는 명령어로 systemd라는 초기화 시스템을 사용하는 많은 리눅스 배포판에서 기본적으로 제공됩니다.
  • systemctl을 통해 서비스의 상태 확인, 시작, 정지, 재시작, 활성화, 비활성화 등의 작업을 수행할 수 있어 시스템 관리자가 서비스를 효과적으로 관리하고 제어할 수 있는 강력한 도구입니다.
SSH 키의 종류와 사용법 pem 키 ppk키 개인키 공개키

자동 시작 구성

Caddy는 시스템 부팅 시 자동으로 시작되도록 구성되지는 않기 때문에 사용자가 따로 설정해야 합니다. 자세한 방법은 각 운영체제에서 사용하는 방식에 따라 다를 수 있지만 Ubuntu에서는 다음 명령을 사용하여 자동 시작을 구성할 수 있습니다.

sudo systemctl enable caddy

수동 시작 또는 중지

다음 명령들로 Caddy를 수동으로 시작하거나 다시 중지할 수 있습니다.

수동 시작

sudo systemctl start caddy

수동 중지

sudo systemctl stop caddy
SSH 키의 종류와 사용법 pem 키 ppk키 개인키 공개키

마치며

우분투에서 Caddy 웹서버를 설치하는 기본적인 방법에 대해 알아보았습니다. 전술한대로 Caddy는 Go 언어로 개발되어 뛰어난 성능과 효율성을 가지고 있습니다. 이를 통해 빠르고 안정적인 웹 서버를 구축할 수 있습니다. 더욱이, Caddy는 지속적인 업데이트와 개선이 이루어지고 있는데요.

더욱이 Caddy에는 자체 커뮤니티가 활발하게 운영되어 사용자들은 커뮤니티를 통해 Caddy와 관련된 문제 해결, 기능 개선, 확장 등에 대해 의견을 나눌 수 있습니다.

이러한 기능들과 업데이트 지원은 Caddy를 힙하고 사용하기 쉬운 웹 서버로 느끼게 해주며, 개발자와 시스템 관리자들에게 많은 이점을 제공합니다. 만약 웹 사이트를 개설하려고 하거나, 웹 사이트에 관해 배우는 중이라면 위 안내한 Caddy를 한번 설치해서 활용 해 보시길 바랍니다.

관련 글

댓글로 남기기 어려운 내용은 Contact Form 에서 개별적으로 문의 할 수 있습니다. 해당 글과 연관 된 내용은 Copy를 이용해 현재 페이지의 주소를 복사 후 문의 폼에 입력시 보다 정확한 답을 얻을 수 있습니다.

Leave a Comment