No description
  • Shell 67%
  • Dockerfile 33%
Find a file
2026-04-03 16:06:36 +09:00
.dockerignore 프로젝트 적용 2026-04-02 23:34:39 +09:00
Dockerfile 자동 빌드 초안 2026-04-02 23:41:07 +09:00
entrypoint.sh 프로젝트 적용 2026-04-02 23:34:39 +09:00
nginx.conf 프로젝트 적용 2026-04-02 23:34:39 +09:00
README.md actions 삭제 2026-04-03 16:06:36 +09:00

Git Mirror Static Hosting

이 디렉터리는 Forgejo push mirror 대상이 되는 정적 호스팅용 Docker 이미지 예시입니다.

구성 흐름:

  1. Forgejo가 이 컨테이너의 SSH Git remote로 푸시
  2. 컨테이너 안의 bare repo가 푸시 수신
  3. post-receive 훅이 지정 브랜치를 /var/www/site 로 체크아웃
  4. nginx가 /var/www/site 를 즉시 정적 서빙

포함 파일

  • Dockerfile
  • entrypoint.sh
  • nginx.conf

기본 환경 변수

  • REPO_NAME: 기본값 site.git
  • BRANCH: 기본값 main
  • GIT_USER: 기본값 git
  • WWW_DIR: 기본값 /var/www/site
  • AUTHORIZED_KEYS: SSH 공개키 문자열. 여러 줄도 허용

빌드

docker build -t git-pages-server .

추가 패키지가 필요하면 EXTRA_APT_PACKAGES 빌드 인자를 넘기면 됩니다.

docker build \
  --build-arg EXTRA_APT_PACKAGES="curl rsync" \
  -t git-pages-server .

이 값은 공백으로 구분된 apt 패키지 목록이어야 하며, Dockerfile에서 기본 패키지와 함께 설치됩니다.

레지스트리로 멀티 아키텍처 이미지를 직접 푸시할 때는 먼저 로그인한 뒤 buildx 를 사용합니다.

docker login git.jhan.me

docker buildx build \
  --platform linux/amd64,linux/arm64 \
  -t git.jhan.me/jeonghan-yee/git-mirror-pages:latest \
  --push .

추가 패키지가 필요하면 같은 방식으로 빌드 인자를 함께 넘기면 됩니다.

docker buildx build \
  --platform linux/amd64,linux/arm64 \
  --build-arg EXTRA_APT_PACKAGES="curl rsync" \
  -t git.jhan.me/jeonghan-yee/git-mirror-pages:latest \
  --push .

실행

CONTAINER_NAME=git-pages-server
IMAGE_NAME=git-pages-server

docker rm -f "${CONTAINER_NAME}" 2>/dev/null || true

docker run -d \
  --name "${CONTAINER_NAME}" \
  -p 2222:22 \
  -p 8080:80 \
  -e REPO_NAME=site.git \
  -e BRANCH=main \
  -e AUTHORIZED_KEYS="$(cat ~/.ssh/id_ed25519.pub)" \
  -v git-pages-data:/srv/git \
  -v git-pages-www:/var/www/site \
  "${IMAGE_NAME}"

레지스트리에 푸시한 이미지를 사용할 때는 IMAGE_NAME=git.jhan.me/jeonghan-yee/git-mirror-pages:latest 로 바꾸면 됩니다.

Forgejo push mirror 대상 remote 예시:

ssh://git@your-server:2222/srv/git/site.git

브라우저 확인:

http://your-server:8080/

동작 방식

main 브랜치로 푸시되면 post-receive 훅이 /var/www/site 를 강제로 최신 상태로 맞추고, 삭제된 파일도 같이 정리합니다.

참고

  • 이 구성은 이미 빌드가 끝난 정적 파일을 푸시하는 경우에 적합합니다.
  • Hugo, Astro, VitePress 같이 빌드가 필요한 사이트는 훅 안에 빌드 단계를 추가해야 합니다.
  • SSH 사용자는 git-shell 로 제한되어 일반 셸 로그인보다 더 좁은 권한만 갖습니다.