Local 서비스 연동를 위한 Caddy 서버 구성하기
안녕하세요. 달소입니다.
본래 서비스용으로는 NPMplus를 쓰고있는데 로컬 서비스의 인증서를 쓰기에는 비효율적이라고 Caddy로 구성해보려고합니다.
목적은 내부에 tailscale로 서비스를 구성하는것들에 대해서 사설인증서를 발급해주는게 목적입니다.
docker로 구성하면 로컬의 tailscale의 설정을 못받아오기때문에 로컬서비스로 구동예정입니다.
오픈소스 프로젝트 caddy는 무엇인가요?
Caddy는 오픈 소스로 개발된, 현대적이고 자동화된 웹 서버입니다. Go 언어로 작성되었으며, 다음과 같은 특징을 가지고 있습니다.
- 자동 HTTPS: Caddy의 가장 큰 장점 중 하나는 자동 HTTPS 설정입니다. Let's Encrypt와 같은 인증 기관을 자동으로 사용하여 HTTPS 인증서를 획득하고 구성합니다. 별도의 설정이나 명령어 없이도 안전한 HTTPS 연결을 제공합니다.
- 간편한 구성: Caddy는 일반적으로 간결하고 직관적인 구성 파일을 사용합니다. 복잡한 설정 없이도 빠르게 웹 서버를 설정하고 운영할 수 있습니다. 또한, 다양한 플러그인을 통해 기능을 확장할 수 있습니다.
- 고성능: Go 언어로 작성되어 높은 성능과 효율성을 제공합니다. 다수의 동시 연결을 효과적으로 처리할 수 있습니다.
- 플러그인 시스템: 다양한 플러그인을 통해 기능을 확장할 수 있습니다. 예를 들어, 웹 서버 로깅, 캐싱, 인증, 리버스 프록시 등의 기능을 추가할 수 있습니다.
- 크로스 플랫폼: Linux, macOS, Windows 등 다양한 운영 체제에서 동작합니다.
- 자동 재시작: 구성 파일 변경 시 자동으로 재시작됩니다.
- 쉬운 사용: 명령어 라인 인터페이스를 통해 간편하게 관리할 수 있으며, Docker를 통해 컨테이너 환경에서도 쉽게 사용할 수 있습니다.
요약하자면, Caddy는 안전하고, 사용하기 쉽고, 고성능의 웹 서버이며, 특히 자동 HTTPS 설정 기능이 강력한 장점입니다. Nginx나 Apache와 같은 기존 웹 서버에 비해 더욱 간편하게 웹 서버를 운영하고 싶은 사용자에게 적합합니다.
Caddy 설치하기
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy
caddy run 명령어로 서비스 구동이 가능합니다. (백그라운드에서 돌리고 싶으면 caddy start)
설치하면 자동으로 구동되어있는데 caddy run, caddy stop 명령어로 실행 및 중지가 가능합니다.
기본적으로 Caddy가 설치된 다음 설정은 Caddyfile에 있는데 경로는
/etc/caddy/Caddyfile 입니다.
그리고 80번 포트로 접속하면 caddy 웹에 접속이 됩니다.
설정값이 변경된 경우에는 caddy reload --config /etc/caddy/Caddyfile 명령어만해주시면됩니다.
여기서 설정값을 통해서 일반적인 서비스를 하는데 쓸수도있고 로컬서비스를 연결할 때 사용할수도있습니다.
여러가지 예제가 있는데 보통은 리버스프록시용으로 사용하다보니 아래 두가지를 제일 많이쓰기는 합니다.
Static file server🔗
example.com {
root * /var/www
file_server
}
Reverse proxy🔗
Proxy all requests:
example.com {
reverse_proxy localhost:5000
}
리버스 프록시 예시는 아래 내용을 참고하시면 좋습니다.
다음글에서는 tailscale과 연계해서 내부에 있는 서비스로 연결해보겠습니다.