diff --git a/CLAUDE.md b/CLAUDE.md index d7ee440..ec39bb8 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -14,6 +14,7 @@ This is a Docker base image for Coder workspaces, built on top of `codercom/ente - Graphite CLI for stacked PRs - GitHub CLI extensions: `gh stack` (github/gh-stack) and `gh actions-lock` (github/gh-actions-lock) - AWS CLI, Google Cloud CLI, and Qodana CLI +- cloudflared (Cloudflare Tunnel client) from Cloudflare's apt repository - Custom Nerd Fonts for terminal display ## Repository Structure diff --git a/README.md b/README.md index f2f903d..a09d7dc 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,7 @@ A comprehensive Docker base image for [Coder](https://coder.com/) workspaces, bu - **GitHub CLI extensions**: `gh stack` (native stacked PRs) and `gh actions-lock` (lock and verify GitHub Actions dependencies) - **GitHub CLI (gh)**: GitHub operations from terminal - **AWS CLI**: Amazon Web Services command line interface +- **cloudflared**: Cloudflare Tunnel client (official Cloudflare apt repository) - **Qodana CLI**: JetBrains code quality platform ## Quick Start @@ -101,6 +102,7 @@ All installation scripts are located in the `scripts/` directory: |--------|-------------|------| | `install-fonts.sh` | System fonts installation | root | | `install-root-sdk.sh` | Qodana CLI, AWS CLI | root | +| `install-cloudflared.sh` | cloudflared (Cloudflare apt repository) | root | | `install-docker.sh` | Docker Engine | root | | `install-sdk.sh` | fnm, SDKMAN, Bun, Deno, Claude Code, FVM | coder | | `install-prompt.sh` | Zimfw modules (`.zimrc`), Powerlevel10k prompt, Orca history | coder | diff --git a/images/CLAUDE.md b/images/CLAUDE.md index dc865ad..8f0b73a 100644 --- a/images/CLAUDE.md +++ b/images/CLAUDE.md @@ -15,6 +15,7 @@ images/ ├── install-fonts.sh # 시스템 폰트 설치 (Root) ├── install-root-sdk.sh # Root 레벨 도구 (Qodana, AWS CLI) ├── install-mise.sh # mise 버전 매니저 설치 (Root, apt) + ├── install-cloudflared.sh # cloudflared 설치 (Root, apt) ├── install-docker.sh # Docker Engine 설치 (Root) ├── install-sdk.sh # 사용자 개발 도구 (mise 글로벌 런타임, Claude Code) ├── install-prompt.sh # Zimfw 모듈 + Powerlevel10k 프롬프트 @@ -48,6 +49,7 @@ images/ - AWS CLI - Google Cloud CLI - GitHub CLI +- cloudflared (Cloudflare Tunnel 클라이언트) - Docker (coder 사용자가 docker 그룹에 포함) **기타:** @@ -79,7 +81,10 @@ images/ - Qodana CLI - AWS CLI -5. **Docker 설치** +5. **cloudflared 설치** (`install-cloudflared.sh`) + - Cloudflare 공식 apt repository + +6. **Docker 설치** - Docker Engine 설치 - coder 사용자를 docker 그룹에 추가 @@ -174,6 +179,13 @@ Root 레벨 개발 도구: - Qodana CLI (JetBrains 코드 분석) - AWS CLI v2 +#### install-cloudflared.sh (Root) + +cloudflared 설치: +- Cloudflare 공식 apt repository 사용 (`https://pkg.cloudflare.com/cloudflared any main`) +- 서명 키: `/usr/share/keyrings/cloudflare-public-v2.gpg` +- 바이너리만 설치하며 터널·서비스·인증 정보는 구성하지 않음 (워크스페이스별로 설정) + #### install-docker.sh (Root) Docker Engine 설치: @@ -249,6 +261,8 @@ GitHub CLI 확장 설치: **Root Phase (mise):** Docker 직전에 mise 바이너리를 apt로 시스템 설치 (`install-mise.sh`) +**Root Phase (cloudflared):** mise 다음, Docker 직전에 cloudflared를 apt로 설치 (`install-cloudflared.sh`) + **Coder User Phase:** 1. SDK (`install-sdk.sh`) - mise 글로벌 런타임(node/bun/deno/java), npm 전역 패키지, Claude Code 2. 프롬프트 (`install-prompt.sh`) - Zimfw 설치 이후 diff --git a/images/base/Dockerfile b/images/base/Dockerfile index 03cfbcd..6460435 100644 --- a/images/base/Dockerfile +++ b/images/base/Dockerfile @@ -96,6 +96,12 @@ RUN chmod +x /tmp/install-mise.sh && \ /tmp/install-mise.sh && \ rm /tmp/install-mise.sh +# cloudflared 설치 +COPY --chown=root:root scripts/install-cloudflared.sh /tmp/install-cloudflared.sh +RUN chmod +x /tmp/install-cloudflared.sh && \ + /tmp/install-cloudflared.sh && \ + rm /tmp/install-cloudflared.sh + # Docker 설치 COPY --chown=root:root scripts/install-docker.sh /tmp/install-docker.sh RUN chmod +x /tmp/install-docker.sh && \ diff --git a/images/base/scripts/install-cloudflared.sh b/images/base/scripts/install-cloudflared.sh new file mode 100644 index 0000000..a5f5507 --- /dev/null +++ b/images/base/scripts/install-cloudflared.sh @@ -0,0 +1,20 @@ +#!/bin/bash +set -euo pipefail + +echo "Installing cloudflared..." + +# Cloudflare GPG key 설치 +mkdir -p --mode=0755 /usr/share/keyrings +curl -fsSL --retry 5 --retry-connrefused --retry-delay 2 -o /usr/share/keyrings/cloudflare-public-v2.gpg https://pkg.cloudflare.com/cloudflare-public-v2.gpg +chmod 0644 /usr/share/keyrings/cloudflare-public-v2.gpg + +# cloudflared apt repository 추가 +echo "deb [signed-by=/usr/share/keyrings/cloudflare-public-v2.gpg] https://pkg.cloudflare.com/cloudflared any main" > /etc/apt/sources.list.d/cloudflared.list + +# cloudflared 설치 +apt-get update +DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends cloudflared +apt-get clean +rm -rf /var/lib/apt/lists/* + +echo "cloudflared installed successfully: $(cloudflared --version)"