프로젝트 소개

이 저장소는 단일 Docker Compose 스택으로 자체 호스팅된 XWiki 배포를 패키징합니다. 엔터프라이즈 위키 플랫폼인 XWiki는 역방향 프록시로 작동하는 Traefik 뒤에서 실행되며, 구성된 호스트 이름에 대해 Let's Encrypt 인증서가 자동으로 발급됩니다. PostgreSQL 15가 위키 데이터를 저장합니다. 설치는 간단한 순서로 진행됩니다: 저장소를 복제하고, 두 개의 예상 Docker 네트워크(traefik-network 및 xwiki-network)를 생성하고, .env.example을 .env로 복사하여 필수 값(XWIKI_DB_PASSWORD, XWIKI_HOSTNAME, TRAEFIK_HOSTNAME, TRAEFIK_ACME_EMAIL, TRAEFIK_BASIC_AUTH)을 채운 다음, docker compose로 스택을 실행합니다. README에는 첫 실행 시 XWiki가 스키마와 핵심 페이지를 초기화하는 데 몇 분이 걸리며, DNS 전파 지연으로 인한 인증서 발급 실패, 네트워크 생성 단계 생략으로 인한 네트워크 오류, 변수 누락 등 일반적인 첫 배포 문제를 나열합니다. update.sh 스크립트는 체크아웃을 최신 릴리스 태그로 이동하고 docker compose up을 다시 실행합니다. 이 스크립트는 주요 버전 간의 자동 업데이트를 거부하고, 로컬 변경 사항이 있는 상태에서는 실행을 거부하며, 설치된 버전 이후에 새로 추가된 필수 변수를 보고합니다. --dry-run 플래그는 작업을 미리 볼 수 있습니다. Docker Hub의 공식 이미지(traefik, xwiki, postgres)는 tag@sha256 다이제스트로 고정되어 있어, 단순한 git pull로 테스트된 조합을 가져올 수 있습니다. 이미지별 재정의 수준이 문서화되어 있습니다: version 변수는 다이제스트 없이 태그만 교체하고, tag 변수는 전체 참조를 교체합니다. 중첩된 기본값은 Docker Compose v2.5 이상이 필요합니다. 일일 CI 작업은 레지스트리에 대해 핀을 다시 확인하고, 고정된 XWiki 및 Traefik 버전을 업스트림 릴리스와 비교합니다. GitHub Actions는 커밋 SHA로 고정되며, Dependabot이 최신 상태를 유지합니다. 백업은 전용 컨테이너에서 처리되며, pg_dump를 gzip으로 압축하고 위키 데이터를 tar.gz로 아카이브한 후, 오래된 백업을 삭제하고 대기합니다. 기본값은 30분 워밍업, 24시간 간격, 7일 보관입니다. 두 개의 대화형 복원 스크립트가 데이터베이스와 애플리케이션 데이터를 다룹니다. 저장소는 백업 볼륨을 호스트에 마운트하고, 버전 업그레이드 전에 백업을 수행할 것을 권장합니다. 이는 XWiki가 버전 변경 시 스키마를 마이그레이션하기 때문입니다. 강화는 일관되게 적용됩니다: 모든 서비스가 no-new-privileges를 설정하고, 인프라 컨테이너는 모든 기능을 제거한 후 엔트리포인트에 필요한 기능만 추가합니다(Traefik의 NET_BIND_SERVICE, 데이터베이스 이미지의 CHOWN/SETUID/SETGID). 애플리케이션 컨테이너는 기본 기능 세트를 의도적으로 유지합니다. 각 서비스는 메모리 및 CPU 제한과 예약 값을 compose 기본값으로 가지고 있으며, .env 변수를 통해 재정의할 수 있습니다. 배포 검증 워크플로는 모든 푸시, 풀 요청, 그리고 매일 06:00 UTC에 실행되며, shellcheck, actionlint, 세 개의 고정된 이미지에 대한 Trivy 스캔, 신선도 확인, 그리고 임시 자격 증명으로 스택을 부팅하여 Traefik을 통해 위키 UI가 응답하는지 확인하는 배포 및 테스트 작업을 포함합니다. 엔드투엔드 백업/복원 스크립트는 마커 행을 삽입하고, 가장 오래된 백업을 복원하며, 마커가 사라졌는지 확인합니다. 이 스크립트는 데이터베이스 컨테이너를 잠시 중지하여 실패 감지를 증명하며, 프로덕션보다는 스테이징용으로 설계되었습니다. 보안 노트는 자격 증명이 배포 시 gitignored된 .env에서 읽히며, PostgreSQL은 내부 네트워크에서만 수신하고, v1.0.0 이전 릴리스에는 추적된 .env에 생성된 듯한 데이터베이스 비밀번호가 포함되어 있어 재사용 시 교체해야 한다고 명시합니다.