Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
Tags
- Rust
- FileChannel
- dockerfile
- docker
- curl
- Vite
- React
- html canvas
- vim
- podman
- Docker Compose
- io
- Thinking Mode
- Caddy
- getting started
- compose
- Webpack
- Java
- glm-ocr
- RandomAccessFile
- Ollama
- .dockerignore
- podman compose
- tauri
- vscode
- k3s
- Typescript
- cli
- Let's Encrypt
- qwen3-coder-next
Archives
- Today
- Total
워로디스
Docker Compose Caddy 로 Let's Encrypt 인증서 처리 본문
Docker Compose 로 띄운 Caddy 를 통해 다수 도메인을 Let's Encrypt 적용하고, 각 도메인에 대한 요청이 호스트상의 특정 포트로 연결되도록 하는 구성입니다.
0. 사전 준비 (DNS 설정)
Caddy 컨테이너를 실행하기 전에, 도메인 등록 업체(가비아, AWS Route53 등)에서 아래 두 도메인의 A 레코드가 서버의 공인 IP를 향하도록 설정되어 있어야 합니다.
a.com➔ 서버 IPb.com➔ 서버 IP
1. 작업 디렉토리 및 파일 생성
서버에 접속하여 Caddy 설정을 모아둘 폴더를 만들고 이동합니다.
mkdir caddy-proxy
cd caddy-proxy
touch Caddyfile compose.yaml2. Caddyfile 작성
Caddy의 라우팅 규칙입니다. host.docker.internal을 사용하여 컨테이너 밖의 호스트(서버 본체) 포트로 트래픽을 안전하게 넘깁니다.
# Caddyfile
a.com {
reverse_proxy host.docker.internal:8081
}
b.com {
reverse_proxy host.docker.internal:8082
}3. compose.yaml 작성
Caddy를 실행하기 위한 설정입니다. 인증서 유지를 위한 볼륨 마운트와 HTTP/3 통신을 위한 UDP 포트 개방이 모두 포함되어 있습니다.
# compose.yaml
services:
caddy:
image: caddy:latest
container_name: caddy-proxy
restart: unless-stopped
ports:
- "80:80" # HTTP (Caddy가 HTTPS로 자동 리다이렉트)
- "443:443" # HTTPS (TCP - HTTP/1.1, HTTP/2 용)
- "443:443/udp" # HTTPS (UDP - HTTP/3 QUIC 지원용)
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro # Caddy 설정 파일 (읽기 전용)
- caddy_data:/data # 인증서 저장 (매우 중요, 유실 방지)
- caddy_config:/config # Caddy 내부 상태 저장
extra_hosts:
- "host.docker.internal:host-gateway" # 컨테이너 ➔ 호스트 네트워크 접근 허용
volumes:
caddy_data:
caddy_config:4. 실행 명령어
작업 디렉토리(caddy-proxy) 안에서 아래 명령어를 실행하여 컨테이너를 백그라운드로 띄웁니다.
# Docker 사용 시
sudo docker compose up -d
# Podman 사용 시
sudo podman compose up -d5. 동작 상태 확인
Caddy가 정상적으로 실행되고 Let's Encrypt로부터 인증서를 잘 받아왔는지 로그를 통해 확인합니다.
# 로그 실시간 확인 (빠져나오려면 Ctrl + C)
sudo docker logs -f caddy-proxy(로그 중에 certificate obtained successfully라는 메시지가 보이면 완벽하게 성공한 것입니다.)
6. 추가사항
- 현재 8081, 8082 포트의 앱이 켜져 있지 않더라도
compose up -d를 하는 순간 인증서는 자동으로 발급되고 갱신 주기에 맞춰 알아서 연장됩니다. - 추후 라우팅 규칙(도메인이나 포트)을 변경하고 싶다면
Caddyfile만 수정한 뒤,sudo docker exec caddy-proxy caddy reload --config /etc/caddy/Caddyfile명령어를 치면 컨테이너 재시작 없이(Zero-downtime) 설정만 즉시 갱신할 수 있습니다.
'정리 > 가상화' 카테고리의 다른 글
| Docker Compose PostgreSQL 구성 (0) | 2026.04.05 |
|---|---|
| podman 스프링부트 컨테이너 실행 기본 명령 (0) | 2026.04.02 |
| Ubuntu 에 Docker Compose 와 K3S Ubuntu 설치하기 (0) | 2026.03.28 |
| Podman + Dockerfile 기본 예제 (0) | 2026.02.04 |
| .dockerignore 화이트리스트 방식 운용 (0) | 2026.02.04 |
