Dokploy와 Nixpacks를 활용한 Astro 프로젝트 배포 및 캐시 최적화를 통한 빌드 속도 향상

iDiMi - Dokploy와 Nixpacks를 활용한 Astro 프로젝트 배포 및 캐시 최적화를 통한 빌드 속도 향상

1. Dokploy 설정

Dokploy는 오픈 소스 및 셀프 호스팅이 가능한 배포 플랫폼입니다. Docker와 Traefik 기반으로 구축되었으며, Heroku, Vercel, Netlify의 무료 대안으로 설계되었습니다.

1. 새 프로젝트 생성 및 GitHub 저장소 연결

2. 환경 변수 설정

NIXPACKS_NODE_VERSION=22
NIXPACKS_PNPM_STORE_PATH=/root/.local/share/pnpm/store/v3
NIXPACKS_INSTALL_CACHE_DIRS=/app/node_modules
NIXPACKS_BUILD_CACHE_DIRS=/app/node_modules/.cache,/app/astro_cache

3. 캐시 자동 정리 비활성화

  • 프로젝트 서비스 → Clean Cache: 비활성화
  • 웹 서버 → Daily Docker Cleanup: 비활성화

2. Nixpacks 빌드 엔진

Nixpacks는 Railway가 개발한 오픈 소스 빌드 도구로, 소스 코드를 표준 Docker 이미지로 빌드할 수 있습니다. Dokploy는 기본적으로 Nixpacks를 사용하며, nixpacks.toml 또는 nixpacks.json 파일을 통해 설정할 수 있습니다.

프로젝트 루트에 nixpacks.toml 파일을 생성하고, 캐시 디렉토리를 설정하세요.

설정 우선순위 (낮음 → 높음)

  1. 기본 Provider 로직
  2. nixpacks.toml
  3. 환경 변수
  4. CLI 인자

주요 환경 변수

변수명설명
NIXPACKS_INSTALL_CMD설치 명령어 오버라이드
NIXPACKS_BUILD_CMD빌드 명령어 오버라이드
NIXPACKS_START_CMD시작 명령어 오버라이드
NIXPACKS_PKGS추가 Nix 패키지 설치
NIXPACKS_APT_PKGS추가 Apt 패키지 설치
NIXPACKS_INSTALL_CACHE_DIRS설치 시 캐시 디렉토리
NIXPACKS_BUILD_CACHE_DIRS빌드 시 캐시 디렉토리
NIXPACKS_NO_CACHE캐시 비활성화 (비추천)
NIXPACKS_CONFIG_FILE설정 파일 지정
NIXPACKS_DEBIANDebian 기반 이미지 사용

3. Astro 프로젝트 설정

Astro는 블로그, 마케팅 페이지, 전자상거래 사이트 등 콘텐츠 중심 정적 웹사이트에 적합한 최신 웹 프레임워크입니다. 이미지 및 정적 리소스가 많을 경우 빌드 속도가 느려질 수 있는데, 캐시를 활용하면 이를 크게 개선할 수 있습니다.

1. Astro에서 캐시 디렉토리 지정

Astro 설정 파일(astro.config.mjs)에 캐시 디렉토리를 지정하세요. 상대 경로나 절대 경로 모두 사용 가능합니다.

// astro.config.mjs
export default defineConfig({
  cacheDir: './astro_cache',
});

2. Nixpacks 캐시 구성 파일 작성

Astro 프로젝트 루트에 nixpacks.toml 파일을 작성하고 캐시 디렉토리와 빌드 명령어를 설정하세요.

# Node.js 및 pnpm 버전 명시
[phases.setup]
nixPkgs = ["nodejs_22", "pnpm"]

# pnpm 캐시를 활용한 의존성 설치
[phases.install]
cmds = ["pnpm install --frozen-lockfile"]
cacheDirectories = ["/root/.local/share/pnpm/store/v3"]

# Astro 빌드 및 캐시 디렉토리 설정
[phases.build]
cmds = ["pnpm run build"]
cacheDirectories = [
  "node_modules/.cache",
  "astro_cache"
]

# 시작 명령어 (NGINX로 dist 디렉토리 제공 가정)
[start]
cmd = "echo '빌드 완료. dist 디렉토리를 NGINX로 서비스하세요.'"

4. Docker 빌드 컨텍스트 최적화

Astro 프로젝트 루트에 .dockerignore 파일을 추가하세요:

node_modules
astro_cache
dist
*.log
.DS_Store
.vscode
.env*

5. 배포 및 캐시 확인

Dokploy에서 자동 배포 후, 빌드 로그에서 아래 항목을 확인하여 캐시가 적용되었는지 검증하세요.

1. 캐시 마운트와 함께 실행되는 빌드 명령어

RUN --mount=type=cache,id=xxxx-node_modules/cache,target=/app/node_modules/.cache \
    --mount=type=cache,id=xxxx-astro_cache,target=/app/astro_cache \
    pnpm run build

2. Astro가 캐시 항목을 재활용하는 로그 출력 (특히 이미지 최적화)

 /_astro/202409272055577_Z2smeTW.avif (reused cache entry)
 /_astro/202409272055575_Z2wPyJN.avif (reused cache entry)
 /_astro/202409272055577_1IgP6g.avif (reused cache entry)

--mount=type=cachereused cache entry 메시지가 보이면 캐시가 성공적으로 작동하고 있으며, 빌드 속도가 향상된 것입니다.

🎉 Dokploy의 Deployments 탭에서 캐시 미적용 시 31분 걸리던 빌드가, 캐시 적용 후 단 3분으로 단축된 것을 확인할 수 있습니다. 시간과 트래픽 모두 절감됩니다.


6. 주의사항

  • Astro의 cacheDir과 Nixpacks의 cacheDirectories를 동일하게 유지하세요
  • 각 빌드 단계마다 캐시 디렉토리를 명확하게 지정해야 합니다
DiMi

DiMi

발행 날짜 2025-07-14, 업데이트 날짜 2025-07-14