No description
- Shell 67%
- Dockerfile 33%
| .dockerignore | ||
| Dockerfile | ||
| entrypoint.sh | ||
| nginx.conf | ||
| README.md | ||
Git Mirror Static Hosting
이 디렉터리는 Forgejo push mirror 대상이 되는 정적 호스팅용 Docker 이미지 예시입니다.
구성 흐름:
- Forgejo가 이 컨테이너의 SSH Git remote로 푸시
- 컨테이너 안의 bare repo가 푸시 수신
post-receive훅이 지정 브랜치를/var/www/site로 체크아웃- nginx가
/var/www/site를 즉시 정적 서빙
포함 파일
Dockerfileentrypoint.shnginx.conf
기본 환경 변수
REPO_NAME: 기본값site.gitBRANCH: 기본값mainGIT_USER: 기본값gitWWW_DIR: 기본값/var/www/siteAUTHORIZED_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로 제한되어 일반 셸 로그인보다 더 좁은 권한만 갖습니다.