소스에서 빌드
소스에서 빌드 (Build from source)
커스터마이즈된 빌드(예: 플러그인 포함)가 필요하면 Caddy를 빌드하는 여러 옵션이 있어요. Git 저장소에서 빌드하거나, xcaddy를 쓰거나, 커스텀 Docker 이미지를 만들 수 있어요.
출처: Caddy 공식 문서
본문
커스터마이즈된 빌드(예: 플러그인 포함)가 필요하면 Caddy를 빌드하는 여러 옵션이 있어요:
요구 사항:
- Go 1.26 이상
패키지 지원 파일 섹션에는 Debian 계열 시스템에서 APT 명령으로 Caddy를 설치했지만 운영에 커스텀 빌드 실행 파일이 필요한 사용자를 위한 지침이 담겨 있어요.
Git
요구 사항:
- Go 설치(위 참고)
저장소를 클론해요:
git clone "https://github.com/caddyserver/caddy.git"
git이 없다면 GitHub에서 소스 코드를 파일 아카이브로 다운로드할 수 있어요. 각 릴리스에는 소스 스냅샷도 있어요.
빌드:
cd caddy/cmd/caddy/
go build
Go의 버그 때문에 이러한 기본 단계는 버전 정보를 임베드하지 않아요. 버전(caddy version)을 원한다면 Caddy를 메인 모듈로 컴파일하는 대신 의존성으로 컴파일해야 해요. 지침은 Caddy의 main.go 파일에 있어요. 또는 이것을 자동화하는 xcaddy를 사용할 수 있어요.
Go 프로그램은 다른 플랫폼으로 컴파일하기 쉽게 되어 있어요. GOOS, GOARCH, 및/또는 GOARM 환경 변수만 다르게 설정하면 돼요. (자세한 내용은 go 문서를 참고해요.)
예를 들어 Windows가 아닌 곳에서 Caddy를 Windows용으로 컴파일하려면:
GOOS=windows go build
또는 Linux가 아닌 곳이나 ARMv6이 아닌 곳에서 Linux ARMv6용으로:
GOOS=linux GOARCH=arm GOARM=6 go build
xcaddy
xcaddy 명령은 버전 정보 및/또는 플러그인으로 Caddy를 빌드하는 가장 쉬운 방법이에요.
요구 사항:
-
Go 설치(위 참고)
-
xcaddy가PATH에 있는지 확인해요
Caddy 소스 코드를 다운로드할 필요는 없어요(그게 자동으로 해줘요).
그러면 (버전 정보와 함께) Caddy 빌드는 다음과 같이 간단해요:
xcaddy build
플러그인으로 빌드하려면 --with를 사용해요:
xcaddy build \
--with github.com/caddyserver/nginx-adapter
--with github.com/caddyserver/[email protected]
보시다시피 @ 문법으로 플러그인 버전을 커스터마이즈할 수 있어요. 버전은 태그 이름, 커밋 SHA 또는 브랜치일 수 있어요.
xcaddy로 플랫폼 간 컴파일은 go 명령과 동일하게 동작해요. 예를 들어 macOS용 크로스 컴파일:
GOOS=darwin xcaddy build
Docker
:builder 이미지를 커스텀 모듈로 새 Caddy 바이너리를 빌드하는 단축으로 사용할 수 있어요:
FROM caddy:<version>-builder AS builder
RUN --mount=type=cache,target=/go/pkg/mod \
--mount=type=cache,target=/root/.cache/go-build \
xcaddy build \
--with github.com/caddyserver/nginx-adapter \
--with github.com/hairyhenderson/[email protected]
FROM caddy:<version>
COPY --from=builder /usr/bin/caddy /usr/bin/caddy
시작할 때 <version>을 최신 Caddy 버전으로 바꾸는 걸 잊지 마세요.
두 번째 FROM 지시문에 주목해요. 이는 새로 빌드된 바이너리를 일반 caddy 이미지 위에 겹쳐 올려 훨씬 더 작은 이미지를 만들어요.
빌더는 제공된 모듈로 Caddy를 빌드하기 위해 xcaddy를 사용하며, 위에서 개요를 설명한 과정과 유사해요. --mount=type=cache,target=/go/pkg/mod과 --mount=type=cache,target=/root/.cache/go-build 옵션은 각각 Go 모듈 의존성과 빌드 산출물을 캐시해 후속 빌드를 빠르게 해줘요. 이 플래그는 xcaddy가 아니라 Docker의 기능이에요.
Docker Compose를 사용하려면 권장되는 compose.yml과 사용 지침을 참고해요.
Debian/Ubuntu/Raspbian용 커스텀 빌드의 패키지 지원 파일
이 절차는 caddy 패키지의 지원 파일을 유지하면서 커스텀 caddy 바이너리를 실행하는 것을 단순화하는 것을 목표로 해요.
이 절차를 통해 사용자는 공식 패키지의 기본 설정, systemd 서비스 파일, bash-completion을 활용할 수 있어요.
요구 사항:
-
이 지침에 따라
caddy패키지를 설치해요 -
커스텀
caddy바이너리를 빌드(위 섹션 참고)하거나 다운로드로 커스텀 빌드를 받아요 -
커스텀
caddy바이너리가 현재 디렉터리에 있어야 해요
절차:
sudo dpkg-divert --divert /usr/bin/caddy.default --rename /usr/bin/caddy
sudo mv ./caddy /usr/bin/caddy.custom
sudo update-alternatives --install /usr/bin/caddy caddy /usr/bin/caddy.default 10
sudo update-alternatives --install /usr/bin/caddy caddy /usr/bin/caddy.custom 50
sudo systemctl restart caddy
설명:
-
dpkg-divert는/usr/bin/caddy바이너리를/usr/bin/caddy.default로 옮기고, 어떤 패키지가 이 위치에 파일을 설치하려 할 경우를 대비해 diversion을 설치해요. -
update-alternatives는 원하는 caddy 바이너리에서/usr/bin/caddy로 심볼릭 링크를 만들어요. -
systemctl restart caddy는 기본 버전의 Caddy 서버를 종료하고 커스텀 버전을 시작해요.
아래를 실행하고 화면 정보를 따르면 커스텀과 기본 caddy 바이너리 사이를 바꿀 수 있어요. 그런 다음 Caddy 서비스를 재시작해요.
update-alternatives --config caddy
이 이후 Caddy를 업그레이드하려면 caddy upgrade를 실행할 수 있어요. 이는 현재 빌드와 같은 플러그인으로 최신 Caddy 버전으로 빌드를 다운로드한 다음 현재 바이너리를 새 것으로 교체하려고 시도해요.